From 2c63756b9244efe191d2038a7ec65261f04718f9 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sat, 6 Jul 2013 22:49:22 +0000 Subject: read_flash_segment works now added timeout for responses from bootloader git-svn-id: https://svn.spreadspace.org/pic/trunk@43 a09c6847-51d9-44de-8ef2-e725cf50f3c7 --- downloader/downloader.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'downloader/downloader.py') diff --git a/downloader/downloader.py b/downloader/downloader.py index 8da13cf..9efb30e 100755 --- a/downloader/downloader.py +++ b/downloader/downloader.py @@ -85,7 +85,7 @@ def open_serial(device, baud): print "opening %s (%s Baud)" % (device, baud) try: - dev = serial.Serial(port=device, baudrate=baud) + dev = serial.Serial(port=device, baudrate=baud, timeout=3) dev.flushInput() dev.flushOutput() return dev @@ -114,6 +114,9 @@ def exec_command(dev, cmd, answer): astr = bytearray() astr += dev.read(3) + if len(astr) < 3: + print "ERROR: timeout while reading response header" + sys.exit(4) if astr[0] != cstr[0]: print "ERROR: bootloader returned wrong command code" @@ -130,7 +133,14 @@ def exec_command(dev, cmd, answer): sys.exit(4) answer_len = struct.calcsize(answer) - astr += dev.read(answer_len) + if answer_len > 0: + tmp = bytearray() + tmp += dev.read(answer_len) + if len(tmp) < answer_len: + print "ERROR: timeout while reading response" + sys.exit(4) + + astr += tmp if 0 != calc_csum(astr): print "ERROR: checksum error" -- cgit v1.2.3