#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 Self_propelled_flag = 0;//自走
unsigned int Key_Dodging_flag = 1;//按键打点
unsigned int speed_value = 0;
void APP_Button_Proc(void){
;
}




#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;

unsigned int  electricityclose = 0;         //电量表报文不外发标志
void APP_ICM_Proc(void)  /*zh321*/  /*FS04*/
{

    //if(Self_propelled_flag==1)
    {
        {
            CurValueStr[Engine_water_temperature_display_H].val = 0x0B;
            CurValueStr[Engine_water_temperature_display_L].val = 0x0E;
            CurValueStr[Engine_water_temperature_display_state].val = 0x00;
            
            // CurValueStr[EVpeed_L].val = 0xE8;
            // CurValueStr[EVpeed_H].val = 0x03;
            
            CurValueStr[Compass].val = 0X01;
            CurValueStr[Compass_H].val = 0X54;

            CurValueStr[Compass_flag].val = 0x08;
            CurValueStr[Temperature_Swtich].val = 0x01;     //发动机水温
            
        // CurValueStr[Vspeed                     ].val = 0;
        // CurValueStr[hour                       ].val = 0;
        // CurValueStr[minute                     ].val = 0;
        // CurValueStr[electricity                ].val = 0;
        // CurValueStr[fault                      ].val = 0;
        // CurValueStr[Ready                      ].val = 0;
        // CurValueStr[Energy_recovery            ].val = 0;
        // CurValueStr[Energy_recovery_level      ].val = 0;
        // CurValueStr[Side_brackets              ].val = 0;
        // CurValueStr[TCS_close                  ].val = 1;
        // CurValueStr[TCS_crotrul                ].val = 1;
        // CurValueStr[TCS_mode                   ].val = 1;
        // CurValueStr[TCS_light                  ].val = 1;
        // CurValueStr[GPS                        ].val = 0;
        // CurValueStr[signal_4G                  ].val = 0;
        // CurValueStr[Battery_over               ].val = 0;
        // CurValueStr[Motor_overheating          ].val = 0;
        // CurValueStr[Cruise_control             ].val = 0;
        // CurValueStr[Gear                       ].val = 0;
        // CurValueStr[Bluetooth_phone            ].val = 0;
        // CurValueStr[Vvspeed_L                       ].val = 0;
        // CurValueStr[Vvspeed_H                       ].val = 0;
        // CurValueStr[Electricity_H                       ].val = 0;
        // CurValueStr[Electricity_L                       ].val = 0;
        // CurValueStr[Electricity_h                       ].val = 0;
        // CurValueStr[Electricity_l                       ].val = 0;
        // CurValueStr[Sidebrace                       ].val = 0;
        // CurValueStr[cruise                       ].val = 0;
        // CurValueStr[ABS                       ].val = 0;
        // CurValueStr[TCS                       ].val = 0;
        // CurValueStr[Tire_pressure                       ].val = 0;
        // CurValueStr[Bluetooth                       ].val = 0;
        // CurValueStr[GPS                       ].val = 0;
        // CurValueStr[Callalert                       ].val = 0x01;
        // CurValueStr[GMS                       ].val = 0;
        // CurValueStr[Parallelsignals                       ].val = 0;
        // CurValueStr[Enginefailure                       ].val = 0;
        // CurValueStr[P_dang                       ].val = 0x03;
        

            #if 0                       
            switch(Key.CAN_Step)
            {
                case 1:
                {   
                    CurValueStr[Vvspeed_L                  ].val = 0xC8;
                    CurValueStr[Vvspeed_H                  ].val = 0x00;
                    CurValueStr[Electricity_H              ].val = 0x00;
                    CurValueStr[Electricity_L              ].val = 0x00;
                    CurValueStr[Electricity_h              ].val = 0xE8;
                    CurValueStr[Electricity_l              ].val = 0x03;
                    CurValueStr[Sidebrace                  ].val = 0x00;
                    CurValueStr[cruise                     ].val = 0x00;
                    CurValueStr[ABS                        ].val = 0x00;
                    CurValueStr[TCS                        ].val = 0x00;
                    CurValueStr[Tire_pressure              ].val = 0x00;
                    CurValueStr[Bluetooth                  ].val = 0x00;
                    CurValueStr[GPS                        ].val = 0x00;
                    CurValueStr[Callalert                  ].val = 0x01;
                    // CurValueStr[GMS                        ].val = 0x00;
                    CurValueStr[Parallelsignals            ].val = 0x00;
                    CurValueStr[Enginefailure              ].val = 0x00;
                }
                break;

                case 2:    
                {   
                    CurValueStr[Vvspeed_L                  ].val = 0x90;
                    CurValueStr[Vvspeed_H                  ].val = 0x01;
                    CurValueStr[Electricity_H              ].val = 0x00;
                    CurValueStr[Electricity_L              ].val = 0x64;
                    CurValueStr[Electricity_h              ].val = 0x03;
                    CurValueStr[Electricity_l              ].val = 0x84;
                    CurValueStr[Sidebrace                  ].val = 0x04;
                    CurValueStr[cruise                     ].val = 0x00;
                    CurValueStr[ABS                        ].val = 0x01;
                    // CurValueStr[TCS                        ].val = 0x00;
                    CurValueStr[Tire_pressure              ].val = 0x00;
                    CurValueStr[Bluetooth                  ].val = 0x00;
                    CurValueStr[GPS                        ].val = 0x00;
                    CurValueStr[Callalert                  ].val = 0x01;
                    // CurValueStr[GMS                        ].val = 0x00;
                    CurValueStr[Parallelsignals            ].val = 0x00;
                    CurValueStr[Enginefailure              ].val = 0x00;
                }
                break;
                
                case 3:
                {   
                    CurValueStr[Vvspeed_L                  ].val = 0x58;
                    CurValueStr[Vvspeed_H                  ].val = 0x02;
                    CurValueStr[Electricity_H              ].val = 0x00;
                    CurValueStr[Electricity_L              ].val = 0xC8;
                    CurValueStr[Electricity_h              ].val = 0x03;
                    CurValueStr[Electricity_l              ].val = 0x20;
                    CurValueStr[Sidebrace                  ].val = 0x00;
                    CurValueStr[cruise                     ].val = 0x00;
                    CurValueStr[ABS                        ].val = 0x00;
                    // CurValueStr[TCS                        ].val = 0x00;
                    CurValueStr[Tire_pressure              ].val = 0x10;
                    CurValueStr[Bluetooth                  ].val = 0x00;
                    CurValueStr[GPS                        ].val = 0x00;
                    CurValueStr[Callalert                  ].val = 0x01;
                    // CurValueStr[GMS                        ].val = 0x00;
                    CurValueStr[Parallelsignals            ].val = 0x00;
                    CurValueStr[Enginefailure              ].val = 0x10;  
                }break;

                case 4:
                {   
                    CurValueStr[Vvspeed_L                  ].val = 0x20;
                    CurValueStr[Vvspeed_H                  ].val = 0x03;
                    CurValueStr[Electricity_H              ].val = 0x01;
                    CurValueStr[Electricity_L              ].val = 0x2C;
                    CurValueStr[Electricity_h              ].val = 0x02;
                    CurValueStr[Electricity_l              ].val = 0xBC;
                    CurValueStr[Sidebrace                  ].val = 0x00;
                    CurValueStr[cruise                     ].val = 0x00;
                    CurValueStr[ABS                        ].val = 0x00;
                    // CurValueStr[TCS                        ].val = 0x00;
                    CurValueStr[Tire_pressure              ].val = 0x00;
                    CurValueStr[Bluetooth                  ].val = 0x00;
                    CurValueStr[GPS                        ].val = 0x00;
                    CurValueStr[Callalert                  ].val = 0x01;
                    // CurValueStr[GMS                        ].val = 0x00;
                    CurValueStr[Parallelsignals            ].val = 0x00;
                    CurValueStr[Enginefailure              ].val = 0x00;
                }break;

                case 5:
                {   
                    CurValueStr[Vvspeed_L                  ].val = 0XE8;
                    CurValueStr[Vvspeed_H                  ].val = 0X03;
                    CurValueStr[Electricity_H              ].val = 0X01;
                    CurValueStr[Electricity_L              ].val = 0X90;
                    CurValueStr[Electricity_h              ].val = 0X02;
                    CurValueStr[Electricity_l              ].val = 0X58;
                    CurValueStr[Sidebrace                  ].val = 0X00;
                    CurValueStr[cruise                     ].val = 0X00;
                    CurValueStr[ABS                        ].val = 0X00;
                    // CurValueStr[TCS                        ].val = 0X00;
                    CurValueStr[Tire_pressure              ].val = 0X00;
                    CurValueStr[Bluetooth                  ].val = 0X80;
                    CurValueStr[GPS                        ].val = 0X00;
                    CurValueStr[Callalert                  ].val = 0X01;
                    // CurValueStr[GMS                        ].val = 0X00;
                    CurValueStr[Parallelsignals            ].val = 0X00;
                    CurValueStr[Enginefailure              ].val = 0X00;
                }
                break;

                case 6:
                {   
                    CurValueStr[Vvspeed_L                  ].val = 0xB0;
                    CurValueStr[Vvspeed_H                  ].val = 0x04;
                    CurValueStr[Electricity_H              ].val = 0x01;
                    CurValueStr[Electricity_L              ].val = 0xF4;
                    CurValueStr[Electricity_h              ].val = 0x01;
                    CurValueStr[Electricity_l              ].val = 0xF4;
                    CurValueStr[Sidebrace                  ].val = 0x00;
                    CurValueStr[cruise                     ].val = 0x00;
                    CurValueStr[ABS                        ].val = 0x00;
                    // CurValueStr[TCS                        ].val = 0x00;
                    CurValueStr[Tire_pressure              ].val = 0x00;
                    CurValueStr[Bluetooth                  ].val = 0x00;
                    CurValueStr[GPS                        ].val = 0x02;
                    CurValueStr[Callalert                  ].val = 0x01;
                    // CurValueStr[GMS                        ].val = 0x00;
                    CurValueStr[Parallelsignals            ].val = 0x00;
                    CurValueStr[Enginefailure              ].val = 0x00;                      
                }
                break;
                
                case 7:
                {   
                    CurValueStr[Vvspeed_L                  ].val = 0x78;
                    CurValueStr[Vvspeed_H                  ].val = 0x05;
                    CurValueStr[Electricity_H              ].val = 0x02;
                    CurValueStr[Electricity_L              ].val = 0x58;
                    CurValueStr[Electricity_h              ].val = 0x01;
                    CurValueStr[Electricity_l              ].val = 0x90;
                    CurValueStr[Sidebrace                  ].val = 0x00;
                    CurValueStr[cruise                     ].val = 0x00;
                    CurValueStr[ABS                        ].val = 0x08;
                    // CurValueStr[TCS                        ].val = 0x00;
                    CurValueStr[Tire_pressure              ].val = 0x00;
                    CurValueStr[Bluetooth                  ].val = 0x00;
                    CurValueStr[GPS                        ].val = 0x00;
                    CurValueStr[Callalert                  ].val = 0x00;
                    // CurValueStr[GMS                        ].val = 0x00;
                    CurValueStr[Parallelsignals            ].val = 0x00;
                    CurValueStr[Enginefailure              ].val = 0x00;
                }
                break;

                case 8:
                {   
                    CurValueStr[Vvspeed_L                  ].val = 0x40;
                    CurValueStr[Vvspeed_H                  ].val = 0x06;
                    CurValueStr[Electricity_H              ].val = 0x02;
                    CurValueStr[Electricity_L              ].val = 0xBC;
                    CurValueStr[Electricity_h              ].val = 0x01;
                    CurValueStr[Electricity_l              ].val = 0x2C;
                    CurValueStr[Sidebrace                  ].val = 0x00;
                    CurValueStr[cruise                     ].val = 0x04;
                    CurValueStr[ABS                        ].val = 0x00;
                    // CurValueStr[TCS                        ].val = 0x00;
                    CurValueStr[Tire_pressure              ].val = 0x00;
                    CurValueStr[Bluetooth                  ].val = 0x00;
                    CurValueStr[GPS                        ].val = 0x01;
                    CurValueStr[Callalert                  ].val = 0x01;
                    CurValueStr[GMS                        ].val = 0x00;
                    CurValueStr[Parallelsignals            ].val = 0x00;
                    CurValueStr[Enginefailure              ].val = 0x00;
                }
                break;

                case 9:
                {        
                    CurValueStr[Vvspeed_L                  ].val = 0x08;
                    CurValueStr[Vvspeed_H                  ].val = 0x07;
                    CurValueStr[Electricity_H              ].val = 0x03;
                    CurValueStr[Electricity_L              ].val = 0x20;
                    CurValueStr[Electricity_h              ].val = 0x00;
                    CurValueStr[Electricity_l              ].val = 0xC8;
                    CurValueStr[Sidebrace                  ].val = 0x00;
                    CurValueStr[cruise                     ].val = 0x00;
                    CurValueStr[ABS                        ].val = 0x00;
                    // CurValueStr[TCS                        ].val = 0x00;
                    CurValueStr[Tire_pressure              ].val = 0x00;
                    CurValueStr[Bluetooth                  ].val = 0x00;
                    CurValueStr[GPS                        ].val = 0x00;
                    CurValueStr[Callalert                  ].val = 0x01;
                    // CurValueStr[GMS                        ].val = 0x00;
                    CurValueStr[Parallelsignals            ].val = 0x01;
                    CurValueStr[Enginefailure              ].val = 0x00;
                }
                break;
                
                case 10:
                {   
                    CurValueStr[Vvspeed_L                  ].val = 0xD0;
                    CurValueStr[Vvspeed_H                  ].val = 0x07;
                    CurValueStr[Electricity_H              ].val = 0x03;
                    CurValueStr[Electricity_L              ].val = 0xE8;
                    CurValueStr[Electricity_h              ].val = 0x00;
                    CurValueStr[Electricity_l              ].val = 0x00;
                    CurValueStr[Sidebrace                  ].val = 0x04;
                    CurValueStr[cruise                     ].val = 0x04;
                    CurValueStr[ABS                        ].val = 0x09;
                    // CurValueStr[TCS                        ].val = 0x10;
                    CurValueStr[Tire_pressure              ].val = 0x10;
                    CurValueStr[Bluetooth                  ].val = 0x80;
                    CurValueStr[GPS                        ].val = 0x03;
                    CurValueStr[Callalert                  ].val = 0x00;
                    CurValueStr[GMS                        ].val = 0x00;
                    CurValueStr[Parallelsignals            ].val = 0x01;
                    CurValueStr[Enginefailure              ].val = 0x10;
                }
                break;

                #if 0
                case 12:
                {   
                    CurValueStr[ENUM_VSpeed         ].val = speed_value;//车速
                    CurValueStr[ENUM_RSpeed         ].val = 12000;
                    CurValueStr[ENUM_WaterTemp      ].val = water_value;//水温
                    if(direction_espeed==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[ISG_Ready      ].val = 1; 
                        CurValueStr[TCS_Warning_Lamp      ].val = 0;
                        CurValueStr[TCS_Work_Mode      ].val = 1;                                                 
                    }      
                }break;
                #endif
            }
            #endif
        }
    }
}


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)
{
    ;
}