RTEMS  5.0.0
shell.h
Go to the documentation of this file.
1 
7 /*
8  * Author:
9  *
10  * WORK: fernando.ruiz@ctv.es
11  * HOME: correo@fernando-ruiz.com
12  *
13  * Thanks at:
14  * Chris Johns
15  */
16 
17 #ifndef __RTEMS_SHELL_H__
18 #define __RTEMS_SHELL_H__
19 
20 #include <sys/types.h>
21 #include <sys/stat.h>
22 #include <rtems.h>
23 #include <stdio.h>
24 #include <termios.h>
25 #include <rtems/fs.h>
26 #include <rtems/libio.h>
27 #include <rtems/chain.h>
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 /*
34  * Some key labels to define special keys.
35  */
36 
37 #define RTEMS_SHELL_KEYS_EXTENDED (0x8000)
38 #define RTEMS_SHELL_KEYS_NORMAL_MASK (0x00ff)
39 #define RTEMS_SHELL_KEYS_INS (0)
40 #define RTEMS_SHELL_KEYS_DEL (1)
41 #define RTEMS_SHELL_KEYS_UARROW (2)
42 #define RTEMS_SHELL_KEYS_DARROW (3)
43 #define RTEMS_SHELL_KEYS_LARROW (4)
44 #define RTEMS_SHELL_KEYS_RARROW (5)
45 #define RTEMS_SHELL_KEYS_HOME (6)
46 #define RTEMS_SHELL_KEYS_END (7)
47 #define RTEMS_SHELL_KEYS_F1 (8)
48 #define RTEMS_SHELL_KEYS_F2 (9)
49 #define RTEMS_SHELL_KEYS_F3 (10)
50 #define RTEMS_SHELL_KEYS_F4 (11)
51 #define RTEMS_SHELL_KEYS_F5 (12)
52 #define RTEMS_SHELL_KEYS_F6 (13)
53 #define RTEMS_SHELL_KEYS_F7 (14)
54 #define RTEMS_SHELL_KEYS_F8 (15)
55 #define RTEMS_SHELL_KEYS_F9 (16)
56 #define RTEMS_SHELL_KEYS_F10 (17)
57 
58 typedef bool (*rtems_shell_login_check_t)(
59  const char * /* user */,
60  const char * /* passphrase */
61 );
62 
63 extern bool rtems_shell_login_prompt(
64  FILE *in,
65  FILE *out,
66  const char *device,
67  rtems_shell_login_check_t check
68 );
69 
70 extern bool rtems_shell_login_check(
71  const char *user,
72  const char *passphrase
73 );
74 
75 typedef int (*rtems_shell_command_t)(int argc, char **argv);
76 
77 struct rtems_shell_cmd_tt;
79 
81  const char *name;
82  const char *usage;
83  const char *topic;
84  rtems_shell_command_t command;
85  rtems_shell_cmd_t *alias;
86  rtems_shell_cmd_t *next;
87  mode_t mode;
88  uid_t uid;
89  gid_t gid;
90 };
91 
92 typedef struct {
93  const char *name;
94  const char *alias;
96 
98 typedef struct rtems_shell_topic_tt rtems_shell_topic_t;
99 
101  const char *topic;
102  rtems_shell_topic_t *next;
103 };
104 
105 /*
106  * The return value has RTEMS_SHELL_KEYS_EXTENDED set if the key
107  * is extended, ie a special key.
108  */
109 extern unsigned int rtems_shell_getchar(FILE *in);
110 
111 extern rtems_shell_cmd_t * rtems_shell_lookup_cmd(const char *cmd);
112 
113 extern rtems_shell_cmd_t *rtems_shell_add_cmd_struct(
114  rtems_shell_cmd_t *shell_cmd
115 );
116 
117 rtems_shell_cmd_t * rtems_shell_add_cmd(
118  const char *cmd,
119  const char *topic,
120  const char *usage,
121  rtems_shell_command_t command
122 );
123 
124 extern rtems_shell_cmd_t * rtems_shell_alias_cmd(
125  const char *cmd,
126  const char *alias
127 );
128 
129 extern int rtems_shell_make_args(
130  char *commandLine,
131  int *argc_p,
132  char **argv_p,
133  int max_args
134 );
135 
136 extern rtems_shell_topic_t * rtems_shell_lookup_topic(
137  const char *topic
138 );
139 
140 extern bool rtems_shell_can_see_cmd(
141  const rtems_shell_cmd_t *shell_cmd
142 );
143 
144 extern int rtems_shell_execute_cmd(
145  const char *cmd, int argc, char *argv[]
146 );
147 
148 /*
149  * Call to set up the shell environment if you need to execute commands before
150  * running a shell.
151  */
152 extern void rtems_shell_init_environment(
153  void
154 );
155 
156 extern int rtems_shell_cat_file(
157  FILE *out,
158  const char *name
159 );
160 
161 extern void rtems_shell_write_file(
162  const char *name,
163  const char *content
164 );
165 
166 extern int rtems_shell_script_file(
167  int argc,
168  char **argv
169 );
170 
184  const char *task_name,
185  size_t task_stacksize,
186  rtems_task_priority task_priority,
187  const char *devname,
188  bool forever,
189  bool wait,
190  rtems_shell_login_check_t login_check
191 );
192 
207  const char *task_name,
208  size_t task_stacksize, /* 0 default*/
209  rtems_task_priority task_priority,
210  const char *input,
211  const char *output,
212  bool output_append,
213  bool wait,
214  bool echo
215 );
216 
220 typedef struct {
223  const char *devname;
224  const char *taskname;
225  bool exit_shell; /* logout */
226  bool forever; /* repeat login */
227  int errorlevel;
228  bool echo;
229  char cwd[256];
230  const char *input;
231  const char *output;
232  bool output_append;
233  rtems_id wake_on_end;
234  rtems_shell_login_check_t login_check;
235 
240  uid_t uid;
241 
246  gid_t gid;
248 
249 bool rtems_shell_main_loop(
250  rtems_shell_env_t *rtems_shell_env
251 );
252 
253 extern const rtems_shell_env_t rtems_global_shell_env;
254 
255 rtems_shell_env_t *rtems_shell_get_current_env(void);
256 void rtems_shell_dup_current_env(rtems_shell_env_t *);
257 
258 /*
259  * The types of file systems we can mount. We have them broken out
260  * out like this so they can be configured by shellconfig.h. The
261  * mount command needs special treatment due to some file systems
262  * being dependent on the network stack and some not. If we had
263  * all possible file systems being included it would force the
264  * networking stack into the applcation and this may not be
265  * required.
266  */
269 
270 typedef int (*rtems_shell_filesystems_mounter_t)(
271  const char* driver,
272  const char* path,
275 );
276 
279  const char *name;
280  int driver_needed;
281  const rtems_filesystem_operations_table *fs_ops;
282  rtems_shell_filesystems_mounter_t mounter;
283 };
284 
298 extern void rtems_shell_get_prompt(
299  rtems_shell_env_t *shell_env,
300  char *prompt,
301  size_t size
302 );
303 
312 extern int rtems_shell_libc_mounter(
313  const char* driver,
314  const char* path,
317 );
318 
325 
332 
333 typedef void (*rtems_shell_wait_for_input_notification)(
334  int fd,
335  int seconds_remaining,
336  void *arg
337 );
338 
347  int fd,
348  int timeout_in_seconds,
349  rtems_shell_wait_for_input_notification notification,
350  void *notification_arg
351 );
352 
364  int fd,
365  int timeout_in_seconds,
366  rtems_shell_wait_for_input_notification notification,
367  void *notification_arg,
368  int desired_input
369 );
370 
371 extern int rtems_shell_main_monitor(int argc, char **argv);
372 
373 /*
374  * Provide these commands for application use, as their implementation
375  * is tedious.
376  */
377 int rtems_shell_main_mv(int argc, char *argv[]);
378 int rtems_shell_main_cp(int argc, char *argv[]);
379 int rtems_shell_main_rm(int argc, char *argv[]);
380 
381 #ifdef __cplusplus
382 }
383 #endif
384 
385 #endif
uid_t uid
The real and effective UID of the shell task in case no login check is present.
Definition: shell.h:240
Definition: chain.h:65
Basic IO API.
Definition: shell.h:92
int rtems_shell_libc_mounter(const char *driver, const char *path, rtems_shell_filesystems_t *fs, rtems_filesystem_options_t options)
uint32_t rtems_name
Classic API object name type.
Definition: types.h:77
rtems_filesystem_options_t
File system options.
Definition: libio.h:1649
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)
Definition: shell.c:1071
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)
Definition: shell.c:1040
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.
Definition: shell-wait-for-input.c:89
Definition: rtemscompat1.h:15
Definition: shell.h:220
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.
Definition: shell-wait-for-input.c:56
rtems_status_code
Classic API Status.
Definition: status.h:43
void rtems_shell_get_prompt(rtems_shell_env_t *shell_env, char *prompt, size_t size)
Definition: shell_getprompt.c:31
Definition: shell.h:80
gid_t gid
The real and effective GID of the shell task in case no login check is present.
Definition: shell.h:246
Chain API.
File system operations table.
Definition: libio.h:472
Basic Filesystem Types.
Definition: shell.h:100
void rtems_shell_mount_add_fsys(rtems_shell_filesystems_t *fs)
rtems_name magic
Definition: shell.h:222
Definition: shell.h:277
void rtems_shell_mount_del_fsys(rtems_shell_filesystems_t *fs)
Objects_Id rtems_id
Used to manage and manipulate RTEMS object identifiers.
Definition: types.h:83
unsigned size
Definition: tte.h:74
uint32_t rtems_task_priority
Definition: tasks.h:54