app_nb.h 11 KB

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