123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- /*
- * @Author : ChenJie
- * @Date : 2021-12-20 14:47:39
- * @Version : V3.0
- * @LastEditors : ChenJie
- * @LastEditTime : 2022-05-09 17:13:09
- * @Description : file content
- * @FilePath : \VehicleControl\VehicleControl\src\System\Vehicle\Communication\CanProtocolFunc.c
- */
- /*
- * CanProtocol.c
- * can协议转换
- * Created on: 2021年12月20日
- * Author: QiXiang_CHENJIE
- */
- #include <CanProtocolFunc.h>
- #include "HardwareLib.h"
- /******************************************
- *
- *Can0接收发送函数
- **************************************** */
- void Can0RxMsgSetInvalidValue(UINT32 ID);
- void Can0Encode(UINT32 ID, UINT8 *rawData)
- {
- }
- void Can0Decode(UINT32 ID, UINT8 *rawData)
- {
- switch(ID)
- {
- case 0x18FF5A51:
- {
- gashighLevel_gf1 = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
- gaslowLevel_gf1 = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
- temp_gf1 = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
- warningLevel_gf1 = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
- workMode_gf1 = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
- fumesHigh_gf1 = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
- fumesLow_gf1 = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
- Can0RxFlag[0] = 0x01;
- break;
- }
- case 0x18FF5A52:
- {
- gashighLevel_gf2 = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
- gaslowLevel_gf2 = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
- temp_gf2 = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
- warningLevel_gf2 = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
- workMode_gf2 = (UINT8)(((*(UINT8 *)(rawData + 5))) & 0xFF);
- fumesHigh_gf2 = (UINT8)(((*(UINT8 *)(rawData + 6))) & 0xFF);
- fumesLow_gf2 = (UINT8)(((*(UINT8 *)(rawData + 7))) & 0xFF);
- Can0RxFlag[1] = 0x01;
- break;
- }
- default:
- {
- break;
- }
- }
- }
- void Can0RxDiagnose(void)
- {
- static UINT32 TimeCounter = 0; // ms
- TimeCounter = TimeCounter + 10; //
- for (UINT8 i = 0; i < sizeof(Can0InTable) / 4; i++)
- {
- if (Can0RxFlag[i] == 1) // received msg, and clear the error conter
- {
- Can0RxErrorCounter[i] = 0;
- Can0RxFlag[i] = 0;
- continue;
- }
- if (Can0RxErrorCounter[i] < 3)
- {
- Can0RxShortError[i] = 0;
- Can0RxLongError[i] = 0;
- }
- else if (Can0RxErrorCounter[i] >= 3 && Can0RxErrorCounter[i] < 50)
- {
- Can0RxShortError[i] = 1;
- Can0RxLongError[i] = 0;
- }
- else if (Can0RxErrorCounter[i] >= 50)
- {
- Can0RxShortError[i] = 0;
- Can0RxLongError[i] = 1;
- Can0RxMsgSetInvalidValue(Can0InTable[i]);
- Can0RxErrorCounter[i] = 0;
- }
- else if (Can0RxErrorCounter[i] == 0xFF)
- {
- Can0RxErrorCounter[i] = 0xFE;
- }
- }
- if (TimeCounter % 100 == 0) // period <=100ms
- {
- Can0RxErrorCounter[0]++;
- }
- }
- void Can0RxMsgSetInvalidValue(UINT32 ID)
- {
- switch (ID)
- {
- case 0x18FF5A51:
- {
- gashighLevel_gf1 = 0xFF;
- gaslowLevel_gf1 = 0xFF;
- temp_gf1 = 0xFF;
- warningLevel_gf1 = 0xFF;
- workMode_gf1 = 0xFF;
- fumesHigh_gf1 = 0xFF;
- fumesLow_gf1 = 0xFF;
- break;
- }
- case 0x18FF5A52:
- {
- gashighLevel_gf2 = 0xFF;
- gaslowLevel_gf2 = 0xFF;
- temp_gf2 = 0xFF;
- warningLevel_gf2 = 0xFF;
- workMode_gf2 = 0xFF;
- fumesHigh_gf2 = 0xFF;
- fumesLow_gf2 = 0xFF;
- break;
- }
- default:
- break;
- }
- }
- /******************************************
- *
- *Can1接收发送函数
- **************************************** */
- /**
- * @brief : BMC发送
- * @param {uint8} CmdIdx
- * @return {*}
- */
- void Can1RxMsgSetInvalidValue(UINT32 ID);
- void Can1Encode(UINT32 ID, UINT8 *rawData)
- {
- switch(ID)
- {
- case 0x18FF1100:
- {
- *(rawData + 0) = connectorHvlock1;
- *(rawData + 1) = connectorHvlock2;
- *(rawData + 2) = chrgModuelPwrCtlFB;
- *(rawData + 3) = paraChrgCtlFB;
- *(rawData + 4) = outToChrgCtlFB_A;
- *(rawData + 5) = outToBaseCtlFB_A;
- *(rawData + 6) = outToChrgCtlFB_B;
- *(rawData + 7) = outToBaseCtlFB_B;
- break;
- }
- case 0x18FF1101:
- {
- *(rawData + 0) = fuseActionFB_A;
- *(rawData + 1) = fuseActionFB_B;
- *(rawData + 2) = sigSwitchReadyFB_A;
- *(rawData + 3) = sigSwitchReadyFB_B;
- *(rawData + 4) = ctrlFXFB1;
- *(rawData + 5) = ctrlFXFB2;
- *(rawData + 6) = 0xFF;
- *(rawData + 7) = 0xFF;
- break;
- }
- case 0x18FF1102:
- {
- *(rawData + 0) = conn1Temp1;
- *(rawData + 1) = conn1Temp2;
- *(rawData + 2) = conn2Temp1;
- *(rawData + 3) = conn2Temp2;
- *(rawData + 4) = chrgGunTemp1_A;
- *(rawData + 5) = chrgGunTemp2_A;
- *(rawData + 6) = chrgGunTemp1_B;
- *(rawData + 7) = chrgGunTemp2_B;
- break;
- }
- case 0x18FF1103:
- {
- *(rawData + 0) = chrgBoxTemp1;
- *(rawData + 1) = chrgBoxTemp2;
- *(rawData + 2) = chrgBoxGasOver1;
- *(rawData + 3) = chrgBoxGasOver2;
- *(rawData + 4) = chrgBoxFumesOver1;
- *(rawData + 5) = chrgBoxFumesOver2;
- *(rawData + 6) = chrgBox1Warning;
- *(rawData + 7) = chrgBox2Warning;
- break;
- }
- default:
- break;
- }
- }
- /**
- * @brief : BMC解析
- * @param {*}
- * @return {*}
- */
- void Can1Decode(UINT32 ID, UINT8 *rawData)
- {
- switch(ID)
- {
- case 0x18FF1200:
- {
- chrgModulePwrCtrl = (UINT8)(((*(UINT8 *)(rawData + 0))) & 0xFF);
- baseSwitchCtrl = (UINT8)(((*(UINT8 *)(rawData + 1))) & 0xFF);
- paraChrgCtrlState = (UINT8)(((*(UINT8 *)(rawData + 2))) & 0xFF);
- chrgStartState = (UINT8)(((*(UINT8 *)(rawData + 3))) & 0xFF);
- chrgStopState = (UINT8)(((*(UINT8 *)(rawData + 4))) & 0xFF);
- Can1RxFlag[0] = 0x01;
- break;
- }
- default:
- {
- break;
- }
- }
- }
- void Can1RxDiagnose(void)
- {
- static UINT32 TimeCounter = 0; // ms
- TimeCounter = TimeCounter + 10; //
- for (UINT8 i = 0; i < sizeof(Can1InTable) / 4; i++)
- {
- if (Can1RxFlag[i] == 1) // received msg, and clear the error conter
- {
- Can1RxErrorCounter[i] = 0;
- Can1RxFlag[i] = 0;
- continue;
- }
- if (Can1RxErrorCounter[i] < 3)
- {
- Can1RxShortError[i] = 0;
- Can1RxLongError[i] = 0;
- }
- else if (Can1RxErrorCounter[i] >= 3 && Can1RxErrorCounter[i] < 50)
- {
- Can1RxShortError[i] = 1;
- Can1RxLongError[i] = 0;
- }
- else if (Can1RxErrorCounter[i] >= 50)
- {
- Can1RxShortError[i] = 0;
- Can1RxLongError[i] = 1;
- Can1RxMsgSetInvalidValue(Can1InTable[i]);
- Can1RxErrorCounter[i] = 0;
- }
- else if (Can1RxErrorCounter[i] == 0xFF)
- {
- Can1RxErrorCounter[i] = 0xFE;
- }
- }
- if (TimeCounter % 100 == 0) // period <=100ms
- {
- Can1RxErrorCounter[0]++;
- }
- }
- void Can1RxMsgSetInvalidValue(UINT32 ID)
- {
- switch (ID)
- {
- case 0x18FF1200:
- chrgModulePwrCtrl = 0xFF;
- baseSwitchCtrl = 0xFF;
- paraChrgCtrlState = 0xFF;
- chrgStartState = 0xFF;
- chrgStopState = 0xFF;
- break;
- default:
- break;
- }
- }
|