GBT27930.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  1. #ifndef __GBT_27930_2015_H__
  2. #define __GBT_27930_2015_H__
  3. #include "msystem.h"
  4. #include "canJ1939.h"
  5. #include "interface.h"
  6. #define GTB_27930_2015_VER 0x000101
  7. // GBT27930 can addr
  8. #define GBT_27930_2015_CHG 0x56
  9. #define GBT_27930_2015_BMS 0xF4
  10. // GBT27930 GPN
  11. #define GBT_27930_2015_CHM 0x26
  12. #define GBT_27930_2015_BHM 0x27
  13. #define GBT_27930_2015_CRM 0x01
  14. #define GBT_27930_2015_BRM 0x02
  15. #define GBT_27930_2015_BCP 0x06
  16. #define GBT_27930_2015_CTS 0x07
  17. #define GBT_27930_2015_CML 0x08
  18. #define GBT_27930_2015_BRO 0x09
  19. #define GBT_27930_2015_CRO 0x0A
  20. #define GBT_27930_2015_BCL 0x10
  21. #define GBT_27930_2015_BCS 0x11
  22. #define GBT_27930_2015_CCS 0x12
  23. #define GBT_27930_2015_BSM 0x13
  24. #define GBT_27930_2015_BMV 0x15
  25. #define GBT_27930_2015_BMT 0x16
  26. #define GBT_27930_2015_BSP 0x17
  27. #define GBT_27930_2015_BST 0x19
  28. #define GBT_27930_2015_CST 0x1A
  29. #define GBT_27930_2015_BSD 0x1C
  30. #define GBT_27930_2015_CSD 0x1D
  31. #define GBT_27930_2015_BEM 0x1E
  32. #define GBT_27930_2015_CEM 0x1F
  33. #define GBT_27930_2015_DM1 0x20
  34. #define GBT_27930_2015_DM2 0x21
  35. #define GBT_27930_2015_DM3 0x22
  36. #define GBT_27930_2015_DM4 0x23
  37. #define GBT_27930_2015_DM5 0x24
  38. #define GBT_27930_2015_DM6 0x25
  39. // GBT27930 error bits
  40. #define GBT_27930_2015_ERROR -1
  41. #define GBT_27930_2015_NORMAL 0x0
  42. #define GBT_27930_2015_TIMEOUT 0x1
  43. #define GBT_27930_2015_UNKNOWN 0x2
  44. #define GBT_27930_2015_MASK 0x3
  45. // GBT27930 BMS error bits == BEM bits
  46. #define GBT_27930_TIMEOUT_CRM_0x00 (0)
  47. #define GBT_27930_TIMEOUT_CRM_0xAA (2)
  48. #define GBT_27930_TIMEOUT_CTS_CML (8)
  49. #define GBT_27930_TIMEOUT_CRO (10)
  50. #define GBT_27930_TIMEOUT_CCS (16)
  51. #define GBT_27930_TIMEOUT_CST (18)
  52. #define GBT_27930_TIMEOUT_CSD (24)
  53. #define GBT_27930_TIMEOUT_OTHER (26)
  54. // GBT27930 CHG error bits == CEM bits
  55. #define GBT_27930_TIMEOUT_BRM (0)
  56. #define GBT_27930_TIMEOUT_BCP (8)
  57. #define GBT_27930_TIMEOUT_BRO (10)
  58. #define GBT_27930_TIMEOUT_BCS (16)
  59. #define GBT_27930_TIMEOUT_BCL (18)
  60. #define GBT_27930_TIMEOUT_BST (20)
  61. #define GBT_27930_TIMEOUT_BSD (24)
  62. #define GBT_27930_STOP_SECC (0)
  63. #define GBT_27930_STOP_CMD (2)
  64. #define GBT_27930_STOP_FAULT (4)
  65. #define GBT_27930_STOP_EVCC (6)
  66. #define GBT_27930_STOP_BOXOVERTEMP (8)
  67. #define GBT_27930_STOP_CONTACTOR (10)
  68. #define GBT_27930_STOP_LINEOVERTEMP (12)
  69. #define GBT_27930_STOP_TRANSTION (14)
  70. #define GBT_27930_STOP_EMERGENCY (16)
  71. #define GBT_27930_STOP_OTHERS (18)
  72. #define GBT_27930_STOP_VOLTAGE_MISTACH (24)
  73. #define GBT_27930_STOP_CURRENT_MISTACH (26)
  74. #define GBT_27930_CURRENT_OFFSET 4000
  75. typedef struct
  76. {
  77. union
  78. {
  79. uint32_t data;
  80. uint32_t GBT_27930_2015_BRO_recv:1;
  81. uint32_t GBT_27930_2015_BCL_recv:1;
  82. uint32_t GBT_27930_2015_BCS_recv:1;
  83. uint32_t GBT_27930_2015_BSM_recv:1;
  84. uint32_t GBT_27930_2015_BSD_recv:1;
  85. uint32_t GBT_27930_2015_BST_recv:1;
  86. uint32_t GBT_27930_2015_reser:26 ;
  87. };
  88. }_27930_recvFlag_t;
  89. uint16_t Can_get_27930Recvtime(uint8_t pgn_hex);
  90. #define APPLY(X) long int X##_curtime = systime_ms()
  91. /**按照协议结合框架执行协议处理*/
  92. #define TIME_OUT(dev,pgn) if(pgn == GBT_27930_2015_BRO){\
  93. exit_handle(dev,GBT_27930_2015_BRO);\
  94. return GBT_27930_2015_ERROR;}\
  95. if(pgn == GBT_27930_2015_BSD){\
  96. can_GBT27930_send_timeout(dev, pgn);\
  97. secc_set_error(secc, GUN_PRECHARGE_FAULT);\
  98. break;\
  99. }else if(pgn == GBT_27930_2015_BST){\
  100. can_APP_clear(0xff);\
  101. can_GBT27930_send_timeout(dev, pgn);\
  102. secc_set_state(secc, GUN_STOPPING);\
  103. secc_set_error(secc, GUN_PRECHARGE_FAULT);\
  104. break;\
  105. }else if(pgn == GBT_27930_2015_BCL||pgn ==GBT_27930_2015_BCS){\
  106. can_GBT27930_send_timeout(dev, pgn);\
  107. secc_set_state(secc, GUN_COMFALUT);\
  108. secc_set_error(secc, GUN_PRECHARGE_FAULT);\
  109. return GBT_27930_2015_ERROR;\
  110. }
  111. //需求满足,
  112. #define RECV_BMS(dev,pgn,curtime) do{\
  113. if(can_GBT27930_wait_n(dev,pgn)==pgn){ \
  114. _27930_recvFlag.pgn##_recv=1;\
  115. curtime =systime_ms();}\
  116. else{\
  117. if((curtime+Can_get_27930Recvtime(pgn))< systime_ms()){\
  118. printf("%s_timeout\n",#pgn);\
  119. can_GBT27930_send_timeout(dev, pgn);\
  120. secc_set_state(secc, GUN_COMFALUT);\
  121. secc_set_error(secc, GUN_PRECHARGE_FAULT);\
  122. return GBT_27930_2015_ERROR;}\
  123. }\
  124. }while(0)
  125. #define RECV_BMS_1(dev,pgn) do{\
  126. int ret = can_GBT27930_waits(dev,2,pgn,GBT_27930_2015_BST);\
  127. if(ret == pgn){ \
  128. _27930_recvFlag.pgn##_recv=1;\
  129. pgn##_curtime =systime_ms();\
  130. }else if(ret == GBT_27930_2015_BST){\
  131. secc_port_t* secc = (secc_port_t*)dev->secc;\
  132. secc_request_power(secc, POWER_REQUEST_PLACE_FREE, 0, 0);\
  133. _27930_recvFlag.GBT_27930_2015_BST_recv=1;}\
  134. if((pgn##_curtime+Can_get_27930Recvtime(pgn))< systime_ms()){\
  135. printf("%s_timeout\n",#pgn);\
  136. recv_pgn_flag = pgn;\
  137. }\
  138. pgn_run(dev);\
  139. }while(0)
  140. #define RECV_BMS_2(dev,pgn,pgn1) do{\
  141. int ret = can_GBT27930_waits(dev,3,pgn,pgn1,GBT_27930_2015_BST);\
  142. if(ret == pgn){ \
  143. _27930_recvFlag.pgn##_recv=1;\
  144. pgn##_curtime =systime_ms();\
  145. }else if(ret == pgn1){ \
  146. _27930_recvFlag.pgn1##_recv=1;\
  147. pgn1##_curtime =systime_ms();}\
  148. else if(ret == GBT_27930_2015_BST){\
  149. secc_port_t* secc = (secc_port_t*)dev->secc;\
  150. secc_request_power(secc, POWER_REQUEST_PLACE_FREE, 0, 0);\
  151. _27930_recvFlag.GBT_27930_2015_BST_recv=1;\
  152. GBT_27930_2015_BST_curtime =systime_ms();\
  153. }\
  154. if((pgn##_curtime+Can_get_27930Recvtime(pgn))< systime_ms()){\
  155. printf("%s_timeout\n",#pgn);\
  156. recv_pgn_flag = pgn;\
  157. }\
  158. if((pgn1##_curtime+Can_get_27930Recvtime(pgn1))< systime_ms()){\
  159. printf("%s_timeout\n",#pgn1);\
  160. recv_pgn_flag = pgn1;\
  161. }\
  162. pgn_run(dev);\
  163. }while(0)
  164. #define RECV_BMS_3(dev,pgn,pgn1,pgn2) do{\
  165. int ret = can_GBT27930_waits(dev,4,pgn,pgn1,pgn2,GBT_27930_2015_BST);\
  166. if(ret == pgn){ \
  167. _27930_recvFlag.pgn##_recv=1;\
  168. pgn##_curtime =systime_ms();\
  169. }else if(ret == pgn1){ \
  170. _27930_recvFlag.pgn1##_recv=1;\
  171. pgn1##_curtime =systime_ms();}\
  172. else if(ret == pgn2){ \
  173. _27930_recvFlag.pgn2##_recv=1;\
  174. pgn2##_curtime =systime_ms();}\
  175. else if(ret == GBT_27930_2015_BST){\
  176. secc_port_t* secc = (secc_port_t*)dev->secc;\
  177. secc_request_power(secc, POWER_REQUEST_PLACE_FREE, 0, 0);\
  178. _27930_recvFlag.GBT_27930_2015_BST_recv=1;}\
  179. if((pgn##_curtime+Can_get_27930Recvtime(pgn))< systime_ms()){\
  180. printf("%s_timeout\n",#pgn);\
  181. recv_pgn_flag = pgn;\
  182. }\
  183. if((pgn1##_curtime+Can_get_27930Recvtime(pgn1))< systime_ms()){\
  184. printf("%s_timeout\n",#pgn1);\
  185. recv_pgn_flag = pgn1;\
  186. }\
  187. if(pgn2 != GBT_27930_2015_BSM){\
  188. if((pgn2##_curtime+Can_get_27930Recvtime(pgn2))< systime_ms()){\
  189. printf("%s_timeout\n",#pgn2);\
  190. recv_pgn_flag = pgn2;\
  191. }\
  192. pgn_run(dev);\
  193. }\
  194. }while(0)
  195. typedef struct
  196. {
  197. uint32_t GBT_27930_TIMEOUT_BRO_recv :1;
  198. uint32_t time_out:31;
  199. }timaaaaae_t;
  200. typedef struct GBT27930_SPN
  201. {
  202. uint32_t SPN:19;
  203. uint32_t FDI:5;
  204. uint32_t OC:7;
  205. uint32_t CM:1;
  206. }GBT27930_SPN_t;
  207. typedef struct GBT27930_BHM
  208. {
  209. uint16_t bmsMaxVoltage; //BHM最高允许充电总电压
  210. uint16_t resv;
  211. }GBT27930_BHM_t;
  212. typedef struct GBT27930_BRM
  213. {
  214. uint16_t bmsRatedVoltage; //BRM 整车动力蓄电池系统额定总电压/V,0.1 V/位,0 V 偏移量
  215. uint16_t bmsRatedPowerAH; //BRM 整车动力蓄电池系统额定容量/Ah,0.1 Ah/位,0 Ah 偏移量
  216. uint8_t bmsVIN[18]; //BRM 车辆识别码(VIN)
  217. uint8_t resv[2];
  218. }GBT27930_BRM_t;
  219. typedef struct GBT27930_BCP //报文功能: 充电参数配置阶段 BMS 发送给充电机的动力蓄电池充电参数。
  220. {
  221. uint16_t bmsMaxUnitVoltage_charging; //BCP 单体动力蓄电池最高允许充电电压 SPN2816 单体动力蓄电池最高允许充电电压 数据分辨率:0.01 V/位,0 V 偏移量; 数据范围:0~24 V;
  222. uint16_t bmsPermitttedMaxCurrent; //BCP 最高允许充电电流 SPN2817 最高允许充电电流 数据分辨率:0.1 A/位, -400 A 偏移量;
  223. uint16_t bmsNominalTotalkWH; //BCP 动力蓄电池标称总能量 SPN2818 动力蓄电池标称总能量 数据分辨率:0.1 kW· h/位,0 kW· h 偏移量; 数据范围:0~1 000 kW· h;
  224. uint16_t bmsPermitttedMaxVoltage; //BCP 最高允许充电总电压 SPN2819 最高允许充电总电压 数据分辨率:0.1 V/位,0 V 偏移量;
  225. uint8_t bmsPermitttedMaxTemp; //BCP 最高允许温度 SPN2820 最高允许动力蓄电池温度 数据分辨率:1 ℃/位, -50 ℃ 偏移量; 数据范围: -50 ℃ ~+200 ℃ ;
  226. uint8_t resv0;
  227. uint16_t bmsRatio; //BCP 整车动力蓄电池荷电状态 SPN2821 整车动力蓄电池荷电状态(SOC) 数据分辨率:0.1%/位,0%偏移量; 数据范围:0~100%;
  228. uint16_t bmsVoltage; //BCP 整车动力蓄电池当前电池电压 SPN2822 整车动力蓄电池当前电池电压 数据分辨率:0.1 V/位,0 V 偏移量。
  229. }GBT27930_BCP_t;
  230. typedef struct GBT27930_CML //报文功能: 充电机发送给 BMS 充电机最大输出能力, 以便估算剩余充电时间。
  231. {
  232. uint16_t chgMaxOutputVoltage; //最高输出电压(V)
  233. uint16_t chgMinOutputVoltage; //最低输出电压(V)
  234. uint16_t chgMaxOutputCurrent; //最大输出电流(A)
  235. uint16_t chgMinOutputCurrent; //最小输出电流(A)
  236. }GBT27930_CML_t;
  237. typedef struct GBT27930_BRO
  238. {
  239. uint8_t status;
  240. }GBT27930_BRO_t;
  241. typedef struct GBT27930_CRO
  242. {
  243. uint8_t status;
  244. }GBT27930_CRO_t;
  245. typedef struct GBT27930_BCL // 报文功能: 让充电机根据电池充电需求来调整充电电压和充电电流, 确保充电过程正常进行。 如果充电机在1 s 内没有收到该报文, 即为超时错误, 充电机应立即结束充电。
  246. {
  247. uint16_t bmsVoltage_request; //电压需求(V)
  248. uint16_t bmsCurrent_request; //电流需求(A)
  249. uint8_t bmsChargeMode; //充电模式(0x01: 恒压充电;0x02: 恒流充电)
  250. uint8_t resv0;
  251. }GBT27930_BCL_t;
  252. typedef struct GBT27930_BCS //报文功能: 让充电机监视充电过程中电池组充电电压、 充电电流等充电状态。
  253. {
  254. uint16_t chargingVoltage; //充电电压测量值(V)
  255. uint16_t chargingCurrent; //充电电流测量值(A)
  256. uint16_t bmsUnitMaxVoltage; //最高单体动力蓄电池电压及其组号
  257. uint8_t bmsSOC; //当前荷电状态SOC(%)
  258. uint8_t resv0;
  259. uint16_t bmsChargingNeedMinutes; //估算剩余充电时间(min)
  260. }GBT27930_BCS_t;
  261. typedef struct GBT27930_CCS //报文功能: 让 BMS 监视充电机当前输出的充电电流、 电压值等信息。
  262. {
  263. uint16_t chgOutputVoltage; //电压输出值(V)
  264. uint16_t chgOutputCurrent; //电流输出值(A)
  265. uint16_t chgChargedMinutes; //累计充电时间(min)
  266. uint8_t chgOutputting; //充电允许(<00>: = 暂停; <01>: = 允许)
  267. uint8_t resv0;
  268. }GBT27930_CCS_t;
  269. typedef struct GBT27930_BSM //报文功能: 充电阶段 BMS 发送给充电机的动力蓄电池状态信息。
  270. {
  271. uint8_t bmsUnitID_maxVoltage; //最高单体动力蓄电池电压所在编号
  272. uint8_t bmsMaxTemp; //最高动力蓄电池温度
  273. uint8_t bmsUnitID_maxTemp; //最高温度检测点编号
  274. uint8_t bmsMinTemp; //最低动力蓄电池温度
  275. uint32_t bmsUnitID_minTemp:8; //最低动力蓄电池温度检测点编号
  276. uint32_t bmsBatteryOverTemp:2; //单体 动 力 蓄 电 池 电 压 过 高/过 低
  277. uint32_t bmsBatteryOverSOC:2; //整车动力蓄电池荷电状态 SOC 过高/过低
  278. uint32_t bmsBatteryOverCurrent:2; //动力蓄电池充电过电流
  279. uint32_t bmsPowerBatteryOverTemp:2; //动力蓄电池温度过高
  280. uint32_t bmsPowerBatteryOverRsizder:2; //动力蓄电池绝缘状态
  281. uint32_t bmsPowerBatteryConnector:2; //动力蓄电池组输出连接器连接状态
  282. uint32_t bmsPowerPermitted:2; //充电允许
  283. uint32_t resv0:10;
  284. }GBT27930_BSM_t;
  285. typedef struct GBT27930_BMV //报文功能: 各个单体动力蓄电池电压值。
  286. {
  287. uint16_t bmsUnitVoltage[256];
  288. }GBT27930_BMV_t;
  289. typedef struct GBT27930_BMT //报文功能: 动力蓄电池温度。
  290. {
  291. uint8_t bmsUnitTemp[128];
  292. }GBT27930_BMT_t;
  293. typedef struct GBT27930_BSP //报文功能: 动力蓄电池预留报文。
  294. {
  295. uint8_t bmsUnitResv[16];
  296. }GBT27930_BSP_t;
  297. typedef struct GBT27930_BST //报文功能: 让充电机确认 BMS 将发送中止充电报文以令充电机结束充电过程以及结束充电原因。
  298. {
  299. uint32_t bmsReachedSOC:2; //达到所需求的SOC 目标值
  300. uint32_t bmsReachedVoltage:2; //达到总电压的设定值
  301. uint32_t bmsReachedUnitVoltage:2; //达到单体电压的设定值
  302. uint32_t bmsCHGTermination:2; //充电机主动中止
  303. uint32_t bmsInsulationFault:2; //绝缘故障
  304. uint32_t bmsOutputConnectorOverTemp:2; //输出连接器过温故障
  305. uint32_t bmsUnitsOverTemp:2; //BMS 元件、 输出连接器过温
  306. uint32_t bmsChargeConnectorFault:2; //充电连接器故障
  307. uint32_t bmsBatteryPackOverTemp:2; //电池组温度过高故障
  308. uint32_t bmsHighVolRelayFault:2; //高压继电器故障
  309. uint32_t bmsCheckpoint2Fault:2; //检测点2 电压检测故障
  310. uint32_t bmsOtherFault:2; //其他故障
  311. uint32_t bmsCurrentOverReqeust:2; //电流过大
  312. uint32_t bmsVoltageAbnormal:2; //电压异常
  313. uint32_t bmsResv0:2;
  314. uint32_t bmsResv1:2;
  315. }GBT27930_BST_t;
  316. typedef struct GBT27930_CST //报文功能: 让 BMS 确认充电机即将结束充电以及结束充电原因。
  317. {
  318. uint32_t chgReachedDemand:2; //达到充电机设定的条件中止
  319. uint32_t chgManualTermination:2; //人工中止
  320. uint32_t chgFaultTermination:2; //故障中止
  321. uint32_t chgBMSTermination:2; //BMS 主动中止
  322. uint32_t chgBoxOverTemp:2; //充电机过温故障
  323. uint32_t chgConnectorFalut:2; //充电连接器故障
  324. uint32_t chgLineOverTemp:2; //充电机内部过温故障
  325. uint32_t chgPowerTransmitFault:2; //所需电量不能传送
  326. uint32_t chgEmergencyStop:2; //充电机急停故障
  327. uint32_t chgOtherFault:2; //其他故障
  328. uint32_t chgResv0:2;
  329. uint32_t chgResv1:2;
  330. uint32_t chgCurrentMismatch:2; //电流不匹配
  331. uint32_t chgVoltageAbnormal:2; //电压异常
  332. uint32_t chgResv3:2;
  333. uint32_t chgResv4:2;
  334. }GBT27930_CST_t;
  335. typedef struct GBT27930_BSD //报文功能: 让充电机确认 BMS 对于本次充电过程的充电统计数据。
  336. {
  337. uint8_t bmsSOC_EOF; //中止荷电状态SOC(%)
  338. uint8_t resv0;
  339. uint16_t bmsUnitMaxVoltage; //动力蓄电池单体最低电压(V)
  340. uint16_t bmsUnitMinVoltage; //动力蓄电池单体最高电压(V)
  341. uint8_t bmsMaxUnitTemp; //动力蓄电池最低温度(℃ )
  342. uint8_t bmsMinUnitTemp; //动力蓄电池最高温度(℃ )
  343. }GBT27930_BSD_t;
  344. typedef struct GBT27930_CSD //报文功能: 确认充电机本次充电过程的充电统计数据。
  345. {
  346. uint16_t chgCumulativeMintues; //累计充电时间(min)
  347. uint16_t chgCumulativeKWH; //输出能量(kW· h)
  348. uint32_t chgCode; //充电机编号
  349. }GBT27930_CSD_t;
  350. typedef struct GBT27930_BEM
  351. {
  352. uint32_t crm_0x00_timeout:2;
  353. uint32_t crm_0xAA_timeout:2;
  354. uint32_t resv0:4;
  355. uint32_t cts_or_cml_timeout:2;
  356. uint32_t cro_timeout:2;
  357. uint32_t resv1:4;
  358. uint32_t ccs_timeout:2;
  359. uint32_t cst_timeout:2;
  360. uint32_t resv2:4;
  361. uint32_t csd_timeout:2;
  362. uint32_t others:6;
  363. }GBT27930_BEM_t;
  364. typedef struct GBT27930_CEM
  365. {
  366. uint32_t brm_timeout:2;
  367. uint32_t resv0:6;
  368. uint32_t bcp_timeout:2;
  369. uint32_t bro_timeout:2;
  370. uint32_t resv1:4;
  371. uint32_t bcs_timeout:2;
  372. uint32_t bcl_timeout:2;
  373. uint32_t bst_timeout:2;
  374. uint32_t resv2:4;
  375. uint32_t bsd_timeout:2;
  376. uint32_t others:6;
  377. }GBT27930_CEM_t;
  378. #define BHM_TIMEOUT 10000
  379. #define BRM_TIMEOUT 5000
  380. #define BCP_TIMEOUT 5000
  381. #define BRO_0x00_TIMEOUT 5000
  382. #define BRO_0xAA_TIMEOUT 60000
  383. #define BSM_TIMEOUT 5000
  384. #define BCL_TIMEOUT 1000
  385. #define BCS_TIMEOUT 5000
  386. typedef struct GBT27930
  387. {
  388. const char *can_name;
  389. can_j1939_t canJ1939;
  390. uint8_t DA;
  391. uint8_t SA;
  392. short frame_interval_ms;// normal frame_interval_ms = 250;
  393. int fd[2];
  394. pthread_mutex_t mutex_can;
  395. pthread_cond_t cond_can;
  396. //-------------chm
  397. GBT27930_BHM_t bhm;
  398. //-------------crm
  399. GBT27930_BRM_t brm;
  400. GBT27930_BCP_t bcp;
  401. GBT27930_BRO_t bro;
  402. GBT27930_BRO_t bro_last;
  403. GBT27930_CRO_t cro;
  404. GBT27930_CML_t cml;
  405. GBT27930_BCL_t bcl;
  406. GBT27930_BCL_t bcl_last;
  407. GBT27930_BCS_t bcs;
  408. GBT27930_CCS_t ccs;
  409. GBT27930_BSM_t bsm;
  410. GBT27930_BSM_t bsm_last;
  411. GBT27930_BMV_t bmv;
  412. GBT27930_BMT_t bmt;
  413. GBT27930_BSP_t bsp;
  414. GBT27930_BST_t bst;
  415. GBT27930_CST_t cst;
  416. GBT27930_BSD_t bsd;
  417. GBT27930_CSD_t csd;
  418. //-------------
  419. GBT27930_BEM_t bem;
  420. GBT27930_CEM_t cem;
  421. int64_t last_bro_ms;
  422. int64_t last_bcl_ms;
  423. int64_t last_bsm_ms;
  424. int quit;
  425. int stop;
  426. int lastPF;
  427. int quitRx;
  428. int quitTx;
  429. struct can_frame frame;
  430. uint8_t tickcnt;
  431. uint8_t last_tickcnt;
  432. struct can_frame frameCTS;
  433. uint8_t CTS_tickcnt;
  434. uint8_t CTS_last_tickcnt;
  435. struct can_frame frameCCS;
  436. uint8_t CCS_tickcnt;
  437. uint8_t CCS_last_tickcnt;
  438. mthread_t threadRx;
  439. mthread_t threadTx;
  440. pthread_mutex_t mutex;
  441. pthread_cond_t cond;
  442. mthread_t thread;
  443. //--------------------------
  444. ccu_port_t *ccu;
  445. pcu_port_t *pcu;
  446. secc_port_t *secc;
  447. }GBT27930_t;
  448. void can_GBT27930_close_pipe(GBT27930_t* dev);
  449. void can_GBT27930_open_pipe(GBT27930_t* dev);
  450. void* can_GBT27930_loop(void* argv);
  451. int can_GBT27930_read(GBT27930_t* dev, int timeout);
  452. //int can_GBT27930_wait(GBT27930_t* dev, int waitPF, int timeout);
  453. int can_GBT27930_wait(GBT27930_t* dev, int waitPF, int timeout,...);
  454. int can_GBT27930_init(GBT27930_t* dev, const char *can_name);
  455. void can_GBT27930_exit(GBT27930_t* dev);
  456. int can_GBT27930_send_CEM(GBT27930_t* dev, GBT27930_CEM_t *req);
  457. int can_GBT27930_send_CHM(GBT27930_t* dev);
  458. int can_GBT27930_wait_BHM(GBT27930_t* dev, int timeout);
  459. int can_GBT27930_send_CRM(GBT27930_t* dev, uint8_t status, uint32_t CHG_No, uint8_t *ZoneCode);
  460. int can_GTB27930_wait_BRM(GBT27930_t* dev, int timeout);
  461. int can_GBT27930_wait_BCP(GBT27930_t* dev, int timeout);
  462. int can_GBT27930_send_CTS(GBT27930_t* dev, struct tm *ptm);
  463. int can_GBT27930_send_CML(GBT27930_t* dev, GBT27930_CML_t* info);
  464. int can_GBT27930_wait_BRO(GBT27930_t* dev, int timeout);
  465. int can_GBT27930_send_CRO(GBT27930_t* dev, uint8_t status);
  466. int can_GBT27930_wait_BCL(GBT27930_t* dev, int timeout);
  467. int can_GBT27930_wait_BCS(GBT27930_t* dev, int timeout);
  468. int can_GBT27930_send_CCS(GBT27930_t* dev, GBT27930_CCS_t* req);
  469. int can_GBT27930_wait_BSM(GBT27930_t* dev, int timeout);
  470. int can_GBT27930_wait_BMV(GBT27930_t* dev, int timeout);
  471. int can_GBT27930_wait_BMT(GBT27930_t* dev, int timeout);
  472. int can_GBT27930_wait_BSP(GBT27930_t* dev, int timeout);
  473. int can_GBT27930_wait_BST(GBT27930_t* dev, int timeout);
  474. int can_GBT27930_send_CST(GBT27930_t* dev, GBT27930_CST_t* req);
  475. int can_GBT27930_wait_BSD(GBT27930_t* dev, int timeout);
  476. int can_GBT27930_send_CSD(GBT27930_t* dev, GBT27930_CSD_t* req);
  477. void can_GBT27930_show_BST(GBT27930_t* can);
  478. void can_GBT27930_show_BEM(GBT27930_t* can);
  479. void can_APP_clear(int pgn);
  480. int can_GBT27930_waits(GBT27930_t* dev,uint8_t num, ...);
  481. void exit_handle(GBT27930_t* dev,int pgn);
  482. #endif//__GBT_27930_2015_H__