#define  GLOBALS_APP_TEST
#include "../App_Headers/includes.h"
#include "../Library/TimeCtrl.h"

#define STEP_MAX        34//步数

void All_Lamp_TurnOn(void);

void APP_Test_Init(void){
    Key.StepAuto = null;
    Key.CAN_Step = null;
    Key.CAN_Step = null;

   // CurValueStr[ENUM_BatteryCurrent].val = 0;
    //CurValueStr[CoolTemp].val = 0;
    //CurValueStr[VehSpeed].val = 0;
    //CurValueStr[AD_Blue].val = 0;

   // CurValueStr[ENUM_BatteryCurrent].fval = Value_Plus;
    //CurValueStr[CoolTemp].fval = Value_Plus;
    //CurValueStr[VehSpeed].fval = Value_Plus;
    //CurValueStr[AD_Blue].fval = Value_Plus;

    //CanMessageID18F00029.Msg[1] = 0x7D;

    //LDW Open
    //CanMessageID18FE5BE8.Msg[0] |= 0x40;
    //FCW Open
   // CanMessageID0CF02FA0.Msg[0] |= 0x03;
    //AutoLwBm Open
  //  CanMessageID18FF0B21.Msg[5] |= 0x10;

    EOLMode = 1;
    EOLStep = 0;
    EOLError = 0;
}
unsigned int count_flag_a =0;
unsigned int speed_value = 0;
void APP_Button_Proc(void){
    /*if(Key.PushTime_1 > T_3s){
        Key.StepAuto = 1;
    }
    if(Key.PushTime_2 > T_3s){
        Key.StepAuto = 2;
    }*/      
    
    if((Key.PushTime_2 > T_2s) || (Key.PushTime_1 > T_2s)){
        Key.StepAuto = 1;
    }
    
    if(pSB1 == 1){
        if((Key.PushTime_1 > T_50ms) && (!Key.StepAuto)){
            count_flag_a = 1;
            // Key.CAN_Step++;
            // if(Key.CAN_Step > STEP_MAX){
            //     Key.CAN_Step = 0;
            // }
        }
        Key.PushTime_1 = null;
    }
    
    if(pSB2 == 1){
        if((Key.PushTime_2 > T_50ms) && (!Key.StepAuto)){
            count_flag_a = 0;
            // if(Key.CAN_Step > 0){
            //     Key.CAN_Step--;
            // }else{
            //     Key.CAN_Step = STEP_MAX;
            // }
        }
        Key.PushTime_2 = null;
    }
}




#define  TirePressure(value)  CurValueStr[ENUM_TirePressure_LF].val = value; CurValueStr[ENUM_TirePressure_RF].val = value; CurValueStr[ENUM_TirePressure_LR].val = value; CurValueStr[ENUM_TirePressure_RR].val = value;  

#define  TireTemp(value)      CurValueStr[ENUM_TireTemp_LF    ].val = value; CurValueStr[ENUM_TireTemp_RF    ].val = value; CurValueStr[ENUM_TireTemp_LR    ].val = value; CurValueStr[ENUM_TireTemp_RR    ].val = value;

unsigned int lost_flag = 0;
unsigned int CAN_init_flag = 0;
unsigned int CAN_lost_flag = 0;
unsigned int water_value = 0;
void APP_ICM_Proc(void)  /*zh321*/  /*FS04*/
{
    // if(CAN_init_flag==1)
    // {
    //     Api_CAN_Init(); 
    //     CAN_init_flag=0;

    // }
    // if(CAN_lost_flag ==1)
    // {
    //     Disable_CAN_Tx();
    //     CAN_lost_flag = 0;
    // }

    if(count_flag_a==1)
    {
        {
            //CurValueStr[ENUM_VSpeed         ].val = 0;//车速
            CurValueStr[ENUM_RSpeed         ].val = 0;//转速
            CurValueStr[ENUM_WaterTemp      ].val = 0;//水温
            CurValueStr[ISG_Ready      ].val = 0;
            CurValueStr[ISG_Power      ].val = 0;
            CurValueStr[ISG_Power_Enable      ].val = 0; 
            CurValueStr[TCS_Warning_Lamp      ].val = 0;
            //CurValueStr[TCS_Work_Mode      ].val = 0;                       
            switch(Key.CAN_Step)
            {
                
                case 1:
                {   CurValueStr[ENUM_WaterTemp      ].val = 20;//water_value;//水温
                     CurValueStr[TCS_Warning_Lamp      ].val = 0;
                     CurValueStr[ABS_Warning_Lamp      ].val = 0;
                    CurValueStr[ECU_Warning_Lamp      ].val = 0;
                    CurValueStr[ENUM_VSpeed         ].val = 20*100/108;//speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 1000;//转速
                    //CurValueStr[ENUM_WaterTemp      ].val = water_value;//水温
                    //CurValueStr[ECU_Warning_Lamp      ].val = 1;
                    if(direction_espeed==1)
                    {
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Ready      ].val = 1;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 0;
                        //CurValueStr[TCS_Work_Mode      ].val = 1;                        
                    }
                    else
                    {
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        CurValueStr[ISG_Power      ].val = 0;
                        CurValueStr[ISG_Power_Enable      ].val = 0;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 1;
                        //CurValueStr[TCS_Work_Mode      ].val = 0;   
                    }

                }break;
                case 2:
                {   
                    CurValueStr[ENUM_VSpeed         ].val = 40*100/108;//speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 2000;//转速
                    //CurValueStr[ENUM_WaterTemp      ].val = water_value;//水温
                    if(direction_espeed==1)
                    {
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 1;
                       // CurValueStr[TCS_Warning_Lamp      ].val = 1;
                       // CurValueStr[TCS_Work_Mode      ].val = 0;   
                    }
                    else
                    {
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 2;    
                        //CurValueStr[TCS_Warning_Lamp      ].val = 0;
                       // CurValueStr[TCS_Work_Mode      ].val = 1;                                                    
                    }                    

                }break;
                case 3:
                {  CurValueStr[ABS_Warning_Lamp      ].val = 0;
                    CurValueStr[ECU_Warning_Lamp      ].val = 0;

                    CurValueStr[ENUM_VSpeed         ].val = 60*100/108;//speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 3000;//转速
                    //CurValueStr[ENUM_WaterTemp      ].val = water_value;//水温
                    if(direction_espeed==1)
                    {
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 2;
                       // CurValueStr[TCS_Warning_Lamp      ].val = 0;
                        //CurValueStr[TCS_Work_Mode      ].val = 1;                               
                    }
                    else
                    {
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 1;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 1;
                        //CurValueStr[TCS_Work_Mode      ].val = 0;                                                  
                    }                                  
                }break;
                case 4:
                {CurValueStr[ENUM_WaterTemp      ].val = 20;//water_value;//水温
                    CurValueStr[ENUM_VSpeed         ].val = 80*100/108;//speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 4000;
                    //CurValueStr[ENUM_WaterTemp      ].val = water_value;//水温
                    CurValueStr[ABS_Warning_Lamp      ].val = 1;
                    CurValueStr[ECU_Warning_Lamp      ].val = 1;
                    if(direction_espeed==1)
                    {   
                        
                        CurValueStr[ISG_Power      ].val = 0;
                        CurValueStr[ISG_Power_Enable      ].val = 0;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 1;
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        
                        
                       // CurValueStr[TCS_Work_Mode      ].val = 0;                          
                       
                    }
                    else
                    {  
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                         //CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Ready      ].val = 1; 
                        //CurValueStr[TCS_Warning_Lamp      ].val = 0;
                        //CurValueStr[TCS_Work_Mode      ].val = 1;       
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;    
                        //CurValueStr[ECU_Warning_Lamp      ].val = 0;                                         
                    }                    

                }break;
                case 5:
                {
                    CurValueStr[ABS_Warning_Lamp      ].val = 0;
                    CurValueStr[ECU_Warning_Lamp      ].val = 0;

                    CurValueStr[ENUM_VSpeed         ].val = 100*100/108;//speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 5000;
                    CurValueStr[ENUM_WaterTemp      ].val = 130;//water_value;//水温
                    if(direction_espeed==1)
                    {   
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Ready      ].val = 1;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 0;
                        //CurValueStr[TCS_Work_Mode      ].val = 1;                          
                    }
                    else
                    {   
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        CurValueStr[ISG_Power      ].val = 0;
                        CurValueStr[ISG_Power_Enable      ].val = 0;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 1;
                        //CurValueStr[TCS_Work_Mode      ].val = 0;                       
                    }
                }break;
                case 6:
                {CurValueStr[ENUM_WaterTemp      ].val = 20;//water_value;//水温
                    CurValueStr[ENUM_VSpeed         ].val = 120*100/108;//speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 6000;
                    //CurValueStr[ENUM_WaterTemp      ].val = water_value;//水温
                    if(direction_espeed==1)
                    {   
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 1;
                       // CurValueStr[TCS_Warning_Lamp      ].val = 1;
                       // CurValueStr[TCS_Work_Mode      ].val = 0;    
                    }
                    else
                    {   
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 2;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 0;
                        //CurValueStr[TCS_Work_Mode      ].val = 1;                                                      
                    }   
                }break;
                case 7:
                {   
                    CurValueStr[ENUM_VSpeed         ].val = 140*100/108;//speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 7000;
                    //CurValueStr[ENUM_WaterTemp      ].val = water_value;//水温
                    CurValueStr[TCS_Warning_Lamp      ].val = 0;
                    if(direction_espeed==1)
                    {  
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                        // CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 2;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 0;
                        //CurValueStr[TCS_Work_Mode      ].val = 1;                                
                    }
                    else
                    {  
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        // CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 1;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 1;
                        //CurValueStr[TCS_Work_Mode      ].val = 0;                                                  
                    }     
                }break;
                case 8:
                {   
                    CurValueStr[ENUM_VSpeed         ].val = 160*100/108;//speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 8000;
                    //CurValueStr[ENUM_WaterTemp      ].val = water_value;//水温
                     CurValueStr[TCS_Warning_Lamp      ].val = 0;
                    if(direction_espeed==1)
                    {   
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        CurValueStr[ISG_Power      ].val = 0;
                        CurValueStr[ISG_Power_Enable      ].val = 0;
                       
                       // CurValueStr[TCS_Work_Mode      ].val = 0;                           
                    }
                    else
                    {   
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Ready      ].val = 1;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 0;
                        //CurValueStr[TCS_Work_Mode      ].val = 1;                                                    
                    }      

                }break;
                case 9:
                {   
                    CurValueStr[ENUM_VSpeed         ].val = 180*100/108;//speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 10000;
                    CurValueStr[ENUM_WaterTemp      ].val = 20;//water_value;//水温
                    CurValueStr[TCS_Warning_Lamp      ].val = 1;
                     CurValueStr[ABS_Warning_Lamp      ].val = 0;
                    CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        
                    if(direction_espeed==1)
                    {  
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                        // CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Ready      ].val = 1;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 0;
                       // CurValueStr[TCS_Work_Mode      ].val = 1;                              
                    }
                    else
                    {  
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        // CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        CurValueStr[ISG_Power      ].val = 0;
                        CurValueStr[ISG_Power_Enable      ].val = 0;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 1;
                       // CurValueStr[TCS_Work_Mode      ].val = 0;                          
                    }

                }break;
                case 10:
                {   
                    CurValueStr[ENUM_VSpeed         ].val = 199;//*100/108;//speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 12000;
                    CurValueStr[ENUM_WaterTemp      ].val = 130;//water_value;//水温
                     CurValueStr[TCS_Warning_Lamp      ].val = 1;
                     CurValueStr[ABS_Warning_Lamp      ].val = 1;
                    CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        
                    if(direction_espeed==1)
                    {   
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 1;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 1;
                        //CurValueStr[TCS_Work_Mode      ].val = 0;                              
                    }
                    else
                    {   
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 2; 
                       // CurValueStr[TCS_Warning_Lamp      ].val = 0;
                        //CurValueStr[TCS_Work_Mode      ].val = 1;                                                      
                    }   
                }break;
                case 11:
                {   
                    CurValueStr[ENUM_VSpeed         ].val = speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 11000;
                    //CurValueStr[ENUM_WaterTemp      ].val = water_value;//水温
                    if(direction_espeed==1)
                    {   
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 2;   
                       // CurValueStr[TCS_Warning_Lamp      ].val = 0;
                        //CurValueStr[TCS_Work_Mode      ].val = 1;                            
                    }
                    else
                    {   
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        CurValueStr[ISG_Power      ].val = 1;
                        CurValueStr[ISG_Power_Enable      ].val = 1; 
                        //CurValueStr[TCS_Warning_Lamp      ].val = 1;
                        //CurValueStr[TCS_Work_Mode      ].val = 0;                             
                    }     
                }break;
                case 12:
                {   
                    CurValueStr[ENUM_VSpeed         ].val = speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 12000;
                    //CurValueStr[ENUM_WaterTemp      ].val = water_value;//水温
                    if(direction_espeed==1)
                    {
                        //CurValueStr[ABS_Warning_Lamp      ].val = 1;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 1;
                        CurValueStr[ISG_Power      ].val = 0;
                        CurValueStr[ISG_Power_Enable      ].val = 0;
                        //CurValueStr[TCS_Warning_Lamp      ].val = 1;
                        //CurValueStr[TCS_Work_Mode      ].val = 0;                              
                    }
                    else
                    {
                        //CurValueStr[ABS_Warning_Lamp      ].val = 0;
                        //CurValueStr[ECU_Warning_Lamp      ].val = 0;
                        CurValueStr[ISG_Ready      ].val = 1; 
                        //CurValueStr[TCS_Warning_Lamp      ].val = 0;
                        //CurValueStr[TCS_Work_Mode      ].val = 1;                                                 
                    }      
                }break;
            }
        }
    }
}


void Message_ClearDatas(CAN_message *Message, unsigned char StartByte, unsigned char StartBit, unsigned char len, unsigned char Format){
    unsigned char pBit, pByte, i;

    pBit = StartBit;
    pByte = StartByte;

    switch(Format){
        case Motorola:{
            for(i = 0; i < len; i++){
                __RESET_WATCHDOG();
                Message->Msg[pByte] &= ~(1 << pBit);
                pBit++;
                if(pBit >= 8){
                    pBit = 0;
                    if(pByte > 0){
                        pByte--;
                    }else{
                        break;
                    }
                }
            }
        }break;

        case Intel:{
            for(i = 0; i < len; i++){
                __RESET_WATCHDOG();
                Message->Msg[pByte] &= ~(1 << pBit);
                pBit++;
                if(pBit >= 8){
                    pBit = 0;
                    if(pByte < 7){
                        pByte++;
                    }else{
                        break;
                    }
                }
            }
        }break;

        default:{
            ;
        }
    }
}

void Message_FillDatas(CAN_message *Message, unsigned char StartByte, unsigned char StartBit, unsigned char len, unsigned char Format, unsigned long MessageValue){
    unsigned char pBit, pByte, i;

    pBit = StartBit;
    pByte = StartByte;
    MessageValue = MessageValue << pBit;

    switch(Format){
        case Motorola:{
            for(i = 0; i < len; i++){
                __RESET_WATCHDOG();
                Message->Msg[pByte] |= MessageValue & (1 << pBit);
                pBit++;
                if(pBit >= 8){
                    pBit = 0;
                    if(pByte > 0){
                        pByte--;
                        MessageValue = MessageValue >> 8;
                    }else{
                        break;
                    }
                }
            }
        }break;

        case Intel:{
            for(i = 0; i < len; i++){
                __RESET_WATCHDOG();
                Message->Msg[pByte] |= MessageValue & (1 << pBit);
                pBit++;
                if(pBit >= 8){
                    pBit = 0;
                    if(pByte < 7){
                        pByte++;
                        MessageValue = MessageValue >> 8;
                    }else{
                        break;
                    }
                }
            }
        }break;

        default:{
            ;
        }
    }
}



void Message_Value_Calculate(s_CAN_List list)
{

    CAN_message *CanMessage;
    INT8U Start_Byte, Start_Bit, len, Offset_Flag, Format_Flag;
    INT16U Offset, Factor_1, Factor_2, CurValue, Value_Flag;

    INT32U temp;
    INT32U Message_Clear;
    INT8U  Byte_Count;
    INT8U  i;

    CanMessage = list.canMsg;
    Start_Byte = list.StartByte;
    Start_Bit = list.StartBit;
    len = list.SignalLen;
    Offset_Flag = list.fOffset;
    Format_Flag = list.fFormat;
    Offset = list.Offset;
    Factor_1 = list.Factor_1;
    Factor_2 = list.Factor_2;

    CurValue = list.CurValue->val;
    Value_Flag = list.CurValue->fval;



    temp = CurValue;

    //璁＄畻鍋忕Щ锟??
    if(Offset != 0){
        if(Offset_Flag  == Offset_Minus){
            if(Value_Flag == Value_Minus){
                if(temp > Offset){
                    temp = 0;               //閿欒??锛屾墍瑕佸疄鐜扮殑鍊煎皬浜庣墿鐞嗘渶灏忥拷?
                }else{
                    temp = Offset - temp;
                }
            }else if(Value_Flag == Value_Plus){
                temp += Offset;
            }else{;}
        }else if(Offset_Flag  == Offset_Plus){
            if(temp < Offset){
                temp = 0;               //閿欒??锛屾墍瑕佸疄鐜扮殑鍊煎皬浜庣墿鐞嗘渶灏忥拷?
            }else{
                temp -= Offset;
            }
        }
        
    }

    temp = temp * Factor_1 / Factor_2;
    //temp = temp << Start_Bit;

    Byte_Count = len / 8;
    if((len % 8) != 0){
        Byte_Count += 1;
    }

    //娓呰剰鏁版嵁
    Message_ClearDatas(CanMessage, Start_Byte, Start_Bit, len, Format_Flag);
    Message_FillDatas(CanMessage, Start_Byte, Start_Bit, len, Format_Flag, temp);
    
}




void FT_VehSpeedCalc(unsigned char spd){
    unsigned long wTemp;

    wTemp = spd;

    
}


/*zh:*/
/*------------------------------------------------------------------------------------------------
 * function name : Bits_Operation
 * parameter value range : StartByte(0~7)     StartBit(0~7)     Length(1~8)     Value(0~255)
 * notice : Do not span bytes.
 * author : zhouhang
 * date :2022.01.18
--------------------------------------------------------------------------------------------------*/        
void Bits_Operation(CAN_message *Message, unsigned char StartByte, unsigned char StartBit, unsigned char Length, unsigned char Value)  /*Do not span bytes*/
{
    unsigned char i;
    
    for (i = 0; i < Length; i++)
    {
        Message->Msg[StartByte] &= (~(1 << (i + StartBit)));
    }

    Message->Msg[StartByte] |= (Value << StartBit);
}

/*:zh*/


void All_Lamp_TurnOn(void)
{
    ;
}