diff --git a/sys/include/shell.h b/sys/include/shell.h index 0b3cf13aee6e5390cb026c622ec7d4e3f7be0816..0e225204469b17f6569a59f6e73ebd38fc1dbc86 100644 --- a/sys/include/shell.h +++ b/sys/include/shell.h @@ -20,6 +20,7 @@ #ifndef __SHELL_H #define __SHELL_H +#include <stdint.h> typedef struct shell_command_t { char *name; @@ -29,20 +30,21 @@ typedef struct shell_command_t { typedef struct shell_t { const shell_command_t *command_list; + uint16_t shell_buffer_size; int (*readchar)(void); void (*put_char)(int); } shell_t; -#define SHELL_BUFFER_SIZE (127) - /** * @brief Initialize a shell object * @param shell Pointer to preallocated shell object * @param shell_commands Pointer to shell command structure. See test_shell project for example. + * @param shell_buffer_size The size of the shell buffer. * @param read_char Pointer to input device read function. Should return exactly one byte or block. * @param put_char Pointer to output funtion. currently unused, shell code will use printf. */ -void shell_init(shell_t *shell, /*@null@*/ const shell_command_t *shell_commands, int(*read_char)(void), void (*put_char)(int)); +void shell_init(shell_t *shell, /*@null@*/ const shell_command_t *shell_commands, + uint16_t shell_buffer_size, int(*read_char)(void), void (*put_char)(int)); /** * @brief Endless loop that waits for command and executes handler. diff --git a/sys/shell/shell.c b/sys/shell/shell.c index 2878208c6934618e624ba60cdb2cad075477421a..a70122c899477bb009da239d6106baf7aa78400a 100644 --- a/sys/shell/shell.c +++ b/sys/shell/shell.c @@ -1,5 +1,5 @@ /** - * Shell interpreter + * Shell interpreter * * Copyright (C) 2009, Freie Universitaet Berlin (FUB). * Copyright (C) 2013, INRIA. @@ -45,7 +45,7 @@ static void(*find_handler(const shell_command_t *command_list, char *command))(c const shell_command_t *entry; /* iterating over command_lists */ - for (unsigned int i = 0; i < sizeof(command_lists)/sizeof(entry); i++) { + for (unsigned int i = 0; i < sizeof(command_lists) / sizeof(entry); i++) { if ((entry = command_lists[i])) { /* iterating over commands in command_lists entry */ while (entry->name != NULL) { @@ -77,7 +77,7 @@ static void print_help(const shell_command_t *command_list) const shell_command_t *entry; /* iterating over command_lists */ - for (unsigned int i = 0; i < sizeof(command_lists)/sizeof(entry); i++) { + for (unsigned int i = 0; i < sizeof(command_lists) / sizeof(entry); i++) { if ((entry = command_lists[i])) { /* iterating over commands in command_lists entry */ while (entry->name != NULL) { @@ -90,7 +90,7 @@ static void print_help(const shell_command_t *command_list) static void handle_input_line(shell_t *shell, char *line) { - char line_copy[SHELL_BUFFER_SIZE]; + char line_copy[shell->shell_buffer_size]; char *saveptr; strncpy(line_copy, line, sizeof(line_copy)); char *command = strtok_r(line_copy, " ", &saveptr); @@ -152,7 +152,7 @@ static inline void print_prompt(shell_t *shell) void shell_run(shell_t *shell) { - char line_buf[SHELL_BUFFER_SIZE]; + char line_buf[shell->shell_buffer_size]; print_prompt(shell); @@ -167,9 +167,11 @@ void shell_run(shell_t *shell) } } -void shell_init(shell_t *shell, const shell_command_t *shell_commands, int(*readchar)(void), void(*put_char)(int)) +void shell_init(shell_t *shell, const shell_command_t *shell_commands, + uint16_t shell_buffer_size, int(*readchar)(void), void(*put_char)(int)) { shell->command_list = shell_commands; + shell->shell_buffer_size = shell_buffer_size; shell->readchar = readchar; shell->put_char = put_char; }