Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Kernel Liteos A
提交
246bdd11
K
Kernel Liteos A
项目概览
OpenHarmony
/
Kernel Liteos A
9 个月 前同步成功
通知
450
Star
414
Fork
55
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel Liteos A
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
246bdd11
编写于
1月 07, 2022
作者:
O
openharmony_ci
提交者:
Gitee
1月 07, 2022
浏览文件
操作
浏览文件
下载
差异文件
!760 fix: shell支持exit退出,完善帮助信息,特殊处理不可见字符
Merge pull request !760 from huangshan/cherry-pick-1640932477
上级
f6d727fe
017d8163
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
91 addition
and
13 deletion
+91
-13
apps/shell/include/shmsg.h
apps/shell/include/shmsg.h
+3
-0
apps/shell/src/shmsg.c
apps/shell/src/shmsg.c
+56
-5
net/lwip-2.1/enhancement/src/api_shell.c
net/lwip-2.1/enhancement/src/api_shell.c
+1
-1
platform/console.c
platform/console.c
+22
-3
shell/full/src/cmds/shell_shellcmd.c
shell/full/src/cmds/shell_shellcmd.c
+9
-4
未找到文件。
apps/shell/include/shmsg.h
浏览文件 @
246bdd11
...
@@ -47,6 +47,9 @@ extern "C" {
...
@@ -47,6 +47,9 @@ extern "C" {
#define SHELL_EXEC_COMMAND_BYTES 4
#define SHELL_EXEC_COMMAND_BYTES 4
#define CMD_EXEC_COMMAND SHELL_EXEC_COMMAND" "
#define CMD_EXEC_COMMAND SHELL_EXEC_COMMAND" "
#define CMD_EXEC_COMMAND_BYTES (SHELL_EXEC_COMMAND_BYTES+1)
#define CMD_EXEC_COMMAND_BYTES (SHELL_EXEC_COMMAND_BYTES+1)
#define CMD_EXIT_COMMAND "exit"
#define CMD_EXIT_COMMAND_BYTES 4
#define CMD_EXIT_CODE_BASE_DEC 10
#define CONSOLE_IOC_MAGIC 'c'
#define CONSOLE_IOC_MAGIC 'c'
#define CONSOLE_CONTROL_REG_USERTASK _IO(CONSOLE_IOC_MAGIC, 7)
#define CONSOLE_CONTROL_REG_USERTASK _IO(CONSOLE_IOC_MAGIC, 7)
...
...
apps/shell/src/shmsg.c
浏览文件 @
246bdd11
...
@@ -44,7 +44,10 @@
...
@@ -44,7 +44,10 @@
#include "shell_pri.h"
#include "shell_pri.h"
#include "shcmd.h"
#include "shcmd.h"
#define CHAR_CTRL_C '\x03'
#define CHAR_CTRL_DEL '\x7F'
#define VISIABLE_CHAR(ch) ((ch) > 0x1F && (ch) < 0x7F)
char
*
GetCmdline
(
ShellCB
*
shellCB
)
char
*
GetCmdline
(
ShellCB
*
shellCB
)
{
{
...
@@ -202,7 +205,21 @@ void ParseEnterKey(OutputFunc outputFunc, ShellCB *shellCB)
...
@@ -202,7 +205,21 @@ void ParseEnterKey(OutputFunc outputFunc, ShellCB *shellCB)
shellCB
->
shellBuf
[
shellCB
->
shellBufOffset
]
=
'\0'
;
shellCB
->
shellBuf
[
shellCB
->
shellBufOffset
]
=
'\0'
;
}
}
NOTIFY:
NOTIFY:
outputFunc
(
"
\n
"
);
shellCB
->
shellBufOffset
=
0
;
ShellTaskNotify
(
shellCB
);
}
void
ParseCancelKey
(
OutputFunc
outputFunc
,
ShellCB
*
shellCB
)
{
if
((
shellCB
==
NULL
)
||
(
outputFunc
==
NULL
))
{
return
;
}
if
(
shellCB
->
shellBufOffset
<=
(
SHOW_MAX_LEN
-
1
))
{
shellCB
->
shellBuf
[
0
]
=
CHAR_CTRL_C
;
shellCB
->
shellBuf
[
1
]
=
'\0'
;
}
shellCB
->
shellBufOffset
=
0
;
shellCB
->
shellBufOffset
=
0
;
ShellTaskNotify
(
shellCB
);
ShellTaskNotify
(
shellCB
);
}
}
...
@@ -238,7 +255,7 @@ void ParseTabKey(OutputFunc outputFunc, ShellCB *shellCB)
...
@@ -238,7 +255,7 @@ void ParseTabKey(OutputFunc outputFunc, ShellCB *shellCB)
void
ParseNormalChar
(
char
ch
,
OutputFunc
outputFunc
,
ShellCB
*
shellCB
)
void
ParseNormalChar
(
char
ch
,
OutputFunc
outputFunc
,
ShellCB
*
shellCB
)
{
{
if
((
shellCB
==
NULL
)
||
(
outputFunc
==
NULL
))
{
if
((
shellCB
==
NULL
)
||
(
outputFunc
==
NULL
)
||
!
VISIABLE_CHAR
(
ch
)
)
{
return
;
return
;
}
}
...
@@ -256,7 +273,7 @@ void ShellCmdLineParse(char c, OutputFunc outputFunc, ShellCB *shellCB)
...
@@ -256,7 +273,7 @@ void ShellCmdLineParse(char c, OutputFunc outputFunc, ShellCB *shellCB)
const
char
ch
=
c
;
const
char
ch
=
c
;
int
ret
;
int
ret
;
if
((
shellCB
->
shellBufOffset
==
0
)
&&
(
ch
!=
'\n'
)
&&
(
ch
!=
'\0'
))
{
if
((
shellCB
->
shellBufOffset
==
0
)
&&
(
ch
!=
'\n'
)
&&
(
ch
!=
CHAR_CTRL_C
)
&&
(
ch
!=
'\0'
))
{
(
void
)
memset_s
(
shellCB
->
shellBuf
,
SHOW_MAX_LEN
,
0
,
SHOW_MAX_LEN
);
(
void
)
memset_s
(
shellCB
->
shellBuf
,
SHOW_MAX_LEN
,
0
,
SHOW_MAX_LEN
);
}
}
...
@@ -265,8 +282,11 @@ void ShellCmdLineParse(char c, OutputFunc outputFunc, ShellCB *shellCB)
...
@@ -265,8 +282,11 @@ void ShellCmdLineParse(char c, OutputFunc outputFunc, ShellCB *shellCB)
case
'\n'
:
/* enter */
case
'\n'
:
/* enter */
ParseEnterKey
(
outputFunc
,
shellCB
);
ParseEnterKey
(
outputFunc
,
shellCB
);
break
;
break
;
case
CHAR_CTRL_C
:
/* ctrl + c */
ParseCancelKey
(
outputFunc
,
shellCB
);
break
;
case
'\b'
:
/* backspace */
case
'\b'
:
/* backspace */
case
0x7F
:
/* delete(0x7F) */
case
CHAR_CTRL_DEL
:
/* delete(0x7F) */
ParseDeleteKey
(
outputFunc
,
shellCB
);
ParseDeleteKey
(
outputFunc
,
shellCB
);
break
;
break
;
case
'\t'
:
/* tab */
case
'\t'
:
/* tab */
...
@@ -358,6 +378,30 @@ void ChildExec(const char *cmdName, char *const paramArray[])
...
@@ -358,6 +378,30 @@ void ChildExec(const char *cmdName, char *const paramArray[])
}
}
}
}
int
CheckExit
(
const
char
*
cmdName
,
const
CmdParsed
*
cmdParsed
)
{
int
ret
=
0
;
if
(
strlen
(
cmdName
)
!=
CMD_EXIT_COMMAND_BYTES
||
strncmp
(
cmdName
,
CMD_EXIT_COMMAND
,
CMD_EXIT_COMMAND_BYTES
)
!=
0
)
{
return
0
;
}
if
(
cmdParsed
->
paramCnt
>
1
)
{
printf
(
"exit: too many arguments
\n
"
);
return
-
1
;
}
if
(
cmdParsed
->
paramCnt
==
1
)
{
char
*
p
;
ret
=
strtol
(
cmdParsed
->
paramArray
[
0
],
&
p
,
CMD_EXIT_CODE_BASE_DEC
);
if
(
*
p
!=
'\0'
)
{
printf
(
"exit: bad number: %s
\n
"
,
cmdParsed
->
paramArray
[
0
]);
return
-
1
;
}
}
exit
(
ret
);
}
static
void
DoCmdExec
(
const
char
*
cmdName
,
const
char
*
cmdline
,
unsigned
int
len
,
const
CmdParsed
*
cmdParsed
)
static
void
DoCmdExec
(
const
char
*
cmdName
,
const
char
*
cmdline
,
unsigned
int
len
,
const
CmdParsed
*
cmdParsed
)
{
{
int
ret
;
int
ret
;
...
@@ -378,6 +422,9 @@ static void DoCmdExec(const char *cmdName, const char *cmdline, unsigned int len
...
@@ -378,6 +422,9 @@ static void DoCmdExec(const char *cmdName, const char *cmdline, unsigned int len
}
}
}
}
}
else
{
}
else
{
if
(
CheckExit
(
cmdName
,
cmdParsed
)
<
0
)
{
return
;
}
(
void
)
syscall
(
__NR_shellexec
,
cmdName
,
cmdline
);
(
void
)
syscall
(
__NR_shellexec
,
cmdName
,
cmdline
);
}
}
}
}
...
@@ -535,7 +582,11 @@ static void ShellCmdProcess(ShellCB *shellCB)
...
@@ -535,7 +582,11 @@ static void ShellCmdProcess(ShellCB *shellCB)
if
(
buf
==
NULL
)
{
if
(
buf
==
NULL
)
{
break
;
break
;
}
}
if
(
buf
[
0
]
==
CHAR_CTRL_C
)
{
printf
(
"^C"
);
buf
[
0
]
=
'\n'
;
}
printf
(
"
\n
"
);
ExecCmdline
(
buf
);
ExecCmdline
(
buf
);
ShellSaveHistoryCmd
(
buf
,
shellCB
);
ShellSaveHistoryCmd
(
buf
,
shellCB
);
shellCB
->
cmdMaskKeyLink
=
shellCB
->
cmdHistoryKeyLink
;
shellCB
->
cmdMaskKeyLink
=
shellCB
->
cmdHistoryKeyLink
;
...
...
net/lwip-2.1/enhancement/src/api_shell.c
浏览文件 @
246bdd11
...
@@ -1568,7 +1568,7 @@ static void lwip_ping_usage(void)
...
@@ -1568,7 +1568,7 @@ static void lwip_ping_usage(void)
"
\n
ping [-n cnt] [-w interval] [-l data_len] destination"
"
\n
ping [-n cnt] [-w interval] [-l data_len] destination"
"
\n
ping [-t] [-w interval] destination"
"
\n
ping [-t] [-w interval] destination"
"
\n
ping -k"
);
"
\n
ping -k"
);
PRINTK
(
"
\n
-t means ping forever, user can use -k to stop the forever ping"
);
PRINTK
(
"
\n
-t means ping forever, user can use -k to stop the forever ping
\n
"
);
}
}
LWIP_STATIC
int
osPingFunc
(
u32_t
destip
,
u32_t
cnt
,
u32_t
interval
,
u32_t
data_len
)
LWIP_STATIC
int
osPingFunc
(
u32_t
destip
,
u32_t
cnt
,
u32_t
interval
,
u32_t
data_len
)
...
...
platform/console.c
浏览文件 @
246bdd11
...
@@ -67,6 +67,9 @@ STATIC SPIN_LOCK_INIT(g_consoleSpin);
...
@@ -67,6 +67,9 @@ STATIC SPIN_LOCK_INIT(g_consoleSpin);
#define CONSOLE_SEND_TASK_EXIT 0x04U
#define CONSOLE_SEND_TASK_EXIT 0x04U
#define CONSOLE_SEND_TASK_RUNNING 0x10U
#define CONSOLE_SEND_TASK_RUNNING 0x10U
#define SHELL_ENTRY_NAME "ShellEntry"
#define SHELL_ENTRY_NAME_LEN 10
CONSOLE_CB
*
g_console
[
CONSOLE_NUM
];
CONSOLE_CB
*
g_console
[
CONSOLE_NUM
];
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
...
@@ -1442,15 +1445,31 @@ BOOL ConsoleEnable(VOID)
...
@@ -1442,15 +1445,31 @@ BOOL ConsoleEnable(VOID)
return
FALSE
;
return
FALSE
;
}
}
BOOL
IsShellEntryRunning
(
UINT32
shellEntryId
)
{
LosTaskCB
*
taskCB
;
if
(
shellEntryId
==
SHELL_ENTRYID_INVALID
)
{
return
FALSE
;
}
taskCB
=
OsGetTaskCB
(
shellEntryId
);
return
!
OsTaskIsUnused
(
taskCB
)
&&
(
strlen
(
taskCB
->
taskName
)
==
SHELL_ENTRY_NAME_LEN
&&
strncmp
(
taskCB
->
taskName
,
SHELL_ENTRY_NAME
,
SHELL_ENTRY_NAME_LEN
)
==
0
);
}
INT32
ConsoleTaskReg
(
INT32
consoleID
,
UINT32
taskID
)
INT32
ConsoleTaskReg
(
INT32
consoleID
,
UINT32
taskID
)
{
{
if
(
g_console
[
consoleID
-
1
]
->
shellEntryId
==
SHELL_ENTRYID_INVALID
)
{
UINT32
intSave
;
LOS_SpinLockSave
(
&
g_consoleSpin
,
&
intSave
);
if
(
!
IsShellEntryRunning
(
g_console
[
consoleID
-
1
]
->
shellEntryId
))
{
g_console
[
consoleID
-
1
]
->
shellEntryId
=
taskID
;
g_console
[
consoleID
-
1
]
->
shellEntryId
=
taskID
;
LOS_SpinUnlockRestore
(
&
g_consoleSpin
,
intSave
);
(
VOID
)
OsSetCurrProcessGroupID
(
OsGetUserInitProcessID
());
(
VOID
)
OsSetCurrProcessGroupID
(
OsGetUserInitProcessID
());
return
LOS_OK
;
return
LOS_OK
;
}
}
LOS_SpinUnlockRestore
(
&
g_consoleSpin
,
intSave
);
return
LOS_NOK
;
return
g_console
[
consoleID
-
1
]
->
shellEntryId
==
taskID
?
LOS_OK
:
LOS_NOK
;
}
}
BOOL
SetSerialNonBlock
(
const
CONSOLE_CB
*
consoleCB
)
BOOL
SetSerialNonBlock
(
const
CONSOLE_CB
*
consoleCB
)
...
...
shell/full/src/cmds/shell_shellcmd.c
浏览文件 @
246bdd11
...
@@ -31,6 +31,10 @@
...
@@ -31,6 +31,10 @@
#include "shcmd.h"
#include "shcmd.h"
#define DEFAULT_SCREEN_WIDTH 80
#define MAX_CMD_KEY_WIDTH 12
#define CMD_ITEM_PER_LINE (DEFAULT_SCREEN_WIDTH / (MAX_CMD_KEY_WIDTH + 1))
UINT32
OsShellCmdHelp
(
UINT32
argc
,
const
CHAR
**
argv
)
UINT32
OsShellCmdHelp
(
UINT32
argc
,
const
CHAR
**
argv
)
{
{
UINT32
loop
=
0
;
UINT32
loop
=
0
;
...
@@ -45,15 +49,16 @@ UINT32 OsShellCmdHelp(UINT32 argc, const CHAR **argv)
...
@@ -45,15 +49,16 @@ UINT32 OsShellCmdHelp(UINT32 argc, const CHAR **argv)
PRINTK
(
"*******************shell commands:*************************
\n
"
);
PRINTK
(
"*******************shell commands:*************************
\n
"
);
LOS_DL_LIST_FOR_EACH_ENTRY
(
curCmdItem
,
&
(
cmdInfo
->
cmdList
.
list
),
CmdItemNode
,
list
)
{
LOS_DL_LIST_FOR_EACH_ENTRY
(
curCmdItem
,
&
(
cmdInfo
->
cmdList
.
list
),
CmdItemNode
,
list
)
{
if
((
loop
&
(
8
-
1
))
==
0
)
{
/* 8 - 1:
just align print */
if
((
loop
%
CMD_ITEM_PER_LINE
)
==
0
)
{
/*
just align print */
PRINTK
(
"
\n
"
);
PRINTK
(
"
\n
"
);
}
}
PRINTK
(
"%-12s
"
,
curCmdItem
->
cmd
->
cmdKey
);
PRINTK
(
"%-12s "
,
curCmdItem
->
cmd
->
cmdKey
);
loop
++
;
loop
++
;
}
}
PRINTK
(
"
\n\n
After shell prompt
\"
OHOS #
\"
:
\n
"
PRINTK
(
"
\n
"
);
"Use `<cmd> [args ...]` to run built-in shell commands listed above.
\n
"
"Use `exec <cmd> [args ...]` or `./<cmd> [args ...]` to run external commands.
\n
"
);
return
0
;
return
0
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录