shell: creating new module for help functionality
1. Created new shell module: shell_help. 2. Simplified command handlers with new shell print macros. 3. Removed help functions from command handlers. Signed-off-by: Jakub Rzeszutko <jakub.rzeszutko@nordicsemi.no>
This commit is contained in:
parent
e0be6a10b3
commit
3064ca4f2f
27 changed files with 686 additions and 956 deletions
|
@ -41,6 +41,7 @@
|
|||
"Disable shell echo. Editing keys and meta-keys are not handled"
|
||||
|
||||
#define SHELL_HELP_SHELL "Useful, not Unix-like shell commands."
|
||||
#define SHELL_HELP_HELP "Prints help message."
|
||||
|
||||
#define SHELL_MSG_UNKNOWN_PARAMETER " unknown parameter: "
|
||||
|
||||
|
@ -96,7 +97,7 @@ static int cursor_position_get(const struct shell *shell, u16_t *x, u16_t *y)
|
|||
/* Index start position in the buffer where 'y'
|
||||
* is stored.
|
||||
*/
|
||||
buff_idx = 2U;
|
||||
buff_idx = 2;
|
||||
|
||||
while (shell->ctx->temp_buff[buff_idx] != ';') {
|
||||
*y = *y * 10 +
|
||||
|
@ -184,157 +185,84 @@ static int cmd_clear(const struct shell *shell, size_t argc, char **argv)
|
|||
{
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
int ret = shell_cmd_precheck(shell, (argc == 1));
|
||||
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
SHELL_VT100_CMD(shell, SHELL_VT100_CURSORHOME);
|
||||
SHELL_VT100_CMD(shell, SHELL_VT100_CLEARSCREEN);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_shell(const struct shell *shell, size_t argc, char **argv)
|
||||
{
|
||||
int ret = shell_cmd_precheck(shell, (argc == 2));
|
||||
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
shell_fprintf(shell, SHELL_ERROR, "%s:%s%s\n", argv[0],
|
||||
SHELL_MSG_UNKNOWN_PARAMETER, argv[1]);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int cmd_bacskpace_mode_backspace(const struct shell *shell, size_t argc,
|
||||
char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
int ret = shell_cmd_precheck(shell, (argc == 1));
|
||||
shell->ctx->internal.flags.mode_delete = 0;
|
||||
|
||||
if (ret == 0) {
|
||||
shell->ctx->internal.flags.mode_delete = 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_bacskpace_mode_delete(const struct shell *shell, size_t argc,
|
||||
char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
int ret = shell_cmd_precheck(shell, (argc == 1));
|
||||
shell->ctx->internal.flags.mode_delete = 1;
|
||||
|
||||
if (ret == 0) {
|
||||
shell->ctx->internal.flags.mode_delete = 1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cmd_bacskpace_mode(const struct shell *shell, size_t argc,
|
||||
char **argv)
|
||||
{
|
||||
int ret = shell_cmd_precheck(shell, (argc == 2));
|
||||
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
shell_fprintf(shell, SHELL_ERROR, "%s:%s%s\n", argv[0],
|
||||
SHELL_MSG_UNKNOWN_PARAMETER, argv[1]);
|
||||
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_colors_off(const struct shell *shell, size_t argc, char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
int ret = shell_cmd_precheck(shell, (argc == 1));
|
||||
shell->ctx->internal.flags.use_colors = 0;
|
||||
|
||||
if (ret == 0) {
|
||||
shell->ctx->internal.flags.use_colors = 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_colors_on(const struct shell *shell, size_t argc, char **argv)
|
||||
{
|
||||
ARG_UNUSED(argv);
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
int ret = shell_cmd_precheck(shell, (argc == 1));
|
||||
shell->ctx->internal.flags.use_colors = 1;
|
||||
|
||||
if (ret == 0) {
|
||||
shell->ctx->internal.flags.use_colors = 1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cmd_colors(const struct shell *shell, size_t argc, char **argv)
|
||||
{
|
||||
int ret = shell_cmd_precheck(shell, (argc == 2));
|
||||
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
shell_fprintf(shell, SHELL_ERROR, "%s:%s%s\n", argv[0],
|
||||
SHELL_MSG_UNKNOWN_PARAMETER, argv[1]);
|
||||
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_echo_off(const struct shell *shell, size_t argc, char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
int ret = shell_cmd_precheck(shell, (argc == 1));
|
||||
shell->ctx->internal.flags.echo = 0;
|
||||
|
||||
if (ret == 0) {
|
||||
shell->ctx->internal.flags.echo = 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_echo_on(const struct shell *shell, size_t argc, char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
int ret = shell_cmd_precheck(shell, (argc == 1));
|
||||
shell->ctx->internal.flags.echo = 1;
|
||||
|
||||
if (ret == 0) {
|
||||
shell->ctx->internal.flags.echo = 1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_echo(const struct shell *shell, size_t argc, char **argv)
|
||||
{
|
||||
int ret = shell_cmd_precheck(shell, (argc <= 2));
|
||||
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (argc == 2) {
|
||||
shell_fprintf(shell, SHELL_ERROR, "%s:%s%s\n", argv[0],
|
||||
SHELL_MSG_UNKNOWN_PARAMETER, argv[1]);
|
||||
shell_error(shell, "%s:%s%s", argv[0],
|
||||
SHELL_MSG_UNKNOWN_PARAMETER, argv[1]);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
shell_fprintf(shell, SHELL_NORMAL, "Echo status: %s\n",
|
||||
flag_echo_is_set(shell) ? "on" : "off");
|
||||
shell_print(shell, "Echo status: %s",
|
||||
flag_echo_is_set(shell) ? "on" : "off");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -344,42 +272,36 @@ static int cmd_help(const struct shell *shell, size_t argc, char **argv)
|
|||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
shell_fprintf(shell, SHELL_NORMAL,
|
||||
shell_print(shell,
|
||||
"Please press the <Tab> button to see all available commands.\n"
|
||||
"You can also use the <Tab> button to prompt or auto-complete"
|
||||
" all commands or its subcommands.\n"
|
||||
"You can try to call commands with <-h> or <--help> parameter"
|
||||
" for more information.\n");
|
||||
" for more information.");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_history(const struct shell *shell, size_t argc, char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
size_t i = 0;
|
||||
size_t len;
|
||||
int ret;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_SHELL_HISTORY)) {
|
||||
shell_fprintf(shell, SHELL_ERROR, SHELL_MSG_CMD_NOT_SUPPORTED);
|
||||
shell_error(shell, "Command not supported.");
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
ret = shell_cmd_precheck(shell, (argc == 1));
|
||||
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
shell_history_get(shell->history, true,
|
||||
shell->ctx->temp_buff, &len);
|
||||
|
||||
if (len) {
|
||||
shell_fprintf(shell, SHELL_NORMAL, "[%3d] %s\n",
|
||||
i++, shell->ctx->temp_buff);
|
||||
shell_print(shell, "[%3d] %s",
|
||||
i++, shell->ctx->temp_buff);
|
||||
|
||||
} else {
|
||||
break;
|
||||
|
@ -394,72 +316,46 @@ static int cmd_history(const struct shell *shell, size_t argc, char **argv)
|
|||
static int cmd_shell_stats_show(const struct shell *shell, size_t argc,
|
||||
char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
if (!IS_ENABLED(CONFIG_SHELL_STATS)) {
|
||||
shell_fprintf(shell, SHELL_ERROR, SHELL_MSG_CMD_NOT_SUPPORTED);
|
||||
shell_error(shell, "Command not supported.");
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
int ret = shell_cmd_precheck(shell, (argc == 1));
|
||||
shell_print(shell, "Lost logs: %u", shell->stats->log_lost_cnt);
|
||||
|
||||
if (ret == 0) {
|
||||
shell_fprintf(shell, SHELL_NORMAL, "Lost logs: %u\n",
|
||||
shell->stats->log_lost_cnt);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_shell_stats_reset(const struct shell *shell,
|
||||
size_t argc, char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
if (!IS_ENABLED(CONFIG_SHELL_STATS)) {
|
||||
shell_fprintf(shell, SHELL_ERROR, SHELL_MSG_CMD_NOT_SUPPORTED);
|
||||
shell_error(shell, "Command not supported.");
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
int ret = shell_cmd_precheck(shell, (argc == 1));
|
||||
shell->stats->log_lost_cnt = 0;
|
||||
|
||||
if (ret == 0) {
|
||||
shell->stats->log_lost_cnt = 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cmd_shell_stats(const struct shell *shell, size_t argc, char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
|
||||
if (argc == 1) {
|
||||
shell_help_print(shell);
|
||||
} else {
|
||||
shell_fprintf(shell, SHELL_ERROR, "%s:%s%s\n", argv[0],
|
||||
SHELL_MSG_UNKNOWN_PARAMETER, argv[1]);
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_resize_default(const struct shell *shell,
|
||||
size_t argc, char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
|
||||
int ret = shell_cmd_precheck(shell, (argc == 1));
|
||||
SHELL_VT100_CMD(shell, SHELL_VT100_SETCOL_80);
|
||||
shell->ctx->vt100_ctx.cons.terminal_wid = SHELL_DEFAULT_TERMINAL_WIDTH;
|
||||
shell->ctx->vt100_ctx.cons.terminal_hei = SHELL_DEFAULT_TERMINAL_HEIGHT;
|
||||
|
||||
if (ret == 0) {
|
||||
SHELL_VT100_CMD(shell, SHELL_VT100_SETCOL_80);
|
||||
shell->ctx->vt100_ctx.cons.terminal_wid =
|
||||
SHELL_DEFAULT_TERMINAL_WIDTH;
|
||||
shell->ctx->vt100_ctx.cons.terminal_hei =
|
||||
SHELL_DEFAULT_TERMINAL_HEIGHT;
|
||||
}
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_resize(const struct shell *shell, size_t argc, char **argv)
|
||||
|
@ -467,18 +363,13 @@ static int cmd_resize(const struct shell *shell, size_t argc, char **argv)
|
|||
int err;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_SHELL_CMDS_RESIZE)) {
|
||||
shell_fprintf(shell, SHELL_ERROR, SHELL_MSG_CMD_NOT_SUPPORTED);
|
||||
shell_error(shell, "Command not supported.");
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
err = shell_cmd_precheck(shell, (argc <= 2));
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
if (argc != 1) {
|
||||
shell_fprintf(shell, SHELL_ERROR, "%s:%s%s\n", argv[0],
|
||||
SHELL_MSG_UNKNOWN_PARAMETER, argv[1]);
|
||||
shell_error(shell, "%s:%s%s", argv[0],
|
||||
SHELL_MSG_UNKNOWN_PARAMETER, argv[1]);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -488,9 +379,8 @@ static int cmd_resize(const struct shell *shell, size_t argc, char **argv)
|
|||
SHELL_DEFAULT_TERMINAL_WIDTH;
|
||||
shell->ctx->vt100_ctx.cons.terminal_hei =
|
||||
SHELL_DEFAULT_TERMINAL_HEIGHT;
|
||||
shell_fprintf(shell, SHELL_WARNING,
|
||||
"No response from the terminal, assumed 80x24 "
|
||||
"screen size\n");
|
||||
shell_warn(shell, "No response from the terminal, assumed 80x24"
|
||||
" screen size");
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
|
@ -499,54 +389,56 @@ static int cmd_resize(const struct shell *shell, size_t argc, char **argv)
|
|||
|
||||
SHELL_CREATE_STATIC_SUBCMD_SET(m_sub_colors)
|
||||
{
|
||||
SHELL_CMD(off, NULL, SHELL_HELP_COLORS_OFF, cmd_colors_off),
|
||||
SHELL_CMD(on, NULL, SHELL_HELP_COLORS_ON, cmd_colors_on),
|
||||
SHELL_CMD_ARG(off, NULL, SHELL_HELP_COLORS_OFF, cmd_colors_off, 1, 0),
|
||||
SHELL_CMD_ARG(on, NULL, SHELL_HELP_COLORS_ON, cmd_colors_on, 1, 0),
|
||||
SHELL_SUBCMD_SET_END
|
||||
};
|
||||
|
||||
SHELL_CREATE_STATIC_SUBCMD_SET(m_sub_echo)
|
||||
{
|
||||
SHELL_CMD(off, NULL, SHELL_HELP_ECHO_OFF, cmd_echo_off),
|
||||
SHELL_CMD(on, NULL, SHELL_HELP_ECHO_ON, cmd_echo_on),
|
||||
SHELL_CMD_ARG(off, NULL, SHELL_HELP_ECHO_OFF, cmd_echo_off, 1, 0),
|
||||
SHELL_CMD_ARG(on, NULL, SHELL_HELP_ECHO_ON, cmd_echo_on, 1, 0),
|
||||
SHELL_SUBCMD_SET_END
|
||||
};
|
||||
|
||||
SHELL_CREATE_STATIC_SUBCMD_SET(m_sub_shell_stats)
|
||||
{
|
||||
SHELL_CMD(reset, NULL, SHELL_HELP_STATISTICS_RESET,
|
||||
cmd_shell_stats_reset),
|
||||
SHELL_CMD(show, NULL, SHELL_HELP_STATISTICS_SHOW, cmd_shell_stats_show),
|
||||
SHELL_CMD_ARG(reset, NULL, SHELL_HELP_STATISTICS_RESET,
|
||||
cmd_shell_stats_reset, 1, 0),
|
||||
SHELL_CMD_ARG(show, NULL, SHELL_HELP_STATISTICS_SHOW,
|
||||
cmd_shell_stats_show, 1, 0),
|
||||
SHELL_SUBCMD_SET_END
|
||||
};
|
||||
|
||||
SHELL_CREATE_STATIC_SUBCMD_SET(m_sub_backspace_mode)
|
||||
{
|
||||
SHELL_CMD(backspace, NULL, SHELL_HELP_BACKSPACE_MODE_BACKSPACE,
|
||||
cmd_bacskpace_mode_backspace),
|
||||
SHELL_CMD(delete, NULL, SHELL_HELP_BACKSPACE_MODE_DELETE,
|
||||
cmd_bacskpace_mode_delete),
|
||||
SHELL_CMD_ARG(backspace, NULL, SHELL_HELP_BACKSPACE_MODE_BACKSPACE,
|
||||
cmd_bacskpace_mode_backspace, 1, 0),
|
||||
SHELL_CMD_ARG(delete, NULL, SHELL_HELP_BACKSPACE_MODE_DELETE,
|
||||
cmd_bacskpace_mode_delete, 1, 0),
|
||||
SHELL_SUBCMD_SET_END
|
||||
};
|
||||
|
||||
SHELL_CREATE_STATIC_SUBCMD_SET(m_sub_shell)
|
||||
{
|
||||
SHELL_CMD(backspace_mode, &m_sub_backspace_mode,
|
||||
SHELL_HELP_BACKSPACE_MODE, cmd_bacskpace_mode),
|
||||
SHELL_CMD(colors, &m_sub_colors, SHELL_HELP_COLORS, cmd_colors),
|
||||
SHELL_CMD(echo, &m_sub_echo, SHELL_HELP_ECHO, cmd_echo),
|
||||
SHELL_CMD(stats, &m_sub_shell_stats, SHELL_HELP_STATISTICS,
|
||||
cmd_shell_stats),
|
||||
SHELL_HELP_BACKSPACE_MODE, NULL),
|
||||
SHELL_CMD(colors, &m_sub_colors, SHELL_HELP_COLORS, NULL),
|
||||
SHELL_CMD_ARG(echo, &m_sub_echo, SHELL_HELP_ECHO, cmd_echo, 1, 1),
|
||||
SHELL_CMD(stats, &m_sub_shell_stats, SHELL_HELP_STATISTICS, NULL),
|
||||
SHELL_SUBCMD_SET_END
|
||||
};
|
||||
|
||||
SHELL_CREATE_STATIC_SUBCMD_SET(m_sub_resize)
|
||||
{
|
||||
SHELL_CMD(default, NULL, SHELL_HELP_RESIZE_DEFAULT, cmd_resize_default),
|
||||
SHELL_CMD_ARG(default, NULL, SHELL_HELP_RESIZE_DEFAULT,
|
||||
cmd_resize_default, 1, 0),
|
||||
SHELL_SUBCMD_SET_END
|
||||
};
|
||||
|
||||
SHELL_CMD_REGISTER(clear, NULL, SHELL_HELP_CLEAR, cmd_clear);
|
||||
SHELL_CMD_REGISTER(shell, &m_sub_shell, SHELL_HELP_SHELL, cmd_shell);
|
||||
SHELL_CMD_REGISTER(help, NULL, NULL, cmd_help);
|
||||
SHELL_CMD_REGISTER(history, NULL, SHELL_HELP_HISTORY, cmd_history);
|
||||
SHELL_CMD_REGISTER(resize, &m_sub_resize, SHELL_HELP_RESIZE, cmd_resize);
|
||||
SHELL_CMD_ARG_REGISTER(clear, NULL, SHELL_HELP_CLEAR, cmd_clear, 1, 0);
|
||||
SHELL_CMD_REGISTER(shell, &m_sub_shell, SHELL_HELP_SHELL, NULL);
|
||||
SHELL_CMD_ARG_REGISTER(help, NULL, SHELL_HELP_HELP, cmd_help, 1, 255);
|
||||
SHELL_CMD_ARG_REGISTER(history, NULL, SHELL_HELP_HISTORY, cmd_history, 1, 0);
|
||||
SHELL_CMD_ARG_REGISTER(resize, &m_sub_resize, SHELL_HELP_RESIZE, cmd_resize,
|
||||
1, 1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue