diff options
Diffstat (limited to 'src/components/uart')
| -rw-r--r-- | src/components/uart/simple_uart.c | 28 | ||||
| -rw-r--r-- | src/components/uart/source.mk | 1 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/components/uart/simple_uart.c b/src/components/uart/simple_uart.c new file mode 100644 index 0000000..5c97ccd --- /dev/null +++ b/src/components/uart/simple_uart.c @@ -0,0 +1,28 @@ +#include <stdio.h> +#include <gran/uart/simple_uart.h> + +struct simple_uart { + struct component component; +}; + +static stat simple_uart_write(struct simple_uart *uart, struct packet *pkt) +{ + (void)uart; + size_t size = packet_size(pkt); + if (size != 1) + return EBUS; + + putchar(*(uint8_t *)packet_data(pkt)); + packet_set_state(pkt, PACKET_DONE); + return OK; +} + +struct component *create_simple_uart() +{ + struct simple_uart *uart = calloc(1, sizeof(struct simple_uart)); + if (!uart) + return NULL; + + uart->component.write = (write_callback)simple_uart_write; + return (struct component *)uart; +} diff --git a/src/components/uart/source.mk b/src/components/uart/source.mk new file mode 100644 index 0000000..af26289 --- /dev/null +++ b/src/components/uart/source.mk @@ -0,0 +1 @@ +SOURCES += src/components/uart/simple_uart.c |
