You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

381 lines
16 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
12 months ago
1 year ago
1 year ago
12 months ago
1 year ago
1 year ago
12 months ago
1 year ago
1 year ago
1 year ago
12 months ago
1 year ago
1 year ago
12 months ago
1 year ago
12 months ago
12 months ago
1 year ago
12 months ago
1 year ago
1 year ago
1 year ago
12 months ago
12 months ago
1 year ago
12 months ago
12 months ago
1 year ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
1 year ago
12 months ago
1 year ago
12 months ago
1 year ago
12 months ago
12 months ago
12 months ago
12 months ago
1 year ago
12 months ago
1 year ago
1 year ago
  1. #pragma once
  2. #include <stdint.h>
  3. #include "zscanprotocol/zscanprotocol.hpp"
  4. namespace iflytop {
  5. namespace transmit_disfection_protocol {
  6. using namespace zscanprotocol;
  7. #define PROTOCOL_VERSION 6
  8. #define HEART_OVERTIME (30 * 1000)
  9. typedef enum {
  10. klarge_space_disinfection_machine = 1, // 大空间消毒机
  11. ksmall_space_disinfection_machine = 2, // 小空间消毒机
  12. kpipe_disinfection_machine = 3, // 管道式消毒机
  13. kdraw_bar_disinfection_box = 4, // 手持拉杆箱消毒机
  14. kh2o2_ext_sensor = 5, // 外部H2O2传感器
  15. } ProjID_t;
  16. typedef enum {
  17. kLargeSpaceDMLiquidCtrlBoard = 1, // 大空间消毒机液路板
  18. kLargeSpaceDMPowerCtrlBoard = 2, // 大空间消毒机电源板
  19. kSmallSpaceDMLiquidCtrlBoard = 3, // 小空间消毒机液路板
  20. kSmallSpaceDMPowerCtrlBoard = 4, // 小空间消毒机电源板
  21. kPipeDMLiquidCtrlBoard = 5, // 管道式消毒机液路板
  22. kPipeDMPowerCtrlBoard = 6, // 管道式消毒机电源板
  23. kDrawBarDMLiquidCtrlBoard = 7, // 手持拉杆箱消毒机液路板
  24. kDrawBarDMPowerCtrlBoard = 8, // 手持拉杆箱消毒机电源板
  25. kDrawBarDMExtChSelector = 9, // 手持拉杆箱消毒机外部球阀控制板
  26. kH2O2SensorBoard = 10, // H2O2传感器板
  27. } BoardTypeId_t;
  28. typedef enum {
  29. kFixBoardId_MainBoard = 1, // 主机
  30. kFixBoardId_LiquidCtrl = 2, // 液路板
  31. kFixBoardId_PowerControl = 3, // 电源板
  32. kFixBoardId_ExtChSelector = 4, // 外部球阀控制板
  33. kFixBoardId_H2O2SensorStart = 100, // H2O2传感器板
  34. } BoardId_t;
  35. static inline const char* BoardTypeId2Str(uint32_t id) {
  36. switch (id) {
  37. case kLargeSpaceDMLiquidCtrlBoard:
  38. return "LargeSpaceDMLiquidCtrlBoard";
  39. case kLargeSpaceDMPowerCtrlBoard:
  40. return "LargeSpaceDMPowerCtrlBoard";
  41. case kSmallSpaceDMLiquidCtrlBoard:
  42. return "SmallSpaceDMLiquidCtrlBoard";
  43. case kSmallSpaceDMPowerCtrlBoard:
  44. return "SmallSpaceDMPowerCtrlBoard";
  45. case kPipeDMLiquidCtrlBoard:
  46. return "PipeDMLiquidCtrlBoard";
  47. case kPipeDMPowerCtrlBoard:
  48. return "PipeDMPowerCtrlBoard";
  49. case kDrawBarDMLiquidCtrlBoard:
  50. return "DrawBarDMLiquidCtrlBoard";
  51. case kDrawBarDMPowerCtrlBoard:
  52. return "DrawBarDMPowerCtrlBoard";
  53. case kDrawBarDMExtChSelector:
  54. return "kDrawBarDMExtChSelector";
  55. case kH2O2SensorBoard:
  56. return "H2O2SensorBoard";
  57. default:
  58. return "unkown";
  59. }
  60. }
  61. static inline const char* ProjectIDToString(uint32_t id) {
  62. switch (id) {
  63. case klarge_space_disinfection_machine:
  64. return "large_space_disinfection_machine";
  65. case ksmall_space_disinfection_machine:
  66. return "small_space_disinfection_machine";
  67. case kpipe_disinfection_machine:
  68. return "pipe_disinfection_machine";
  69. case kdraw_bar_disinfection_box:
  70. return "draw_bar_disinfection_box";
  71. case kh2o2_ext_sensor:
  72. return "h2o2_ext_sensor";
  73. default:
  74. return "unkown";
  75. }
  76. }
  77. typedef enum {
  78. // 驱动器错误
  79. kerr_motor_reset_error = 100,
  80. kerr_motor_subdevice_offline = 101,
  81. kerr_motor_driver_error = 102,
  82. kerr_motor_undervoltage_error = 103,
  83. kerr_motor_unkown_error = 104,
  84. kerr_AirBlowerError = 200, // 空压机异常
  85. kerr_HeaterError = 201, // 加热片异常
  86. kerr_BlowerError = 202, // 鼓风机异常
  87. kerr_ProportionalValveError = 203, // 气密性测试专用空压机异常
  88. } ErrorCode_t;
  89. typedef enum {
  90. /***********************************************************************************************************************
  91. * *
  92. ***********************************************************************************************************************/
  93. kfn_read_board_info = 1, // cmd:no, ack:ack_read_board_info_data_t
  94. kfn_force_report = 2, // cmd:no, ack:none //!delete
  95. kfn_read_sysinfo = 3, // cmd:no, ack:ack_sysinfo_t
  96. kfn_read_taskinfo = 4, // cmd:taskoff, ack:ask_taskinfo_t
  97. kfn_heart_ping = 5, // cmd:pingindex, ack:ask_taskinfo_t
  98. kfn_clear_reset_flag = 6, // cmd:taskoff, ack:ask_taskinfo_t
  99. kfn_enable_report = 7, // cmd:enable
  100. kfn_reset_board = 8, // cmd:
  101. kreport_heatpacket_pong = 50, // cmd:no ack:no report:heatpacket_t
  102. kreport_exception_error = 51, // report:error_code,subid
  103. /***********************************************************************************************************************
  104. * *
  105. ***********************************************************************************************************************/
  106. /**
  107. * (id,)
  108. *
  109. *
  110. * TMC参数
  111. * TMC参数
  112. * ihold,irun,idelay
  113. *
  114. */
  115. kfn_pump_rotate = 100, // cmd: index rpm ack:none
  116. kfn_pump_stop = 101, // cmd: index rpm ack:none
  117. kfn_pump_set_ihold_irun_idelay = 102, // cmd: index irun,ihold,idelay ack:none
  118. kfn_pump_set_acc = 104, // cmd: index acc ack:none , delete
  119. kfn_pump_ping = 105, // cmd: index, ack:none
  120. kfn_pump_set_ramp = 106, // cmd: index,vs,a1,amx,v1 ack:none
  121. kfn_pump_set_tzw = 107, // cmd: index,timeZeroWait ack:none
  122. kfn_pump_set_subic_reg = 110, // cmd: index,val ack:none
  123. kfn_pump_get_subic_reg = 111, // cmd: index, ack:val
  124. kfn_pump_is_run = 112, // cmd: index, ack:run
  125. /***********************************************************************************************************************
  126. * *
  127. ***********************************************************************************************************************/
  128. /**
  129. * @brief
  130. * /
  131. *
  132. *
  133. *
  134. *
  135. *
  136. */
  137. kfn_heater_ctrl = 600, // cmd: power(0-100)
  138. kfn_heater_ctrl_safe_valve = 601, // cmd: valve_state
  139. kfn_heater_read_ei = 602, // report:electric_current(ma)
  140. kfn_heater_read_temperature_data = 603, // report:temperature(0.01)
  141. kfn_heater_read_ei_adc_raw = 604, // report:temperature(0.01)
  142. kfn_heater_read_temperature_data_adc_raw = 605, // report:temperature(0.01)
  143. kfn_heater_is_open = 606, // cmd: index, ack:open
  144. /***********************************************************************************************************************
  145. * H2O2传感器数值上报 *
  146. ***********************************************************************************************************************/
  147. kfn_h2o2_sensor_read_calibration_date = 700, // cmd:subid ack:year,month,day
  148. kfn_h2o2_sensor_read_sub_ic_errorcode = 701, // cmd:subid ack:errorcode
  149. kfn_h2o2_sensor_read_sub_ic_reg = 702, // cmd:subid,reg,num ack:errorcode
  150. kreport_h2o2_sensor_data = 750, // report:subid h2o2_sensor_data
  151. /***********************************************************************************************************************
  152. * *
  153. ***********************************************************************************************************************/
  154. kfn_triple_warning_light_ctl = 800, // cmd: r,g,b,warning
  155. kfn_triple_warning_light_read_state = 801, // cmd: none, ack:r,g,b,w
  156. /***********************************************************************************************************************
  157. * *
  158. ***********************************************************************************************************************/
  159. kfn_evaporation_tank_water_sensor_read_state = 900, // cmd: state
  160. kfn_device_bottom_water_sensor_read_state = 901, // cmd: state
  161. kreport_evaporation_bin_water_sensor = 950, // report:state //蒸发仓水浸 //report_evaporation_bin_water_sensor_data_t
  162. kreport_device_bottom_water_sensor = 951, // report:state //设备底部水浸 //report_device_bottom_water_sensor_data
  163. /***********************************************************************************************************************
  164. * *
  165. ***********************************************************************************************************************/
  166. kfn_blower_ctrl = 1000, // cmd: power(0-100)
  167. kfn_blower_ctrl_safe_valve = 1001, // cmd: valve_state
  168. kfn_blower_read_ei = 1002, // cmd: electric_current(ma)
  169. kfn_blower_is_error = 1003, // cmd: ack:{error}
  170. kfn_blower_read_ei_adc_raw = 1004, // cmd: electric_current(ma)
  171. kfn_blower_is_open = 1005, // cmd: index, ack:open
  172. /***********************************************************************************************************************
  173. * *
  174. ***********************************************************************************************************************/
  175. kfn_air_compressor_ctrl = 1100, // cmd: power(0-100)
  176. kfn_air_compressor_ctrl_safe_valve = 1101, // cmd: valve_state
  177. kfn_air_compressor_read_ei = 1102, // report:electric_current(ma)
  178. kfn_air_compressor_read_ei_adc_raw = 1103, // report:electric_current(ma)
  179. kfn_air_compressor_is_open = 1104, // cmd: index, ack:open
  180. /***********************************************************************************************************************
  181. * *
  182. ***********************************************************************************************************************/
  183. /**
  184. * @brief air Tightness Test AirCompressor
  185. * /
  186. *
  187. */
  188. kfn_air_tightness_test_ac_ctrl = 1200,
  189. kfn_air_tightness_test_ac_is_open = 1201,
  190. /***********************************************************************************************************************
  191. * *
  192. ***********************************************************************************************************************/
  193. kfn_psbus_read_data = 1300, // cmd:subid ack:pressure(0.1pa)
  194. kfn_psbus_scan = 1302, //
  195. kfn_psbus_start_report = 1303, // cmd:period
  196. kfn_psbus_stop_report = 1304, // cmd:period
  197. kreport_pressure_data = 1350, // report:subid pressure(0.1pa)
  198. /***********************************************************************************************************************
  199. * *
  200. ***********************************************************************************************************************/
  201. kfn_proportional_set_valve = 1400, // 设置比例阀 {4:valveId,4:valveValue}
  202. kfn_proportional_read_pos = 1402, //
  203. kfn_proportional_is_busy = 1403, //
  204. /***********************************************************************************************************************
  205. * *
  206. ***********************************************************************************************************************/
  207. kfn_air_tightness_test_cutoff_ch = 1500, // 气密性测试-封闭通道
  208. kfn_air_tightness_test_release_ch = 1501, // 气密性测试-释放通道
  209. kfn_air_tightness_test_is_cutoff = 1502, // 气密性测试-封闭通道
  210. kfn_ext_ch_selector_set_ch = 1600, // 外部通道选择器设置通道
  211. kfn_ext_ch_selector_get_ch = 1601, // 读取当前通道
  212. } cmd_t;
  213. #pragma pack(1)
  214. /***********************************************************************************************************************
  215. * CMD ENUM *
  216. ***********************************************************************************************************************/
  217. typedef enum {
  218. kext_ch_disinfection,
  219. kext_ch_degradation,
  220. kext_ch_dehumidification,
  221. } ExtChType_t;
  222. /***********************************************************************************************************************
  223. * ACK *
  224. ***********************************************************************************************************************/
  225. typedef struct {
  226. uint16_t boardType;
  227. uint16_t projectId;
  228. uint16_t protcol_version;
  229. uint16_t software_version;
  230. uint16_t hardware_version;
  231. } ack_read_board_info_data_t;
  232. typedef struct {
  233. uint8_t taskName[8];
  234. uint16_t stackRemindSize;
  235. uint16_t priority;
  236. uint8_t state;
  237. } ask_taskinfo_t;
  238. typedef struct {
  239. uint32_t total_heap_size;
  240. uint32_t free_heap_size;
  241. uint32_t free_sys_heap_size;
  242. uint16_t taskNum;
  243. uint16_t sysHasRun;
  244. } ack_sysinfo_t;
  245. static inline const char* protocolType2Str(int type) {
  246. switch (type) {
  247. case 0:
  248. return "P100";
  249. case 1:
  250. return "DP600";
  251. case 2:
  252. return "OTHERS";
  253. default:
  254. return "UNKNOWN";
  255. }
  256. }
  257. static inline const char* p100uint2Str(uint8_t uint) {
  258. switch (uint) {
  259. case 0:
  260. return "Mpa";
  261. case 1:
  262. return "kpa";
  263. case 2:
  264. return "pa";
  265. case 3:
  266. return "bar";
  267. case 4:
  268. return "Mbar";
  269. case 5:
  270. return "kgcm2";
  271. case 6:
  272. return "psi";
  273. case 7:
  274. return "mh2o";
  275. case 8:
  276. return "mh2o";
  277. default:
  278. return "UNKNOWN";
  279. }
  280. }
  281. // ptype:P100 precision:1 unit:kpa zero:-900 full:1000
  282. typedef struct {
  283. uint8_t isOnline;
  284. uint8_t subid;
  285. uint8_t ptype;
  286. uint8_t uint;
  287. uint8_t precision;
  288. int16_t zero;
  289. int16_t full;
  290. } ps_info_t;
  291. typedef struct {
  292. uint8_t numOnlineId;
  293. ps_info_t sensor[10];
  294. } ack_psbus_scan_t;
  295. /***********************************************************************************************************************
  296. * Report *
  297. ***********************************************************************************************************************/
  298. typedef struct {
  299. uint16_t heartIndex;
  300. uint8_t boardType;
  301. uint8_t flag; // 0:reset_flag
  302. } report_heatpacket_data_t;
  303. typedef struct {
  304. uint32_t ecode;
  305. uint16_t subid;
  306. } report_exeception_data_t;
  307. #if 1
  308. typedef struct {
  309. uint8_t sensorDataNum;
  310. struct {
  311. uint8_t subid;
  312. int16_t pressureVal;
  313. } data[];
  314. } report_pressure_data_t;
  315. #endif
  316. typedef struct {
  317. uint8_t sensor_error; // 传感器异常
  318. uint16_t h2o2; // ppm * 10
  319. uint16_t humid; // %RH * 10
  320. uint16_t temp; // °C * 10
  321. uint16_t saturation; // %RS * 10
  322. uint16_t h2o2adc; // adc_val
  323. } report_h2o2_data_t;
  324. typedef struct {
  325. uint16_t temperature; // 0.01
  326. } report_heater_temperature_data_t;
  327. typedef struct {
  328. uint16_t subid; // 0->100
  329. uint16_t valve_state; // 0->100
  330. } report_proportional_valve_value_data_t;
  331. typedef struct {
  332. uint16_t state;
  333. } report_water_sensor_state_t;
  334. #pragma pack()
  335. } // namespace transmit_disfection_protocol
  336. } // namespace iflytop