123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- /*
- * @Author : ChenJie
- * @Date : 2021-12-24 15:26:57
- * @Version : V3.0
- * @LastEditors : ChenJie
- * @LastEditTime : 2022-05-09 16:13:46
- * @Description : file content
- * @FilePath : \VehicleControl\VehicleControl\src\System\Vehicle\Communication\VcuCanProtocolFunc.c
- */
- #include "VcuCanProtocolFunc.h"
- void VcuDecodeFunction(UINT32 ID, UINT8 *rawData)
- {
- switch (ID)
- {
- case 0x18F101D0:
- VCU_St_BattRly = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0x3);
- VCU_St_Check = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 2) & 0x3);
- VCU_St_SysIntLock = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 4) & 0x3);
- VCU_St_Veh = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 6) & 0x3);
- VCU_St_Gear = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
- VCU_Ft_Sys = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0x1);
- VCU_Ft_Tran = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 1) & 0x1);
- VCU_Ft_BattSys = (UINT8)(((*(UINT8 *)(rawData + 4)) >> 5) & 0x1);
- VCU_State_Veh = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xF);
- VCU_Counter = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
- VcuRxFlag[0] = 0x01;
- break;
- case 0x18F103D0:
- VCU_SoftVersion = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
- VCU_St_AccPedal = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
- VCU_St_BrakePedal = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
- VcuRxFlag[1] = 0x01;
- break;
- case 0x18E1F3D0:
- {
- UINT8 VinNum = 0;
- VinNum = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
- if (VinNum == 0 || VinNum > 3)
- {
- break;
- }
- VCU_St_VinRecv = ((VinNum == 1) | ((VinNum == 2) << 1) | ((VinNum == 3) << 2)) | VCU_St_VinRecv;
- for (UINT8 i = 0; i < 7; i++)
- {
- if(((VinNum - 1) * 7 + i) < 17)
- {
- VCU_Num_VIN[(VinNum - 1) * 7 + i] = (UINT8)(((*(UINT8 *)(rawData + i))) & 0xFF);;
- }
- }
- VcuRxFlag[2] = 0x01;
- break;
- }
- case 0x18FEF100:
- VCU_St_ParkBrakeSw = (UINT8)(((*(UINT8 *)(rawData + 0)) >> 2) & 0x3);
- VcuRxFlag[3] = 0x01;
- break;
- default:
- break;
- }
- }
- void VcuRxDiagnose(void)
- {
- static UINT16 TimeCounter = 0;
- TimeCounter = TimeCounter + 10;
- for (UINT8 i = 0; i < sizeof(VcuInTable) / 4; i++)
- {
- if (VcuRxFlag[i] == 1) // received msg, and clear the error conter
- {
- VcuRxErrorCounter[i] = 0;
- VcuRxFlag[i] = 0;
- continue;
- }
- if (VcuRxErrorCounter[i] < 3)
- {
- VcuRxShortError[i] = 0;
- VcuRxLongError[i] = 0;
- }
- else if (VcuRxErrorCounter[i] >= 3 && VcuRxErrorCounter[i] < 13)
- {
- VcuRxShortError[i] = 1;
- VcuRxLongError[i] = 0;
- }
- else if (VcuRxErrorCounter[i] >= 13)
- {
- VcuRxShortError[i] = 0;
- VcuRxLongError[i] = 1;
- VcuRxMsgSetInvalidValue(VcuInTable[i]);
- VcuRxErrorCounter[i] = 0;
- }
- else if (VcuRxErrorCounter[i] == 0xFF)
- {
- VcuRxErrorCounter[i] = 0xFE;
- }
- }
- if (TimeCounter % 100 == 0) // period <=100ms
- {
- VcuRxErrorCounter[0]++; // can msg 0x18F101D0
- // if(canRxErrorCounter[0]>=13)
- VcuRxErrorCounter[1]++; // can msg 0x18F103D0
- // if(canRxErrorCounter[1]>=13)
- }
- }
- void VcuRxMsgSetInvalidValue(UINT32 ID)
- {
- switch (ID)
- {
- case 0x18F101D0:
- VCU_St_BattRly = 0xFF;
- VCU_St_Check = 0xFF;
- VCU_St_SysIntLock = 0xFF;
- VCU_St_Veh = 0xFF;
- VCU_St_Gear = 0xFF;
- VCU_Ft_Sys = 0xFF;
- VCU_Ft_Tran = 0xFF;
- VCU_Ft_BattSys = 0xFF;
- VCU_State_Veh = 0xFF;
- VCU_Counter = 0xFF;
- break;
- case 0x18F103D0:
- VCU_SoftVersion = 0xFF;
- VCU_St_AccPedal = 0xFF;
- VCU_St_BrakePedal = 0xFF;
- break;
- case 0x18FEF100:
- break;
- default:
- break;
- }
- }
|