From 1cc57c842a8efaadb2724350d935de7ea575473a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergi=20Hern=C3=A1ndez?= <shernand@iri.upc.edu> Date: Wed, 12 Oct 2016 16:57:13 +0200 Subject: [PATCH] Added functions to read and write raw data from the serial console interface. --- communications/include/serial_console.h | 2 ++ communications/src/serial_console.c | 47 ++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/communications/include/serial_console.h b/communications/include/serial_console.h index e21d13f..e0b2023 100644 --- a/communications/include/serial_console.h +++ b/communications/include/serial_console.h @@ -12,6 +12,8 @@ void serial_console_init(uint32_t baudrate); uint8_t serial_console_get_num_data(void); int cm510_printf(const char *fmt, ...); int cm510_scanf(const char *fmt, ... ); +uint8_t cm510_read(uint8_t *data,uint8_t len); +uint8_t cm510_write(uint8_t *data,uint8_t len); #ifdef __cplusplus } diff --git a/communications/src/serial_console.c b/communications/src/serial_console.c index af72a02..2deb73d 100644 --- a/communications/src/serial_console.c +++ b/communications/src/serial_console.c @@ -48,7 +48,6 @@ void serial_console_set_baudrate(uint32_t baudrate) int serial_console_putchar(char c,FILE *dev) { - if(c=='\n') { serial_console_tx_buffer[serial_console_tx_write_ptr]='\r'; @@ -156,3 +155,49 @@ int cm510_scanf(const char *fmt, ...) return done; } + +uint8_t cm510_read(uint8_t *data,uint8_t len) +{ + uint8_t i; + + for(i=0;i<len;i++) + { + if(serial_console_rx_num_data>0) + { + data[i]=serial_console_rx_buffer[serial_console_rx_read_ptr]; + serial_console_rx_read_ptr=(serial_console_rx_read_ptr+1)%SERIAL_CONSOLE_MAX_BUFFER_LEN; + serial_console_rx_num_data--; + } + else + break; + } + + return i; +} + +uint8_t cm510_write(uint8_t *data,uint8_t len) +{ + uint8_t i; + + for(i=0;i<len;i++) + { + if(serial_console_sending==0x00) + { + UDR1=data[i]; + serial_console_sending=0x01; + } + else + { + if(serial_console_tx_num_data<SERIAL_CONSOLE_MAX_BUFFER_LEN) + { + serial_console_tx_buffer[serial_console_tx_write_ptr]=data[i]; + serial_console_tx_write_ptr=(serial_console_tx_write_ptr+1)%SERIAL_CONSOLE_MAX_BUFFER_LEN; + serial_console_tx_num_data++; + } + else + break; + } + } + + return i; +} -- GitLab