From 775ee44f6deb047cbce6669349bd3942090870bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sergi=20Hern=C3=A1ndez?= <shernand@iri.upc.edu>
Date: Thu, 20 Oct 2016 23:04:07 +0200
Subject: [PATCH] Implemented the cm510_read and cm510_write functions in the
 simulator..

---
 .../src/sim/serial_console.cpp                | 35 ++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/bioloid_controller_cm510/src/sim/serial_console.cpp b/bioloid_controller_cm510/src/sim/serial_console.cpp
index 676bae7..891cecb 100644
--- a/bioloid_controller_cm510/src/sim/serial_console.cpp
+++ b/bioloid_controller_cm510/src/sim/serial_console.cpp
@@ -67,7 +67,7 @@ int cm510_printf(const char *fmt, ...)
 int cm510_scanf(const char *fmt, ...)
 {
   va_list ap;
-  int done,num;;
+  int done,num;
 
   if(rs232_enabled)
   {
@@ -101,6 +101,39 @@ int cm510_scanf(const char *fmt, ...)
 
 }
 
+uint8_t cm510_read(uint8_t *data,uint8_t len)
+{
+  int num,read=0;
+  CEventServer *event_server=CEventServer::instance();
+  std::list<std::string> events;
+
+  try{
+    events.push_back(serial_console.get_rx_event_id());
+    do{
+      if((num=serial_console.get_num_data())==0)
+      {
+        event_server->wait_first(events,1000);
+        num=serial_console.get_num_data();
+      }
+      if(num>len)
+        serial_console.read((unsigned char *)data,len);
+      else
+        serial_console.read((unsigned char *)&data[read],num);
+      read+=num;
+    }while(read<len);
+  }catch(CException &e){
+    std::cout << e.what() << std::endl;
+  }
+
+  return read;
+}
+
+uint8_t cm510_write(uint8_t *data,uint8_t len)
+{
+  return serial_console.write((unsigned char *)data,len);
+}
+
+
 /* pubic functions */
 void serial_console_init(uint32_t baudrate)
 {
-- 
GitLab