Link Kit C-SDK  4.0.0
aiot_at_api.h
浏览该文件的文档.
1 
10 #ifndef _AIOT_AT_API_H_
11 #define _AIOT_AT_API_H_
12 
13 #if defined(__cplusplus)
14 extern "C" {
15 #endif
16 
17 #include <stdint.h>
18 #include "core_list.h"
19 #include "aiot_sysdep_api.h"
20 
21 
22 #define MODULE_NAME_AT "AT"
23 
26 #define STATE_AT_BASE (-0x1000)
27 #define STATE_AT_ALREADY_INITED (-0x1003)
28 #define STATE_AT_NOT_INITED (-0x1004)
29 #define STATE_AT_UART_TX_FUNC_MISSING (-0x1005)
30 #define STATE_AT_GET_RSP_FAILED (-0x1006)
31 #define STATE_AT_RINGBUF_OVERFLOW (-0x1007)
32 #define STATE_AT_RX_TIMEOUT (-0x1008)
33 #define STATE_AT_NO_AVAILABLE_LINK (-0x1009)
34 #define STATE_AT_TX_TIMEOUT (-0x100A)
35 #define STATE_AT_TX_ERROR (-0x100B)
36 #define STATE_AT_RINGBUF_NO_DATA (-0x100C)
37 #define STATE_AT_UART_TX_FUNC_NULL (-0x100D)
38 #define STATE_AT_NO_DATA_SLOT (-0x100F)
39 #define STATE_AT_LINK_IS_DISCONN (-0x1010)
40 #define STATE_AT_UART_TX_FAILED (-0x1011)
41 
45 #define AIOT_AT_CMD_LEN_MAXIMUM (128) /* AT命令最大长度 */
46 #define AIOT_AT_RSP_LEN_MAXIMUM (128) /* AT应答最大长度 */
47 #define AIOT_AT_TX_TIMEOUT_DEFAULT (10000) /* UART默认发送超时时间 */
48 #define AIOT_AT_RX_TIMEOUT_DEFAULT (10000) /* UART默认接受等待超时时间 */
49 #define AIOT_AT_DATA_RB_SIZE_DEFAULT (4096) /* 内部网络数据接收缓冲区大小,用户可根据接收数据流量的大小调整 */
50 #define AIOT_AT_RSP_RB_SIZE_DEFAULT (4096) /* 内部应答报文接受缓冲区大小,用户可根据接收数据流量的大小调整 */
51 #define AIOT_AT_CMD_RETRY_TIME (3) /* AT命令发送重试最大次数 */
52 #define AIOT_AT_RINGBUF_RETRY_INTERVAL (5) /* RINGBUF数据长度检查间隔时间 */
53 #define AIOT_AT_SOCKET_NUM (5) /* 支持的数据链路数量 */
54 #define AIOT_AT_MAX_PACKAGE_SIZE (1460) /* 一帧报文最大的数据长度*/
55 #define AT_SOCKET_ID_START (1)
56 
61 typedef enum {
67 
80 typedef int32_t (*aiot_at_uart_tx_func_t)(const uint8_t *p_data, uint16_t len, uint32_t timeout);
81 
82 
83 typedef enum rsp_result_t {
84  AT_RSP_SUCCESS, /* AT命令执行成功 */
85  AT_RSP_WAITING, /* 继续等待命令回执*/
86  AT_RSP_FAILED, /* AT命令执行失败,可能是超时也可能是返回错误*/
88 
96 typedef at_rsp_result_t (*at_rsp_handler_t)(char *rsp);
106 typedef void (*at_urc_handler_t)(char *line);
110 typedef struct {
111  /* 要发送的AT命令格式,当AT命令需要输入参数时使用 */
112  char *fmt;
113  /* 要发送的AT命令,当设置的AT命令不需要输入参数时使用 */
114  char *cmd;
115  /* AT命令的数据长度,不需要用户赋值 */
116  uint32_t cmd_len;
117  /* 期望的应答数据,默认处理匹配到该字符串认为命令执行成功 */
118  char *rsp;
119  /* 得到应答的超时时间,达到超时时间为执行失败, 默认10000,即10秒*/
120  uint32_t timeout_ms;
121  /* 接受到应答数据后的用户自定义处理回调函数 */
124 
128 typedef struct {
129  /* 主动上报数据匹配头 */
130  char *prefix;
131  /* 接受到应答数据后的用户处理回调函数 */
134 
138 typedef struct {
139  /* 匹配头标识符,匹配到即表示后面有数据上报 */
140  char *prefix;
141  /* 匹配包体,应该包含socket_id和data_len, 后面接数据 */
142  char *fmt;
144 
145 
149 typedef struct {
150  /* 模组初始化命令列表, 有默认值 */
153 
154  /* 网络初始化命令列表 */
157 
158  /* 打开socket网络列表 */
160  uint32_t open_cmd_size;
161 
162  /* 发送数据命令列表 */
164  uint32_t send_cmd_size;
165 
166  /* 模组主动上报数据标识符,识别到数据上报,会进入数据接收流程 */
168 
169  /* 关闭socket命令列表 */
171  uint32_t close_cmd_size;
172 
173  /* 错误标识符,控制命令返回数据中,识别到错误标识符会返回执行失败 */
175 
176  /* 订阅模组主动上报处理,可选 */
179 
180  /* 开启ssl命令列表 ,可选*/
182  uint32_t ssl_cmd_size;
183 } at_device_t;
184 
185 
189 typedef struct {
190  uint8_t *buf;
191  uint8_t *head;
192  uint8_t *tail;
193  uint8_t *end;
194  uint32_t size;
195  void *mutex;
197 
201 typedef enum {
206 
210 typedef struct {
214 
215 typedef struct {
216  uint32_t curr_link_id;
217  uint32_t data_len;
218  uint32_t remain_len;
220 
221 /*
222 * 模组IP状态定义
223 */
224 typedef enum {
231 
235 typedef struct {
236  /* 是否初始化 */
237  uint8_t is_init;
238  /* 模组网络状态 */
239  core_ip_status_t ip_status;
240  /* 模组socket连接数据 */
242  /* AT命令发送超时 */
243  uint32_t tx_timeout;
244  /* ip数据接收处理上下文 */
246  /* 当前处理的命令 */
248  /* AT命令返回数据缓存<--接收到一行写入 */
250  /* 缓存一行数据 */
251  char rsp_buf[AIOT_AT_RSP_LEN_MAXIMUM];
252  /* 缓存一行数据偏移 */
253  uint32_t rsp_buf_offset;
254  /* 串口发送接口,由外部设置*/
256  /* AT指令发送锁*/
257  void *cmd_mutex;
258  /* 网络数据发送锁*/
259  void *send_mutex;
260  void *user_data;
261  /* AT设备 */
264 
272 int32_t aiot_at_init(void);
273 
284 int32_t aiot_at_setopt(aiot_at_option_t opt, void *data);
285 
293 int32_t aiot_at_bootstrap(void);
294 
304 int32_t aiot_at_nwk_open(uint8_t *socket_id);
305 
318 int32_t aiot_at_nwk_connect(uint8_t socket_id, const char *host, uint16_t port, uint32_t timeout);
319 
332 int32_t aiot_at_nwk_send(uint8_t socket_id, const uint8_t *buffer, uint32_t len, uint32_t timeout);
333 
346 int32_t aiot_at_nwk_recv(uint8_t socket_id, uint8_t *buffer, uint32_t len, uint32_t timeout_ms);
347 
357 int32_t aiot_at_nwk_close(uint8_t socket_id);
358 
367 int32_t aiot_at_hal_recv_handle(uint8_t *data, uint32_t size);
373 int32_t aiot_at_deinit(void);
374 
375 int32_t core_at_ip_status(core_ip_status_t status);
376 int32_t core_at_socket_status(uint32_t id, core_at_link_status_t status);
377 #if defined(__cplusplus)
378 }
379 #endif
380 
381 
382 #endif
core_ip_status_t ip_status
Definition: aiot_at_api.h:239
int32_t aiot_at_bootstrap(void)
模组启动, 内部发送模组相关的AT命令已启动模组, 启动完成后, 模组将获取到IP地址
Definition: aiot_at_api.c:408
ringbuf结构体定义
Definition: aiot_at_api.h:189
int32_t core_at_socket_status(uint32_t id, core_at_link_status_t status)
Definition: aiot_at_api.c:826
const core_at_cmd_item_t * cmd_content
Definition: aiot_at_api.h:247
core_at_urc_item_t * urc_register
Definition: aiot_at_api.h:177
int32_t aiot_at_nwk_recv(uint8_t socket_id, uint8_t *buffer, uint32_t len, uint32_t timeout_ms)
内部会从对应的数据ringbu中读取网络数据, 可对接到core_sysdep_network_recv网络接口
Definition: aiot_at_api.c:580
char * error_prefix
Definition: aiot_at_api.h:174
char * fmt
Definition: aiot_at_api.h:112
core_at_cmd_item_t * send_cmd
Definition: aiot_at_api.h:163
uint32_t close_cmd_size
Definition: aiot_at_api.h:171
core_at_cmd_item_t * module_init_cmd
Definition: aiot_at_api.h:151
uint8_t * end
Definition: aiot_at_api.h:193
Definition: aiot_at_api.h:63
Definition: aiot_at_api.h:65
void * mutex
Definition: aiot_at_api.h:195
int32_t aiot_at_init(void)
初始化AT组件
Definition: aiot_at_api.c:308
uint8_t * tail
Definition: aiot_at_api.h:192
uint32_t data_len
Definition: aiot_at_api.h:217
aiot_at_option_t
AT组件配置选项
Definition: aiot_at_api.h:61
char * prefix
Definition: aiot_at_api.h:130
Definition: aiot_at_api.h:62
core_at_read_t reader
Definition: aiot_at_api.h:245
SDK Core系统依赖头文件, 所有Core中的系统依赖均在此文件中列出
char * rsp
Definition: aiot_at_api.h:118
char * prefix
Definition: aiot_at_api.h:140
void * send_mutex
Definition: aiot_at_api.h:259
core_at_cmd_item_t * open_cmd
Definition: aiot_at_api.h:159
at_device_t * device
Definition: aiot_at_api.h:262
core_at_cmd_item_t * ip_init_cmd
Definition: aiot_at_api.h:155
aiot_at_uart_tx_func_t uart_tx_func
Definition: aiot_at_api.h:255
uint32_t ip_init_cmd_size
Definition: aiot_at_api.h:156
uint32_t ssl_cmd_size
Definition: aiot_at_api.h:182
int32_t aiot_at_deinit(void)
反初始化AT组件
Definition: aiot_at_api.c:792
AT命令请求响应结构体定义
Definition: aiot_at_api.h:110
#define AIOT_AT_SOCKET_NUM
Definition: aiot_at_api.h:53
uint32_t cmd_len
Definition: aiot_at_api.h:116
Definition: aiot_at_api.h:84
uint8_t * buf
Definition: aiot_at_api.h:190
int32_t aiot_at_setopt(aiot_at_option_t opt, void *data)
配置AT组件, 主要为配置串口发送回调函数
Definition: aiot_at_api.c:376
Definition: aiot_at_api.h:202
Definition: aiot_at_api.h:225
AT组件上下文数据结构体
Definition: aiot_at_api.h:235
Definition: aiot_at_api.h:228
rsp_result_t
Definition: aiot_at_api.h:83
uint32_t urc_register_size
Definition: aiot_at_api.h:178
Definition: aiot_at_api.h:85
int32_t core_at_ip_status(core_ip_status_t status)
AT主动上报接收的数据,可识别头
Definition: aiot_at_api.h:138
Definition: aiot_at_api.h:204
uint32_t open_cmd_size
Definition: aiot_at_api.h:160
Definition: aiot_at_api.h:226
uint32_t module_init_cmd_size
Definition: aiot_at_api.h:152
at_rsp_handler_t handler
Definition: aiot_at_api.h:122
char * fmt
Definition: aiot_at_api.h:142
int32_t aiot_at_nwk_close(uint8_t socket_id)
内部会调用模组相关的AT命令, 关闭连接链路。可对接到core_sysdep_network_deinit网络接口 ...
Definition: aiot_at_api.c:619
uint8_t is_init
Definition: aiot_at_api.h:237
at_urc_handler_t handle
Definition: aiot_at_api.h:132
void * user_data
Definition: aiot_at_api.h:260
uint32_t rsp_buf_offset
Definition: aiot_at_api.h:253
#define AIOT_AT_RSP_LEN_MAXIMUM
Definition: aiot_at_api.h:46
core_ip_status_t
Definition: aiot_at_api.h:224
uint32_t remain_len
Definition: aiot_at_api.h:218
uint32_t send_cmd_size
Definition: aiot_at_api.h:164
void(* at_urc_handler_t)(char *line)
接受到应答数据后的用户处理回调函数原型定义
Definition: aiot_at_api.h:106
int32_t aiot_at_nwk_open(uint8_t *socket_id)
为对应的链路ID创建ringbuf资源
Definition: aiot_at_api.c:428
int32_t aiot_at_nwk_send(uint8_t socket_id, const uint8_t *buffer, uint32_t len, uint32_t timeout)
内部会调用模组相关的AT命令, 通过串口发送TCP数据。可对接到core_sysdep_network_send网络接口 ...
Definition: aiot_at_api.c:554
core_at_cmd_item_t * ssl_cmd
Definition: aiot_at_api.h:181
enum rsp_result_t at_rsp_result_t
AT设备结构化数据
Definition: aiot_at_api.h:149
core_at_cmd_item_t * close_cmd
Definition: aiot_at_api.h:170
uint32_t size
Definition: aiot_at_api.h:194
uint32_t timeout_ms
Definition: aiot_at_api.h:120
uint32_t tx_timeout
Definition: aiot_at_api.h:243
char * cmd
Definition: aiot_at_api.h:114
core_at_link_status_t
模组数据链路状态
Definition: aiot_at_api.h:201
Definition: aiot_at_api.h:229
int32_t aiot_at_nwk_connect(uint8_t socket_id, const char *host, uint16_t port, uint32_t timeout)
内部会调用模组相关的AT命令, 通过串口发送TCP建连命令。可对接到core_sysdep_network_establish网络接口 ...
Definition: aiot_at_api.c:484
int32_t(* aiot_at_uart_tx_func_t)(const uint8_t *p_data, uint16_t len, uint32_t timeout)
串口发送回调函数定义
Definition: aiot_at_api.h:80
Definition: aiot_at_api.h:203
Definition: aiot_at_api.h:64
void * cmd_mutex
Definition: aiot_at_api.h:257
at_rsp_result_t(* at_rsp_handler_t)(char *rsp)
接受到应答数据后的用户处理回调函数原型定义
Definition: aiot_at_api.h:96
core_ringbuf_t rsp_rb
Definition: aiot_at_api.h:249
core_at_recv_data_prefix * recv
Definition: aiot_at_api.h:167
Definition: aiot_at_api.h:86
Definition: aiot_at_api.h:227
uint8_t * head
Definition: aiot_at_api.h:191
AT主动上报命令
Definition: aiot_at_api.h:128
int32_t aiot_at_hal_recv_handle(uint8_t *data, uint32_t size)
为AT组件提供串口数据
Definition: aiot_at_api.c:776
uint32_t curr_link_id
Definition: aiot_at_api.h:216
Definition: aiot_at_api.h:215