gateway_collect.h 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. #ifndef __GATEWAY_COLLECT_H__
  2. #define __GATEWAY_COLLECT_H__
  3. #include "stm32f10x.h"
  4. //#include "downlink.h"
  5. #include "../../APP/network/downlink.h"
  6. #include "../globalDef.h"
  7. //#include "../ota/ota.h"
  8. #define TAX_REPEAD_DATA 6
  9. /*采集器与网关通信的消息类型*/
  10. #define GATE_COLL_HEART_QUERY 0x56 //网关与采集器的下行心跳包
  11. #define COLL_GATE_HEART_QUERY 0x66 //网关与采集器的上行心跳包
  12. #define GATE_COLL_TAX_QUERY 0x57 //业务数据下行发送消息
  13. #define COLL_GATE_TAX_QUERY 0x67 //业务数据上行接收消息
  14. #define GATE_COLL_FIRMMSG_QUERY 0x58 //网关下发查询固件信息
  15. #define COLL_GATE_FIRMMSG_QUERY 0x68 //采集器上发固件信息
  16. #define COLL_GATE_RESTART_QUERY 0x59 //采集器设备重新启动
  17. #define COLL_GATE_RESTART_5D 0x5D //采集器设备重新启动
  18. #define COLL_GATE_CHANGE_LORAPA 0x5B // 切换lora信道参数
  19. #define GATE_COLL_ENCODER_QUERY 0x5C // 读取编码器数据
  20. #define COLL_GATE_ENCODER_QUERY 0x6C // 读取编码器数据
  21. #define COLL_GATE_TRANSMIT 0x01 // 透传指令
  22. #define YTSF_0XA2_0X00 0xA2
  23. #define YTSF_0XA1_0X11 0xA1
  24. #define YTSF_0XA1_0X14 0xA4
  25. #define FRAME_LEN 19
  26. #define PLAINTEXT 1 //明文
  27. #define CIPHERTEXT 2 //密文
  28. #define DISPLAY 3 //显示屏
  29. #define GATE_COLL_HEAD_LEN 12 // 网关与采集器通信的协议头为12个字节
  30. #define GATE_COLL_CMD5767_LEN 13 //0x57 0x67指令的长度
  31. #define GATE_COLL_CMD56_LEN 9 // 56命令的长度
  32. #define GATE_COLL_CMD58_LEN 5 // 58命令的长度
  33. #define GATE_COLL_CMD59_LEN 5 // 59命令的长度
  34. #define GATE_COLL_CMD5D_LEN 12 // 5D命令的长度
  35. #define GATE_COLL_CMD5B_LEN 17 // 5B命令的长度
  36. #define GATE_COLL_CMD5C_LEN 13 // 5C命令的长度
  37. #define GATE_COLL_PROTOTYPE 0x01 // 网关与采集器通信协议的版本
  38. /*业务数据头0x17 0x27*/
  39. typedef struct _tax_query_info
  40. {
  41. uint32_t device_sn; //设备编号
  42. uint8_t coll_no; // 采集器索引 从1开始
  43. uint16_t device_type; // 设备类型 0x0101: 网关 0x0201:报税口 0x0301: 液位仪 0x0401:显示屏
  44. uint8_t tax_no; //报税口号 从1开始
  45. uint8_t gun_msgid; //枪号 从1开始
  46. uint8_t prot_type; //协议类型 1:明文 2:密文
  47. uint8_t status; //1:成功 2:数据超时
  48. uint16_t dataLen; // 发送的数据长度
  49. char info[160];
  50. }__attribute__((packed)) tax_query_info_t;
  51. /* 查询固件信息0x58 设备重新启动0x59*/
  52. typedef struct _TAX_COMM_HEAD_{
  53. uint32_t device_sn; // 设备编号
  54. uint8_t coll_no; // 采集器索引 从1开始
  55. char info[8]; //
  56. }__attribute__((packed))taxComHead;
  57. typedef struct _coll_0x56_head{ /* 心跳0x56 */
  58. uint32_t devSn; // 设备编号
  59. uint8_t collIndex; // 采集器索引 从1开始
  60. uint8_t pIndex; // 报税口是否读取 0x01: 读取报税口1 0x02: 读取报税口2 0x03:读取报税口1 和报税口2 (按位进行设置)
  61. uint8_t reserve1; // 备用
  62. uint16_t reserve2; // 备用
  63. uint8_t info[8];
  64. }__attribute__((packed))coll56Da;
  65. /* 通用指令 0x5D*/
  66. typedef struct _TAX_COMM_5D_{
  67. uint32_t device_sn; // 设备编号
  68. uint8_t coll_no; // 采集器索引 从1开始
  69. uint16_t targettype; //设备类型
  70. uint8_t cmd; // 指令
  71. uint32_t reserve; //
  72. char info[8]; //
  73. }__attribute__((packed))taxCom5D;
  74. /*心跳返回的数据0x56*/
  75. typedef struct _TAX_Encry_STATUS_{
  76. uint32_t device_sn; // 设备编号
  77. uint8_t coll_no; // 采集器索引 从1开始
  78. uint8_t factory; // 1:明文 2:密文
  79. }__attribute__((packed))taxEncryptStatus;
  80. /* 信道切换指令 0x5B */
  81. typedef struct _TAX_CHANGE_LORA_{
  82. uint32_t device_sn; // 采集器SN
  83. uint8_t coll_no; // 采集器索引
  84. uint8_t paEnable; // 参数是否有效
  85. uint8_t loraPaindex; // lora信道索引号
  86. uint32_t freq; // lora 发射频率
  87. uint8_t power; // 发射功率
  88. uint8_t bandwidth; // 带宽
  89. uint8_t spreadingfactor; // 扩频因子
  90. uint8_t codingrate; // 纠错编码率
  91. uint16_t preambleLen; // 前导码长度
  92. char info[8]; //数据内容
  93. }__attribute__((packed)) taxChangeLora;
  94. /*编码器数据 0x5C */
  95. #if(0)
  96. typedef struct _ENCODER_DA_00_{
  97. uint8_t cmd; // 指令
  98. uint8_t gunstatus1; // 报税口1的抬枪状态
  99. uint8_t gunstatus2; // 报税口2的抬枪状态
  100. uint8_t codestatus; // 有无新交易状态,
  101. uint32_t codeId; // 记录ID
  102. uint8_t codestyle; // 记录产生方式
  103. uint32_t pulse; // 单次脉冲数
  104. uint32_t totalPulse; // 总脉冲数
  105. uint32_t timer; // 时间戳
  106. }__attribute__((packed))encoderDa_00;
  107. #else
  108. typedef struct _ENCODER_DATA_{
  109. uint32_t codeId; // 记录ID
  110. uint32_t pulse; // 单次脉冲数
  111. uint32_t totalPulse; // 总脉冲数
  112. uint32_t timer; // 时间戳
  113. }__attribute__((packed)) enData;
  114. typedef struct _ENCODER_DA_00_{
  115. uint8_t cmd; // 指令
  116. uint8_t gunstatus1; // 报税口1的抬枪状态
  117. uint8_t gunstatus2; // 报税口2的抬枪状态
  118. uint8_t codestatus; // 有无新交易状态,按位取
  119. uint8_t codestyle; // 记录产生方式 ,按位取
  120. uint8_t gunNum; // 编码器的最大枪数,指一个报税口下的
  121. enData enDa[6];
  122. }__attribute__((packed))encoderDa_00;
  123. #endif
  124. typedef struct _ENCODER_DA_{
  125. uint32_t device_sn; //设备编号
  126. uint8_t coll_no; // 采集器索引 从1开始
  127. uint16_t device_type; // 设备类型 0x0101: 网关 0x0201:报税口 0x0301: 液位仪 0x0401:显示屏
  128. uint8_t tax_no; //报税口号 从1开始
  129. uint8_t gun_msgid; //枪号 从1开始
  130. uint8_t prot_type; //协议类型 预留
  131. uint8_t status; //1:成功 2:数据超时 3:设备类型错误
  132. uint16_t dataLen; // 发送的数据长度
  133. char info[32];
  134. }__attribute__((packed))encoderDa;
  135. /*固件信息返回0x58*/
  136. typedef struct _TAX_FIRM_MSG_{
  137. uint32_t device_sn; //设备SN
  138. uint8_t coll_no; // 采集器索引 从1开始
  139. uint32_t bootloaderVr; // bootloader版本事情
  140. uint32_t appVr; //APP版本号
  141. uint32_t resetNum; //复位次数
  142. uint8_t resetType; //最后一次复位类型
  143. uint32_t runTime; //运行时间
  144. uint32_t voltage; // 电压
  145. uint32_t temperature; // 温度
  146. uint8_t updateStatus; // 升级状态码
  147. uint8_t uuid[12]; //UUID
  148. char info[160]; //数据内容
  149. }__attribute__((packed))taxFirmMsg;
  150. /* 0x01---0x1053 0x1023指令的格式 */
  151. typedef struct _sys_1053_2053_
  152. {
  153. uint16_t firstLevelType; //一级设备类型
  154. uint32_t firstLevelSn; //一级设备SN
  155. uint16_t rcvDevType; // 接收设备类型
  156. uint32_t rcvDevSn; // 接收设备SN
  157. uint16_t targetDevType; // 目标设备类型
  158. uint32_t targetDevSn; // 目标设备SN
  159. uint32_t reserve;
  160. uint8_t optType; // 执行操作1:设置 2:读取
  161. uint8_t cmdType; // 执行指令 1:编码器与抬枪信号正反序
  162. uint16_t cmdVal; // 1:正序 2:反序 其它:无
  163. uint32_t reserve01; // 预留
  164. }__attribute__((packed))sys1053_2053;
  165. typedef union TAX_DATA_INFO_{
  166. tax_query_info_t data; // 业务数据
  167. taxComHead comdata; //心跳 查询固件信息 设备重新启动信息
  168. coll56Da coll56da; // 采集器心跳
  169. taxCom5D da5D; // 0x5D 的数据
  170. taxFirmMsg firmMsg; //固件信息
  171. taxEncryptStatus taxEnStatus; // 心跳包的返回
  172. taxChangeLora taxLora; // lora信道切换
  173. encoderDa encoderda; // 编码器数据
  174. char info[160];
  175. }__attribute__((packed))taxDaInfo;
  176. /*网关向采集发送或是接收消息的结构体*/
  177. typedef struct _gateway_collect_com
  178. {
  179. uint16_t frame_header; //帧头
  180. uint8_t proto_ver; //协议版本 0x11
  181. uint32_t seq_no; //消息序列号
  182. uint8_t type; //一级消息类型
  183. uint16_t secondType; // 2级消息类型
  184. uint16_t len; //消息长度
  185. taxDaInfo taxinfo; //
  186. }__attribute__((packed)) gateway_collect_com_t;
  187. ///////////////////////////
  188. extern int collect_rcv_analyze0x67(uint8_t *data, uint8_t len);
  189. int tax_cmd_set(uint8_t cmd, uint8_t *parm, uint8_t size, void *puser);
  190. void gateway_collect_cmd_set(uint8_t *data, uint8_t len,uint8_t coll_index, uint8_t tax, uint8_t uart, uint8_t gun, uint8_t prottype,uint32_t seq,uint32_t id);
  191. //void gateway_collect_cmd_set(uint8_t *data, uint8_t len, uint8_t uart, uint8_t prottype,uint32_t seq,uint32_t id,uint8_t gun);
  192. int ytsf_send_cmd(uint8_t cmd, uint8_t info_type, uint8_t node, uint8_t port, uint8_t gun);
  193. extern int tax_cmd_set_0x8C(uint8_t cmd,uint8_t *parm, uint8_t size, void *puser);
  194. extern void gateway_collect_set_cmd0x56(uint8_t cmd,uint8_t curCollIndex,int8_t pIndex,uint32_t device_sn);
  195. extern void gateway_collect_set_cmd0x58(uint8_t cmd,uint8_t curCollIndex,uint32_t device_sn);
  196. extern void gateway_collect_set_cmd0x59(uint8_t curCollIndex,uint32_t device_sn);
  197. extern void gateway_collect_set_cmd0x5B(uint8_t curCollIndex,uint32_t device_sn,uint8_t index,uint8_t bpaEnable);
  198. extern void gateway_collect_set_cmd0x5C(uint8_t *data, uint8_t len,uint8_t coll_index, uint8_t tax, uint8_t gun,uint32_t seq,uint32_t id);
  199. extern void gateway_collect_set_cmd0x5D(uint8_t curCollIndex,uint32_t device_sn,uint16_t targettype,uint8_t cmd);
  200. extern void gateway_collect_cmd_0x01_0x1052(uint8_t *data, uint16_t size);
  201. extern void create_0x01_0x1053(uint8_t *outdata,uint16_t *len,uint16_t rcvType,uint32_t rcvSn,uint16_t targetType,uint16_t targetSn,uint8_t optType, uint8_t cmdType,uint16_t optval);
  202. extern void gateway_collect_cmd_0x01_0x1053(uint8_t *data, uint16_t size);
  203. extern int collect_rcv_analyze0x66(uint8_t *data, uint8_t len);
  204. extern int collect_rcv_analyze0x68(uint8_t *data, uint8_t len);
  205. extern int collect_rcv_analyze0x6C(uint8_t *data, uint8_t len);
  206. extern int collect_rcv_analyze0x01_0x2052(uint16_t cmd, uint8_t *data, uint8_t len);
  207. extern void gateway_net_send_gatewayMsg(void);
  208. extern void up_send_log_srcdata(uint8_t *data,uint16_t len);
  209. extern void up_send_log_err(uint16_t sendcmd, uint8_t type,uint8_t node,uint8_t port,uint8_t gun,uint32_t id,uint8_t cmd,uint8_t err);
  210. #endif