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