BleCanProtocolFunc.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763
  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. if(ebcd_flg_ebcEolDone!=Data[0])
  628. {
  629. ebcd_flg_ebcEolDone = Data[0];//下线检测完成(取消定时解锁)暂时放这里
  630. EEPROMDrv_bSaveInstantUB = 1;
  631. }
  632. break;
  633. }
  634. default:
  635. break;
  636. }
  637. }
  638. /**
  639. * @brief : Ebc通过can2接收到的数据解码,Ble->Ebc
  640. * @param {*}
  641. * @return {*}
  642. */
  643. void Can2DataDecode(uint8 Data[])
  644. {
  645. uint8 CmdIndex = Data[0];
  646. ebcd_st_toBleAns = CmdIndex;
  647. ebcd_flg_Can2SendEnbale = TRUE;//所有的信息均立即回复
  648. switch (CmdIndex)
  649. {
  650. case 0x01: //心跳数据,为了维持通讯
  651. {
  652. bled_flg_Heart = 1;
  653. ebcd_flg_Can2SendEnbale = TRUE;
  654. break;
  655. }
  656. case 0x02: //获取换电控制器信息
  657. {
  658. bled_flg_getEbcData = 1;
  659. ebcd_flg_Can2SendEnbale = TRUE;
  660. break;
  661. }
  662. case 0x03: //获得车辆信息
  663. {
  664. bled_flg_getVcuData = 1;
  665. ebcd_flg_Can2SendEnbale = TRUE;
  666. break;
  667. }
  668. case 0x04: //获取电池信息
  669. {
  670. bled_flg_getBmsData = 1;
  671. ebcd_flg_Can2SendEnbale = TRUE;
  672. break;
  673. }
  674. case 0x05: //握手
  675. {
  676. bled_flg_handShake = 1;
  677. ebcd_flg_Can2SendEnbale = TRUE;
  678. break;
  679. }
  680. case 0x06: //解锁
  681. {
  682. bled_flg_unlockCmd = Data[1];
  683. bled_flg_lockCmd = 0;
  684. break;
  685. }
  686. case 0x07: //锁紧
  687. {
  688. bled_flg_lockCmd = Data[1];
  689. bled_flg_unlockCmd = 0;
  690. break;
  691. }
  692. case 0x08: //完成换电
  693. {
  694. bled_flg_swapBattDone = 1;
  695. break;
  696. }
  697. case 0x09: //强制解锁,强制上升
  698. {
  699. bled_flg_unlockCmdForce = Data[1];
  700. bled_flg_topAscendCmdForce = Data[2];
  701. break;
  702. }
  703. case 0x0A: //强制锁紧,强制下降
  704. {
  705. bled_flg_lockCmdForce = Data[1];
  706. bled_flg_topDescendCmdForce = Data[2];
  707. break;
  708. }
  709. case 0x0B: //回到行车状态
  710. {
  711. bled_flg_backToDrv = 1;
  712. break;
  713. }
  714. case 0x0C: //顶板举升
  715. {
  716. bled_flg_topAscendCmd = Data[1];
  717. break;
  718. }
  719. case 0x0D: //顶板下降
  720. {
  721. bled_flg_topDescendCmd = Data[1];
  722. break;
  723. }
  724. case 0x0E: //换电开始自动解锁
  725. {
  726. bled_flg_autoUnlock = 1;
  727. break;
  728. }
  729. case 0x0F: //换电完成自动锁紧
  730. {
  731. bled_flg_autoLock = 1;
  732. break;
  733. }
  734. case 0x10: //除尘开始
  735. {
  736. bled_flg_openDustReCmd = 1;
  737. break;
  738. }
  739. case 0x11: //除尘关闭
  740. {
  741. bled_flg_closeDustReCmd = 1;
  742. break;
  743. }
  744. case 0x12: //切换到无线通信状态
  745. {
  746. break;
  747. }
  748. case 0x13: //进入换电状态
  749. {
  750. bled_flg_toSwapMod = 1;
  751. break;
  752. }
  753. case 0x14: //急停指令
  754. {
  755. bled_flg_safeStopCmd = 1;
  756. break;
  757. }//新增需要改数组
  758. default:
  759. break;
  760. }
  761. }