diff --git a/src/fw_downloader/fw_downloader.cpp b/src/fw_downloader/fw_downloader.cpp index 61f96dcbf7e8a8d8f9aca3e6f134d3e763ce2640..82ed684111d60fb33a57fc1d6cb77e4828775cec 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)