在日常嵌入式开发中,用户经常会自行实现一套类似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);
};
在文档使用中是否遇到以下问题
更多建议
匿名提交