at
AT中间件提供AT命令的注册、解析、执行和结果上报功能,支持同步和异步阻塞式命令处理、交互模式、URC主动上报以及多通道输出。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| uapi_at_cmd_table_register | 注册AT命令列表 |
| uapi_at_cmd_abort_register | 注册AT命令打断函数 |
| uapi_at_send_async_result | 异步阻塞式AT命令结果发送 |
| uapi_at_interactivity_func_register | 注册AT交互命令处理函数 |
| uapi_at_report | 向默认通道输出AT打印信息 |
| uapi_at_print | 向默认通道输出格式化AT打印信息 |
| uapi_at_report_to_single_channel | 向指定通道输出AT打印信息 |
| uapi_at_urc_to_channel | 向指定通道发送主动上报信息 |
Functions
uapi_at_cmd_table_register
函数声明
errcode_t uapi_at_cmd_table_register(const at_cmd_entry_t *table, uint32_t len, uint32_t struct_max_size)
头文件清单
功能说明
- 注册AT命令列表到AT框架中,使AT命令可被解析和执行
- 将命令列表添加到全局链表中,并更新设置函数输入参数结构体的最大大小
- 当CONFIG_AT_SUPPORT_CMD_TABLE_CHECK开启时,会校验命令名称、命令回调函数及参数校验语法的合法性
- 同一命令名称不允许重复注册
前置条件
- AT框架已完成初始化,uapi_at_base_api_register已调用成功
- 入参table不为NULL,且指向的命令列表内存已申请成功
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| table | const at_cmd_entry_t * | AT命令列表起始地址 | 非NULL |
| len | uint32_t | AT命令列表长度 | 大于0 |
| struct_max_size | uint32_t | AT命令列表中设置函数输入参数结构体的最大大小 | 大于0 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 参数合法,命令列表注册成功 |
| ERRCODE_INVALID_PARAM | 参数无效 | table为NULL或len为0 |
| ERRCODE_MALLOC | 内存分配失败 | 分配链表节点内存失败 |
| Other | 其他错误码,参考errcode_t | 命令表校验失败等 |
参考案例
middleware/utils/at/at_audio_cmd/src/at_audio_cmd_register.cmiddleware/utils/at/at_bt_cmd/src/at_bt_cmd_register.cmiddleware/utils/at/at_net_cmd/src/at_net_cmd_register.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_AT_SUPPORT_CMD_TABLE_CHECK | 特性宏 | 支持AT命令表校验特性 | n |
uapi_at_cmd_abort_register
函数声明
头文件清单
功能说明
- 注册AT命令打断函数,用于在AT命令执行过程中被打断时回调
- 当异步阻塞式AT命令处于执行中状态时,接收到打断请求会调用已注册的打断函数
- 打断函数注册后,在AT命令超时或接收到新命令时触发打断流程
前置条件
- CONFIG_AT_SUPPORT_ASYNCHRONOUS宏已开启
- AT框架已完成初始化
- 入参func不为NULL
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| func | at_abort_func_t | AT命令打断函数指针 | 非NULL |
| arg | void * | AT命令打断函数入参 | - |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 打断函数注册成功 |
| ERRCODE_INVALID_PARAM | 参数无效 | func为NULL |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_AT_SUPPORT_ASYNCHRONOUS | 功能宏 | 支持AT异步阻塞特性 | n |
uapi_at_send_async_result
函数声明
头文件清单
功能说明
- 异步阻塞式AT命令结果发送接口,用于在异步命令执行完成后发送执行结果
- 当err为0时表示执行成功,AT框架输出"OK\r\n";非0表示执行失败,AT框架输出"ERROR\r\n"
- 调用后AT框架将继续处理消息队列中剩余的AT命令
前置条件
- CONFIG_AT_SUPPORT_ASYNCHRONOUS宏已开启
- 当前有异步阻塞式AT命令正在执行中
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| err | uint16_t | AT命令执行结果 | 0表示成功,其他值表示失败 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 结果消息发送成功 |
| ERRCODE_AT_MSG_SEND_ERROR | 消息发送失败 | 消息队列写入失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_AT_SUPPORT_ASYNCHRONOUS | 功能宏 | 支持AT异步阻塞特性 | n |
uapi_at_interactivity_func_register
函数声明
头文件清单
功能说明
- 注册AT交互命令处理函数,用于处理AT命令交互过程中的数据上报
- 交互模式下,AT框架将接收到的数据传递给已注册的交互处理函数
- 交互处理函数返回AT_RET_PROC_WAIT_INTERACTIVITY时继续等待交互,返回AT_RET_OK时结束交互
前置条件
- CONFIG_AT_SUPPORT_ASYNCHRONOUS宏已开启
- AT框架已完成初始化
- 入参func不为NULL
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| func | at_interactivity_func_t | AT命令交互命令处理函数指针 | 非NULL |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 交互函数注册成功 |
| ERRCODE_INVALID_PARAM | 参数无效 | func为NULL |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_AT_SUPPORT_ASYNCHRONOUS | 功能宏 | 支持AT异步阻塞特性 | n |
uapi_at_report
函数声明
头文件清单
功能说明
- 向当前AT命令对应的默认通道输出AT打印信息
- 输出信息必须携带字符串结束符
- 当str为NULL时直接返回,不执行输出操作
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| str | const char * | AT打印信息 | 非NULL,必须携带字符串结束符 |
uapi_at_print
函数声明
头文件清单
功能说明
- 向当前AT命令对应的默认通道输出格式化AT打印信息
- 支持可变参数格式化输出,格式化缓冲区大小由CONFIG_AT_PRINT_BUFFER_SIZE决定,默认128字节
- 当str为NULL或格式化结果为空时直接返回,不执行输出操作
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| str | const char * | AT格式化打印信息 | 非NULL,必须携带字符串结束符 |
| ... | - | 可变参数列表 | - |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_AT_PRINT_BUFFER_SIZE | 特性宏 | 支持AT打印缓冲区大小配置特性 | 128 |
uapi_at_report_to_single_channel
函数声明
头文件清单
功能说明
- 向指定通道输出AT打印信息,不限于当前命令所在通道
- 输出信息必须携带字符串结束符
- 当str为NULL时直接返回,不执行输出操作
前置条件
- 入参channel_id对应的通道已初始化并注册写函数
- 入参str不为NULL
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| channel_id | at_channel_id_t | AT通道号 | AT_UART_PORT |
| str | const char * | AT打印信息 | 非NULL,必须携带字符串结束符 |
uapi_at_urc_to_channel
函数声明
头文件清单
功能说明
- 向指定通道发送URC(Unsolicited Result Code)主动上报信息
- URC信息通过消息队列异步发送,不会阻塞当前执行流
- 当异步阻塞式AT命令正在执行且未设置AT_FLAG_NOT_BLOCK_URC标志时,URC信息将被阻塞不输出
前置条件
- CONFIG_AT_SUPPORT_NOTIFY_REPORT宏已开启
- AT框架已完成初始化,包含互斥锁相关API已注册
- 入参msg不为NULL且msg_len大于0
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| channel_id | at_channel_id_t | AT通道号 | AT_UART_PORT |
| msg | const char * | 主动上报消息 | 非NULL |
| msg_len | uint32_t | 主动上报消息长度 | 大于0 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | URC消息发送成功 |
| ERRCODE_INVALID_PARAM | 参数无效 | msg为NULL或msg_len为0 |
| ERRCODE_MALLOC | 内存分配失败 | 分配节点或字符串内存失败 |
| ERRCODE_MEMCPY | 内存拷贝失败 | 拷贝上报消息内容失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_AT_SUPPORT_NOTIFY_REPORT | 功能宏 | 支持AT主动上报特性 | n |
Enumerations
at_ret_t
typedef enum {
AT_RET_OK = 0,
AT_RET_SYNTAX_ERROR,
AT_RET_MALLOC_ERROR,
AT_RET_MEM_API_ERROR,
AT_RET_CHANNEL_PARA_ERROR,
AT_RET_CHANNEL_NOT_INIT,
AT_RET_CHANNEL_DATA_NULL,
AT_RET_CMD_PARA_ERROR,
AT_RET_CMD_FORMAT_ERROR,
AT_RET_CMD_NO_MATCH,
AT_RET_CMD_TYPE_ERROR,
AT_RET_CMD_IN_PROGRESS_BLOCK,
AT_RET_CMD_ATTR_NOT_ALLOW,
AT_RET_PROC_CMD_FUNC_MISSING,
AT_RET_PROC_READ_FUNC_MISSING,
AT_RET_PROC_TEST_FUNC_MISSING,
AT_RET_PROC_SET_FUNC_MISSING,
AT_RET_PROC_WAIT_INTERACTIVITY,
AT_RET_PROC_ABORT_CURRENT_COMMAND,
AT_RET_PARSE_PARA_ERROR,
AT_RET_PARSE_PARA_MISSING_ERROR,
AT_RET_PROGRESS_BLOCK,
AT_RET_TIMER_ERROR,
AT_RET_ABORT_DELAY,
AT_RET_RUN_ERROR,
AT_RET_FORWORD_ERROR
} at_ret_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| AT_RET_OK | 0 | 执行成功 |
| AT_RET_SYNTAX_ERROR | 1 | 语法错误 |
| AT_RET_MALLOC_ERROR | 2 | 内存分配错误 |
| AT_RET_MEM_API_ERROR | 3 | 内存API错误 |
| AT_RET_CHANNEL_PARA_ERROR | 4 | 通道参数错误 |
| AT_RET_CHANNEL_NOT_INIT | 5 | 通道未初始化 |
| AT_RET_CHANNEL_DATA_NULL | 6 | 通道数据为空 |
| AT_RET_CMD_PARA_ERROR | 7 | 命令参数错误 |
| AT_RET_CMD_FORMAT_ERROR | 8 | 命令格式错误 |
| AT_RET_CMD_NO_MATCH | 9 | 命令无匹配 |
| AT_RET_CMD_TYPE_ERROR | 10 | 命令类型错误 |
| AT_RET_CMD_IN_PROGRESS_BLOCK | 11 | 命令执行中阻塞 |
| AT_RET_CMD_ATTR_NOT_ALLOW | 12 | 命令属性不允许 |
| AT_RET_PROC_CMD_FUNC_MISSING | 13 | 执行命令函数缺失 |
| AT_RET_PROC_READ_FUNC_MISSING | 14 | 读命令函数缺失 |
| AT_RET_PROC_TEST_FUNC_MISSING | 15 | 测试命令函数缺失 |
| AT_RET_PROC_SET_FUNC_MISSING | 16 | 设置命令函数缺失 |
| AT_RET_PROC_WAIT_INTERACTIVITY | 17 | 等待交互 |
| AT_RET_PROC_ABORT_CURRENT_COMMAND | 18 | 打断当前命令 |
| AT_RET_PARSE_PARA_ERROR | 19 | 解析参数错误 |
| AT_RET_PARSE_PARA_MISSING_ERROR | 20 | 解析参数缺失错误 |
| AT_RET_PROGRESS_BLOCK | 21 | 执行中阻塞 |
| AT_RET_TIMER_ERROR | 22 | 定时器错误 |
| AT_RET_ABORT_DELAY | 23 | 打断延迟 |
| AT_RET_RUN_ERROR | 24 | 运行错误 |
| AT_RET_FORWORD_ERROR | 25 | 转发错误 |
at_cmd_type_t
typedef enum {
AT_CMD_TYPE_CMD = 0x00, /*!< AT execute command. "AT+TEST", for example. */
AT_CMD_TYPE_SET, /*!< AT set command. "AT+TEST=520", for example. */
AT_CMD_TYPE_READ, /*!< AT read command. "AT+TEST?", for example. */
AT_CMD_TYPE_TEST, /*!< AT test command. "AT+TEST=?", for example. */
#ifdef CONFIG_AT_SUPPORT_QUERY
AT_CMD_TYPE_QUERY, /*!< AT query command. "AT+TEST?=", for example. */
#endif
AT_CMD_TYPE_ERROR
} at_cmd_type_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| AT_CMD_TYPE_CMD | 0x00 | AT执行命令,如"AT+TEST" |
| AT_CMD_TYPE_SET | 0x01 | AT设置命令,如"AT+TEST=520" |
| AT_CMD_TYPE_READ | 0x02 | AT读取命令,如"AT+TEST?" |
| AT_CMD_TYPE_TEST | 0x03 | AT测试命令,如"AT+TEST=?" |
| AT_CMD_TYPE_QUERY | 0x04 | AT查询命令,如"AT+TEST?="(需开启CONFIG_AT_SUPPORT_QUERY) |
| AT_CMD_TYPE_ERROR | 0x05 | AT命令类型错误 |
at_syntax_type_t
typedef enum {
AT_SYNTAX_TYPE_INT,
AT_SYNTAX_TYPE_STRING,
AT_SYNTAX_TYPE_BIT_STRING,
AT_SYNTAX_TYPE_OCTET_STRING,
AT_SYNTAX_TYPE_NUM
} at_syntax_type_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| AT_SYNTAX_TYPE_INT | 0 | 整型参数 |
| AT_SYNTAX_TYPE_STRING | 1 | 字符串参数 |
| AT_SYNTAX_TYPE_BIT_STRING | 2 | 二进制字符串参数 |
| AT_SYNTAX_TYPE_OCTET_STRING | 3 | 十六进制字符串参数 |
| AT_SYNTAX_TYPE_NUM | 4 | 参数类型总数 |
at_syntax_attribute_t
typedef enum {
AT_SYNTAX_ATTR_NOT_SUPPORTED = 0x0001,
AT_SYNTAX_ATTR_OPTIONAL = 0x0002,
AT_SYNTAX_ATTR_AT_MIN_VALUE = 0x0004,
AT_SYNTAX_ATTR_AT_MAX_VALUE = 0x0008,
AT_SYNTAX_ATTR_LIST_VALUE = 0x0010,
AT_SYNTAX_ATTR_MAX_LENGTH = 0x0020,
AT_SYNTAX_ATTR_ADD_LENGTH = 0x0040,
AT_SYNTAX_ATTR_FIX_CASE = 0x0080,
AT_SYNTAX_ATTR_LENGTH_FIELD = 0x0100
} at_syntax_attribute_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| AT_SYNTAX_ATTR_NOT_SUPPORTED | 0x0001 | 标识该参数当前不支持 |
| AT_SYNTAX_ATTR_OPTIONAL | 0x0002 | 标识该参数可缺省 |
| AT_SYNTAX_ATTR_AT_MIN_VALUE | 0x0004 | 校验方式为最小值校验 |
| AT_SYNTAX_ATTR_AT_MAX_VALUE | 0x0008 | 校验方式为最大值校验 |
| AT_SYNTAX_ATTR_LIST_VALUE | 0x0010 | 校验方式为白名单校验 |
| AT_SYNTAX_ATTR_MAX_LENGTH | 0x0020 | 校验方式为长度校验 |
| AT_SYNTAX_ATTR_ADD_LENGTH | 0x0040 | 为该参数新增长度字段 |
| AT_SYNTAX_ATTR_FIX_CASE | 0x0080 | 标识字符串支持大小写混合 |
| AT_SYNTAX_ATTR_LENGTH_FIELD | 0x0100 | 标识该参数已预设长度字段 |
at_channel_id_t
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| AT_UART_PORT | 0x00 | UART通道 |
| AT_MAX_PORT_NUMBER | 0x01 | 最大通道数量 |
Structures
at_token_int_range_t
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| min_val | int32_t | 整型参数最小值 |
| max_val | int32_t | 整型参数最大值 |
at_token_int_list_t
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| num | uint32_t | 白名单中的整数个数 |
| values | const int32_t * | 白名单整数数组指针 |
at_token_string_t
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| max_length | uint32_t | 字符串最大长度 |
at_token_string_values_t
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| num | uint32_t | 白名单中的字符串个数 |
| values | const uint8_t * const * | 白名单字符串数组指针 |
at_token_bit_string_range_t
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| max_value | uint32_t | 二进制字符串最大值 |
at_token_bit_string_list_t
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| num | uint32_t | 白名单中的二进制值个数 |
| values | const uint32_t * | 白名单二进制值数组指针 |
at_token_hex_string_t
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| length_field_offset | uint32_t | 标识长度字段的偏移,记录十六进制字符串转换后的数据长度 |
| max_length | uint32_t | 十六进制字符串最大长度 |
at_para_parse_syntax_t
typedef struct {
uint32_t type : 4; /*!< Parameter type(at_syntax_type_t). */
uint32_t last : 1; /*!< Identify whether it is the last parameter. */
uint32_t attribute : 12; /*!< Parameter type(at_syntax_attribute_t). */
uint32_t offset : 15; /*!< Parameter offset of para blob. */
union {
at_token_int_range_t int_range;
at_token_int_list_t int_list;
at_token_string_t string;
at_token_string_values_t string_list;
at_token_bit_string_range_t bit_string_range;
at_token_bit_string_list_t bit_string_list;
at_token_hex_string_t octet_string;
} entry;
} at_para_parse_syntax_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| type | uint32_t:4 | 参数类型,取值参考at_syntax_type_t |
| last | uint32_t:1 | 标识是否为最后一个参数 |
| attribute | uint32_t:12 | 参数校验属性,取值参考at_syntax_attribute_t |
| offset | uint32_t:15 | 参数在参数结构体中的偏移 |
| entry | union | 参数校验内容联合体 |
at_cmd_entry_t
typedef struct {
const char *name; /*!< The name cannot be duplicate. */
const uint16_t cmd_id; /*!< The cmd_id cannot be duplicate. */
const uint16_t attribute;
const at_para_parse_syntax_t *syntax;
at_cmd_func_t cmd;
at_set_func_t set;
at_read_func_t read;
at_test_func_t test;
#ifdef CONFIG_AT_SUPPORT_QUERY
at_query_func_t query;
#endif
} at_cmd_entry_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| name | const char * | AT命令名称,不可重复 |
| cmd_id | const uint16_t | AT命令ID,不可重复 |
| attribute | const uint16_t | AT命令属性标志 |
| syntax | const at_para_parse_syntax_t * | AT命令参数校验语法表指针 |
| cmd | at_cmd_func_t | AT执行命令回调函数 |
| set | at_set_func_t | AT设置命令回调函数 |
| read | at_read_func_t | AT读取命令回调函数 |
| test | at_test_func_t | AT测试命令回调函数 |
| query | at_query_func_t | AT查询命令回调函数(需开启CONFIG_AT_SUPPORT_QUERY) |