globalDef.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  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 bRead1053;
  149. uint8_t read1053Num;
  150. uint8_t bReadData; // 可以读取业务数据了
  151. uint16_t collstatus; // 所有采集器心跳包是否已经读取,按位判断,那位是1那位就读取过
  152. uint8_t curCollIndex; // 当前采集器的索引
  153. uint16_t rssi_lora; // lora信息强度
  154. uint16_t rssi_4G; // 4G信息强度
  155. uint8_t timeSendStatus; // 第5分钟发送一次状态信息的标志 0:不发送 1:发送
  156. uint8_t bsendgatewayfirmMsg; // 发送固件信息
  157. uint8_t daStatus[16][2][8];
  158. CollRunMsg collrunMsg[16];
  159. uint8_t bInitNetProc; // 是否创建网络队列
  160. uint8_t bServerRead58; // 是否是服务器读取58指令
  161. uint16_t updateDeviceTyp; // 升级类型 0x0101:网关;0x0201;采集器:0x0301:液位仪采集器;0x0401:屏采集器
  162. uint8_t bUpdate; // 正在升级中
  163. uint32_t startUpdateTotalTime; // 重传开始时间记录
  164. uint32_t repeatUpdateTime; // 接收到重传指令型时间记录
  165. uint32_t readUpdateStatusTime; // 读取升级状态的时间记录
  166. uint8_t bsendUpdateStatus; // 向服务器发送状态码
  167. uint8_t bResetUpdate; // 升级完成后,需要上报服务器
  168. uint8_t bReadMingWenData; // 读取密文的数据
  169. uint8_t firstReadNum; // 上电第一次按默认时间读取多少次
  170. uint16_t task_no; // 升级的任务号,给采集使用的
  171. uint8_t cregStatus; // 网络注册状态
  172. uint8_t bchangelora; // 当前要执行切换信道的函数
  173. uint8_t curloraIndex; // 当前的信息编号
  174. uint8_t nextlorIndex; //要切换的信道的索引
  175. uint8_t key1disp; // 按键1 显示lora信道
  176. uint8_t bInstallFinish; // 安装完成
  177. uint8_t bUpdateHost; //是否是主设备 1:网关升级网关时为主设备 2:网关升级采集器时的主设备 其它为从设备,升级时,从设备不处理0x22指令
  178. uint16_t collerr; // 不是本网关下,出现采集器的个数
  179. uint8_t bRef12; // 外部电压是5V还是12V 1:12V 0:5V
  180. uint8_t bNetCmd;
  181. }RunData;
  182. extern RunData g_runData;
  183. typedef struct _DATA_4G_{
  184. uint8_t flag; // 重连的次数,根据这个次数,要确定每次重边的时间间隔
  185. uint8_t bconnect4G; // 是否连接4G
  186. uint8_t errorTime; // 4G断开的时间 如果断开1小时,则芯片复位重新启动
  187. }Da4G;
  188. extern Da4G g_data4G;
  189. /*采集器固件信息不需要存储到EEPROM中*/
  190. typedef struct COLL_MSG_{
  191. uint32_t device_sn; // 采集器的版本号
  192. uint32_t bootloaderVr; // bootloader版本
  193. uint32_t appVr; // app版本号
  194. uint32_t resetNum; // 复位次数
  195. uint8_t resetType; // 最后一次复位类型
  196. uint32_t runTime; //运行时长
  197. uint32_t voltage; // 电压
  198. uint32_t temperature; // 温度
  199. uint8_t updateStatus; // 升级状态码
  200. uint8_t uuid[12]; // 芯片ID号
  201. }CollMsg;
  202. /* 网关固件信息存储 这个只有在产测时写入,要程序中不再写入*/
  203. typedef struct _GATEWAY_HARDWARE_MSG_{
  204. uint8_t bInit; // 是否初始化过
  205. uint32_t gateway_sn; // 网关的sn
  206. uint16_t devicType; // 类型
  207. uint16_t factoryMsg; // 厂家信息
  208. uint16_t seqNo ; // 生产批次号
  209. uint32_t data; // 生产日期
  210. uint8_t pcbVersion; // 硬件(PCB)版本
  211. uint32_t sqare; //备用
  212. }__attribute__((packed)) GateHareWareMsg;
  213. #pragma pack(push,1)
  214. typedef union _CONFIG_FLAG_{
  215. uint8_t value;
  216. struct {
  217. uint8_t bConfig_tab : 1; // 是否配置采集器路由表 0位
  218. uint8_t bConfig_qei : 1; //是否配置编码器 1位
  219. uint8_t benable_qei : 1; // 是否启用编码器路由表 1位
  220. uint8_t reserve_01 : 1; // 预留 1位
  221. uint8_t bConfig_xsp : 1; // 是否配置显示屏
  222. uint8_t reserve_02 : 3; // 预留 3位
  223. }__attribute__((packed))bInit;
  224. }__attribute__((packed))initMsg;
  225. #pragma pack(pop)
  226. /* 网关的固件信息存储*/
  227. typedef struct _GATEWAY_SOFT_MSG_{
  228. uint8_t configNo; // 配置流水号
  229. initMsg bInitMsg; // 是否配置过
  230. uint8_t coll_num; // 此网关对应采集器的数量
  231. uint16_t time_interval; // 时间轮询
  232. }__attribute__((packed)) GateConfigMsg;
  233. /* 网关的版本信息*/
  234. typedef struct _GATEWAY_VERSION_MSG_{
  235. uint32_t gate_bootloaderVr; //网关的bootloaderVr
  236. uint32_t pt_version; // 产测版本
  237. uint32_t gate_appVr; // appt版本
  238. uint32_t gate_appVr2; // app2的版本
  239. uint32_t gate_appVr3; // app3的版本
  240. }__attribute__((packed)) GateVersionMsg;
  241. typedef union _VOLTAGE_{
  242. uint32_t voltage; // 电压
  243. float fvoltage;
  244. }voltage;
  245. typedef union _TEMPERATURE_{
  246. uint32_t temperature; // 温度
  247. float ftemperature;
  248. }temperature;
  249. typedef struct _GATEWAY_MSG_{
  250. GateHareWareMsg hardwareMsg; //
  251. GateConfigMsg configmsg; // 软件信息
  252. GateVersionMsg verMsg; // 版本信息
  253. uint32_t gate_resetnum; //复位次数
  254. uint8_t gate_resetType; //最后一次复位类型
  255. uint32_t gate_runTime; // 运行时长
  256. voltage fVol;
  257. temperature fTemper;
  258. uint8_t Uuid[12];//UUID
  259. uint8_t Imei[15]; //IMEI
  260. uint8_t Iccid1[20];//ICCID1
  261. uint8_t Iccid2[20];//ICCID2
  262. uint8_t Iccid3[20];//ICCID3
  263. uint16_t devicTypeID; // 103 303 这个是读取上来的
  264. }GateWayMsg;
  265. /* mqtt IP地址 端口号*/
  266. typedef struct _MQTT_IP_PORT_{
  267. uint8_t flag;
  268. char port[6]; // 端口号
  269. char ip[32]; //IP地址
  270. char admin[8]; // 用户名
  271. char password[16]; // 密码
  272. }__attribute__((packed)) MqttIdPort;
  273. typedef struct _FIRMWARE_MSG_{ // 固件信息存储
  274. GateWayMsg gatewayMsg; // 网关的信息
  275. CollMsg collMsg[16]; //采集器固件信息
  276. MqttIdPort mqttidport; // mqtt的IP地址和端口
  277. }FirmwareMsg;
  278. extern FirmwareMsg g_firmwareMsg; // 网关 采集器固件信息存储
  279. /*第一次上电 读取 0x83指令*/
  280. typedef struct _READ_COLL_CMD_{
  281. uint8_t nodeCur; // 当前采集器索引
  282. uint8_t portCur; // 当前报税口索引
  283. uint8_t checknum[16][2]; // 报税器查询状态
  284. uint16_t stauts[2]; // 采集器报税口0状态
  285. }ReadCollcmd;
  286. extern ReadCollcmd g_readCmd83;
  287. extern ReadCollcmd g_readCmd58;
  288. extern ReadCollcmd g_readCmd56;
  289. typedef struct _da_83_{
  290. uint32_t sn;
  291. uint8_t para;
  292. uint8_t taxNo;
  293. }__attribute__((packed)) da83;
  294. typedef struct _cmd_info_0x83_{
  295. da83 da[16];
  296. uint8_t front;
  297. uint8_t rear;
  298. uint8_t bread83;
  299. }__attribute__((packed)) cmdInfo83;
  300. extern cmdInfo83 g_cmdInfo83;
  301. typedef struct _da_comm_queue_info{
  302. uint8_t type01; // 一级消息类型
  303. uint16_t type02; // 二级消息类型
  304. uint8_t da[128];
  305. uint8_t size;
  306. }__attribute__((packed)) commDa;
  307. #define COMM_QUEUE_SZIE 8
  308. typedef struct _da_comm_queue{
  309. uint8_t front;
  310. uint8_t rear;
  311. commDa data[COMM_QUEUE_SZIE];
  312. }__attribute__((packed))dacommQueue;
  313. extern dacommQueue g_commQueue;
  314. extern void init_comm_queue(void);
  315. extern uint8_t save_comme_queue(uint8_t type1, uint16_t type2, uint8_t *data, uint8_t size);
  316. extern uint16_t read_comm_queue(uint8_t *type1, uint16_t *type2, uint8_t *outda);
  317. enum {
  318. ENCONDER_NO = 0,
  319. ENCONDER_EN = 1,
  320. };
  321. typedef struct _encoder_opt_da_{
  322. uint8_t bhaveEncoder; // 0: 没有编码器 1:带编码器
  323. uint8_t bEportfinish; // 此报税口下的枪是否读取完成,等于此报税口下的枪数,则为读取完成
  324. }__attribute__((packed)) EncodeOptDa;
  325. extern EncodeOptDa g_encoderDa;
  326. typedef struct _run_mqtt_data_{
  327. uint8_t bChangeMqtt; // 1:为切换mqtt 服务器
  328. uint8_t bChangeSuc; // 0:初始值 1: 切换成功 2: 切换连接失败
  329. uint8_t connectNum; // 连接次数
  330. uint8_t mqttIdlen;
  331. uint8_t mqttPortlen;
  332. uint8_t mqttUserlen;
  333. uint8_t mqttPwdlen;
  334. MqttIdPort mqttMsg; // mqtt的IP地址和端口
  335. }__attribute__((packed)) MqttRunDa;
  336. extern MqttRunDa g_mqttRunDa;
  337. typedef struct _config_log_data_{
  338. uint8_t bEnable; //是否开启 0:不开启 1:开启
  339. uint32_t settimer; // 上报设定的时间
  340. timeout_t time; // 超时时间
  341. uint32_t settimer2; // 只返回原始数据
  342. timeout_t time2; //
  343. uint8_t status;
  344. uint8_t collIndex;
  345. uint8_t taxInddex;
  346. uint8_t gunIndex;
  347. uint8_t curportno;
  348. uint8_t curgunno;
  349. }__attribute__((packed)) LogCfigDa;
  350. extern LogCfigDa g_logCfigDa;
  351. typedef struct _sm4_key_{
  352. uint8_t flag[12]; // 标识字符
  353. uint32_t sn; // SN
  354. }__attribute__((packed)) sm4Key;
  355. typedef union _sm4_key_union_{
  356. uint8_t key[16];
  357. sm4Key keyda;
  358. }__attribute__((packed)) Sm4Key;
  359. extern Sm4Key g_sm4Key;
  360. extern void get_sm4_key(void);
  361. extern void init_log_info(void);
  362. extern void init_queue(cmdInfo83 *da);
  363. extern uint8_t en_queue_cmd83(cmdInfo83 *da, uint32_t sn, uint8_t para, uint8_t taxNo, uint8_t flag);
  364. extern uint8_t de_queue_cmd83(cmdInfo83 *inda,da83 *outda);
  365. #endif