mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Cleanup IDE's Bootloader class
This commit is contained in:
parent
260caaa8e7
commit
17b1ce2b24
@ -74,6 +74,11 @@ class Bootloader:
|
||||
self.ok_button = builder.get_object("fw_ok_button")
|
||||
self.cancel_button = builder.get_object("fw_cancel_button")
|
||||
|
||||
# Firmware progress
|
||||
self.fw_progress.set_text("")
|
||||
self.fw_progress.set_fraction(0.0)
|
||||
|
||||
# Buttons initial state
|
||||
self.ok_button.set_sensitive(True)
|
||||
self.cancel_button.set_sensitive(True)
|
||||
self.fw_path_button.set_sensitive(True)
|
||||
@ -83,6 +88,9 @@ class Bootloader:
|
||||
if os.path.isfile(self.last_fw_path) == False:
|
||||
self.last_fw_path = ""
|
||||
|
||||
# Set firmware path entry
|
||||
self.fw_path_entry.set_text(self.last_fw_path)
|
||||
|
||||
# Connect signals
|
||||
self.dialog.connect("close", self.on_dialog_close)
|
||||
self.dialog.connect("delete_event", self.on_dialog_close)
|
||||
@ -110,16 +118,24 @@ class Bootloader:
|
||||
|
||||
dialog.destroy()
|
||||
|
||||
def run(self):
|
||||
# Run bootloader dialog
|
||||
self.dialog.run()
|
||||
|
||||
# Fake multitasking :P
|
||||
def task_init(self, state):
|
||||
state["next"] = self.task_connect
|
||||
def task(self, state):
|
||||
if (self.running == False or state["next"](state) == False):
|
||||
self.dialog.hide()
|
||||
return False
|
||||
return True
|
||||
|
||||
def task_connect(self, state):
|
||||
def task_init(self, state):
|
||||
openmv.disconnect()
|
||||
try:
|
||||
# Attempt to connect to bootloader
|
||||
openmv.init(self.port, self.baud, timeout=0.050)
|
||||
openmv.init(self.port, baudrate=self.baud, timeout=0.050)
|
||||
if openmv.bootloader_start():
|
||||
openmv.set_timeout(1)
|
||||
state["next"] = self.task_erase
|
||||
state["bar"].set_text("Erasing...")
|
||||
self.cancel_button.set_sensitive(False)
|
||||
@ -138,8 +154,8 @@ class Bootloader:
|
||||
|
||||
def task_erase(self, state):
|
||||
sector = state["sector"]
|
||||
state["bar"].set_text("Erasing sector %d/%d"%((sector-FLASH_SECTOR_START+1), FLASH_SECTOR_END-FLASH_SECTOR_START+1))
|
||||
state["bar"].set_fraction((sector-FLASH_SECTOR_START+1)/float(FLASH_SECTOR_END-FLASH_SECTOR_START+1))
|
||||
state["bar"].set_text("Erasing sector %d/%d"%((sector-FLASH_SECTOR_START+1), FLASH_SECTOR_END-FLASH_SECTOR_START+1))
|
||||
openmv.flash_erase(sector)
|
||||
sector += 1
|
||||
if (sector == FLASH_SECTOR_END+1):
|
||||
@ -158,36 +174,15 @@ class Bootloader:
|
||||
|
||||
xfer_bytes += chunk
|
||||
state["xfer_bytes"] = xfer_bytes
|
||||
state["bar"].set_text("Uploading %d/%d"%(xfer_bytes, xfer_total))
|
||||
state["bar"].set_fraction(xfer_bytes/float(xfer_total))
|
||||
state["bar"].set_text("Uploading %d/%d"%(xfer_bytes, xfer_total))
|
||||
|
||||
if (xfer_bytes == xfer_total):
|
||||
openmv.bootloader_reset()
|
||||
state["dialog"].hide()
|
||||
openmv.disconnect()
|
||||
return False
|
||||
return True
|
||||
|
||||
def task(self, state):
|
||||
return self.running and state["next"](state)
|
||||
|
||||
def run(self):
|
||||
self.running = True
|
||||
self.flash_msg = 1
|
||||
|
||||
self.ok_button.set_sensitive(True)
|
||||
self.cancel_button.set_sensitive(True)
|
||||
self.fw_path_button.set_sensitive(True)
|
||||
|
||||
# Firmware progress
|
||||
self.fw_progress.set_text("")
|
||||
self.fw_progress.set_fraction(0.0)
|
||||
|
||||
# Last firmware path
|
||||
self.fw_path_entry.set_text(self.last_fw_path)
|
||||
|
||||
# Run bootloader dialog
|
||||
self.dialog.run()
|
||||
|
||||
def on_dialog_close(self, widget, event=None):
|
||||
self.dialog.hide()
|
||||
self.running = False
|
||||
@ -201,7 +196,7 @@ class Bootloader:
|
||||
fw_path = self.fw_path_entry.get_text()
|
||||
try:
|
||||
with open(fw_path, 'rb') as f:
|
||||
buf= f.read()
|
||||
buf = f.read()
|
||||
except Exception as e:
|
||||
self.show_message_dialog(gtk.MESSAGE_ERROR, "Failed to open file %s"%str(e))
|
||||
self.dialog.hide()
|
||||
@ -210,9 +205,12 @@ class Bootloader:
|
||||
self.last_fw_path = fw_path
|
||||
self.config.set("main", "last_fw_path", self.last_fw_path)
|
||||
|
||||
self.state={ "next":self.task_init, "buf":buf, "sector":FLASH_SECTOR_START, "running":True,
|
||||
self.state={ "next":self.task_init, "buf":buf, "sector":FLASH_SECTOR_START,
|
||||
"bar":self.fw_progress, "dialog":self.dialog, "xfer_bytes":0, "xfer_total":len(buf)}
|
||||
|
||||
self.flash_msg = 1
|
||||
self.running = True
|
||||
|
||||
gobject.gobject.idle_add(self.task, self.state)
|
||||
else:
|
||||
self.dialog.hide()
|
||||
@ -604,7 +602,8 @@ class OMVGtk:
|
||||
if (self.connected):
|
||||
openmv.reset()
|
||||
# Create bootloader object
|
||||
Bootloader(self.builder, self.config).run()
|
||||
self.bootloader = None
|
||||
self.bootloader = Bootloader(self.builder, self.config).run()
|
||||
|
||||
def button_pressed(self, widget, event):
|
||||
self.x1 = int(event.x)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user