在日常嵌入式开发中,用户经常会自行实现一套类似Linux Shell的交互工具来实现通过串口命令控制设备进入某种特定的状态,或执行某个特定的操作。如系统自检,模拟运行,或者进入手动模式进行设备点动。AliOS-Things原生实现了一套名为CLI(command-line interface)的命令行交互工具,在提供基本的系统交互命令的基础上,也支持用户自定义命令。对应的AOS API接口实现位于:osal/aos/cli.c中;对应的模块内部实现位于:kernel/cli/目录中。

包含头文件

#include "aos/cli.h"

API列表

aos_cli_init 初始化CLI模块(只需系统启动时初始化一次即可)
aos_cli_stop 停止并释放CLI模块系统资源
​aos_cli_get_tag 获取特殊的CLI打印标识符
aos_cli_register_command CLI命令绑定
​aos_cli_unregister_command CLI命令解绑
​aos_cli_register_commands CLI命令集绑定(多个CLI命令)
aos_cli_unregister_commands CLI命令集解绑(多个CLI命令)
aos_cli_chg_passwd 更改CLI登陆密码(需要先打开CLI密码登陆功能)

API详情

aos_cli_init()

初始化CLI模块。

函数原型

int aos_cli_init(void)

返回参数

0 执行成功
其他 执行错误

调用示例

int ret = 0;
ret = aos_cli_init();

aos_cli_stop()

停止并释放CLI模块系统资源。

函数原型

int aos_cli_stop(void)

返回参数

0 执行成功
其他 执行错误

调用示例

int ret = 0;
ret = aos_cli_stop();

aos_cli_get_tag()

获取特殊的CLI打印标识符。

函数原型

const char *aos_cli_get_tag(void)

返回参数

const char *tag 特殊的CLI打印标识符
NULL 执行错误

调用示例

const char *tag = aos_cli_get_tag();

aos_cli_register_command()

CLI命令绑定。

函数原型

int aos_cli_register_command(const struct cli_command *cmd)

输入参数

const struct cli_command *cmd 需要执行绑定的CLI命令

返回参数

0 执行成功
其他 执行错误

调用示例

const struct cli_command command;
int ret = 0;
ret = aos_cli_register_command(&command);

aos_cli_unregister_command()

CLI命令解绑。

函数原型

int aos_cli_unregister_command(const struct cli_command *cmd)

输入参数

const struct cli_command *cmd 需要执行解绑的CLI命令

返回参数

0 执行成功
其他 执行错误

调用示例

int ret = 0;
ret = aos_cli_unregister_command(&command);

aos_cli_register_commands()

CLI命令集绑定。

函数原型

int aos_cli_register_commands(const struct cli_command *cmds, int num)

输入参数

const struct cli_command *cmds 需要执行绑定的CLI命令集
int num 命令集包含的CLI命令个数

返回参数

0 执行成功
其他 执行错误

调用示例

const struct cli_command command[3];
int ret = 0;
ret = aos_cli_register_commands(&command, 3);

aos_cli_unregister_commands()

CLI命令集解绑。

函数原型

int aos_cli_unregister_commands(const struct cli_command *cmds, int num)

输入参数

const struct cli_command *cmds 需要执行解绑的CLI命令集
int num 命令集包含的CLI命令个数

返回参数

0 执行成功
其他 执行错误

调用示例

// const struct cli_command command[3];
int ret = 0;
ret = aos_cli_register_commands(&command, 3);

aos_cli_chg_passwd

更改CLI登陆密码

函数原型

aos_cli_chg_passwd(char *old_passwd, char *new_passwd)

输入参数

char *old_passwd 旧密码(默认初始密码是aos),密码长度限制为16ytes
char *new_passwd 新设置的密码,密码长度限制为16ytes

输出参数

0 密码修改成功
其他 密码修改失败

调用示例

int ret;
char old_passwd[16] = "aaa"
char new_passwd[16] = "bbb"
ret = aos_cli_chg_passwd(old_passwd, new_passwd);

配置文件

  • cli_conf.h

文件位置:kernel/cli/include/cli_conf.h描述:CLI模块相关配置配置项

CLI_CONFIG_MINIMUM_MODE 0 CLI最小工作模式
CLI_CONFIG_INBUF_SIZE 256 CLI传入缓存大小
CLI_CONFIG_OUTBUF_SIZE 512 CLI传出缓存大小
CLI_CONFIG_MAX_COMMANDS 64 CLI可支持最大命令个数
CLI_CONFIG_MAX_ARG_NUM 16 CLI可支持最大命令参数个数
CLI_CONFIG_MAX_ONCECMD_NUM 4 CLI可支持最大(单次执行)命令个数
CLI_CONFIG_STACK_SIZE 2048 CLI任务栈大小
CLI_CONFIG_TASK_PRIORITY 60 CLI任务优先级
CLI_CONFIG_TELNET_SUPPORT 0 CLI TELNEL工作模式

移植说明

和CLI相关的移植实现都在cli_adapt.h/.c文件中,位于/kernel/cli/cli_adapt.c用户可以参考进行实现。需要移植的函数及说明:

cli_getchar()

从串口接收字符。

函数原型

int32_t cli_getchar(char *inbuf)

参数列表

char *inbuf CLI 从串口接收的字符指针

返回参数

返回1表示CLI从串口接收到字符,0表示暂无字符输入。

cli_putstr()

通过串口或TELNET 输出字符串。

函数原型

int32_t cli_putstr(char *msg)

参数列表

char *msg CLI 通过串口或TELNET 输出的字符串指针

返回参数

返回0表示字符串输出成功,其他则表示失败。

其他

命令结构定义

struct cli_command {
    const char *name;
    const char *help;

    void (*function)(char *outbuf, int len, int argc, char **argv);
};