AT Server 服务
概述
AT Server提供AT指令的注册,将解析完成后数据提供至用户注册的命令回掉函数中,由用户做进一步处理
接口定义
初始化AT Server 服务
int atserver_init(utask_t *task, const char*name, uart_config_t *config);
根据传入的微服务任务,串口名以及串口配置参数,初始化AT server 服务,成功返回0,失败返回负值
- 参数:
- task:微服务任务
- name:串口名
- config:串口配置参数
- 返回值:
- 成功则返回0,失败返回负值,错误号如下:
- -ENOMEM 内存不足
- -EIO 错误的硬件操作
- 成功则返回0,失败返回负值,错误号如下:
初始化指定传输数据通道的AT Server 服务
int atserver_channel_init(utask_t *task, const char *name, void *config, at_channel_t *channel)
根据传入的微服务任务,指定的传输数据的通道、通道名以及通道配置参数,初始化AT server 服务,成功返回0,失败返回负值
- 参数:
- task:微服务任务
- name:通道名
- config:通道配置参数
- channel:指定的传输数据的通道
- 返回值:
- 成功则返回0,失败返回负值,错误号如下:
- -ENOMEM 内存不足
- -EIO 错误的硬件操作
- 成功则返回0,失败返回负值,错误号如下:
格式化输出字符串
int atserver_send(const char *format, ...);
根据格式化字符串以及输出列表,发送对应的字符串,成功则返回0,失败返回负值
- 参数:
- format:格式化字符串
- ...:输出列表
- 返回值:
- 成功则返回0,失败返回负值,错误号如下:
- -EINVAL 无效的参数
- -EIO 错误的硬件操作
- 成功则返回0,失败返回负值,错误号如下:
使用参数列表格式化输出
int atserver_sendv(const char *command, va_list args);
使用参数列表,发送对应的字符串,成功则返回0,失败返回负值
- 参数:
- command:格式化字符串
- args:可变参数列表的对象
- 返回值:
- 成功则返回0,失败返回负值,错误号如下:
- -EINVAL 无效的参数
- -EIO 错误的硬件操作
- 成功则返回0,失败返回负值,错误号如下:
发送数据
int atserver_write(const void *data, int size);
根据数据长度,发送对应的数据;
- 参数:
- data:用户数据
- size:数据长度
- 返回值:
- 成功则返回0,失败返回负值,错误号如下:
- -EIO 错误的硬件操作
- 成功则返回0,失败返回负值,错误号如下:
命令回调函数的格式
void (*cmd_callback)(char *cmd, int type, char *data);
- type :
typedef enum {
TEST_CMD,
READ_CMD,
WRITE_CMD,
EXECUTE_CMD,
INVAILD_CMD
} AT_CMD_TYPE;
- 参数:
- cmd:AT指令
- type:AT指令类型
- data:如果是设置命令,则将待设置的数据传入,否则为NULL
- 返回值:
- 无返回值
链接 AT Server 服务的命令
int atserver_cmd_link(atserver_cmd_t *at_cmd);
将新命令加入AT Server 服务的命令链表中,成功则返回0,失败则返回负值,
- 参数:
- at_cmd:待链接的命令
- 返回值:
- 成功则返回0,失败返回负值,错误号如下:
- -EINVAL 无效的参数
- -ENOMEM 内存不足
- 成功则返回0,失败返回负值,错误号如下:
链接 AT Server 服务的命令表
int atserver_add_command(const atserver_cmd_t at_cmd[]);
将新命令表(表格最后以NULL结尾)加入AT Server 服务的命令链表中,成功则返回0,失败则返回负值,
- 参数:
- at_cmd:待链接的命令表
- 返回值:
- 成功则返回0,失败返回负值,错误号如下:
- -EINVAL 无效的参数
- -ENOMEM 内存不足
- 成功则返回0,失败返回负值,错误号如下:
设置结束字符串
void atserver_set_output_terminator(const char *terminator)
根据指定的结束字符串,设置对应AT Server的结束字符串
- 参数:
- terminator:结束字符串
- 返回值: *无返回值
设置结束参数分隔符
void atserver_set_para_delimiter(char delimiter);
根据指定的参数分隔符,设置对应AT Server的参数分隔符
- 参数:
- delimiter:参数分隔符
- 返回值: *无返回值
设置超时时间
void atserver_set_timeout(int timeout);
根据指定超时时间(单位:ms),设置对应AT Server的超时时间
- 参数:
- timeout:待设置的超时时间
- 返回值:
- 无返回值
读取格式化的字符串中的数据
int atserver_scanf(const char *format, ...);
读取格式化的字符串中的数据,用法参照sscanf(),成功则返回0,失败返回负值
- 参数:
- format:格式化字符串
- ...:输出列表
- 返回值:
- 成功则返回0,失败返回负值,错误号如下:
- -EBADFD 错误的设备指针
- -EINVAL 无效的参数
- 成功则返回0,失败返回负值,错误号如下:
设置AT Server 服务的响应标志
void atserver_set_echo(uint8_t flag);
设置AT Server 服务的响应标志
- 参数:
- flag:格式化字符串
- 返回值:
- 无返回值
获取AT Server 服务的响应标志
uint8_t atserver_get_echo(void);
获取AT Server 服务的响应标志
- 参数:
- flag:格式化字符串
- 返回值:
- 成功返回响应的标志
AT Server 服务请求互斥信号量
void atserver_lock(void);
AT Server 服务请求互斥信号量
- 参数:
- 无参数传入
- 返回值:
- 无返回值
AT Server 服务释放互斥信号量
void atserver_unlock(void);
AT Server 服务释放互斥信号量
- 参数:
- 无参数传入
- 返回值:
- 无返回值
透传模式回调函数的格式
void (*pass_through_cb)(void *data, int len);
- 参数:
- data: 传输的数据
- len: 数据长度
- 返回值:
- 无返回值
注册AT Server 服务透传模式的回调函数
int atserver_pass_through(int len, pass_through_cb cb);
注册AT Server 服务透传模式的回调函数
- 参数:
- len:AT Server 服务透传模式使用的数据长度
- cb: AT Server 服务透传模式的回调函数
- 返回值:
- 成功返回0
获取AT Server 服务使用的UART的波特率
int atserver_set_uartbaud(int baud);
获取AT Server 服务使用的UART的波特率
- 参数:
- baud:UART的波特率
- 返回值:
- 成功返回0,失败返回-1
AT Server 服务停止使用
void atserver_stop(void);
AT Server 服务停止使用
- 参数:
- 无参数传入
- 返回值:
- 无返回值
AT Server 服务恢复使用
void atserver_resume(void);
AT Server 服务恢复使用
- 参数:
- 无参数传入
- 返回值:
- 无返回值
显示AT Server 服务链表中的命令
void atserver_show_command(void);
显示AT Server 服务链表中的命令
- 参数:
- 无参数传入
- 返回值:
- 无返回值
示例代码
void at_cmd_at(char *cmd, int type, char *data)
{
if (type == EXECUTE_CMD) {
atserver_send("\r\nOK\r\n");
}
}
#define AT {"AT", at_cmd_at}
#define AT_NULL {NULL, NULL}
const atserver_cmd_t at_cmd[] = {
AT,
AT_NULL,
};
void at_server_init(utask_t *task)
{
uart_config_t config;
uart_config_default(&config);
utask_t *task = utask_new("at_srv", 2 * 1024, QUEUE_MSG_COUNT, AOS_DEFAULT_APP_PRI);
if (task) {
atserver_init(task, "uart1", &config);
atserver_set_output_terminator("");
atserver_add_command(at_cmd);
}
}