app_nb.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. #ifndef __NB_H__
  2. #define __NB_H__
  3. #include "stdint.h"
  4. #include "base_types.h"
  5. #ifdef __cplusplus
  6. extern "C"
  7. {
  8. #endif
  9. #define NB_RXLEN_MAX (1024)
  10. #define NB_TXLEN_MAX (1024)
  11. #define NB_REC_DELAY_TICK 100 // 等待接收时间节拍 100ms
  12. #define MB_MAX_RETRY_GATT_QUERY_TIME 4
  13. #define QUERY_RETRY_TIME 90
  14. #define WAIT_CMD_DELAY_TIME 12 // 12秒
  15. #define PORT_MAIN 1
  16. #define PORT_SUB 2
  17. // #define NB_AUTO_GET_NET_TIME //自动获取网络时间
  18. #define NB_FLAG_ARG_VLD (0x0001u)
  19. #define NB_AT "AT\r\n"
  20. #define NB_AT_ACK "OK" // AT rsp: OK
  21. #define NB_ATI "ATI\r\n" // ATI rsp: Revision:BC28CNSCLR01A04
  22. #define NB_ATE0 "ATE0\r\n"
  23. #define NB_ATE0_ACK NB_AT_ACK // ATE0 rsp: ATE0 \r\nOK
  24. #define NB_ATE1 "ATE1\r\n"
  25. #define NB_CGATT "AT+CGATT=1\r\n"
  26. #define NB_CGATT_ACK NB_AT_ACK // AT+CGATT? rsp: +CGATT:1\r\nOK
  27. #define NB_CGATT_QUERY "AT+CGATT?\r\n"
  28. #define NB_CGATT_QUERY_ACK "+CGATT: 1" // AT+CGATT? rsp: +CGATT:1\r\nOK
  29. #define NB_CFUN_QUERY "AT+CFUN?\r\n"
  30. #define NB_CFUN0 "AT+CFUN=0\r\n"
  31. #define NB_CFUN1 "AT+CFUN=1\r\n"
  32. #define NB_NCSEARFCN "AT+NCSEARFCN\r\n"
  33. #define NB_CMEE_QUERY "AT+CMEE?\r\n" // AT+CMEE? rsp: +CMEE:0\r\nOK CURITY_PMU_POWER_ON_RESET\r\nOK
  34. #define NB_CMEE0 "AT+CMEE=0\r\n"
  35. #define NB_CMEE1 "AT+CMEE=1\r\n"
  36. #define NB_CMEE_ACK NB_AT_ACK // rsp: OK
  37. #define NB_CGPADDR "AT+CGPADDR\r\n"
  38. #define NB_CGPADDR_ACK "+CGPADDR:0" //+CGPADDR:0,56.212.216.60 \r\nOK
  39. #define NB_CGSN "AT+CGSN=1\r\n"
  40. #define NB_CGSN_ACK "+CGSN:" //+CGSN:864490066795103 \r\nOK
  41. #define NB_CIMI "AT+CIMI\r\n" // AT+CIMI rsp: 460113030153660 \r\nOK
  42. #define NB_NCCID "AT+QCCID\r\n" // different from bc28 AT+NCCID
  43. #define NB_NCCID_ACK "+QCCID:" //+QCCID:89861124205002135676 \r\n OK
  44. #define NB_NUESTATS "AT+NUESTATS=CELL\r\n"
  45. #define NB_NUESTATS_ACK "NUESTATS:CELL" // NUESTATS:CELL,2504,331,1,-550,-47,-503,186 \r\nOK
  46. #define NB_NNMI "AT+NNMI=0\r\n"
  47. #define NB_NNMI_ACK NB_AT_ACK //+NNMI:1 \r\nOK
  48. #define NB_NCDP "AT+NCDP=221.229.214.202,5683\r\n"
  49. #define NB_NCDP_ACK NB_AT_ACK
  50. #define NB_QCFG "AT+QCFG=\"LWM2M/lifetime\",900\r\n"
  51. #define NB_QCFG_ACK NB_AT_ACK
  52. #define NB_QREGSWT "AT+QREGSWT=1\r\n"
  53. #define NB_QREGSWT_ACK NB_AT_ACK
  54. // #define NB_NMGS "AT+NMGS="
  55. #define NB_NMGS "AT+QLWULDATA="
  56. #define NB_NMGS_ACK "+NNMI:"
  57. #define NB_CSQ "AT+CSQ\r\n"
  58. #define NB_CSQ_ACK "+CSQ:" //+CSQ:31,99 \r\nOK
  59. #define NB_CEREG "AT+CEREG?\r\n" // AT+CEREG? rsp: +CEREG:0,1 \r\nOK
  60. #define NB_CLOSEAUTOCON "AT+NCONFIG=AUTOCONNECT,FALSE\r\n"
  61. #define NB_NRB "AT+NRB\r\n"
  62. #define NB_CEDRXS "AT+CEDRXS=0,5\r\n"
  63. #define NB_CPSMS "AT+CPSMS=0\r\n"
  64. #define NB_SUBSCRIBE_SUCCESS "+QLWEVTIND:3"
  65. #define NB_NMGR "AT+NMGR\r\n"
  66. #define NB_CHECK_REG_STA "AT+NMSTATUS?\r\n" // 查询当前注册状态
  67. #define NB_CHECK_REG_ACK "+NMSTATUS:1" // 返回注册状态关键字,第1个字段==1表示注册成功
  68. #define NB_QLWCFG "AT+QLWCFG=1,1\r\n"
  69. #define NB_QLINIT "AT+QLINIT=1\r\n"
  70. #define NB_QLWEVTIND_SET "AT+QLWEVTIND=1,255\r\n" // 查询当前注册状态
  71. // #define NB_CHECK
  72. #define NB_UPLOAD_MANUAL 0x01
  73. #define NB_UPLOAD_TIMER 0x02
  74. #define NB_UPLOAD_REPT 0x04 // 1小时补报
  75. #define NB_UPLOAD_SETTLE_DAY 0x08 // 结算日上报
  76. #define NB_UPLOAD_ERR 0x10
  77. #define NB_UPLOAD_DMA 0x20
  78. #define TA_ID_EC800Z_CN 1
  79. #define TA_ID_EG800Z_EU 2
  80. #define NB_VOID_UPLOAD_TIME 120
  81. typedef enum en_at_num
  82. {
  83. at_ati = 0x0000u,
  84. at_cgsn = 0x0001u,
  85. at_cimi = 0x0002u,
  86. at_csq = 0x0003u,
  87. at_cgpaddr = 0x0004u,
  88. at_cfun = 0x0005u,
  89. at_cereg = 0x0006u,
  90. at_nccid = 0x0007u,
  91. at_nuestats = 0x0008u,
  92. at_end
  93. } en_at_num_t;
  94. enum
  95. {
  96. COAP_SAT = 0, // COAP模式启动NB
  97. COAP_AT = 1, // AT
  98. COAP_ATE0 = 2, // 关闭回显
  99. COAP_CLOSEAUTOCON = 3, // 关闭自动连接
  100. COAP_NCDP = 4, // 连接电信平台
  101. COAP_QCFG = 5,
  102. COAP_QREGSWT = 6,
  103. COAP_NRB_0 = 7, // 软件启动模块
  104. COAP_CFUN1 = 8, //
  105. COAP_CEDRXS = 9, // 关闭模块eDRX功能
  106. COAP_PSM = 10, // 关闭模块PSM功能
  107. COAP_CGATT = 11, // 注网命令
  108. COAP_CGATT_QUERY = 12, // 检查是否成功入网
  109. COAP_CFUN0 = 13, //
  110. COAP_NCSEARFCN = 14, // 清除先验频点
  111. COAP_ERROR = 15, // 设置错误码
  112. COAP_NNMI = 16, // 设置直吐模式
  113. COAP_CGPADDR = 17, // 查询注网是否成功
  114. COAP_IMEI = 18, // IMEI
  115. COAP_CIMI = 19, // CIMI
  116. COAP_ICCID = 20, // ICCID
  117. COAP_NUESTATS = 21, // 查询UE统计信息
  118. COAP_CSQ = 22, // 查询信号值
  119. COAP_WAIT_REG = 23, // 等待注册完成
  120. COAP_QLWDATASEND = 24, // 发送数据
  121. COAP_WAITCMD = 25, // 等待数据
  122. COAP_DATADIS = 26, // 数据处理
  123. COAP_CLOSEPOWER = 27, // 关闭NB电源
  124. COAP_EXIT = 28 // 退出上报
  125. };
  126. typedef struct
  127. {
  128. boolean_t flag; // 正在上报标志,
  129. uint8_t mode; // 上报类型
  130. // uint8_t regular_report_time[4][3];
  131. // uint8_t sta;//上传是否成功标志
  132. } NbUpload_t;
  133. typedef struct
  134. {
  135. uint16_t count;
  136. } NbUploadFail_t;
  137. typedef struct
  138. {
  139. uint32_t count;
  140. boolean_t flag;
  141. } TimedTask_t;
  142. typedef struct
  143. {
  144. uint8_t hour;
  145. uint8_t minute;
  146. uint8_t second;
  147. } TIME_DEF;
  148. typedef struct
  149. {
  150. uint8_t flag; // 1:需要补报,0:不补报
  151. TIME_DEF time; // 时分秒 下次补报时间
  152. } REPT_REPORT_DEF;
  153. typedef struct
  154. {
  155. // boolean_t rx_flag;
  156. uint8_t rx_over_time;
  157. uint8_t rx_buf[NB_RXLEN_MAX];
  158. uint16_t rx_idx;
  159. char *ack;
  160. uint8_t tx_buf[NB_TXLEN_MAX];
  161. en_at_num_t cur_at;
  162. uint8_t cur_state; // 当前状态
  163. uint8_t reset_mcu_cnt; // 复位倒计时
  164. uint16_t mid;
  165. NbUpload_t upload;
  166. // NbUploadFail_t fail;
  167. TimedTask_t task;
  168. // uint16_t open_time_out;
  169. // uint16_t reset_count;
  170. uint32_t bts_id;
  171. uint16_t physical_cell_id;
  172. int16_t rsrq;
  173. int16_t rsrp;
  174. int16_t rsrp_bak;
  175. int16_t snr;
  176. int8_t rssi;
  177. char imsi[20];
  178. char imei[20];
  179. char ccid[32];
  180. char ip[16];
  181. uint8_t get_imei_flag;
  182. uint8_t get_imsi_flag;
  183. uint8_t get_ccid_flag;
  184. uint32_t status;
  185. uint16_t cur_afn;
  186. uint16_t get_patch_time_out;
  187. // uint8_t req_data[32];
  188. // uint16_t req_data_len;
  189. // uint8_t cur_ver[4];
  190. // uint8_t target_ver[4];
  191. // uint32_t total_pack_bytes;
  192. // uint16_t per_pack_bytes;
  193. // uint16_t total_pack_num;
  194. // uint16_t pack_num;
  195. // uint16_t pack_crc;
  196. // uint16_t pack_data_crc;
  197. // uint16_t upgrade_data_ok;
  198. // uint16_t upgrade_data_rx_len;
  199. // uint16_t next_report_cnt;
  200. uint8_t get_patch_retry_cnt;
  201. // uint16_t void_load_timout;
  202. } Nb_Run_t;
  203. typedef struct
  204. {
  205. uint8_t start_date[3];
  206. uint8_t end_date[3];
  207. uint8_t total_num;
  208. uint8_t cur_num;
  209. } HOUR_REC_UPLOAD_DEF;
  210. typedef struct
  211. {
  212. // uint8_t init_flag;
  213. // uint8_t regular_runflag[4];//定时上报标志
  214. // tm_t regular_time[4];
  215. uint32_t err_mem_dat; // 错误上报保存错误码
  216. uint8_t manual_runflag; // 手动上报标志
  217. // uint8_t settlement_runflag;//结算日上报标志
  218. uint8_t rept_runflag; // 重复上报标志
  219. tm_t rept_time; // 重复上报时间
  220. // HOUR_REC_UPLOAD_DEF hour_up;
  221. uint8_t rept_addr;
  222. } UPLOAD_DEF;
  223. #pragma pack(1)
  224. typedef struct
  225. {
  226. unsigned char prefix[2];
  227. unsigned char head;
  228. unsigned char type;
  229. unsigned char addr[7];
  230. unsigned char ctrl;
  231. unsigned char len[2];
  232. unsigned char data[600];
  233. } NbAppFrame_t;
  234. #pragma pack()
  235. extern Nb_Run_t NbRun;
  236. extern NbAppFrame_t NbAppFrame;
  237. extern void nb_run_init(void);
  238. extern void GetNbRun(Nb_Run_t **nb_run);
  239. extern void NbRxCh(uint8_t ch);
  240. extern void NbRxTimeout(void);
  241. extern void NbClrRxBuf(void);
  242. extern void NbHandler(void);
  243. extern void NbPowerOnCmd(uint8_t argc, char **argv);
  244. extern void NbPowerOffCmd(uint8_t argc, char **argv);
  245. extern void NbAtCmd(uint8_t argc, char **argv);
  246. extern void NbAtiCmd(uint8_t argc, char **argv);
  247. extern void NbAteCmd(uint8_t argc, char **argv);
  248. extern void NbCgattCmd(uint8_t argc, char **argv);
  249. extern void NbCfunCmd(uint8_t argc, char **argv);
  250. extern void NbNcsearfcnCmd(uint8_t argc, char **argv);
  251. extern void NbCmeeCmd(uint8_t argc, char **argv);
  252. extern void NbCgpaddrCmd(uint8_t argc, char **argv);
  253. extern void NbCgsnCmd(uint8_t argc, char **argv);
  254. extern void NbCimiCmd(uint8_t argc, char **argv);
  255. extern void NbNccidCmd(uint8_t argc, char **argv);
  256. extern void NbNuestatsCmd(uint8_t argc, char **argv);
  257. extern void NbNnmiCmd(uint8_t argc, char **argv);
  258. extern void NbNcdpCmd(uint8_t argc, char **argv);
  259. extern void NbNmgsCmd(uint8_t argc, char **argv);
  260. extern void NbCsqCmd(uint8_t argc, char **argv);
  261. extern void NbCeregCmd(uint8_t argc, char **argv);
  262. extern void NbCloseAutoCon(uint8_t argc, char **argv);
  263. extern void NbNrb(uint8_t argc, char **argv);
  264. extern void NbCedrxs(uint8_t argc, char **argv);
  265. extern void NbCpsms(uint8_t argc, char **argv);
  266. extern void NbShowrunCmd(uint8_t argc, char **argv);
  267. extern void NbUploadCmd(uint8_t argc, char **argv);
  268. extern uint32_t NbServerMsgValid(void);
  269. extern void NbBuildDataReport(void);
  270. extern void NbBuildSetIpAndPortRsp(void);
  271. extern void NbBuildSetReportPointRsp(int8_t ret);
  272. extern void NbBuildSetDmaReportPointRsp(int8_t ret);
  273. extern void NbBuildSetDateTimeRsp(int8_t ret);
  274. extern void NbBuildSetFlowAlarmThresRsp(int8_t ret);
  275. extern void NbBuildSetPressureAlarmThresRsp(int8_t ret);
  276. extern void NbBuildSetTempAlarmThresRsp(int8_t ret);
  277. extern void NbBuildSetSettleRsp(int8_t ret);
  278. extern void NbBuildSetBaseReadingRsp(int8_t ret);
  279. extern void NbBuildReadMonthRecordRsp(void);
  280. extern void NbBuildReportMonthRecord(void);
  281. extern void NbBuildReportDayRecord(void);
  282. extern void NbBuildReportHourRecord(uint8_t, uint8_t, uint8_t);
  283. extern void NbBuildReport5MinRecord(tm_t *);
  284. extern void NbBuildReportLogRecord(void);
  285. extern void NbBuildGetPackage(void);
  286. extern void NbBuildReportUpdateStatus(int8_t);
  287. extern int NbAppDataDispatch(void);
  288. extern void NbUploadFrame(void);
  289. extern void NbIotTimedTask(void);
  290. extern void NbOpenTimeOut(void);
  291. extern void NbSettleDayUpload(void);
  292. extern void NbNextReport(void);
  293. extern void nb_task_run_check(void);
  294. extern void update_rtc_run(void);
  295. extern void NbTread(void);
  296. extern int8_t at_cmd_send(uint8_t stat, char *cmd_str, char *ack, uint16_t retry_time, uint8_t time_out);
  297. extern int8_t at_cmd_send2(uint8_t stat, char *cmd_str, char *ack1, char *ack2, uint16_t retry_time, uint8_t time_out);
  298. extern uint8_t G_NB_CAN_DEEP_SLEEP;
  299. extern UPLOAD_DEF upload_dat;
  300. extern int8_t datecmp(tm_t date1, tm_t date2);
  301. extern char *get_upload_type_str(uint8_t type);
  302. extern void Debug_NB(void);
  303. extern void nb_set_para_rept(uint16_t dat_len, uint16_t afn, int8_t ret);
  304. // extern uint8_t G_TDC_CAN_DEEP_SLEEP;
  305. extern uint8_t NB_CHECK_TDC_COMPLETE_FLAG;
  306. // #ifdef DEBUG_LOG_WARM
  307. extern void Debug_log(void);
  308. extern uint8_t memstr_exist(uint8_t *, size_t, const char *, size_t);
  309. extern int8_t get_code(uint8_t *buf, const char *keyword, uint16_t dat_len, int16_t *ret);
  310. extern void save_datetime_from_at(uint8_t *buf, uint16_t dat_len);
  311. extern uint8_t get_nb_signal(uint8_t *buf, uint16_t dat_len);
  312. extern uint8_t check_sub_service_flag(void);
  313. extern uint8_t check_main_service_flag(void);
  314. extern void build_tcp_open_cmd(char *out_str, uint8_t *ip, uint16_t port);
  315. extern int8_t get_ta_id(void);
  316. extern void rec_cmd_handler(uint8_t npos, uint8_t mport, uint8_t *vflag);
  317. // #endif
  318. #ifdef __cplusplus
  319. }
  320. #endif
  321. #endif