From 861ed124caf5a403748c948b88afa4ef89cc1787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Sun, 11 Oct 2015 13:33:40 +0200 Subject: Add USART FILE interface ! NOT TESTED ! --- src/usart.c | 32 +++++++++++++++++++++++++++++++- usart.h | 11 +++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/usart.c b/src/usart.c index 0e17aff..745d75c 100644 --- a/src/usart.c +++ b/src/usart.c @@ -117,7 +117,7 @@ void usart_send_str(char *str) { #ifdef _IOE_USART_INBUFFER uint8_t usart_get(void) { - uint8_t rtn = 0; + uint8_t rtn; IOEBUFFER_GET(_ioe_usart_inbuffer, CONFIG_IOE_USART_INBUFFER_SIZE, rtn); return rtn; @@ -150,6 +150,36 @@ uint8_t usart_outbuffered(void) { } #endif +#ifdef CONFIG_IOE_USART_OUTFILE +static int usartput(char c, FILE * f) { + usart_send((uint8_t) c); + return 0; +} +#endif + +#ifdef CONFIG_IOE_USART_INBUFFER +static int usartget(FILE * f) { + uint8_t v; + while (!(v = usart_get())); + return v; +} +#endif + +#if (defined CONFIG_IOE_USART_INFILE) || (defined CONFIG_IOE_USART_OUTFILE) +FILE *usart_async_open(void) { + usart_init_async(); +#ifdef CONFIG_IOE_USART_OUTFILE +#ifdef CONFIG_IOE_USART_INFILE + return fdevopen(spiput, spiget); +#else + return fdevopen(spiput, 0); +#endif +#else + return fdevopen(0, spiget); +#endif +} +#endif + ////// Interrupts //////////////////////////////// void (*usart_receive) (uint8_t data) = 0; void (*usart_sent) (void) = 0; diff --git a/usart.h b/usart.h index 3a06baf..04ed963 100644 --- a/usart.h +++ b/usart.h @@ -1,6 +1,7 @@ #include #include #include +#include #include "mcu/mcu_def.h" #include "buffers.h" @@ -51,6 +52,13 @@ enum usartDataBits { #define USART_DATAOVERRUN _BV(DOR0) #define USART_PARITYERROR _BV(UPE0) +#if (defined CONFIG_IOE_USART_INFILE) && (CONFIG_IOE_USART_INBUFFER_SIZE <= 0) +#error "USART Input file can't be enabled without input buffer" +#endif +#if (defined CONFIG_IOE_USART_OUTFILE) && (CONFIG_IOE_USART_OUTBUFFER_SIZE <= 0) +#error "USART Input file can't be enabled without output buffer" +#endif + #if CONFIG_IOE_USART_INBUFFER_SIZE > 0 #define _IOE_USART_INBUFFER volatile IOEBUFFER(_ioe_usart_inbuffer, CONFIG_IOE_USART_INBUFFER_SIZE); @@ -85,6 +93,9 @@ uint8_t usart_inbuffered(void); #ifdef _IOE_USART_OUTBUFFER uint8_t usart_outbuffered(void); #endif +#if (defined CONFIG_IOE_USART_INFILE) || (defined CONFIG_IOE_USART_OUTFILE) +FILE *spi_open(void); +#endif // Following function must be user defined if relevant buffers not used. extern void (*usart_receive)(uint8_t data); -- cgit v1.2.3