px_uploader: Added progress bar for erasing and uploading firmware

This commit is contained in:
Johan Jansen 2015-01-08 13:18:50 +01:00
parent 6ed2f77ca5
commit 2aa7b3038a
1 changed files with 34 additions and 2 deletions

View File

@ -261,6 +261,16 @@ class uploader(object):
self.__getSync()
return value
def __drawProgressBar(self, progress, maxVal):
if maxVal < progress:
progress = maxVal
percent = (float(progress) / float(maxVal)) * 100.0
sys.stdout.write("\rprogress:[%-20s] %.2f%%" % ('='*int(percent/5.0), percent))
sys.stdout.flush()
# send the CHIP_ERASE command and wait for the bootloader to become ready
def __erase(self):
self.__send(uploader.CHIP_ERASE
@ -268,8 +278,19 @@ class uploader(object):
# erase is very slow, give it 20s
deadline = time.time() + 20
while time.time() < deadline:
#Draw progress bar (erase usually takes about 9 seconds to complete)
estimatedTimeRemaining = deadline-time.time()-11.0
if estimatedTimeRemaining > 0:
self.__drawProgressBar(10.0-estimatedTimeRemaining, 10.0)
else:
self.__drawProgressBar(10.0, 10.0)
sys.stdout.write(" (timeout: %d seconds) " % int(time.time()-deadline) )
try:
self.__getSync()
self.__drawProgressBar(10.0, 10.0)
sys.stdout.write("\nerase complete!\n")
return
except RuntimeError:
# we timed out, that's OK
@ -329,9 +350,18 @@ class uploader(object):
def __program(self, fw):
code = fw.image
groups = self.__split_len(code, uploader.PROG_MULTI_MAX)
uploadProgress = 0
for bytes in groups:
self.__program_multi(bytes)
#Print upload progress (throttled, so it does not delay upload progress)
uploadProgress += 1
if uploadProgress % 256 == 0:
self.__drawProgressBar(uploadProgress, len(groups))
self.__drawProgressBar(100, 100)
print("\nprogram complete!")
# verify code
def __verify_v2(self, fw):
self.__send(uploader.CHIP_VERIFY
@ -478,7 +508,7 @@ while True:
for port in portlist:
#print("Trying %s" % port)
# create an uploader attached to the port
try:
if "linux" in _platform:
@ -511,8 +541,10 @@ while True:
print("attempting reboot on %s..." % port)
print("if the board does not respond, unplug and re-plug the USB connector.")
up.send_reboot()
# wait for the reboot, without we might run into Serial I/O Error 5
time.sleep(0.5)
# always close the port
up.close()
continue
@ -524,7 +556,7 @@ while True:
except RuntimeError as ex:
# print the error
print("ERROR: %s" % ex.args)
print("\nERROR: %s" % ex.args)
finally:
# always close the port