1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-18 12:52:44 +01:00

Merge pull request #453 from authmillenon/fix_uart_shell_conflict

Fix uart/shell conflict
This commit is contained in:
Oleg Hahm 2013-12-20 02:51:59 -08:00
commit d610e43528
9 changed files with 45 additions and 19 deletions

View File

@ -1,8 +1,6 @@
#ifndef __UART0_H #ifndef __UART0_H
#define __UART0_H #define __UART0_H
#define UART0_BUFSIZE 32
extern int uart0_handler_pid; extern int uart0_handler_pid;
#endif /* __UART0_H */ #endif /* __UART0_H */

View File

@ -75,5 +75,10 @@ See the file LICENSE in the top level directory for more details.
#define TRANSCEIVER_BUFFER_SIZE (10) #define TRANSCEIVER_BUFFER_SIZE (10)
#define RX_BUF_SIZE (10) #define RX_BUF_SIZE (10)
#ifndef UART0_BUFSIZE
#define UART0_BUFSIZE (128)
#endif
/** @} */ /** @} */
#endif /* CPUCONF_H_ */ #endif /* CPUCONF_H_ */

View File

@ -59,5 +59,9 @@
#define TRANSCEIVER_BUFFER_SIZE (10) #define TRANSCEIVER_BUFFER_SIZE (10)
#define RX_BUF_SIZE (10) #define RX_BUF_SIZE (10)
#ifndef UART0_BUFSIZE
#define UART0_BUFSIZE (64)
#endif
/** @} */ /** @} */
#endif /* CPUCONF_H_ */ #endif /* CPUCONF_H_ */

View File

@ -28,6 +28,10 @@ See the file LICENSE in the top level directory for more details.
#define RX_BUF_SIZE (3) #define RX_BUF_SIZE (3)
#define TRANSCEIVER_BUFFER_SIZE (3) #define TRANSCEIVER_BUFFER_SIZE (3)
#ifndef UART0_BUFSIZE
#define UART0_BUFSIZE (32)
#endif
/** @} */ /** @} */
#endif /* CPUCONF_H_ */ #endif /* CPUCONF_H_ */

View File

@ -48,6 +48,11 @@
#define NATIVE_ISR_STACKSIZE (8192) #define NATIVE_ISR_STACKSIZE (8192)
#endif /* OS */ #endif /* OS */
#ifdef UART0_BUFSIZE
#undef UART0_BUFSIZE
#endif
#define UART0_BUFSIZE (128)
/* for nativenet */ /* for nativenet */
#define NATIVE_ETH_PROTO 0x1234 #define NATIVE_ETH_PROTO 0x1234

View File

@ -12,6 +12,8 @@
#ifndef __BOARD_UART0_H #ifndef __BOARD_UART0_H
#define __BOARD_UART0_H #define __BOARD_UART0_H
#include "cpu-conf.h" /* To give user access to UART0_BUFSIZE */
extern int uart0_handler_pid; extern int uart0_handler_pid;
void board_uart0_init(void); void board_uart0_init(void);

View File

@ -20,6 +20,7 @@
#ifndef __SHELL_H #ifndef __SHELL_H
#define __SHELL_H #define __SHELL_H
#include <stdint.h>
typedef struct shell_command_t { typedef struct shell_command_t {
char *name; char *name;
@ -29,20 +30,21 @@ typedef struct shell_command_t {
typedef struct shell_t { typedef struct shell_t {
const shell_command_t *command_list; const shell_command_t *command_list;
uint16_t shell_buffer_size;
int (*readchar)(void); int (*readchar)(void);
void (*put_char)(int); void (*put_char)(int);
} shell_t; } shell_t;
#define SHELL_BUFFER_SIZE (127)
/** /**
* @brief Initialize a shell object * @brief Initialize a shell object
* @param shell Pointer to preallocated 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_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 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. * @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. * @brief Endless loop that waits for command and executes handler.

View File

@ -45,7 +45,7 @@ static void(*find_handler(const shell_command_t *command_list, char *command))(c
const shell_command_t *entry; const shell_command_t *entry;
/* iterating over command_lists */ /* 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])) { if ((entry = command_lists[i])) {
/* iterating over commands in command_lists entry */ /* iterating over commands in command_lists entry */
while (entry->name != NULL) { while (entry->name != NULL) {
@ -77,7 +77,7 @@ static void print_help(const shell_command_t *command_list)
const shell_command_t *entry; const shell_command_t *entry;
/* iterating over command_lists */ /* 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])) { if ((entry = command_lists[i])) {
/* iterating over commands in command_lists entry */ /* iterating over commands in command_lists entry */
while (entry->name != NULL) { 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) 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; char *saveptr;
strncpy(line_copy, line, sizeof(line_copy)); strncpy(line_copy, line, sizeof(line_copy));
char *command = strtok_r(line_copy, " ", &saveptr); 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) void shell_run(shell_t *shell)
{ {
char line_buf[SHELL_BUFFER_SIZE]; char line_buf[shell->shell_buffer_size];
print_prompt(shell); 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->command_list = shell_commands;
shell->shell_buffer_size = shell_buffer_size;
shell->readchar = readchar; shell->readchar = readchar;
shell->put_char = put_char; shell->put_char = put_char;
} }

View File

@ -1,5 +1,6 @@
#include <stdio.h> #include <stdio.h>
#include "cpu-conf.h"
#include "chardev_thread.h" #include "chardev_thread.h"
#include "ringbuffer.h" #include "ringbuffer.h"
#include "thread.h" #include "thread.h"
@ -9,7 +10,10 @@
#include "board_uart0.h" #include "board_uart0.h"
#define UART0_BUFSIZE (32) #ifndef UART0_BUFSIZE
#define UART0_BUFSIZE (128)
#endif
#define UART0_STACKSIZE (MINIMUM_STACK_SIZE + 256) #define UART0_STACKSIZE (MINIMUM_STACK_SIZE + 256)
ringbuffer_t uart0_ringbuffer; ringbuffer_t uart0_ringbuffer;
@ -28,13 +32,13 @@ void board_uart0_init(void)
{ {
ringbuffer_init(&uart0_ringbuffer, buffer, UART0_BUFSIZE); ringbuffer_init(&uart0_ringbuffer, buffer, UART0_BUFSIZE);
int pid = thread_create( int pid = thread_create(
uart0_thread_stack, uart0_thread_stack,
sizeof(uart0_thread_stack), sizeof(uart0_thread_stack),
PRIORITY_MAIN - 1, PRIORITY_MAIN - 1,
CREATE_STACKTEST|CREATE_SLEEPING, CREATE_STACKTEST | CREATE_SLEEPING,
uart0_loop, uart0_loop,
"uart0" "uart0"
); );
uart0_handler_pid = pid; uart0_handler_pid = pid;
thread_wakeup(pid); thread_wakeup(pid);
puts("uart0_init() [OK]"); puts("uart0_init() [OK]");