Merge pull request #1672 from sjwilks/uploader_progress

Cleanup px_uploader output.
This commit is contained in:
Lorenz Meier
2015-01-19 18:11:23 +01:00
+28 -21
View File
@@ -266,18 +266,19 @@ class uploader(object):
self.__getSync() self.__getSync()
return value return value
def __drawProgressBar(self, progress, maxVal): def __drawProgressBar(self, label, progress, maxVal):
if maxVal < progress: if maxVal < progress:
progress = maxVal progress = maxVal
percent = (float(progress) / float(maxVal)) * 100.0 percent = (float(progress) / float(maxVal)) * 100.0
sys.stdout.write("\rprogress:[%-20s] %.2f%%" % ('='*int(percent/5.0), percent)) sys.stdout.write("\r%s: [%-20s] %.1f%%" % (label, '='*int(percent/5.0), percent))
sys.stdout.flush() sys.stdout.flush()
# send the CHIP_ERASE command and wait for the bootloader to become ready # send the CHIP_ERASE command and wait for the bootloader to become ready
def __erase(self): def __erase(self, label):
print("\n", end='')
self.__send(uploader.CHIP_ERASE self.__send(uploader.CHIP_ERASE
+ uploader.EOC) + uploader.EOC)
@@ -288,15 +289,14 @@ class uploader(object):
#Draw progress bar (erase usually takes about 9 seconds to complete) #Draw progress bar (erase usually takes about 9 seconds to complete)
estimatedTimeRemaining = deadline-time.time() estimatedTimeRemaining = deadline-time.time()
if estimatedTimeRemaining >= 9.0: if estimatedTimeRemaining >= 9.0:
self.__drawProgressBar(20.0-estimatedTimeRemaining, 9.0) self.__drawProgressBar(label, 20.0-estimatedTimeRemaining, 9.0)
else: else:
self.__drawProgressBar(10.0, 10.0) self.__drawProgressBar(label, 10.0, 10.0)
sys.stdout.write(" (timeout: %d seconds) " % int(deadline-time.time()) ) sys.stdout.write(" (timeout: %d seconds) " % int(deadline-time.time()) )
sys.stdout.flush() sys.stdout.flush()
if self.__trySync(): if self.__trySync():
self.__drawProgressBar(10.0, 10.0) self.__drawProgressBar(label, 10.0, 10.0)
sys.stdout.write("\nerase complete!\n")
return; return;
raise RuntimeError("timed out waiting for erase") raise RuntimeError("timed out waiting for erase")
@@ -350,7 +350,8 @@ class uploader(object):
return [seq[i:i+length] for i in range(0, len(seq), length)] return [seq[i:i+length] for i in range(0, len(seq), length)]
# upload code # upload code
def __program(self, fw): def __program(self, label, fw):
print("\n", end='')
code = fw.image code = fw.image
groups = self.__split_len(code, uploader.PROG_MULTI_MAX) groups = self.__split_len(code, uploader.PROG_MULTI_MAX)
@@ -361,31 +362,40 @@ class uploader(object):
#Print upload progress (throttled, so it does not delay upload progress) #Print upload progress (throttled, so it does not delay upload progress)
uploadProgress += 1 uploadProgress += 1
if uploadProgress % 256 == 0: if uploadProgress % 256 == 0:
self.__drawProgressBar(uploadProgress, len(groups)) self.__drawProgressBar(label, uploadProgress, len(groups))
self.__drawProgressBar(100, 100) self.__drawProgressBar(label, 100, 100)
print("\nprogram complete!")
# verify code # verify code
def __verify_v2(self, fw): def __verify_v2(self, label, fw):
print("\n", end='')
self.__send(uploader.CHIP_VERIFY self.__send(uploader.CHIP_VERIFY
+ uploader.EOC) + uploader.EOC)
self.__getSync() self.__getSync()
code = fw.image code = fw.image
groups = self.__split_len(code, uploader.READ_MULTI_MAX) groups = self.__split_len(code, uploader.READ_MULTI_MAX)
verifyProgress = 0
for bytes in groups: for bytes in groups:
verifyProgress += 1
if verifyProgress % 256 == 0:
self.__drawProgressBar(label, verifyProgress, len(groups))
if (not self.__verify_multi(bytes)): if (not self.__verify_multi(bytes)):
raise RuntimeError("Verification failed") raise RuntimeError("Verification failed")
self.__drawProgressBar(label, 100, 100)
def __verify_v3(self, fw): def __verify_v3(self, label, fw):
print("\n", end='')
self.__drawProgressBar(label, 1, 100)
expect_crc = fw.crc(self.fw_maxsize) expect_crc = fw.crc(self.fw_maxsize)
self.__send(uploader.GET_CRC self.__send(uploader.GET_CRC
+ uploader.EOC) + uploader.EOC)
report_crc = self.__recv_int() report_crc = self.__recv_int()
self.__getSync() self.__getSync()
verifyProgress = 0
if report_crc != expect_crc: if report_crc != expect_crc:
print("Expected 0x%x" % expect_crc) print("Expected 0x%x" % expect_crc)
print("Got 0x%x" % report_crc) print("Got 0x%x" % report_crc)
raise RuntimeError("Program CRC failed") raise RuntimeError("Program CRC failed")
self.__drawProgressBar(label, 100, 100)
# get basic data about the board # get basic data about the board
def identify(self): def identify(self):
@@ -439,19 +449,16 @@ class uploader(object):
except Exception: except Exception:
# ignore bad character encodings # ignore bad character encodings
pass pass
print("erase...")
self.__erase()
print("program...") self.__erase("Erase ")
self.__program(fw) self.__program("Program", fw)
print("verify...")
if self.bl_rev == 2: if self.bl_rev == 2:
self.__verify_v2(fw) self.__verify_v2("Verify ", fw)
else: else:
self.__verify_v3(fw) self.__verify_v3("Verify ", fw)
print("done, rebooting.") print("\nRebooting.\n")
self.__reboot() self.__reboot()
self.port.close() self.port.close()