CANEncode.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. #include "CANEncode.h"
  2. #include "Signal.h"
  3. #include "mainTask.h"
  4. void CANEncodeFunction(UINT32 ID,UINT8* rawData);
  5. void CANEncodeFunction(UINT32 ID,UINT8* rawData)
  6. {
  7. memset(rawData, 0xFF, 8);
  8. switch (ID)
  9. {
  10. case 0x6A0:
  11. *(UINT16*)(rawData +0) = ((battCellU[0]>>8) & 0xFF) | (((battCellU[0]&0xFF)<<8)&0xFF00);
  12. *(UINT16*)(rawData +2) = ((battCellU[1]>>8) & 0xFF) | (((battCellU[1]&0xFF)<<8)&0xFF00);
  13. *(UINT16*)(rawData +4) = ((battCellU[2]>>8) & 0xFF) | (((battCellU[2]&0xFF)<<8)&0xFF00);
  14. *(UINT16*)(rawData +6) = ((battCellU[3]>>8) & 0xFF) | (((battCellU[3]&0xFF)<<8)&0xFF00);
  15. break;
  16. case 0x6A1:
  17. *(UINT16*)(rawData +0) = ((battCellU[4]>>8) & 0xFF) | (((battCellU[4]&0xFF)<<8)&0xFF00);
  18. *(UINT16*)(rawData +2) = ((battCellU[5]>>8) & 0xFF) | (((battCellU[5]&0xFF)<<8)&0xFF00);
  19. *(UINT16*)(rawData +4) = ((battCellU[6]>>8) & 0xFF) | (((battCellU[6]&0xFF)<<8)&0xFF00);
  20. *(UINT16*)(rawData +6) = ((battCellU[7]>>8) & 0xFF) | (((battCellU[7]&0xFF)<<8)&0xFF00);
  21. break;
  22. case 0x6A2:
  23. *(UINT16*)(rawData +0) = ((battCellU[8]>>8) & 0xFF) | (((battCellU[8]&0xFF)<<8)&0xFF00);
  24. *(UINT16*)(rawData +2) = ((battCellU[9]>>8) & 0xFF) | (((battCellU[9]&0xFF)<<8)&0xFF00);
  25. *(UINT16*)(rawData +4) = ((battCellU[10]>>8) & 0xFF) | (((battCellU[10]&0xFF)<<8)&0xFF00);
  26. *(UINT16*)(rawData +6) = ((battCellU[11]>>8) & 0xFF) | (((battCellU[11]&0xFF)<<8)&0xFF00);
  27. break;
  28. case 0x6A3:
  29. *(UINT16*)(rawData +0) = ((battCellU[12]>>8) & 0xFF) | (((battCellU[12]&0xFF)<<8)&0xFF00);
  30. *(UINT16*)(rawData +2) = ((battCellU[13]>>8) & 0xFF) | (((battCellU[13]&0xFF)<<8)&0xFF00);
  31. *(UINT16*)(rawData +4) = ((battCellU[14]>>8) & 0xFF) | (((battCellU[14]&0xFF)<<8)&0xFF00);
  32. *(UINT16*)(rawData +6) = ((battCellU[15]>>8) & 0xFF) | (((battCellU[15]&0xFF)<<8)&0xFF00);
  33. break;
  34. case 0x6A4:
  35. *(UINT16*)(rawData +0) = ((battCellU[16]>>8) & 0xFF) | (((battCellU[16]&0xFF)<<8)&0xFF00);
  36. *(UINT16*)(rawData +2) = ((battCellU[17]>>8) & 0xFF) | (((battCellU[17]&0xFF)<<8)&0xFF00);
  37. *(UINT16*)(rawData +4) = ((battCellU[18]>>8) & 0xFF) | (((battCellU[18]&0xFF)<<8)&0xFF00);
  38. *(UINT16*)(rawData +6) = ((battCellU[19]>>8) & 0xFF) | (((battCellU[19]&0xFF)<<8)&0xFF00);
  39. break;
  40. case 0x6A5:
  41. *(UINT16*)(rawData +0) = ((battCellU[20]>>8) & 0xFF) | (((battCellU[20]&0xFF)<<8)&0xFF00);
  42. *(UINT16*)(rawData +2) = ((battCellU[21]>>8) & 0xFF) | (((battCellU[21]&0xFF)<<8)&0xFF00);
  43. *(UINT16*)(rawData +4) = ((battCellU[22]>>8) & 0xFF) | (((battCellU[22]&0xFF)<<8)&0xFF00);
  44. *(UINT16*)(rawData +6) = ((battCellU[23]>>8) & 0xFF) | (((battCellU[23]&0xFF)<<8)&0xFF00);
  45. break;
  46. case 0x6A6:
  47. *(UINT16*)(rawData +0) = ((battCellU[24]>>8) & 0xFF) | (((battCellU[24]&0xFF)<<8)&0xFF00);
  48. *(UINT16*)(rawData +2) = ((battCellU[25]>>8) & 0xFF) | (((battCellU[25]&0xFF)<<8)&0xFF00);
  49. *(UINT16*)(rawData +4) = ((battCellU[26]>>8) & 0xFF) | (((battCellU[26]&0xFF)<<8)&0xFF00);
  50. *(UINT16*)(rawData +6) = ((battCellU[27]>>8) & 0xFF) | (((battCellU[27]&0xFF)<<8)&0xFF00);
  51. break;
  52. case 0x6B0:
  53. *(UINT8*)(rawData +0) =battCellTemp[0]&0xFF;
  54. *(UINT8*)(rawData +1) =battCellTemp[1]&0xFF;
  55. *(UINT8*)(rawData +2) =battCellTemp[2]&0xFF;
  56. *(UINT8*)(rawData +3) =battCellTemp[3]&0xFF;
  57. *(UINT8*)(rawData +4) =battCellTemp[4]&0xFF;
  58. *(UINT8*)(rawData +5) =battCellTemp[5]&0xFF;
  59. *(UINT8*)(rawData +6) =battCellTemp[6]&0xFF;
  60. *(UINT8*)(rawData +7) =battCellTemp[7]&0xFF;
  61. break;
  62. case 0x6BA:
  63. *(UINT8*)(rawData +0) =MOSTemp&0xFF;
  64. *(UINT8*)(rawData +1) =packTemp&0xFF;
  65. *(UINT8*)(rawData +2) =fastChargeTemp&0xFF;
  66. *(UINT8*)(rawData +3) =normalChargeTemp&0xFF;
  67. *(UINT8*)(rawData +4) =heatTemp1&0xFF;
  68. *(UINT8*)(rawData +5) =heatTemp2&0xFF;
  69. *(UINT8*)(rawData +6) =nbReservedTemp1&0xFF;
  70. *(UINT8*)(rawData +7) =nbReservedTemp2&0xFF;
  71. break;
  72. case 0x6C0:
  73. *(UINT16*)(rawData +0) = ((minCellVol>>8) & 0xFF) | (((minCellVol&0xFF)<<8)&0xFF00);
  74. *(UINT16*)(rawData +2) = ((maxCellVol>>8) & 0xFF) | (((maxCellVol&0xFF)<<8)&0xFF00);
  75. *(UINT16*)(rawData +4) = ((battPackVol>>8) & 0xFF) | (((battPackVol&0xFF)<<8)&0xFF00);
  76. *(UINT8*)(rawData +6) =maxCellTemp&0xFF;
  77. *(UINT8*)(rawData +7) =minCellTemp&0xFF;
  78. break;
  79. case 0x6C1:
  80. *(UINT8*)(rawData +0) =battSOC&0xFF;
  81. *(UINT8*)(rawData +1) =battSOH&0xFF;
  82. *(UINT16*)(rawData +2) = ((battI>>8) & 0xFF) | (((battI&0xFF)<<8)&0xFF00);
  83. *(UINT8*)(rawData +4) =battWorkState&0xFF;
  84. *(UINT32*)(rawData +5) = ((battWarningState>>16) & 0xFF)|((battWarningState)&0xFF00)|(((battWarningState&0xFF)<<16)&0xFF0000);
  85. break;
  86. case 0x6C2:
  87. *(UINT32*)(rawData +0) = ((nbSwVersion>>24) & 0xFF)|((nbSwVersion>>8)&0xFF00)|((nbSwVersion<<8)&0xFF0000)|(((nbSwVersion&0xFF)<<24)&0xFF000000);
  88. *(UINT16*)(rawData +4) = ((nbHwVersion>>8) & 0xFF) | (((nbHwVersion&0xFF)<<8)&0xFF00);
  89. *(UINT8*)(rawData +6) =bmsSwVersion&0xFF;
  90. *(UINT8*)(rawData +7) =bmsHwVersion&0xFF;
  91. break;
  92. case 0x6C3:
  93. *(UINT32*)(rawData +0) = ((battBalanceoInfo>>24) & 0xFF)|((battBalanceoInfo>>8)&0xFF00)|((battBalanceoInfo<<8)&0xFF0000)|(((battBalanceoInfo&0xFF)<<24)&0xFF000000);
  94. *(UINT8*)(rawData +4) =battMOSSwitchState&0xFF;
  95. *(UINT8*)(rawData +5) =battHeatEnableState&0xFF;
  96. break;
  97. case 0x6C4:
  98. *(UINT8*)(rawData +0) =reservedSignal1&0xFF;
  99. *(UINT8*)(rawData +1) =reservedSignal2&0xFF;
  100. *(UINT8*)(rawData +2) =reservedSignal3&0xFF;
  101. *(UINT8*)(rawData +3) =reservedSignal4&0xFF;
  102. *(UINT8*)(rawData +4) =reservedSignal5&0xFF;
  103. *(UINT8*)(rawData +5) =reservedSignal6&0xFF;
  104. *(UINT8*)(rawData +6) =reservedSignal7&0xFF;
  105. *(UINT8*)(rawData +7) =reservedSignal8&0xFF;
  106. break;
  107. case 0x7C0:
  108. *(UINT16*)(rawData +0) = ((battCellU[0]>>8) & 0xFF) | (((battCellU[0]&0xFF)<<8)&0xFF00);
  109. *(UINT16*)(rawData +2) = ((battCellU[1]>>8) & 0xFF) | (((battCellU[1]&0xFF)<<8)&0xFF00);
  110. *(UINT16*)(rawData +4) = ((battCellU[2]>>8) & 0xFF) | (((battCellU[2]&0xFF)<<8)&0xFF00);
  111. *(UINT16*)(rawData +6) = ((battCellU[3]>>8) & 0xFF) | (((battCellU[3]&0xFF)<<8)&0xFF00);
  112. break;
  113. case 0x7C1:
  114. *(UINT16*)(rawData +0) = ((battCellU[4]>>8) & 0xFF) | (((battCellU[4]&0xFF)<<8)&0xFF00);
  115. *(UINT16*)(rawData +2) = ((battCellU[5]>>8) & 0xFF) | (((battCellU[5]&0xFF)<<8)&0xFF00);
  116. *(UINT16*)(rawData +4) = ((battCellU[6]>>8) & 0xFF) | (((battCellU[6]&0xFF)<<8)&0xFF00);
  117. *(UINT16*)(rawData +6) = ((battCellU[7]>>8) & 0xFF) | (((battCellU[7]&0xFF)<<8)&0xFF00);
  118. break;
  119. case 0x7C2:
  120. *(UINT16*)(rawData +0) = ((battCellU[8]>>8) & 0xFF) | (((battCellU[8]&0xFF)<<8)&0xFF00);
  121. *(UINT16*)(rawData +2) = ((battCellU[9]>>8) & 0xFF) | (((battCellU[9]&0xFF)<<8)&0xFF00);
  122. *(UINT16*)(rawData +4) = ((battCellU[10]>>8) & 0xFF) | (((battCellU[10]&0xFF)<<8)&0xFF00);
  123. *(UINT16*)(rawData +6) = ((battCellU[11]>>8) & 0xFF) | (((battCellU[11]&0xFF)<<8)&0xFF00);
  124. break;
  125. case 0x7C3:
  126. *(UINT16*)(rawData +0) = ((battCellU[12]>>8) & 0xFF) | (((battCellU[12]&0xFF)<<8)&0xFF00);
  127. *(UINT16*)(rawData +2) = ((battCellU[13]>>8) & 0xFF) | (((battCellU[13]&0xFF)<<8)&0xFF00);
  128. *(UINT16*)(rawData +4) = ((battCellU[14]>>8) & 0xFF) | (((battCellU[14]&0xFF)<<8)&0xFF00);
  129. *(UINT16*)(rawData +6) = ((battCellU[15]>>8) & 0xFF) | (((battCellU[15]&0xFF)<<8)&0xFF00);
  130. break;
  131. case 0x7C4:
  132. *(UINT16*)(rawData +0) = ((battCellU[16]>>8) & 0xFF) | (((battCellU[16]&0xFF)<<8)&0xFF00);
  133. *(UINT16*)(rawData +2) = ((battCellU[17]>>8) & 0xFF) | (((battCellU[17]&0xFF)<<8)&0xFF00);
  134. *(UINT16*)(rawData +4) = ((battCellU[18]>>8) & 0xFF) | (((battCellU[18]&0xFF)<<8)&0xFF00);
  135. *(UINT16*)(rawData +6) = ((battCellU[19]>>8) & 0xFF) | (((battCellU[19]&0xFF)<<8)&0xFF00);
  136. break;
  137. case 0x7C5:
  138. *(UINT16*)(rawData +0) = ((battCellU[20]>>8) & 0xFF) | (((battCellU[20]&0xFF)<<8)&0xFF00);
  139. *(UINT16*)(rawData +2) = ((battCellU[21]>>8) & 0xFF) | (((battCellU[21]&0xFF)<<8)&0xFF00);
  140. *(UINT16*)(rawData +4) = ((battCellU[22]>>8) & 0xFF) | (((battCellU[22]&0xFF)<<8)&0xFF00);
  141. *(UINT16*)(rawData +6) = ((battCellU[23]>>8) & 0xFF) | (((battCellU[23]&0xFF)<<8)&0xFF00);
  142. break;
  143. case 0x7C6:
  144. *(UINT16*)(rawData +0) = ((battCellU[24]>>8) & 0xFF) | (((battCellU[24]&0xFF)<<8)&0xFF00);
  145. *(UINT16*)(rawData +2) = ((battCellU[25]>>8) & 0xFF) | (((battCellU[25]&0xFF)<<8)&0xFF00);
  146. *(UINT16*)(rawData +4) = ((battCellU[26]>>8) & 0xFF) | (((battCellU[26]&0xFF)<<8)&0xFF00);
  147. *(UINT16*)(rawData +6) = ((battCellU[27]>>8) & 0xFF) | (((battCellU[27]&0xFF)<<8)&0xFF00);
  148. break;
  149. case 0x7C7:
  150. *(UINT8*)(rawData +0) =battCellTemp[0]&0xFF;
  151. *(UINT8*)(rawData +1) =battCellTemp[1]&0xFF;
  152. *(UINT8*)(rawData +2) =battCellTemp[2]&0xFF;
  153. *(UINT8*)(rawData +3) =battCellTemp[3]&0xFF;
  154. *(UINT8*)(rawData +4) =battCellTemp[4]&0xFF;
  155. *(UINT8*)(rawData +5) =battCellTemp[5]&0xFF;
  156. *(UINT8*)(rawData +6) =battCellTemp[6]&0xFF;
  157. *(UINT8*)(rawData +7) =battCellTemp[7]&0xFF;
  158. break;
  159. case 0x7C8:
  160. *(UINT8*)(rawData +0) =MOSTemp&0xFF;
  161. *(UINT8*)(rawData +1) =packTemp&0xFF;
  162. *(UINT8*)(rawData +2) =fastChargeTemp&0xFF;
  163. *(UINT8*)(rawData +3) =normalChargeTemp&0xFF;
  164. *(UINT8*)(rawData +4) =heatTemp1&0xFF;
  165. *(UINT8*)(rawData +5) =heatTemp2&0xFF;
  166. *(UINT8*)(rawData +6) =nbReservedTemp1&0xFF;
  167. *(UINT8*)(rawData +7) =nbReservedTemp2&0xFF;
  168. break;
  169. case 0x7C9:
  170. *(UINT16*)(rawData +0) = ((minCellVol>>8) & 0xFF) | (((minCellVol&0xFF)<<8)&0xFF00);
  171. *(UINT16*)(rawData +2) = ((maxCellVol>>8) & 0xFF) | (((maxCellVol&0xFF)<<8)&0xFF00);
  172. *(UINT16*)(rawData +4) = ((battPackVol>>8) & 0xFF) | (((battPackVol&0xFF)<<8)&0xFF00);
  173. *(UINT8*)(rawData +6) =maxCellTemp&0xFF;
  174. *(UINT8*)(rawData +7) =minCellTemp&0xFF;
  175. break;
  176. case 0x7CA:
  177. *(UINT8*)(rawData +0) =battSOC&0xFF;
  178. *(UINT8*)(rawData +1) =battSOH&0xFF;
  179. *(UINT16*)(rawData +2) = ((battI>>8) & 0xFF) | (((battI&0xFF)<<8)&0xFF00);
  180. *(UINT8*)(rawData +4) =battWorkState&0xFF;
  181. *(UINT32*)(rawData +5) = ((battWarningState>>16) & 0xFF)|((battWarningState)&0xFF00)|(((battWarningState&0xFF)<<16)&0xFF0000);
  182. break;
  183. case 0x7CB:
  184. *(UINT32*)(rawData +0) = ((nbSwVersion>>24) & 0xFF)|((nbSwVersion>>8)&0xFF00)|((nbSwVersion<<8)&0xFF0000)|(((nbSwVersion&0xFF)<<24)&0xFF000000);
  185. *(UINT16*)(rawData +4) = ((nbHwVersion>>8) & 0xFF) | (((nbHwVersion&0xFF)<<8)&0xFF00);
  186. *(UINT8*)(rawData +6) =bmsSwVersion&0xFF;
  187. *(UINT8*)(rawData +7) =bmsHwVersion&0xFF;
  188. break;
  189. case 0x7CC:
  190. *(UINT32*)(rawData +0) = ((battBalanceoInfo>>24) & 0xFF)|((battBalanceoInfo>>8)&0xFF00)|((battBalanceoInfo<<8)&0xFF0000)|(((battBalanceoInfo&0xFF)<<24)&0xFF000000);
  191. *(UINT8*)(rawData +4) =battMOSSwitchState&0xFF;
  192. *(UINT8*)(rawData +5) =battHeatEnableState&0xFF;
  193. break;
  194. case 0x7CD:
  195. *(UINT8*)(rawData +0) =reservedSignal1&0xFF;
  196. *(UINT8*)(rawData +1) =reservedSignal2&0xFF;
  197. *(UINT8*)(rawData +2) =reservedSignal3&0xFF;
  198. *(UINT8*)(rawData +3) =reservedSignal4&0xFF;
  199. *(UINT8*)(rawData +4) =reservedSignal5&0xFF;
  200. *(UINT8*)(rawData +5) =reservedSignal6&0xFF;
  201. *(UINT8*)(rawData +6) =reservedSignal7&0xFF;
  202. *(UINT8*)(rawData +7) =reservedSignal8&0xFF;
  203. break;
  204. case 0x7B0:
  205. *(UINT8*)(rawData +0) = (AppNVMData.battSN[0])&0xFF;
  206. *(UINT8*)(rawData +1) = (AppNVMData.battSN[1])&0xFF;
  207. *(UINT8*)(rawData +2) = (AppNVMData.battSN[2])&0xFF;
  208. *(UINT8*)(rawData +3) = (AppNVMData.battSN[3])&0xFF;
  209. *(UINT8*)(rawData +4) = (AppNVMData.battSN[4])&0xFF;
  210. *(UINT8*)(rawData +5) = (AppNVMData.battSN[5])&0xFF;
  211. *(UINT8*)(rawData +6) = (AppNVMData.battSN[6])&0xFF;
  212. *(UINT8*)(rawData +7) = (AppNVMData.battSN[7])&0xFF;
  213. break;
  214. case 0x7B1:
  215. *(UINT8*)(rawData +0) = (AppNVMData.battSN[8])&0xFF;
  216. *(UINT8*)(rawData +1) = (AppNVMData.battSN[9])&0xFF;
  217. *(UINT8*)(rawData +2) = (AppNVMData.battSN[10])&0xFF;
  218. *(UINT8*)(rawData +3) = (AppNVMData.battSN[11])&0xFF;
  219. *(UINT8*)(rawData +4) = (AppNVMData.battSN[12])&0xFF;
  220. *(UINT8*)(rawData +5) = (AppNVMData.battSN[13])&0xFF;
  221. *(UINT8*)(rawData +6) = (AppNVMData.battSN[14])&0xFF;
  222. *(UINT8*)(rawData +7) = (AppNVMData.battSN[15])&0xFF;
  223. break;
  224. case 0x7B2:
  225. *(UINT8*)(rawData +0) = (AppNVMData.battSN[16])&0xFF;
  226. break;
  227. default:
  228. break;
  229. }
  230. }