更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
shcmd.h
浏览该文件的文档.
1/*
2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this list of
9 * conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12 * of conditions and the following disclaimer in the documentation and/or other materials
13 * provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16 * to endorse or promote products derived from this software without specific prior written
17 * permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef _HWLITEOS_SHELL_SHCMD_H
33#define _HWLITEOS_SHELL_SHCMD_H
34
35#include "string.h"
36#include "stdlib.h"
37#include "los_base.h"
38#include "los_list.h"
39#include "shcmdparse.h"
40#include "show.h"
41
42#include "los_tables.h"
43#include "console.h"
44
45#ifdef __cplusplus
46#if __cplusplus
47extern "C" {
48#endif /* __cplusplus */
49#endif /* __cplusplus */
50
51typedef BOOL (*CmdVerifyTransID)(UINT32 transID);
52
53typedef struct {//命令项
54 CmdType cmdType; ///< 命令类型
55 ///< CMD_TYPE_EX:不支持标准命令参数输入,会把用户填写的命令关键字屏蔽掉,例如:输入ls /ramfs,传入给注册函数的参数只有/ramfs,而ls命令关键字并不会被传入。
56 ///< CMD_TYPE_STD:支持的标准命令参数输入,所有输入的字符都会通过命令解析后被传入。
57 const CHAR *cmdKey; ///< 命令关键字,例如:ls 函数在Shell中访问的名称。
58 UINT32 paraNum; ///< 调用的执行函数的入参最大个数,暂不支持。
59 CmdCallBackFunc cmdHook;///<命令执行函数地址,即命令实际执行函数。
60} CmdItem;
61/*! 命令节点*/
62typedef struct {
63 LOS_DL_LIST list; ///< 双向链表
64 CmdItem *cmd; ///< 命令项
66
67/*! global info for shell module | shell 模块的全局信息*/
68typedef struct {
69 CmdItemNode cmdList; ///< 命令项节点
70 UINT32 listNum; ///<节点数量
71 UINT32 initMagicFlag; ///<初始魔法标签 0xABABABAB
72 LosMux muxLock; ///< 操作链表互斥锁
73 CmdVerifyTransID transIdHook; ///< 暂不知何意.
75/*! 一个shell命令的结构体,命令有长有短,鸿蒙采用了可变数组的方式实现 */
76typedef struct {
77 UINT32 count; ///< 字符数量
78 LOS_DL_LIST list; ///< 双向链表
79 CHAR cmdString[0]; ///< 字符串,可变数组的一种实现方式.
81/// shell 静态宏方式注册
82#define SHELLCMD_ENTRY(l, cmdType, cmdKey, paraNum, cmdHook) \
83 CmdItem l LOS_HAL_TABLE_ENTRY(shellcmd) = { \
84 cmdType, \
85 cmdKey, \
86 paraNum, \
87 cmdHook \
88 }
89/// 是否需要新开一行
90#define NEED_NEW_LINE(timesPrint, lineCap) ((timesPrint) % (lineCap) == 0)
91#define SCREEN_IS_FULL(timesPrint, lineCap) ((timesPrint) >= ((lineCap) * DEFAULT_SCREEN_HEIGHT))
92
93extern UINT32 OsCmdInit(VOID);
94extern CmdModInfo *OsCmdInfoGet(VOID);
95extern UINT32 OsCmdExec(CmdParsed *cmdParsed, CHAR *cmdStr);
96extern UINT32 OsCmdKeyShift(const CHAR *cmdKey, CHAR *cmdOut, UINT32 size);
97extern INT32 OsTabCompletion(CHAR *cmdKey, UINT32 *len);
98extern VOID OsShellCmdPush(const CHAR *string, CmdKeyLink *cmdKeyLink);
99extern VOID OsShellHistoryShow(UINT32 value, ShellCB *shellCB);
100extern UINT32 OsShellKeyInit(ShellCB *shellCB);
101extern VOID OsShellKeyDeInit(CmdKeyLink *cmdKeyLink);
102extern UINT32 OsShellSysCmdRegister(VOID);
103
104#ifdef __cplusplus
105#if __cplusplus
106}
107#endif
108#endif
109
110#endif /* _HWLITEOS_SHELL_SHCMD_H */
unsigned int OsCmdExec(CmdParsed *cmdParsed, char *cmdStr)
执行命令,shell是运行程序的程序.
Definition: shcmd.c:586
unsigned int OsShellKeyInit(ShellCB *shellCB)
shell 命令初始化
Definition: shcmd.c:465
void OsShellHistoryShow(unsigned int value, ShellCB *shellCB)
显示shell命令历史记录,支持上下键方式
Definition: shcmd.c:540
void OsShellCmdPush(const char *string, CmdKeyLink *cmdKeyLink)
将shell命令 string 以 CmdKeyLink 方式加入链表
Definition: shcmd.c:514
int OsTabCompletion(char *cmdKey, unsigned int *len)
tab键
Definition: shcmd.c:452
void OsShellKeyDeInit(CmdKeyLink *cmdKeyLink)
shell的析构函数
Definition: shcmd.c:497
unsigned int OsCmdKeyShift(const char *cmdKey, char *cmdOut, unsigned int size)
Definition: shcmd.c:386
CmdType
Definition: shell.h:88
双向链表由内联函数实现 http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-apx-dll....
signed int INT32
Definition: los_typedef.h:60
unsigned int UINT32
Definition: los_typedef.h:57
char CHAR
Definition: los_typedef.h:63
size_t BOOL
Definition: los_typedef.h:88
BOOL(* CmdVerifyTransID)(UINT32 transID)
Definition: shcmd.h:51
UINT32 OsCmdInit(VOID)
Definition: shcmd.c:795
UINT32 OsShellSysCmdRegister(VOID)
注册系统自带的shell命令
Definition: shcmd.c:650
CmdModInfo * OsCmdInfoGet(VOID)
获取全局变量
Definition: shcmd.c:52
Definition: shcmd.h:53
const CHAR * cmdKey
命令关键字,例如:ls 函数在Shell中访问的名称。
Definition: shcmd.h:57
CmdCallBackFunc cmdHook
命令执行函数地址,即命令实际执行函数。
Definition: shcmd.h:59
UINT32 paraNum
调用的执行函数的入参最大个数,暂不支持。
Definition: shcmd.h:58
CmdType cmdType
Definition: shcmd.h:54
CmdItem * cmd
命令项
Definition: shcmd.h:64
LOS_DL_LIST list
双向链表
Definition: shcmd.h:63
CmdItemNode cmdList
命令项节点
Definition: shcmd.h:69
CmdVerifyTransID transIdHook
暂不知何意.
Definition: shcmd.h:73
UINT32 initMagicFlag
初始魔法标签 0xABABABAB
Definition: shcmd.h:71
LosMux muxLock
操作链表互斥锁
Definition: shcmd.h:72
UINT32 listNum
节点数量
Definition: shcmd.h:70
Definition: los_mux.h:73
Definition: shell.h:71
u32_t(* CmdCallBackFunc)(u32_t argc, const char **argv)
Definition: types_adapt.h:86