Skip to content

一个微型嵌入式命令行接口,支持命令补全,命令历史,子菜单堆栈等特性

Notifications You must be signed in to change notification settings

zhangjinxing/uecli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

特性

  • 命令补全:输入部分命令字符并按下TAB按键,将显示所有以输入开头的匹配命令列表。如果只有一项匹配,则自动完成输入命令。
  • 命令历史记录:任何时候按键盘UPDOWN按键可浏览输入的命令行历史记录。
  • 子菜单支持:定义命令表时可以定义菜单类型的条目,该条目的指针指向另外一个子菜单命令列表。输入菜单项名称即可进入该子菜单中,同时提示符也显示菜单的分层结构。
  • 长帮助信息支持:使用help + "指定命令"可以浏览显示该命令的更详细的长帮助信息。
  • 可配置和和裁剪:可在配置文件中指定是否打开以上功能支持
  • 增加命令行捕捉功能。捕捉后所有的输入的数据直接传入到捕捉的命令函数中,直到退出捕捉模式为止。

演示

  • 命令补全: 命令补全
  • 历史记录: 历史记录
  • 子菜单: 子菜单

移植

移植接口

移植uecli需要定义以下几个底层函数:

  • uecli_port_init:初始化时会调用该函数用以初始化底层端口
  • uecli_port_out:程序发送数据时会调用该函数将字符串数据发送出去
  • uecli_port_in:程序通过该函数获取输入数据

win_uart_port.c为win平台中的底层驱动示例

裁剪配置

uecli_cfg.h文件中可以对uecli进行配置和裁剪:

#define UECLI_01_COLOR          (0)     ///< 支持颜色扩展
#define UECLI_01_IN_HOOK        (1)     ///< 输入钩子支持
#define UECLI_01_LONG_HELP      (1)     ///< 长帮助信息支持
#define UECLI_01_SUBMENU        (1)     ///< 子菜单支持
#define UECLI_01_HISTORY        (1)     ///< 命令历史支持
#define UECLI_01_COMPLETE       (1)     ///< 自动补全支持

其他配置

uecli_cfg.h文件中可以对提示符最大字符数、命令行最大字符数、最大子菜单层数等进行配置:

#define UECLI_CFG_STR_MAXLEN     (32)    ///< 输入命令行字符串最大长度
#define UECLI_CFG_TEMP_MAXLEN    (64)    ///< 内部处理临时字符串最大长度
#define UECLI_CFG_MAX_ARGNUM     (6)     ///< 输入命令行中最大分割参数数量
#define UECLI_CFG_MAX_POMPTLINE  (32)    ///< 提示符字符串最大长度
#define UECLI_CFG_HISTORY_COUNT  (8)     ///< 输入命令行历史最大数量
#define UECLI_CFG_STACK_COUNT    (8)     ///< 子菜单堆栈最大数量
#define UECLI_CFG_AUTOCOMP_NUM   (16)    ///< 自动补全最大显示数量

不同平台的换行符

win平台和linux平台中换行符的定义是不同的:

  • win平台中换行符为\n
  • linux平台中换行符为\r\n 可在uecli_cfg.h文件中对换行符进行定义

使用

定义命令表

使用时首先需要定义一个命令表:

const uecli_Handle handtalbe[]=
{
    UECLI_DECLARE_COMMAND(testfun,"test", "一个测试函数"),
    UECLI_DECLARE_COMMAND(testfun,"testprint", "一个测试函数"),
    UECLI_DECLARE_COMMAND(testfun,"printtest1", "测试函数1"),
    UECLI_DECLARE_COMMAND(testfun,"printtest", "测试函数"),
    UECLI_DECLARE_SUBMENU(handtalbe,"submenu", "子菜单测试"),
    UECLI_DECLARE_END()
};
  • UECLI_DECLARE_COMMAND:该项目为一个功能命令项,输入该命令将会调用相应的函数并执行。

示例:UECLI_DECLARE_COMMAND(命令函数指针, 执行该命令输入的字符串, 描述信息, 可选的长帮助信息)

  • UECLI_DECLARE_SUBMENU:该项目为子菜单项,输入该命令将进入相应的子菜单。

示例:UECLI_DECLARE_SUBMENU(子菜单命令指针, 进入子菜单输入的字符串, 描述信息)

  • UECLI_ITEM_END:命令表定义结束

初始化

之后应调用uecli_Initialize来初始化命令表和其他内部数据,同时内部将会调用uecli_port_init函数来初始化底层接口。

处理接收的字符

对于接收到的每个字符,都调用uecli_ProcessRecChar函数来处理接收到的字符数据,当需要显示信息时,会调用uecli_port_out函数将打印数据传输出去。

uecli_Initialize(handtalbe); for (;;) { len = uecli_port_in(buff, 1024); /* 读取数据 */ uecli_ProcessRecChar(buff, len); }

About

一个微型嵌入式命令行接口,支持命令补全,命令历史,子菜单堆栈等特性

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages