/** * @file rtems/shell.h * * Instantatiate a new terminal shell. */ /* * Author: * * WORK: fernando.ruiz@ctv.es * HOME: correo@fernando-ruiz.com * * Thanks at: * Chris Johns * * $Id$ */ #ifndef __RTEMS_SHELL_H__ #define __RTEMS_SHELL_H__ #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif typedef int (*rtems_shell_command_t)(int argc,char * argv[]); struct rtems_shell_cmd_tt; typedef struct rtems_shell_cmd_tt rtems_shell_cmd_t; struct rtems_shell_cmd_tt { char *name; char *usage; char *topic; rtems_shell_command_t command; rtems_shell_cmd_t *alias; rtems_shell_cmd_t *next; }; typedef struct { char *name; char *alias; } rtems_shell_alias_t; rtems_shell_cmd_t * rtems_shell_lookup_cmd(char * cmd); rtems_shell_cmd_t *rtems_shell_add_cmd_struct( rtems_shell_cmd_t *shell_cmd ); rtems_shell_cmd_t * rtems_shell_add_cmd( char *cmd, char *topic, char *usage, rtems_shell_command_t command ); rtems_shell_cmd_t * rtems_shell_alias_cmd( char *cmd, char *alias ); int rtems_shell_make_args( char *commandLine, int *argc_p, char **argv_p, int max_args ); int rtems_shell_scanline(char * line,int size,FILE * in,FILE * out) ; void rtems_shell_cat_file(FILE * out,char *name); void rtems_shell_write_file(char *name,char * content); /** * Initialise the shell creating tasks to login and run the shell * sessions. * * @param task_name Name of the shell task. * @param task_stacksize The size of the stack. If 0 the default size is used. * @param task_priority The priority the shell runs at. * @param tcflag The termios c_cflag value. If 0 the default is used, if * not 0 the value is ORed with CLOCAL and CREAD. * @param forever Repeat logins. * * @todo CCJ I am not sure this termios flag setting is a good idea. The shell * needs to adjust the termios for its use but it should assume the * settings are set by the user for things like baudrate etc. */ rtems_status_code rtems_shell_init( char *task_name, uint32_t task_stacksize, /*0 default*/ rtems_task_priority task_priority, char *devname, tcflag_t tcflag, int forever ); /** * Run a shell script creating a shell tasks to execute the command under. * * @param task_name Name of the shell task. * @param task_stacksize The size of the stack. If 0 the default size is used. * @param task_priority The priority the shell runs at. * @param input The file of commands. Can be 'stdin' to use stdin. * @param output The output file to write commands to. Can be 'stdout', * 'stderr' or '/dev/null'. * @param output_append Append the output to the file or truncate the file. * Create if it does not exist. * @param wait Wait for the script to finish. */ rtems_status_code rtems_shell_script( char *task_name, uint32_t task_stacksize, /*0 default*/ rtems_task_priority task_priority, const char *input, const char *output, int output_append, int wait ); /* * Things that are useful to external entities developing commands and plugging * them in. */ int rtems_shell_str2int(char * s); typedef struct { rtems_name magic; /* 'S','E','N','V': Shell Environment */ char *devname; char *taskname; tcflag_t tcflag; /* user extensions */ int exit_shell; /* logout */ int forever ; /* repeat login */ int errorlevel; uintptr_t mdump_addr; const char* input; const char* output; int output_append; rtems_id wake_on_end; } rtems_shell_env_t; rtems_boolean rtems_shell_main_loop( rtems_shell_env_t *rtems_shell_env ); extern rtems_shell_env_t rtems_global_shell_env; extern rtems_shell_env_t *rtems_current_shell_env; /* * The types of file systems we can mount. We have them broken out * out like this so they can be configured by shellconfig.h. The * mount command needs special treatment due to some file systems * being dependent on the network stack and some not. If we had * all possible file systems being included it would force the * networking stack into the applcation and this may not be * required. */ struct rtems_shell_filesystems_tt; typedef struct rtems_shell_filesystems_tt rtems_shell_filesystems_t; typedef int (*rtems_shell_filesystems_mounter_t)( const char* driver, const char* path, rtems_shell_filesystems_t* fs, rtems_filesystem_options_t options ); struct rtems_shell_filesystems_tt { const char* name; int driver_needed; rtems_filesystem_operations_table* fs_ops; rtems_shell_filesystems_mounter_t mounter; }; #ifdef __cplusplus } #endif #endif