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