RTEMS 6.1-rc1
Data Structures | Macros | Typedefs | Functions | Variables
shell.h File Reference

Instantatiate a New Terminal Shell. More...

#include <sys/types.h>
#include <sys/stat.h>
#include <rtems.h>
#include <stdio.h>
#include <termios.h>
#include <rtems/fs.h>
#include <rtems/libio.h>
#include <rtems/chain.h>

Go to the source code of this file.

Data Structures

struct  rtems_shell_cmd_tt
 
struct  rtems_shell_alias_t
 
struct  rtems_shell_topic_tt
 
struct  rtems_shell_env_t
 
struct  rtems_shell_filesystems_tt
 

Macros

#define RTEMS_SHELL_KEYS_EXTENDED   (0x8000)
 
#define RTEMS_SHELL_KEYS_NORMAL_MASK   (0x00ff)
 
#define RTEMS_SHELL_KEYS_INS   (0)
 
#define RTEMS_SHELL_KEYS_DEL   (1)
 
#define RTEMS_SHELL_KEYS_UARROW   (2)
 
#define RTEMS_SHELL_KEYS_DARROW   (3)
 
#define RTEMS_SHELL_KEYS_LARROW   (4)
 
#define RTEMS_SHELL_KEYS_RARROW   (5)
 
#define RTEMS_SHELL_KEYS_HOME   (6)
 
#define RTEMS_SHELL_KEYS_END   (7)
 
#define RTEMS_SHELL_KEYS_F1   (8)
 
#define RTEMS_SHELL_KEYS_F2   (9)
 
#define RTEMS_SHELL_KEYS_F3   (10)
 
#define RTEMS_SHELL_KEYS_F4   (11)
 
#define RTEMS_SHELL_KEYS_F5   (12)
 
#define RTEMS_SHELL_KEYS_F6   (13)
 
#define RTEMS_SHELL_KEYS_F7   (14)
 
#define RTEMS_SHELL_KEYS_F8   (15)
 
#define RTEMS_SHELL_KEYS_F9   (16)
 
#define RTEMS_SHELL_KEYS_F10   (17)
 

Typedefs

typedef bool(* rtems_shell_login_check_t) (const char *, const char *)
 
typedef int(* rtems_shell_command_t) (int argc, char **argv)
 
typedef struct rtems_shell_cmd_tt rtems_shell_cmd_t
 
typedef struct rtems_shell_topic_tt rtems_shell_topic_t
 
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)
 
typedef void(* rtems_shell_wait_for_input_notification) (int fd, int seconds_remaining, void *arg)
 

Functions

bool rtems_shell_login_prompt (FILE *in, FILE *out, const char *device, rtems_shell_login_check_t check)
 
bool rtems_shell_login_check (const char *user, const char *passphrase)
 
unsigned int rtems_shell_getchar (FILE *in)
 
rtems_shell_cmd_trtems_shell_lookup_cmd (const char *cmd)
 
rtems_shell_cmd_trtems_shell_add_cmd_struct (rtems_shell_cmd_t *shell_cmd)
 
rtems_shell_cmd_trtems_shell_add_cmd (const char *cmd, const char *topic, const char *usage, rtems_shell_command_t command)
 
rtems_shell_cmd_trtems_shell_alias_cmd (const char *cmd, const char *alias)
 
int rtems_shell_make_args (char *commandLine, int *argc_p, char **argv_p, int max_args)
 
rtems_shell_topic_trtems_shell_lookup_topic (const char *topic)
 
bool rtems_shell_can_see_cmd (const rtems_shell_cmd_t *shell_cmd)
 
int rtems_shell_execute_cmd (const char *cmd, int argc, char *argv[])
 
void rtems_shell_init_environment (void)
 
int rtems_shell_cat_file (FILE *out, const char *name)
 
void rtems_shell_write_file (const char *name, const char *content)
 
int rtems_shell_script_file (int argc, char **argv)
 
rtems_status_code rtems_shell_init (const char *task_name, size_t task_stacksize, rtems_task_priority task_priority, const char *devname, bool forever, bool wait, rtems_shell_login_check_t login_check)
 
rtems_status_code rtems_shell_script (const char *task_name, size_t task_stacksize, rtems_task_priority task_priority, const char *input, const char *output, bool output_append, bool wait, bool echo)
 
bool rtems_shell_main_loop (rtems_shell_env_t *rtems_shell_env)
 
bool rtems_shell_run_main_loop (rtems_shell_env_t *shell_env, bool interactive, FILE *line_editor_output)
 Runs the shell main loop. More...
 
rtems_shell_env_trtems_shell_get_current_env (void)
 
void rtems_shell_dup_current_env (rtems_shell_env_t *)
 
void rtems_shell_get_prompt (rtems_shell_env_t *shell_env, char *prompt, size_t size)
 
int rtems_shell_libc_mounter (const char *driver, const char *path, rtems_shell_filesystems_t *fs, rtems_filesystem_options_t options)
 
void rtems_shell_mount_add_fsys (rtems_shell_filesystems_t *fs)
 
void rtems_shell_mount_del_fsys (rtems_shell_filesystems_t *fs)
 
rtems_status_code rtems_shell_wait_for_input (int fd, int timeout_in_seconds, rtems_shell_wait_for_input_notification notification, void *notification_arg)
 Waits for input. More...
 
rtems_status_code rtems_shell_wait_for_explicit_input (int fd, int timeout_in_seconds, rtems_shell_wait_for_input_notification notification, void *notification_arg, int desired_input)
 Waits for explicit input. More...
 
int rtems_shell_main_monitor (int argc, char **argv)
 
int rtems_shell_main_mv (int argc, char *argv[])
 
int rtems_shell_main_cp (int argc, char *argv[])
 
int rtems_shell_main_rm (int argc, char *argv[])
 

Variables

const rtems_shell_env_t rtems_global_shell_env
 

Detailed Description

Instantatiate a New Terminal Shell.

Function Documentation

◆ rtems_shell_get_prompt()

void rtems_shell_get_prompt ( rtems_shell_env_t shell_env,
char *  prompt,
size_t  size 
)

This method dynamically builds the command line prompt string and places it in prompt.

Parameters
[in]shell_envis the shell execution environment
[in]promptis a pointer to a string buffer area
[in]sizeis length of the prompt buffer area
Returns
This method fills in the memory pointed to by prompt.
Note
An application specific implementation can be provided by the user.

◆ rtems_shell_init()

rtems_status_code rtems_shell_init ( const char *  task_name,
size_t  task_stacksize,
rtems_task_priority  task_priority,
const char *  devname,
bool  forever,
bool  wait,
rtems_shell_login_check_t  login_check 
)

Initialise the shell creating tasks to login and run the shell sessions.

Parameters
task_nameName of the shell task.
task_stacksizeThe size of the stack. If 0 the default size is used.
task_priorityThe priority the shell runs at.
foreverRepeat logins.
waitCaller should block until shell exits.
login_checkUser login check function, NULL disables login checks.

◆ rtems_shell_libc_mounter()

int rtems_shell_libc_mounter ( const char *  driver,
const char *  path,
rtems_shell_filesystems_t fs,
rtems_filesystem_options_t  options 
)

Helper for the mount command.

Parameters
[in]driverThe path to the driver.
[in]pathThe path to mount on.
[in]fsThe file system definition.
[in]optionsSpecial file system options.

◆ rtems_shell_mount_add_fsys()

void rtems_shell_mount_add_fsys ( rtems_shell_filesystems_t fs)

Add a new file system mount configuration to the mount command.

Parameters
[in]fsThe file system mount data.

◆ rtems_shell_mount_del_fsys()

void rtems_shell_mount_del_fsys ( rtems_shell_filesystems_t fs)

Delete file system mount configuration from the mount command.

Parameters
[in]fsThe file system mount data to remove.

◆ rtems_shell_run_main_loop()

bool rtems_shell_run_main_loop ( rtems_shell_env_t shell_env,
bool  interactive,
FILE *  line_editor_output 
)

Runs the shell main loop.

The caller shall initialize the shell environment. It is recommended that the caller duplicates the current shell environment using rtems_shell_dup_current_env() and then performs the required customization. Shell commands will use the stdin, stdout, and stderr file streams set up by the caller.

Parameters
interactiveindicates if the shell main loop interfaces with an interactive user. For an interactive user, a welcome message using "/etc/motd" is presented and command prompt is displayed.
[in,out]line_editor_outputis the optional line editor output file stream. It may be NULL, to disable the line editor output.
Returns
Returns true, if no error occurred and a shell exit was requested, otherwise false.

◆ rtems_shell_script()

rtems_status_code rtems_shell_script ( const char *  task_name,
size_t  task_stacksize,
rtems_task_priority  task_priority,
const char *  input,
const char *  output,
bool  output_append,
bool  wait,
bool  echo 
)

Run a shell script creating a shell tasks to execute the command under.

Parameters
task_nameName of the shell task.
task_stacksizeThe size of the stack. If 0 the default size is used.
task_priorityThe priority the shell runs at.
inputThe file of commands. Can be 'stdin' to use stdin.
outputThe output file to write commands to. Can be 'stdout', 'stderr' or '/dev/null'.
output_appendAppend the output to the file or truncate the file. Create if it does not exist.
waitWait for the script to finish.

◆ rtems_shell_wait_for_explicit_input()

rtems_status_code rtems_shell_wait_for_explicit_input ( int  fd,
int  timeout_in_seconds,
rtems_shell_wait_for_input_notification  notification,
void *  notification_arg,
int  desired_input 
)

Waits for explicit input.

Parameters
desired_inputAn explicit unsigned character to wait for or -1 to accept any input.
Return values
RTEMS_SUCCESSFULInput detected.
RTEMS_TIMEOUTTimeout expired.
RTEMS_UNSATISFIEDCannot change or restore termios attributes.

◆ rtems_shell_wait_for_input()

rtems_status_code rtems_shell_wait_for_input ( int  fd,
int  timeout_in_seconds,
rtems_shell_wait_for_input_notification  notification,
void *  notification_arg 
)

Waits for input.

Return values
RTEMS_SUCCESSFULInput detected.
RTEMS_TIMEOUTTimeout expired.
RTEMS_UNSATISFIEDCannot change or restore termios attributes.