globalDef.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. #ifndef _GLOBALDEF_H_
  2. #define _GLOBALDEF_H_
  3. #include "../_Lib-3.5/CMSIS/stm32f10x.h"
  4. #include "./network/nettimer.h"
  5. #include "./network/timeout.h"
  6. extern uint8_t g_bPrintfDebug;
  7. #define UP_DEVICE_TYPE_GATE 0x0101 // 网关A
  8. #define UP_DEVICE_FIRMWARE 0x03 // APP程序
  9. enum {
  10. LOG_00 = 0x00, //执行错误
  11. LOG_01 = 0x01, // 执行成功
  12. LOG_02 = 0x02, //数据模块忙,稍后再试
  13. LOG_03 = 0x03, // 监控处理器忙,
  14. LOG_04 = 0x04, // 监控处理器通讯超时
  15. LOG_05 = 0x05, // 查询记录不存在
  16. LOG_10 = 0x10, // 监控处理器序列号不存在
  17. LOG_11 = 0x11, // 密文数据解密错误
  18. LOG_CRC = 0xC1, // 校验错误
  19. LOG_XSP = 0xC2, // 处理显示屏的数据
  20. LOG_NOTAXID = 0xC3, // 报税口号不存在
  21. LOG_NOGUNID = 0xC4, // 枪号不存在
  22. LOG_COLL_TIMOUT = 0xC5, //采集器返回超时
  23. LOG_COLL_ENCPYST = 0xC6, // 采集器返回明文密文状态错误
  24. LOG_COLL_BUSY = 0xC7, // 采集判断加油机忙
  25. LOG_CRC1 = 0xC8, // lora接收检验错误
  26. LOG_LORA_HEADERROR = 0xC9, // lora接收数据头不是fefe
  27. };
  28. enum {
  29. UPDATE_PROG_NULL = 0x00,
  30. UPDATE_PROG_FROM_NET = 0x01,
  31. UPDATE_PROG_FROM_GATEWAY = 0x02,
  32. };
  33. extern char g_upLinkTopic[64];
  34. extern char g_logupLinkTopic[64];
  35. extern timeout_t g_taxSendTime;
  36. extern timeout_t g_taxDataTime;
  37. extern uint8_t g_curSendCmd;
  38. typedef struct _updata_prog {
  39. uint32_t sn[64];
  40. uint32_t appVr[64];
  41. uint8_t status[64];// 状态码
  42. uint16_t num;
  43. uint8_t upCount; // 上报的次数
  44. uint8_t updateProgFrom; // 升级程序的开源
  45. timeout_t upStatusOut;
  46. uint8_t rec0x16; // 接收到16指令,
  47. OS_TMR update_total_time;
  48. }updateProg;
  49. extern updateProg g_updateProg;
  50. /* LED 灯的记录 */
  51. #define LED_M_QUICK 1
  52. #define LED_M_LOW 5
  53. enum {
  54. LED_DISP_NULL = 0,
  55. LED_DISP_VERSION = 1,
  56. LED_DISP_NOINIT = 2,
  57. LED_DISP_COLLNUM = 3,
  58. LED_DISP_CONNET = 4,
  59. LED_DISP_LORA = 5,
  60. };
  61. #pragma pack(push,1)
  62. typedef union _LED_16_{
  63. uint16_t status;
  64. struct {
  65. uint16_t led01 : 1;
  66. uint16_t led02 : 1;
  67. uint16_t led03 : 1;
  68. uint16_t led04 : 1;
  69. uint16_t led05 : 1;
  70. uint16_t led06 : 1;
  71. uint16_t led07 : 1;
  72. uint16_t led08 : 1;
  73. uint16_t led09 : 1;
  74. uint16_t led10 : 1;
  75. uint16_t led11 : 1;
  76. uint16_t led12 : 1;
  77. uint16_t led13 : 1;
  78. uint16_t led14 : 1;
  79. uint16_t led15 : 1;
  80. uint16_t led16 : 1;
  81. }__attribute__((packed))led;
  82. }__attribute__((packed))Led16;
  83. #pragma pack(pop)
  84. typedef struct _LED_STATUS_{
  85. uint8_t ledM; // M灯的情况 快闪还是慢闪
  86. Led16 led16;
  87. uint16_t collNum; // 采集器个数
  88. uint8_t status; // 灯当前的状态
  89. uint32_t timer; // 持续时间
  90. }__attribute__((packed)) LedStatus;
  91. extern LedStatus g_ledStatus;
  92. /*时间信息记录*/
  93. typedef struct _CUR_TICK_{
  94. uint32_t powerTime; // 上电时间
  95. uint32_t curTime; // 当前时间
  96. }CurTick;
  97. extern CurTick g_curTick;
  98. typedef struct _FIRMWARE_EXPLAIN_{
  99. uint16_t dd;
  100. uint8_t ff;
  101. uint16_t nn;
  102. }__attribute__((packed)) FirmwareExpl;
  103. extern FirmwareExpl g_firmwareExpl;
  104. /*采集器的状态 和软询查每个采集器的次数*/
  105. typedef struct COLL_RUN_MSG_{
  106. uint8_t checkNum; // 采集器轮询的次数 超过5次则上报服务器
  107. uint8_t updateStatus; // 升级的状态码
  108. int lorastatus;
  109. }CollRunMsg;
  110. enum {
  111. COLL_STATUS_OFFLINE = 0x00 , // 离线线
  112. COLL_STATUS_ONLINE = 0x01 , // 在线
  113. };
  114. typedef union _check_gun_{
  115. uint8_t status[2]; // 枪是否轮询完成
  116. uint16_t status1;
  117. }checkGunStatus;
  118. typedef struct _gun_status_{
  119. checkGunStatus gunSta;
  120. }GunStatus;
  121. extern GunStatus g_checkGun[16];
  122. #define UPDATE_COLLECT_TOTALTIME 900000 // 升级总的时间
  123. #define UPDATE_CONTINUE_TIME 300 // 升级续传每条间隔的时候300毫秒
  124. #define UPDATE_REPEAT_TIME 7000 // 接收重传超时的时间 2S
  125. #define UPDATE_READSTATUS_TIME 10000 // 升级完成 到读取升级状态的时间
  126. #define UPDATE_READSTATUS_TIME_GATEWAY 60000 // 升级完成 到读取升级状态的时间
  127. typedef struct _lora_info_{
  128. uint32_t coll_sn; // 采集器的SN
  129. uint8_t loraindex; // 所在信道
  130. uint16_t sendNum; //发送的包的个数
  131. uint16_t rcvNum; //接收的包的个数
  132. }__attribute__((packed)) loraInfo;
  133. typedef struct _LORA_COLL_MSG_{ // lora信息切换
  134. uint8_t collNum; // 采集器的个数
  135. uint8_t step; // 步骤 第一步:当前信道读取 第二步:切换信道读取, 第三步:
  136. loraInfo info[16];
  137. uint16_t lora_rcvCount;
  138. uint16_t lora_sendCount;
  139. }__attribute__((packed)) LoraCollMsg;
  140. extern LoraCollMsg g_loraCollMsg;
  141. /*运行数据*/
  142. typedef struct _RUN_DATA_{
  143. uint8_t factory; // 1:英泰 2:拓盛
  144. uint8_t ballowRead58; // 时间到了,是否允许向采集器读取58指令 0:允许, 1:不允许
  145. uint8_t bfirstSend0x56; // 是否是上电第一次发送心跳包,1:是第一次 0:不是
  146. uint8_t bfirstRead0x83; // 第一次读取83指令 1:第一次读取 0:不是
  147. uint8_t bRead0x58; // 是否读取0x58指令
  148. uint8_t bReadData; // 可以读取业务数据了
  149. uint16_t collstatus; // 所有采集器心跳包是否已经读取,按位判断,那位是1那位就读取过
  150. uint8_t curCollIndex; // 当前采集器的索引
  151. uint16_t rssi_lora; // lora信息强度
  152. uint16_t rssi_4G; // 4G信息强度
  153. uint8_t timeSendStatus; // 第5分钟发送一次状态信息的标志 0:不发送 1:发送
  154. uint8_t bsendgatewayfirmMsg; // 发送固件信息
  155. uint8_t daStatus[16][2][8];
  156. CollRunMsg collrunMsg[16];
  157. uint8_t bInitNetProc; // 是否创建网络队列
  158. uint8_t bServerRead58; // 是否是服务器读取58指令
  159. uint16_t updateDeviceTyp; // 升级类型 0x0101:网关;0x0201;采集器:0x0301:液位仪采集器;0x0401:屏采集器
  160. uint8_t bUpdate; // 正在升级中
  161. uint32_t startUpdateTotalTime; // 重传开始时间记录
  162. uint32_t repeatUpdateTime; // 接收到重传指令型时间记录
  163. uint32_t readUpdateStatusTime; // 读取升级状态的时间记录
  164. uint8_t bsendUpdateStatus; // 向服务器发送状态码
  165. uint8_t bResetUpdate; // 升级完成后,需要上报服务器
  166. uint8_t bReadMingWenData; // 读取密文的数据
  167. uint8_t firstReadNum; // 上电第一次按默认时间读取多少次
  168. uint16_t task_no; // 升级的任务号,给采集使用的
  169. uint8_t cregStatus; // 网络注册状态
  170. uint8_t bchangelora; // 当前要执行切换信道的函数
  171. uint8_t curloraIndex; // 当前的信息编号
  172. uint8_t nextlorIndex; //要切换的信道的索引
  173. uint8_t key1disp; // 按键1 显示lora信道
  174. uint8_t bInstallFinish; // 安装完成
  175. uint8_t bUpdateHost; //是否是主设备 1:网关升级网关时为主设备 2:网关升级采集器时的主设备 其它为从设备,升级时,从设备不处理0x22指令
  176. uint16_t collerr; // 不是本网关下,出现采集器的个数
  177. uint8_t bRef12; // 外部电压是5V还是12V 1:12V 0:5V
  178. uint8_t bNetCmd;
  179. }RunData;
  180. extern RunData g_runData;
  181. typedef struct _DATA_4G_{
  182. uint8_t flag; // 重连的次数,根据这个次数,要确定每次重边的时间间隔
  183. uint8_t bconnect4G; // 是否连接4G
  184. uint8_t errorTime; // 4G断开的时间 如果断开1小时,则芯片复位重新启动
  185. }Da4G;
  186. extern Da4G g_data4G;
  187. /*采集器固件信息不需要存储到EEPROM中*/
  188. typedef struct COLL_MSG_{
  189. uint32_t device_sn; // 采集器的版本号
  190. uint32_t bootloaderVr; // bootloader版本
  191. uint32_t appVr; // app版本号
  192. uint32_t resetNum; // 复位次数
  193. uint8_t resetType; // 最后一次复位类型
  194. uint32_t runTime; //运行时长
  195. uint32_t voltage; // 电压
  196. uint32_t temperature; // 温度
  197. uint8_t updateStatus; // 升级状态码
  198. uint8_t uuid[12]; // 芯片ID号
  199. }CollMsg;
  200. /* 网关固件信息存储 这个只有在产测时写入,要程序中不再写入*/
  201. typedef struct _GATEWAY_HARDWARE_MSG_{
  202. uint8_t bInit; // 是否初始化过
  203. uint32_t gateway_sn; // 网关的sn
  204. uint16_t devicType; // 类型
  205. uint16_t factoryMsg; // 厂家信息
  206. uint16_t seqNo ; // 生产批次号
  207. uint32_t data; // 生产日期
  208. uint8_t pcbVersion; // 硬件(PCB)版本
  209. uint32_t sqare; //备用
  210. }__attribute__((packed)) GateHareWareMsg;
  211. #pragma pack(push,1)
  212. typedef union _CONFIG_FLAG_{
  213. uint8_t value;
  214. struct {
  215. uint8_t bConfig_tab : 1; // 是否配置采集器路由表 0位
  216. uint8_t bConfig_qei : 1; //是否配置编码器 1位
  217. uint8_t benable_qei : 1; // 是否启用编码器路由表 1位
  218. uint8_t reserve_01 : 1; // 预留 1位
  219. uint8_t bConfig_xsp : 1; // 是否配置显示屏
  220. uint8_t reserve_02 : 3; // 预留 3位
  221. }__attribute__((packed))bInit;
  222. }__attribute__((packed))initMsg;
  223. #pragma pack(pop)
  224. /* 网关的固件信息存储*/
  225. typedef struct _GATEWAY_SOFT_MSG_{
  226. uint8_t configNo; // 配置流水号
  227. initMsg bInitMsg; // 是否配置过
  228. uint8_t coll_num; // 此网关对应采集器的数量
  229. uint16_t time_interval; // 时间轮询
  230. }__attribute__((packed)) GateConfigMsg;
  231. /* 网关的版本信息*/
  232. typedef struct _GATEWAY_VERSION_MSG_{
  233. uint32_t gate_bootloaderVr; //网关的bootloaderVr
  234. uint32_t pt_version; // 产测版本
  235. uint32_t gate_appVr; // appt版本
  236. uint32_t gate_appVr2; // app2的版本
  237. uint32_t gate_appVr3; // app3的版本
  238. }__attribute__((packed)) GateVersionMsg;
  239. typedef union _VOLTAGE_{
  240. uint32_t voltage; // 电压
  241. float fvoltage;
  242. }voltage;
  243. typedef union _TEMPERATURE_{
  244. uint32_t temperature; // 温度
  245. float ftemperature;
  246. }temperature;
  247. typedef struct _GATEWAY_MSG_{
  248. GateHareWareMsg hardwareMsg; //
  249. GateConfigMsg configmsg; // 软件信息
  250. GateVersionMsg verMsg; // 版本信息
  251. uint32_t gate_resetnum; //复位次数
  252. uint8_t gate_resetType; //最后一次复位类型
  253. uint32_t gate_runTime; // 运行时长
  254. voltage fVol;
  255. temperature fTemper;
  256. uint8_t Uuid[12];//UUID
  257. uint8_t Imei[15]; //IMEI
  258. uint8_t Iccid1[20];//ICCID1
  259. uint8_t Iccid2[20];//ICCID2
  260. uint8_t Iccid3[20];//ICCID3
  261. uint16_t devicTypeID; // 103 303 这个是读取上来的
  262. }GateWayMsg;
  263. /* mqtt IP地址 端口号*/
  264. typedef struct _MQTT_IP_PORT_{
  265. uint8_t flag;
  266. char port[6]; // 端口号
  267. char ip[32]; //IP地址
  268. char admin[8]; // 用户名
  269. char password[16]; // 密码
  270. }__attribute__((packed)) MqttIdPort;
  271. typedef struct _FIRMWARE_MSG_{ // 固件信息存储
  272. GateWayMsg gatewayMsg; // 网关的信息
  273. CollMsg collMsg[16]; //采集器固件信息
  274. MqttIdPort mqttidport; // mqtt的IP地址和端口
  275. }FirmwareMsg;
  276. extern FirmwareMsg g_firmwareMsg; // 网关 采集器固件信息存储
  277. /*第一次上电 读取 0x83指令*/
  278. typedef struct _READ_COLL_CMD_{
  279. uint8_t nodeCur; // 当前采集器索引
  280. uint8_t portCur; // 当前报税口索引
  281. uint8_t checknum[16][2]; // 报税器查询状态
  282. uint16_t stauts[2]; // 采集器报税口0状态
  283. }ReadCollcmd;
  284. extern ReadCollcmd g_readCmd83;
  285. extern ReadCollcmd g_readCmd58;
  286. extern ReadCollcmd g_readCmd56;
  287. typedef struct _da_83_{
  288. uint32_t sn;
  289. uint8_t para;
  290. uint8_t taxNo;
  291. }__attribute__((packed)) da83;
  292. typedef struct _cmd_info_0x83_{
  293. da83 da[16];
  294. uint8_t front;
  295. uint8_t rear;
  296. uint8_t bread83;
  297. }__attribute__((packed)) cmdInfo83;
  298. extern cmdInfo83 g_cmdInfo83;
  299. typedef struct _da_comm_queue_info{
  300. uint8_t type01; // 一级消息类型
  301. uint16_t type02; // 二级消息类型
  302. uint8_t da[128];
  303. uint8_t size;
  304. }__attribute__((packed)) commDa;
  305. #define COMM_QUEUE_SZIE 8
  306. typedef struct _da_comm_queue{
  307. uint8_t front;
  308. uint8_t rear;
  309. commDa data[COMM_QUEUE_SZIE];
  310. }__attribute__((packed))dacommQueue;
  311. extern dacommQueue g_commQueue;
  312. extern void init_comm_queue(void);
  313. extern uint8_t save_comme_queue(uint8_t type1, uint16_t type2, uint8_t *data, uint8_t size);
  314. extern uint16_t read_comm_queue(uint8_t *type1, uint16_t *type2, uint8_t *outda);
  315. enum {
  316. ENCONDER_NO = 0,
  317. ENCONDER_EN = 1,
  318. };
  319. typedef struct _encoder_opt_da_{
  320. uint8_t bhaveEncoder; // 0: 没有编码器 1:带编码器
  321. uint8_t bEportfinish; // 此报税口下的枪是否读取完成,等于此报税口下的枪数,则为读取完成
  322. }__attribute__((packed)) EncodeOptDa;
  323. extern EncodeOptDa g_encoderDa;
  324. typedef struct _run_mqtt_data_{
  325. uint8_t bChangeMqtt; // 1:为切换mqtt 服务器
  326. uint8_t bChangeSuc; // 0:初始值 1: 切换成功 2: 切换连接失败
  327. uint8_t connectNum; // 连接次数
  328. uint8_t mqttIdlen;
  329. uint8_t mqttPortlen;
  330. uint8_t mqttUserlen;
  331. uint8_t mqttPwdlen;
  332. MqttIdPort mqttMsg; // mqtt的IP地址和端口
  333. }__attribute__((packed)) MqttRunDa;
  334. extern MqttRunDa g_mqttRunDa;
  335. typedef struct _config_log_data_{
  336. uint8_t bEnable; //是否开启 0:不开启 1:开启
  337. uint32_t settimer; // 上报设定的时间
  338. timeout_t time; // 超时时间
  339. uint32_t settimer2; // 只返回原始数据
  340. timeout_t time2; //
  341. uint8_t status;
  342. uint8_t collIndex;
  343. uint8_t taxInddex;
  344. uint8_t gunIndex;
  345. uint8_t curportno;
  346. uint8_t curgunno;
  347. }__attribute__((packed)) LogCfigDa;
  348. extern LogCfigDa g_logCfigDa;
  349. typedef struct _sm4_key_{
  350. uint8_t flag[12]; // 标识字符
  351. uint32_t sn; // SN
  352. }__attribute__((packed)) sm4Key;
  353. typedef union _sm4_key_union_{
  354. uint8_t key[16];
  355. sm4Key keyda;
  356. }__attribute__((packed)) Sm4Key;
  357. extern Sm4Key g_sm4Key;
  358. extern void get_sm4_key(void);
  359. extern void init_log_info(void);
  360. extern void init_queue(cmdInfo83 *da);
  361. extern uint8_t en_queue_cmd83(cmdInfo83 *da, uint32_t sn, uint8_t para, uint8_t taxNo, uint8_t flag);
  362. extern uint8_t de_queue_cmd83(cmdInfo83 *inda,da83 *outda);
  363. #endif