BleCanProtocolFunc.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760
  1. /*
  2. * @Author : ChenJie
  3. * @Date : 2021-12-20 14:47:39
  4. * @Version : V3.0
  5. * @LastEditors : ChenJie
  6. * @LastEditTime : 2021-12-29 16:33:32
  7. * @Description : file content
  8. * @FilePath : \VehicleControl\VehicleControl\src\System\Vehicle\Communication\BleCanProtocolFunc.c
  9. */
  10. /*
  11. * CanProtocol.c
  12. * can协议转换
  13. * Created on: 2021年12月20日
  14. * Author: QiXiang_CHENJIE
  15. */
  16. #include "BleCanProtocolFunc.h"
  17. #include "HardwareLib.h"
  18. /**
  19. * @brief : EBC对ble的命令应答,AT指令,EBC(0x1CEE000X)->BLE(0x1CEF0000X)
  20. * @param {uint8} CmdIdx
  21. * @return {*}
  22. */
  23. void Can2ProtocolCode(uint8 CmdIdx,uint8 DataIdx,uint8 Byte0Num,uint32 *InnerCanID,uint8 *Data)
  24. {
  25. uint8 BlePwrControl; //蓝牙电源开关控制 FF-关闭,0A-打开
  26. uint8 BlePwrControl_Flag; //蓝牙电源开关控制使能 00-不控制,01-控制
  27. uint8 BleRoleControl; //蓝牙主从控制 01-主机,02-从机
  28. uint8 BleRoleControl_Flag; //蓝牙主从控制使能 00-不控制,01-控制
  29. uint8 BleName[8];
  30. //上述变量下线检测时调用修改
  31. // CmdIdx EBC对BLE命令列表
  32. switch (CmdIdx)
  33. {
  34. case 0x00: // ebc->ble数据传输通道
  35. {
  36. Can2DataCode(DataIdx, Byte0Num,Data);
  37. *InnerCanID = 0x1CEE0000;
  38. break;
  39. }
  40. case 0x01: //查询BLE软件版本
  41. {
  42. Data[0] = 0x01;
  43. Data[1] = 0x00;
  44. Data[2] = 0x00;
  45. Data[3] = 0x00;
  46. Data[4] = 0x00;
  47. Data[5] = 0x00;
  48. Data[6] = 0x00;
  49. Data[7] = 0x00;
  50. *InnerCanID = 0x1CEE0001;
  51. break;
  52. }
  53. case 0x02: //查询BLE连接状态
  54. {
  55. Data[0] = 0x01;
  56. Data[1] = 0x00;
  57. Data[2] = 0x00;
  58. Data[3] = 0x00;
  59. Data[4] = 0x00;
  60. Data[5] = 0x00;
  61. Data[6] = 0x00;
  62. Data[7] = 0x00;
  63. *InnerCanID = 0x1CEE0002;
  64. break;
  65. }
  66. case 0x03: //让BLE断开连接
  67. {
  68. Data[0] = 0x02;
  69. Data[1] = 0x00;
  70. Data[2] = 0x00;
  71. Data[3] = 0x00;
  72. Data[4] = 0x00;
  73. Data[5] = 0x00;
  74. Data[6] = 0x00;
  75. Data[7] = 0x00;
  76. *InnerCanID = 0x1CEE0003;
  77. break;
  78. }
  79. case 0x04: //改无线设备名称 名称为ASCII码值
  80. {
  81. Data[0] = BleName[0];
  82. Data[1] = BleName[1];
  83. Data[2] = BleName[2];
  84. Data[3] = BleName[3];
  85. Data[4] = BleName[4];
  86. Data[5] = BleName[5];
  87. Data[6] = BleName[6];
  88. Data[7] = BleName[7];
  89. *InnerCanID = 0x1CEE0004;
  90. break;
  91. }
  92. case 0x05: // BLE设备蓝牙开关查询及控制,默认为查询
  93. {
  94. if (BlePwrControl_Flag)
  95. {
  96. Data[0] = 0x02;
  97. Data[1] = BlePwrControl;
  98. }
  99. else
  100. {
  101. Data[0] = 0x01;
  102. Data[1] = 0x00;
  103. }
  104. Data[2] = 0x00;
  105. Data[3] = 0x00;
  106. Data[4] = 0x00;
  107. Data[5] = 0x00;
  108. Data[6] = 0x00;
  109. Data[7] = 0x00;
  110. *InnerCanID = 0x1CEE0005;
  111. break;
  112. }
  113. case 0x06: // BLE 主从机切换及查询,默认为查询
  114. {
  115. if (BleRoleControl_Flag)
  116. {
  117. Data[0] = 0x02;
  118. Data[1] = BleRoleControl;
  119. }
  120. else
  121. {
  122. Data[0] = 0x01;
  123. Data[1] = 0x00;
  124. }
  125. Data[2] = 0x00;
  126. Data[3] = 0x00;
  127. Data[4] = 0x00;
  128. Data[5] = 0x00;
  129. Data[6] = 0x00;
  130. Data[7] = 0x00;
  131. *InnerCanID = 0x1CEE0006;
  132. break;
  133. }
  134. default:
  135. break;
  136. }
  137. }
  138. /**
  139. * @brief : ebc对ble的数据应答,Ebc data ->Ble data
  140. * @param {*}
  141. * @return {*}
  142. */
  143. void Can2DataCode(uint8 DataIdx, uint8 Byte0Num,uint8 Data[])
  144. {
  145. switch (DataIdx)
  146. {
  147. case 0x01: //主机数据类型1的应答
  148. {
  149. Data[0] = 0x11;
  150. Data[1] = ebcd_st_ebcWork;
  151. Data[2] = ebcd_st_ebcConnect;
  152. Data[3] = ebcd_st_ebcLockWork;
  153. Data[4] = 0x00;
  154. Data[5] = 0x00;
  155. Data[6] = 0x00;
  156. Data[7] = 0x00;
  157. break;
  158. }
  159. case 0x02: //主机数据类型2的应答 共7条
  160. {
  161. switch (Byte0Num)
  162. {
  163. case 0x21:
  164. {
  165. vcud_st_keyOn = 0; // TBD
  166. bcud_st_bcuTmsLiquid = 0; // TBD
  167. Data[0] = Byte0Num;
  168. Data[1] = ebcd_st_unlockSensor;
  169. Data[2] = ebcd_st_lockSensor;
  170. Data[3] = vcud_st_keyOn;
  171. Data[4] = ebcd_P_airSensor;
  172. Data[5] = bcud_st_bcuTmsLiquid;
  173. Data[6] = ebcd_flg_pluginLockSig;
  174. Data[7] = 0x00;
  175. break;
  176. }
  177. case 0x22:
  178. {
  179. Data[0] = Byte0Num;
  180. Data[1] = 0x00;
  181. Data[2] = 0x00;
  182. Data[3] = 0x00;
  183. Data[4] = 0x00;
  184. Data[5] = ebcd_st_pedstSensor;
  185. Data[6] = ebcd_st_pluginLockSig;
  186. Data[7] = 0x00;
  187. break;
  188. }
  189. case 0x23:
  190. {
  191. Data[0] = Byte0Num;
  192. Data[1] = ebcd_st_unlockSucJug;
  193. Data[2] = ebcd_st_lockSucJug;
  194. Data[3] = 0x00;
  195. Data[4] = 0x00;
  196. Data[5] = 0x00;
  197. Data[6] = 0x00;
  198. Data[7] = 0x00;
  199. break;
  200. }
  201. case 0x24:
  202. {
  203. Data[0] = Byte0Num;
  204. Data[1] = 0x00;
  205. Data[2] = 0x00;
  206. Data[3] = 0x00;
  207. Data[4] = 0x00;
  208. Data[5] = ebcd_st_pedstSucJug;
  209. Data[6] = ebcd_flg_swapAdmit;
  210. Data[7] = 0x00;
  211. break;
  212. }
  213. case 0x25:
  214. {
  215. Data[0] = Byte0Num;
  216. Data[1] = ebcd_st_ebcWork;
  217. Data[2] = ebcd_st_ebcConnect;
  218. Data[3] = ebcd_st_ebcLockWork;
  219. Data[4] = ebcd_Nr_errMax;
  220. Data[5] = ebcd_Num_err1;
  221. Data[6] = ebcd_Num_err2;
  222. Data[7] = 0x00;
  223. break;
  224. }
  225. case 0x26:
  226. {
  227. Data[0] = Byte0Num;
  228. Data[1] = (ebcd_Nr_swapBatt >> 8) & 0xFF;
  229. Data[2] = ebcd_Nr_swapBatt & 0xFF;
  230. Data[3] = (ebcd_Nr_swapSucBatt >> 8) & 0xFF;
  231. Data[4] = ebcd_Nr_swapSucBatt;
  232. Data[5] = 0x00;
  233. Data[6] = 0x00;
  234. Data[7] = 0x00;
  235. break;
  236. }
  237. case 0x27:
  238. {
  239. Data[0] = Byte0Num;
  240. Data[1] = ebcd_st_errTable1;
  241. Data[2] = ebcd_st_errTable2;
  242. Data[3] = ebcd_st_errTable3;
  243. Data[4] = 0x00;
  244. Data[5] = 0x00;
  245. Data[6] = 0x00;
  246. Data[7] = 0x00;
  247. break;
  248. }
  249. default:
  250. break;
  251. }
  252. break;
  253. }
  254. case 0x03: //主机数据类型3的应答 共5条
  255. {
  256. vcud_st_handbrake = HandbrakeSts;
  257. vcud_st_footbrake = (BrakePedal > 0);
  258. vcud_st_gear = GearPos;
  259. vcud_st_vcuComun = (VCU_Life != 0xFF);
  260. vcud_st_carStart = VehSts;
  261. vcud_st_Steer = 0x00; // TBD
  262. vcud_M_accDrv = VCU_TotalDistance * 10;
  263. if (EBC_VinMsgFlag == 0x07)
  264. {
  265. memcpy(vcuv_Num_vin, VCU_VIN, 17);
  266. }
  267. switch (Byte0Num)
  268. {
  269. case 0x31:
  270. {
  271. Data[0] = Byte0Num;
  272. Data[1] = vcud_st_handbrake;
  273. Data[2] = vcud_st_footbrake;
  274. Data[3] = vcud_st_gear;
  275. Data[4] = vcud_st_vcuComun;
  276. Data[5] = vcud_st_carStart;
  277. Data[6] = vcud_st_Steer;
  278. Data[7] = 0x00;
  279. break;
  280. }
  281. case 0x32:
  282. {
  283. Data[0] = Byte0Num;
  284. Data[1] = vcuv_Num_vin[0];
  285. Data[2] = vcuv_Num_vin[1];
  286. Data[3] = vcuv_Num_vin[2];
  287. Data[4] = vcuv_Num_vin[3];
  288. Data[5] = vcuv_Num_vin[4];
  289. Data[6] = vcuv_Num_vin[5];
  290. Data[7] = 0x00;
  291. break;
  292. }
  293. case 0x33:
  294. {
  295. Data[0] = Byte0Num;
  296. Data[1] = vcuv_Num_vin[6];
  297. Data[2] = vcuv_Num_vin[7];
  298. Data[3] = vcuv_Num_vin[8];
  299. Data[4] = vcuv_Num_vin[9];
  300. Data[5] = vcuv_Num_vin[10];
  301. Data[6] = vcuv_Num_vin[11];
  302. Data[7] = 0x00;
  303. break;
  304. }
  305. case 0x34:
  306. {
  307. Data[0] = Byte0Num;
  308. Data[1] = vcuv_Num_vin[12];
  309. Data[2] = vcuv_Num_vin[13];
  310. Data[3] = vcuv_Num_vin[14];
  311. Data[4] = vcuv_Num_vin[15];
  312. Data[5] = vcuv_Num_vin[16];
  313. Data[6] = 0x00;
  314. Data[7] = 0x00;
  315. break;
  316. }
  317. case 0x35:
  318. {
  319. Data[0] = Byte0Num;
  320. Data[1] = (vcud_M_accDrv >> 24) & 0xFF;
  321. Data[2] = (vcud_M_accDrv >> 16) & 0xFF;
  322. Data[3] = (vcud_M_accDrv >> 8) & 0xFF;
  323. Data[4] = (vcud_M_accDrv)&0xFF;
  324. Data[5] = vcud_P_airSensorForward;
  325. Data[6] = vcud_P_airSensorBack;
  326. Data[7] = 0x00;
  327. break;
  328. }
  329. default:
  330. break;
  331. }
  332. break;
  333. }
  334. case 0x04: //主机数据类型4的应答 共16条
  335. {
  336. bcud_st_bcuComun = (BMS1_Life != 0xFF);
  337. bcud_pct_bcuSoh = BMS2_SOH;
  338. bcud_V_battU = BMS2_PackInsideVolt;
  339. if (BMS1_SysSts == 2)
  340. {
  341. bcud_st_hvWork = 0;
  342. }
  343. else if (BMS1_SysSts == 0 || BMS1_SysSts == 1)
  344. {
  345. bcud_st_hvWork = 1;
  346. }
  347. else if (BMS1_SysSts == 3)
  348. {
  349. bcud_st_hvWork = 2;
  350. }
  351. else
  352. {
  353. bcud_st_hvWork = 3;
  354. }
  355. bcud_st_bcuMainRelay = BMS1_MainPosRelaySt;
  356. bcud_pct_soc = (UINT16)(BMS2_SOC * 4);
  357. memcpy(bcuv_Num_battSn, BMS_SN_SysCode, sizeof(BMS_SN_SysCode));
  358. bcud_Q_snglChrg = BMS19_SingleChargeAh;
  359. bcud_E_snglChrg = BMS19_SingleChargeKwh;
  360. bcud_Q_accRecovry = BMS16_TotalEneryECOChargeAh;
  361. bcud_E_accRecovry = BMS16_TotalEneryECOChargeKwh;
  362. bcud_Q_accSwapBatt = BMS17_TotalStationChargeAh;
  363. bcud_E_accSwapBatt = BMS17_TotalStationChargeKwh;
  364. bcud_Q_accPlugInChrg = BMS18_TotalPoleChargeAh;
  365. bcud_E_accPlugInChrg = BMS18_TotalPoleChargeKwh;
  366. bcud_Q_accDischrg = BMS14_TotalDischargeAh;
  367. bcud_E_accDischrg = BMS14_TotalDischargeAh;
  368. bcud_Q_accChrg = BMS18_TotalPoleChargeAh;
  369. bcud_E_accChrg = BMS15_TotalChargeKwh;
  370. switch (Byte0Num)
  371. {
  372. case 0x40:
  373. {
  374. Data[0] = Byte0Num;
  375. Data[1] = (bcud_E_accPlugInChrg >> 24) & 0xFF;
  376. Data[2] = (bcud_E_accPlugInChrg >> 16) & 0xFF;
  377. Data[3] = (bcud_E_accPlugInChrg >> 8) & 0xFF;
  378. Data[4] = (bcud_E_accPlugInChrg)&0xFF;
  379. Data[5] = 0x00;
  380. Data[6] = 0x00;
  381. Data[7] = 0x00;
  382. break;
  383. }
  384. case 0x41:
  385. {
  386. Data[0] = Byte0Num;
  387. Data[1] = (bcud_Q_accChrg >> 24) & 0xFF;
  388. Data[2] = (bcud_Q_accChrg >> 16) & 0xFF;
  389. Data[3] = (bcud_Q_accChrg >> 8) & 0xFF;
  390. Data[4] = (bcud_Q_accChrg)&0xFF;
  391. Data[5] = bcud_st_bcuComun;
  392. Data[6] = bcud_st_hvWork;
  393. Data[7] = 0x00;
  394. break;
  395. }
  396. case 0x42:
  397. {
  398. Data[0] = Byte0Num;
  399. Data[1] = (bcud_Q_accDischrg >> 24) & 0xFF;
  400. Data[2] = (bcud_Q_accDischrg >> 16) & 0xFF;
  401. Data[3] = (bcud_Q_accDischrg >> 8) & 0xFF;
  402. Data[4] = (bcud_Q_accDischrg)&0xFF;
  403. Data[5] = bcud_st_bcuMainRelay;
  404. Data[6] = bcud_pct_bcuSoh;
  405. Data[7] = 0x00;
  406. break;
  407. }
  408. case 0x43:
  409. {
  410. Data[0] = Byte0Num;
  411. Data[1] = (bcud_E_accChrg >> 24) & 0xFF;
  412. Data[2] = (bcud_E_accChrg >> 16) & 0xFF;
  413. Data[3] = (bcud_E_accChrg >> 8) & 0xFF;
  414. Data[4] = (bcud_E_accChrg)&0xFF;
  415. Data[5] = (bcud_V_battU >> 8) & 0xFF;
  416. Data[6] = (bcud_V_battU)&0xFF;
  417. Data[7] = 0x00;
  418. break;
  419. }
  420. case 0x44:
  421. {
  422. Data[0] = Byte0Num;
  423. Data[1] = (bcud_E_accDischrg >> 24) & 0xFF;
  424. Data[2] = (bcud_E_accDischrg >> 16) & 0xFF;
  425. Data[3] = (bcud_E_accDischrg >> 8) & 0xFF;
  426. Data[4] = (bcud_E_accDischrg)&0xFF;
  427. Data[5] = (bcud_pct_soc >> 8) & 0xFF;
  428. Data[6] = (bcud_pct_soc)&0xFF;
  429. Data[7] = 0x00;
  430. break;
  431. }
  432. case 0x45:
  433. {
  434. Data[0] = Byte0Num;
  435. Data[1] = bcuv_Num_battSn[0];
  436. Data[2] = bcuv_Num_battSn[1];
  437. Data[3] = bcuv_Num_battSn[2];
  438. Data[4] = bcuv_Num_battSn[3];
  439. Data[5] = bcuv_Num_battSn[4];
  440. Data[6] = bcuv_Num_battSn[5];
  441. Data[7] = 0x00;
  442. break;
  443. }
  444. case 0x46:
  445. {
  446. Data[0] = Byte0Num;
  447. Data[1] = bcuv_Num_battSn[6];
  448. Data[2] = bcuv_Num_battSn[7];
  449. Data[3] = bcuv_Num_battSn[8];
  450. Data[4] = bcuv_Num_battSn[9];
  451. Data[5] = bcuv_Num_battSn[10];
  452. Data[6] = bcuv_Num_battSn[11];
  453. Data[7] = 0x00;
  454. break;
  455. }
  456. case 0x47:
  457. {
  458. Data[0] = Byte0Num;
  459. Data[1] = bcuv_Num_battSn[12];
  460. Data[2] = bcuv_Num_battSn[13];
  461. Data[3] = bcuv_Num_battSn[14];
  462. Data[4] = bcuv_Num_battSn[15];
  463. Data[5] = bcuv_Num_battSn[16];
  464. Data[6] = bcuv_Num_battSn[17];
  465. Data[7] = 0x00;
  466. break;
  467. }
  468. case 0x48:
  469. {
  470. Data[0] = Byte0Num;
  471. Data[1] = bcuv_Num_battSn[18];
  472. Data[2] = bcuv_Num_battSn[19];
  473. Data[3] = bcuv_Num_battSn[20];
  474. Data[4] = bcuv_Num_battSn[21];
  475. Data[5] = bcuv_Num_battSn[22];
  476. Data[6] = bcuv_Num_battSn[23];
  477. Data[7] = 0x00;
  478. break;
  479. }
  480. case 0x49:
  481. {
  482. Data[0] = Byte0Num;
  483. Data[1] = bcuv_Num_battSn[24];
  484. Data[2] = bcuv_Num_battSn[25];
  485. Data[3] = bcuv_Num_battSn[26];
  486. Data[4] = bcuv_Num_battSn[27];
  487. Data[5] = bcuv_Num_battSn[28];
  488. Data[6] = bcuv_Num_battSn[29];
  489. Data[7] = 0x00;
  490. break;
  491. }
  492. case 0x4A:
  493. {
  494. Data[0] = Byte0Num;
  495. Data[1] = bcuv_Num_battSn[30];
  496. Data[2] = bcuv_Num_battSn[31];
  497. Data[3] = 0x00;
  498. Data[4] = 0x00;
  499. Data[5] = 0x00;
  500. Data[6] = 0x00;
  501. Data[7] = 0x00;
  502. break;
  503. }
  504. case 0x4B:
  505. {
  506. Data[0] = Byte0Num;
  507. Data[1] = (bcud_Q_snglChrg >> 8) & 0xFF;
  508. Data[2] = (bcud_Q_snglChrg)&0xFF;
  509. Data[3] = (bcud_Q_accRecovry >> 24) & 0xFF;
  510. Data[4] = (bcud_Q_accRecovry >> 16) & 0xFF;
  511. Data[5] = (bcud_Q_accRecovry >> 8) & 0xFF;
  512. Data[6] = (bcud_Q_accRecovry)&0xFF;
  513. Data[7] = 0x00;
  514. break;
  515. }
  516. case 0x4C:
  517. {
  518. Data[0] = Byte0Num;
  519. Data[1] = (bcud_Q_accSwapBatt >> 24) & 0xFF;
  520. Data[2] = (bcud_Q_accSwapBatt >> 16) & 0xFF;
  521. Data[3] = (bcud_Q_accSwapBatt >> 8) & 0xFF;
  522. Data[4] = (bcud_Q_accSwapBatt)&0xFF;
  523. Data[5] = 0x00;
  524. Data[6] = 0x00;
  525. Data[7] = 0x00;
  526. break;
  527. }
  528. case 0x4D:
  529. {
  530. Data[0] = Byte0Num;
  531. Data[1] = (bcud_E_snglChrg >> 8) & 0xFF;
  532. Data[2] = (bcud_E_snglChrg)&0xFF;
  533. Data[3] = (bcud_E_accRecovry >> 24) & 0xFF;
  534. Data[4] = (bcud_E_accRecovry >> 16) & 0xFF;
  535. Data[5] = (bcud_E_accRecovry >> 8) & 0xFF;
  536. Data[6] = (bcud_E_accRecovry)&0xFF;
  537. Data[7] = 0x00;
  538. break;
  539. }
  540. case 0x4E:
  541. {
  542. Data[0] = Byte0Num;
  543. Data[1] = (bcud_E_accSwapBatt >> 24) & 0xFF;
  544. Data[2] = (bcud_E_accSwapBatt >> 16) & 0xFF;
  545. Data[3] = (bcud_E_accSwapBatt >> 8) & 0xFF;
  546. Data[4] = (bcud_E_accSwapBatt)&0xFF;
  547. Data[5] = 0x00;
  548. Data[6] = 0x00;
  549. Data[7] = 0x00;
  550. break;
  551. }
  552. case 0x4F:
  553. {
  554. Data[0] = Byte0Num;
  555. Data[1] = (bcud_Q_accPlugInChrg >> 24) & 0xFF;
  556. Data[2] = (bcud_Q_accPlugInChrg >> 16) & 0xFF;
  557. Data[3] = (bcud_Q_accPlugInChrg >> 8) & 0xFF;
  558. Data[4] = (bcud_Q_accPlugInChrg)&0xFF;
  559. Data[5] = 0x00;
  560. Data[6] = 0x00;
  561. Data[7] = 0x00;
  562. break;
  563. }
  564. default:
  565. break;
  566. }
  567. break;
  568. }
  569. case 0x05:
  570. {
  571. Data[0] = 0x51;
  572. Data[1] = 0x00;
  573. Data[2] = 0x00;
  574. Data[3] = 0x00;
  575. Data[4] = 0x00;
  576. Data[5] = 0x00;
  577. Data[6] = 0x00;
  578. Data[7] = 0x00;
  579. break;
  580. }
  581. default:
  582. Data[0] = 0x00;
  583. Data[1] = 0x00;
  584. Data[2] = 0x00;
  585. Data[3] = 0x00;
  586. Data[4] = 0x00;
  587. Data[5] = 0x00;
  588. Data[6] = 0x00;
  589. Data[7] = 0x00;
  590. break;
  591. }
  592. }
  593. /**
  594. * @brief : Ebc通过Can2接受到的协议解码
  595. * @param {uint8} CmdIdx
  596. * @return {*}
  597. */
  598. void Can2ProtocolDecode(uint32 Can2ID,uint8 Data[])
  599. {
  600. switch (Can2ID)
  601. {
  602. case 0x1CEF0000:
  603. {
  604. Can2DataDecode(Data);
  605. bled_flg_bleConn = 1;
  606. break;
  607. }
  608. case 0x1CEF0001:
  609. {
  610. bled_Nr_softVer = (Data[0] << 24) | (Data[1] << 16) | (Data[2] << 8) | (Data[3]);
  611. break;
  612. }
  613. case 0x1CEF0002:
  614. {
  615. if (Data[0] != 0xFF)
  616. {
  617. bled_flg_bleConn = 1;
  618. }
  619. else
  620. {
  621. bled_flg_bleConn = 0;
  622. }
  623. break;
  624. }
  625. case 0x1CEF00F1:
  626. {
  627. ebcd_flg_ebcEolDone = Data[0];//下线检测完成(取消定时解锁)暂时放这里
  628. EEPROMDrv_bSaveInstantUB = 1;
  629. break;
  630. }
  631. default:
  632. break;
  633. }
  634. }
  635. /**
  636. * @brief : Ebc通过can2接收到的数据解码,Ble->Ebc
  637. * @param {*}
  638. * @return {*}
  639. */
  640. void Can2DataDecode(uint8 Data[])
  641. {
  642. uint8 CmdIndex = Data[0];
  643. ebcd_st_toBleAns = CmdIndex;
  644. ebcd_flg_Can2SendEnbale = TRUE;//所有的信息均立即回复
  645. switch (CmdIndex)
  646. {
  647. case 0x01: //心跳数据,为了维持通讯
  648. {
  649. bled_flg_Heart = 1;
  650. ebcd_flg_Can2SendEnbale = TRUE;
  651. break;
  652. }
  653. case 0x02: //获取换电控制器信息
  654. {
  655. bled_flg_getEbcData = 1;
  656. ebcd_flg_Can2SendEnbale = TRUE;
  657. break;
  658. }
  659. case 0x03: //获得车辆信息
  660. {
  661. bled_flg_getVcuData = 1;
  662. ebcd_flg_Can2SendEnbale = TRUE;
  663. break;
  664. }
  665. case 0x04: //获取电池信息
  666. {
  667. bled_flg_getBmsData = 1;
  668. ebcd_flg_Can2SendEnbale = TRUE;
  669. break;
  670. }
  671. case 0x05: //握手
  672. {
  673. bled_flg_handShake = 1;
  674. ebcd_flg_Can2SendEnbale = TRUE;
  675. break;
  676. }
  677. case 0x06: //解锁
  678. {
  679. bled_flg_unlockCmd = Data[1];
  680. bled_flg_lockCmd = 0;
  681. break;
  682. }
  683. case 0x07: //锁紧
  684. {
  685. bled_flg_lockCmd = Data[1];
  686. bled_flg_unlockCmd = 0;
  687. break;
  688. }
  689. case 0x08: //完成换电
  690. {
  691. bled_flg_swapBattDone = 1;
  692. break;
  693. }
  694. case 0x09: //强制解锁,强制上升
  695. {
  696. bled_flg_unlockCmdForce = Data[1];
  697. bled_flg_topAscendCmdForce = Data[2];
  698. break;
  699. }
  700. case 0x0A: //强制锁紧,强制下降
  701. {
  702. bled_flg_lockCmdForce = Data[1];
  703. bled_flg_topDescendCmdForce = Data[2];
  704. break;
  705. }
  706. case 0x0B: //回到行车状态
  707. {
  708. bled_flg_backToDrv = 1;
  709. break;
  710. }
  711. case 0x0C: //顶板举升
  712. {
  713. bled_flg_topAscendCmd = Data[1];
  714. break;
  715. }
  716. case 0x0D: //顶板下降
  717. {
  718. bled_flg_topDescendCmd = Data[1];
  719. break;
  720. }
  721. case 0x0E: //换电开始自动解锁
  722. {
  723. bled_flg_autoUnlock = 1;
  724. break;
  725. }
  726. case 0x0F: //换电完成自动锁紧
  727. {
  728. bled_flg_autoLock = 1;
  729. break;
  730. }
  731. case 0x10: //除尘开始
  732. {
  733. bled_flg_openDustReCmd = 1;
  734. break;
  735. }
  736. case 0x11: //除尘关闭
  737. {
  738. bled_flg_closeDustReCmd = 1;
  739. break;
  740. }
  741. case 0x12: //切换到无线通信状态
  742. {
  743. break;
  744. }
  745. case 0x13: //进入换电状态
  746. {
  747. bled_flg_toSwapMod = 1;
  748. break;
  749. }
  750. case 0x14: //急停指令
  751. {
  752. bled_flg_safeStopCmd = 1;
  753. break;
  754. }//新增需要改数组
  755. default:
  756. break;
  757. }
  758. }