1 | /** |
---|
2 | * @file |
---|
3 | * |
---|
4 | * @ingroup shared_cli |
---|
5 | * |
---|
6 | * @brief Header file for Command Line Interface related stuff |
---|
7 | */ |
---|
8 | |
---|
9 | /* Based upon code from MicroMonitor 1.17 from http://www.umonfw.com/ |
---|
10 | * which includes this notice: |
---|
11 | * |
---|
12 | ************************************************************************** |
---|
13 | * General notice: |
---|
14 | * This code is part of a boot-monitor package developed as a generic base |
---|
15 | * platform for embedded system designs. As such, it is likely to be |
---|
16 | * distributed to various projects beyond the control of the original |
---|
17 | * author. Please notify the author of any enhancements made or bugs found |
---|
18 | * so that all may benefit from the changes. In addition, notification back |
---|
19 | * to the author will allow the new user to pick up changes that may have |
---|
20 | * been made by other users after this version of the code was distributed. |
---|
21 | * |
---|
22 | * Note1: the majority of this code was edited with 4-space tabs. |
---|
23 | * Note2: as more and more contributions are accepted, the term "author" |
---|
24 | * is becoming a mis-representation of credit. |
---|
25 | * |
---|
26 | * Original author: Ed Sutter |
---|
27 | * Email: esutter@alcatel-lucent.com |
---|
28 | * Phone: 908-582-2351 |
---|
29 | ************************************************************************** |
---|
30 | * |
---|
31 | * Ed Sutter has been informed that this code is being used in RTEMS. |
---|
32 | * |
---|
33 | * This code was reformatted by Joel Sherrill from OAR Corporation and |
---|
34 | * Fernando Nicodemos <fgnicodemos@terra.com.br> from NCB - Sistemas |
---|
35 | * Embarcados Ltda. (Brazil) to be more compliant with RTEMS coding |
---|
36 | * standards and to eliminate C++ style comments. |
---|
37 | */ |
---|
38 | |
---|
39 | #ifndef _cli_h |
---|
40 | #define _cli_h |
---|
41 | |
---|
42 | #ifdef __cplusplus |
---|
43 | extern "C" { |
---|
44 | #endif |
---|
45 | |
---|
46 | /** |
---|
47 | * @defgroup shared_cli Command table structure |
---|
48 | * |
---|
49 | * @ingroup shared_umon |
---|
50 | * |
---|
51 | * @brief Command table structure used by the monitor: |
---|
52 | */ |
---|
53 | |
---|
54 | struct monCommand { |
---|
55 | char *name; /* Name of command seen by user. */ |
---|
56 | int (*func)(int,char **); /* Called when command is invoked. */ |
---|
57 | char **helptxt; /* Help text (see notes below). */ |
---|
58 | long flags; /* Single-bit flags for various uses */ |
---|
59 | /* (see the CMDFLAG_XXX macros). */ |
---|
60 | }; |
---|
61 | |
---|
62 | #ifdef __cplusplus |
---|
63 | } |
---|
64 | #endif |
---|
65 | |
---|
66 | /* Bits currently assigned to command flags used in the monCommand |
---|
67 | * structure... |
---|
68 | */ |
---|
69 | #define CMDFLAG_NOMONRC 1 |
---|
70 | |
---|
71 | /* Maximum size of a command line: |
---|
72 | */ |
---|
73 | #ifndef CMDLINESIZE |
---|
74 | #define CMDLINESIZE 128 |
---|
75 | #endif |
---|
76 | |
---|
77 | /* Maximum number of arguments in a command line: |
---|
78 | */ |
---|
79 | #define ARGCNT 24 |
---|
80 | |
---|
81 | /* Definitions for docommand() return values: |
---|
82 | * |
---|
83 | * Note that the CMD_SUCCESS, CMD_FAILURE and CMD_PARAM_ERROR are return |
---|
84 | * values used by the local command code also. The remaining errors |
---|
85 | * (CMD_LINE_ERROR, CMD_ULVL_DENIED and CMD_NOT_FOUND) are used only by |
---|
86 | # the docommand() function. |
---|
87 | * |
---|
88 | * CMD_SUCCESS: |
---|
89 | * Everything worked ok. |
---|
90 | * CMD_FAILURE: |
---|
91 | * Command parameters were valid, but command itself failed for some other |
---|
92 | * reason. The docommand() function does not print a message here, it |
---|
93 | * is assumed that the error message was printed by the local function. |
---|
94 | * CMD_PARAM_ERROR: |
---|
95 | * Command line did not parse properly. Control was passed to a |
---|
96 | * local command function, but argument syntax caused it to choke. |
---|
97 | * In this case docommand() will print out the generic CLI syntax error |
---|
98 | * message. |
---|
99 | * CMD_LINE_ERROR: |
---|
100 | * Command line itself was invalid. Too many args, invalid shell var |
---|
101 | * syntax, etc.. Somekind of command line error prior to checking for |
---|
102 | * the command name-to-function match. |
---|
103 | * CMD_ULVL_DENIED: |
---|
104 | * Command's user level is higher than current user level, so access |
---|
105 | * is denied. |
---|
106 | * CMD_NOT_FOUND: |
---|
107 | * Since these same return values are used for each command function |
---|
108 | * plus the docommand() function, this error indicates that docommand() |
---|
109 | * could not even find the command in the command table. |
---|
110 | * CMD_MONRC_DENIED: |
---|
111 | * The command cannot execute because it is considered illegal |
---|
112 | * when run from within the monrc file. |
---|
113 | */ |
---|
114 | #define CMD_SUCCESS 0 |
---|
115 | #define CMD_FAILURE -1 |
---|
116 | #define CMD_PARAM_ERROR -2 |
---|
117 | #define CMD_LINE_ERROR -3 |
---|
118 | #define CMD_ULVL_DENIED -4 |
---|
119 | #define CMD_NOT_FOUND -5 |
---|
120 | #define CMD_MONRC_DENIED -6 |
---|
121 | |
---|
122 | /* Notes on help text array: |
---|
123 | * The monitor's CLI processor assumes that every command's help text |
---|
124 | * array abides by a few basic rules... |
---|
125 | * First of all, it assumes that every array has AT LEAST two strings. |
---|
126 | * The first string in the array of strings is assumed to be a one-line |
---|
127 | * abstract describing the command. |
---|
128 | * The second string in the array of strings is assumed to be a usage |
---|
129 | * message that describes the syntax of the arguments needed by the command. |
---|
130 | * If this second string is an empty string (""), the docommand() prints out |
---|
131 | * a generic usage string indicating that there are no options or arguements |
---|
132 | * to apply to the command. |
---|
133 | * All remaining lines are formatted based on the needs of the individual |
---|
134 | * command and the final string is a null pointer to let the CLI processor |
---|
135 | * know where the end is. |
---|
136 | * Following is an example help text array... |
---|
137 | * |
---|
138 | * char *HelpHelp[] = { |
---|
139 | * "Display command set", |
---|
140 | * "-[d] [commandname]", |
---|
141 | * "Options:", |
---|
142 | * " -d list commands and descriptions", |
---|
143 | * 0, |
---|
144 | * }; |
---|
145 | * |
---|
146 | */ |
---|
147 | #endif |
---|