diff --git a/native/board_init.c b/native/board_init.c index d6f4c4ba31..52e63878fc 100644 --- a/native/board_init.c +++ b/native/board_init.c @@ -21,6 +21,9 @@ */ void board_init() { +#ifdef MODULE_UART0 + _native_init_uart0(); +#endif LED_GREEN_OFF(); LED_RED_ON(); puts("RIOT native board initialized."); diff --git a/native/include/board.h b/native/include/board.h index 457289a566..69e40eb383 100644 --- a/native/include/board.h +++ b/native/include/board.h @@ -22,3 +22,8 @@ void LED_RED_OFF(void); void LED_RED_ON(void); void LED_RED_TOGGLE(void); +#ifdef MODULE_UART0 +#include +extern fd_set _native_uart_rfds; +extern void _native_handle_uart0_input(void); +#endif diff --git a/native/native-uart0.c b/native/native-uart0.c new file mode 100644 index 0000000000..c73b5ee6ea --- /dev/null +++ b/native/native-uart0.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include + +#include "cpu.h" +#include "debug.h" +#include "board_uart0.h" + +fd_set _native_uart_rfds; + +static inline int uart0_puts(char *astring, int length) +{ + return puts(astring); +} + +void _native_handle_uart0_input() +{ + char buf[42]; + int nread; + + _native_in_syscall = 0; + _native_in_isr = 1; + + nread = read(0, buf, sizeof(buf)); + if (nread == -1) { + err(1, "_native_handle_uart0_input(): read()"); + } + for(int pos = 0; pos < nread; pos++) { + uart0_handle_incoming(buf[pos]); + } + uart0_notify_thread(); + + _native_in_isr = 0; + cpu_switch_context_exit(); +} + +void _native_init_uart0() +{ + /* Watch stdin (fd 0) to see when it has input. */ + FD_ZERO(&_native_uart_rfds); + FD_SET(0, &_native_uart_rfds); + puts("RIOT native uart0 initialized."); +}