From a925a2d5b40931d50a4a1d2eaf1207d9ef2ac943 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sergi=20Hern=C3=A1ndez?= <shernand@iri.upc.edu>
Date: Wed, 24 Feb 2016 20:51:44 +0000
Subject: [PATCH] Added a delay before laoding the hex file. Checked the number
 of available data before waiting.

---
 src/fw_downloader/fw_downloader.cpp | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/fw_downloader/fw_downloader.cpp b/src/fw_downloader/fw_downloader.cpp
index 633665f..2c08f8b 100755
--- a/src/fw_downloader/fw_downloader.cpp
+++ b/src/fw_downloader/fw_downloader.cpp
@@ -127,7 +127,8 @@ int main(int argc,char *argv[])
         while(!bootloader_connected)
         {
           try{
-            event_server->wait_all(events,20);
+            if((num_data=serial_port.get_num_data()==0))
+              event_server->wait_all(events,20);
             num_data=serial_port.get_num_data();
             serial_port.read((unsigned char *)bootloader_data,num_data);
             bootloader_data[num_data]='\0';
@@ -166,7 +167,8 @@ int main(int argc,char *argv[])
           while(!end)
           {
             try{
-              event_server->wait_all(events,300);
+              if((num_data=serial_port.get_num_data()==0))
+                event_server->wait_all(events,300);
               num_data=serial_port.get_num_data();
               serial_port.read(bootloader_data,num_data);
               bootloader_data[num_data]='\0';
@@ -179,6 +181,7 @@ int main(int argc,char *argv[])
           }
           end=false;
         }
+        sleep(1);
         // start the download
         serial_port.write((unsigned char *)&bootloader_load,1);
         if(protocol==new_protocol)
@@ -186,7 +189,8 @@ int main(int argc,char *argv[])
         while(!end)
         {
           try{
-            event_server->wait_all(events,300);
+            if((num_data=serial_port.get_num_data()==0))
+              event_server->wait_all(events,300);
             num_data=serial_port.get_num_data();
             serial_port.read(bootloader_data,num_data);
             bootloader_data[num_data]='\0';
@@ -212,6 +216,7 @@ int main(int argc,char *argv[])
           printf("\rDownloading Firmware (%ld/%ld byte)", downloaded_size, binary_size);
           fflush(stdout);
         }
+        usleep(1000);
         // send the checksum
         serial_port.write(&checksum,1);
         std::cout << std::endl << "Download complete" << std::endl;
@@ -219,7 +224,8 @@ int main(int argc,char *argv[])
         while(!end)
         {
           try{
-            event_server->wait_all(events,300);
+            if((num_data=serial_port.get_num_data()==0))
+              event_server->wait_all(events,300);
             // there has been an error
             num_data=serial_port.get_num_data();
             serial_port.read(bootloader_data,num_data);
-- 
GitLab