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 错误的硬件操作

初始化指定传输数据通道的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 错误的硬件操作

格式化输出字符串

int atserver_send(const char *format, ...);

根据格式化字符串以及输出列表,发送对应的字符串,成功则返回0,失败返回负值

  • 参数:
    • format:格式化字符串
    • ...:输出列表
  • 返回值:
    • 成功则返回0,失败返回负值,错误号如下:
      • -EINVAL 无效的参数
      • -EIO 错误的硬件操作

使用参数列表格式化输出

int atserver_sendv(const char *command, va_list args);

使用参数列表,发送对应的字符串,成功则返回0,失败返回负值

  • 参数:
    • command:格式化字符串
    • args:可变参数列表的对象
  • 返回值:
    • 成功则返回0,失败返回负值,错误号如下:
      • -EINVAL 无效的参数
      • -EIO 错误的硬件操作

发送数据

int atserver_write(const void *data, int size);

根据数据长度,发送对应的数据;

  • 参数:
    • data:用户数据
    • size:数据长度
  • 返回值:
    • 成功则返回0,失败返回负值,错误号如下:
      • -EIO 错误的硬件操作

命令回调函数的格式

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 内存不足

链接 AT Server 服务的命令表

int atserver_add_command(const atserver_cmd_t at_cmd[]);

将新命令表(表格最后以NULL结尾)加入AT Server 服务的命令链表中,成功则返回0,失败则返回负值,

  • 参数:
    • at_cmd:待链接的命令表
  • 返回值:
    • 成功则返回0,失败返回负值,错误号如下:
      • -EINVAL 无效的参数
      • -ENOMEM 内存不足

设置结束字符串

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 无效的参数

设置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);
    }
}

results matching ""

    No results matching ""