app_nb.h 11 KB

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