From 8198a98294bb68f8590a4123dfe53710855a4681 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sergi=20Hern=C3=A1ndez?= <shernand@iri.upc.edu>
Date: Sun, 28 Feb 2016 22:16:24 +0000
Subject: [PATCH] Added the command to set the application mode before
 executing the go command.

---
 src/fw_downloader/fw_downloader.cpp | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/fw_downloader/fw_downloader.cpp b/src/fw_downloader/fw_downloader.cpp
index 61f96dc..82ed684 100755
--- a/src/fw_downloader/fw_downloader.cpp
+++ b/src/fw_downloader/fw_downloader.cpp
@@ -16,6 +16,7 @@ const unsigned char bootloader_load='l';
 const unsigned char bootloader_go='g';
 const unsigned char bootloader_dump='d';
 const unsigned char bootloader_clear='c';
+const unsigned char bootloader_app='a';
 
 typedef enum {original_protocol=0,new_protocol=1} protocol_t;
 
@@ -133,7 +134,7 @@ int main(int argc,char *argv[])
       {
         try{
           if((num_data=serial_port.get_num_data()==0))
-            event_server->wait_all(events,100);
+            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';
@@ -357,6 +358,25 @@ int main(int argc,char *argv[])
           }
         }
       }
+      // go to application mode
+      serial_port.write((unsigned char *)&bootloader_app,1);
+      if(protocol==new_protocol)
+        serial_port.write((unsigned char *)&bootloader_ack,1);
+      end=false;
+      while(!end)
+      {
+        try{
+          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);
+          bootloader_data[num_data]='\0';
+          printf("%s",bootloader_data);
+        }catch(CEventTimeoutException &e){
+          // no error to report
+          end=true;
+        }
+      }
       // start the loaded program
       serial_port.write((unsigned char *)&bootloader_go,1);
       if(protocol==new_protocol)
-- 
GitLab