Using the Shell Commands
To use shell commands, four files, in addition to the generic file system files, must be included in the build:
fs_shell.c
fs_shell.h
shell.c (located in \Micrium\Software\uC-Shell\Source)
shell.h (located in \Micrium\Software\uC-Shell\Source)
The file fs_shell.h and shell.h must also be #included in any application or header files initialize µC/Shell or handle shell commands. The shell command configuration file (fs_shell_cfg.h) should be copied to your application directory and modified. The following directories must be on the project include path:
\Micrium\Software\uC-FS\Cmd
\Micrium\Software\uC-Shell\Source
µC/Shell with the µC/FS shell commands is initialized in Listing F-1. The file system initialization (FS_Init()) function should have previously been called.
CPU_BOOLEAN App_ShellInit (void) { CPU_BOOLEAN ok; ok = Shell_Init(); if (ok == DEF_FAIL) { return (DEF_FAIL); }
ok = FSShell_Init(); if (ok == DEF_FAIL) { return (DEF_FAIL; } return (DEF_OK); } |
-
- Initializing µC/Shell
It’s assumed that the application will create a task to receive input from a terminal; this task should be written as shown in Listing F-2.
void App_ShellTask (void *p_arg) { CPU_CHAR cmd_line[MAX_CMD_LEN]; SHELL_ERR err; SHELL_CMD_PARAM cmd_param; CPU_CHAR cwd_path[FS_CFG_FULL_ NAME_LEN + 1u];
/* Init cmd param (see Note #1). */ Str_Copy(&cwd_path[0], (CPU_CHAR *)"\\"); cmd_param.pcur_working_dir = (void *)cwd_path[0]; cmd_param.pout_opt = (void *)0;
while (DEF_TRUE) { App_ShellIn(cmd_line, MAX_CMD_LEN); /* Rd cmd (see Note #2). */ /* Exec cmd (see Note #3). */ Shell_Exec(cmd_line, App_ShellOut, &cmd_param, &err); switch (err) { case SHELL_ERR_CMD_NOT_FOUND: case SHELL_ERR_CMD_SEARCH: case SHELL_ERR_ARG_TBL_FULL: App_ShellOut("Command not found\r\n", 19, cmd_param.pout_opt); break; default: break; } } }
/* ************************************************************************************** * App_ShellIn() ******************************************************************************1******* */ CPU_INT16S App_ShellIn (CPU_CHAR *pbuf, CPU_INT16U buf_len) { /* $$$$ Store line from terminal/command line into ‘pbuf’; return length of line. */ } |
/* ************************************************************************************** * App_ShellOut() ******************************************************************************1******* */ CPU_INT16S App_ShellOut (CPU_CHAR *pbuf, CPU_INT16U buf_len, void *popt) { /* $$$$ Output ‘pbuf’ data on terminal/command line; return nbr bytes tx’d. */ } |
-
- Executing shell commands & handling shell output
- The SHELL_CMD_PARAM structure that will be passed to Shell_Exec() must be initialized. The pcur_working_dir member must be assigned a pointer to a string of at least FS_SHELL_CFG_MAX_PATH_LEN characters. This string must have been initialized to the default working directory path; if the root directory, “\”.
- The next command, ending with a newline, should be read from the command line.
- The received command should be executed with Shell_Exec(). If the command is a valid command, the appropriate command function will be called. For example, the command “fs_ls” will result in FSShell_ls() in fs_shell.c being called. FSShell_ls() will then print the entries in the working directory to the command line with the output function App_ShellOut(), passed as the second argument of Shell_Exec().
- Executing shell commands & handling shell output