Parses and executes a command from a console text string.
81 {
83
84 uint16_t num_tokens = 0;
85 char *tokens[CONFIG_CMD_MAX_TOKENS];
87
88 str_tokenize(console_text,
" ", CONFIG_CMD_MAX_TOKENS, tokens, &num_tokens);
89
90 if(num_tokens == 0) {
94 "cmd_execute: invalid arguments"
95 );
96
98 }
99
100
101 if(
str_cmp(
"*", tokens[0]) ==
true) {
102 if(num_tokens < 2) {
103
107 "cmd_execute: invalid arguments"
108 );
109
111 }
112
113 if(
str_cmp(
"log", tokens[1]) ==
true) {
114 if(num_tokens == 2) {
115 for(uint8_t i = 0; i < CONFIG_CMD_MAX_CLIENTS; i++) {
117
118 if(client_info == (void*)0) {
119 continue;
120 }
121
123
124 char *log_level_name[16];
125
128 return err;
129 }
130
134 "%s log level: %s",
136 log_level_name
137 );
138 }
139 }
140 else if(num_tokens == 3) {
141 const char *log_level_str = tokens[2];
142
146 return err;
147 }
148
149 for(uint8_t i = 0; i < CONFIG_CMD_MAX_CLIENTS; i++) {
151
152 if(client_info == (void*)0) {
153 continue;
154 }
155
157 }
158 }
159 else {
163 "cmd_execute: invalid arguments"
164 );
165
167 }
168
170 }
171 }
172
173
174 if(
str_cmp(
"version", tokens[0]) ==
true) {
175 if(num_tokens > 1) {
179 "cmd_execute: invalid arguments"
180 );
182 }
186 "Version=%s", CONFIG_VERSION
187 );
188
190 }
191
192
193 if(
str_cmp(
"help", tokens[0]) ==
true) {
194 if(num_tokens == 1) {
198 "Listing general commands:"
199 );
203 "1. version: Prints firmware version, usage: version"
204 );
208 "2. help: Shows help information for modules, usage: help <module>"
209 );
213 "3. log: Shows or sets the log level of modules, usage: log <module|*> <level>"
214 );
215
216 for(uint8_t i = 0; i < CONFIG_CMD_MAX_CLIENTS; i++) {
218 continue;
219 }
220
222
226 "Listing %s commands:",
228 );
229
230 for(uint8_t j = 0; j < client_info->
num_cmds; j++) {
234 "%d. %s: %s", j + 1,
237 );
238 }
239 }
241 }
242 else if(num_tokens == 2) {
243 for(uint8_t i = 0; i < CONFIG_CMD_MAX_CLIENTS; i++) {
245 continue;
246 }
247
249
250 if(
str_cmp(client_info->
name, tokens[1]) ==
true) {
254 "Listing %s commands:",
256 );
257
258 for(uint8_t j = 0; j < client_info->
num_cmds; j++) {
262 "%d. %s: %s", j + 1,
265 );
266 }
267
269 }
270 }
271 }
275 "cmd_execute: invalid arguments"
276 );
278 }
279
280
281 for(uint8_t i = 0; i < CONFIG_CMD_MAX_CLIENTS; i++) {
283 continue;
284 }
285
287
288 if(
str_cmp(tokens[0], client_info->
name) ==
true) {
289 if(
str_cmp(tokens[1],
"log") ==
true) {
290 if(num_tokens == 2) {
292
293 char *log_level_name[16];
296 return err;
297 }
298
302 "%s log level: %s",
304 log_level_name
305 );
306
308 }
309 else if(num_tokens == 3) {
310 const char *log_level_str = tokens[2];
312
315 return err;
316 }
317
319
321 }
322 else if(num_tokens > 3) {
326 "cmd_execute: invalid arguments"
327 );
328
330 }
331 }
332 for(uint8_t j = 0; j < client_info->
num_cmds; j++) {
336 }
337
338 if(j == client_info->
num_cmds - 1) {
342 "cmd_execute: invalid arguments"
343 );
344
346 }
347 }
348 }
349 }
353 "cmd_execute: invalid arguments"
354 );
355
357}
bool str_cmp(const char *str1, const char *str2)
Compares two null-terminated strings for equality.
int str_tokenize(char *str, const char *separator, uint16_t max_tokens, char **tokens, uint16_t *num_tokens)
Splits a string into tokens separated by a given delimiter.
ERR_te
Standard return type used by all public API functions.
ERR_te log_get_level_name(LOG_LEVEL_te log_level, char *str)
Converts a LOG_LEVEL_te value to its lowercase string name.
ERR_te log_level_to_int(char const *str, LOG_LEVEL_te *log_level_o)
Converts a log level name string to its LOG_LEVEL_te value.
#define LOG_ERROR(subsys, lvl, fmt,...)
#define LOG_INFO(subsys, lvl, fmt,...)
LOG_LEVEL_te
Log severity levels, in ascending order of severity.
Describes a subsystem client registering with the command module.
const CMD_INFO_ts *const cmds_ptr
LOG_LEVEL_te *const log_level_ptr
const CMD_HANDLER_tf handler