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.ok_button = builder.get_object("fw_ok_button")
|
||||||
self.cancel_button = builder.get_object("fw_cancel_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.ok_button.set_sensitive(True)
|
||||||
self.cancel_button.set_sensitive(True)
|
self.cancel_button.set_sensitive(True)
|
||||||
self.fw_path_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:
|
if os.path.isfile(self.last_fw_path) == False:
|
||||||
self.last_fw_path = ""
|
self.last_fw_path = ""
|
||||||
|
|
||||||
|
# Set firmware path entry
|
||||||
|
self.fw_path_entry.set_text(self.last_fw_path)
|
||||||
|
|
||||||
# Connect signals
|
# Connect signals
|
||||||
self.dialog.connect("close", self.on_dialog_close)
|
self.dialog.connect("close", self.on_dialog_close)
|
||||||
self.dialog.connect("delete_event", self.on_dialog_close)
|
self.dialog.connect("delete_event", self.on_dialog_close)
|
||||||
@ -110,16 +118,24 @@ class Bootloader:
|
|||||||
|
|
||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
# Run bootloader dialog
|
||||||
|
self.dialog.run()
|
||||||
|
|
||||||
# Fake multitasking :P
|
# Fake multitasking :P
|
||||||
def task_init(self, state):
|
def task(self, state):
|
||||||
state["next"] = self.task_connect
|
if (self.running == False or state["next"](state) == False):
|
||||||
|
self.dialog.hide()
|
||||||
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def task_connect(self, state):
|
def task_init(self, state):
|
||||||
|
openmv.disconnect()
|
||||||
try:
|
try:
|
||||||
# Attempt to connect to bootloader
|
# 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():
|
if openmv.bootloader_start():
|
||||||
|
openmv.set_timeout(1)
|
||||||
state["next"] = self.task_erase
|
state["next"] = self.task_erase
|
||||||
state["bar"].set_text("Erasing...")
|
state["bar"].set_text("Erasing...")
|
||||||
self.cancel_button.set_sensitive(False)
|
self.cancel_button.set_sensitive(False)
|
||||||
@ -138,8 +154,8 @@ class Bootloader:
|
|||||||
|
|
||||||
def task_erase(self, state):
|
def task_erase(self, state):
|
||||||
sector = state["sector"]
|
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_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)
|
openmv.flash_erase(sector)
|
||||||
sector += 1
|
sector += 1
|
||||||
if (sector == FLASH_SECTOR_END+1):
|
if (sector == FLASH_SECTOR_END+1):
|
||||||
@ -158,36 +174,15 @@ class Bootloader:
|
|||||||
|
|
||||||
xfer_bytes += chunk
|
xfer_bytes += chunk
|
||||||
state["xfer_bytes"] = xfer_bytes
|
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_fraction(xfer_bytes/float(xfer_total))
|
||||||
|
state["bar"].set_text("Uploading %d/%d"%(xfer_bytes, xfer_total))
|
||||||
|
|
||||||
if (xfer_bytes == xfer_total):
|
if (xfer_bytes == xfer_total):
|
||||||
openmv.bootloader_reset()
|
openmv.bootloader_reset()
|
||||||
state["dialog"].hide()
|
openmv.disconnect()
|
||||||
return False
|
return False
|
||||||
return True
|
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):
|
def on_dialog_close(self, widget, event=None):
|
||||||
self.dialog.hide()
|
self.dialog.hide()
|
||||||
self.running = False
|
self.running = False
|
||||||
@ -201,7 +196,7 @@ class Bootloader:
|
|||||||
fw_path = self.fw_path_entry.get_text()
|
fw_path = self.fw_path_entry.get_text()
|
||||||
try:
|
try:
|
||||||
with open(fw_path, 'rb') as f:
|
with open(fw_path, 'rb') as f:
|
||||||
buf= f.read()
|
buf = f.read()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.show_message_dialog(gtk.MESSAGE_ERROR, "Failed to open file %s"%str(e))
|
self.show_message_dialog(gtk.MESSAGE_ERROR, "Failed to open file %s"%str(e))
|
||||||
self.dialog.hide()
|
self.dialog.hide()
|
||||||
@ -210,9 +205,12 @@ class Bootloader:
|
|||||||
self.last_fw_path = fw_path
|
self.last_fw_path = fw_path
|
||||||
self.config.set("main", "last_fw_path", self.last_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)}
|
"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)
|
gobject.gobject.idle_add(self.task, self.state)
|
||||||
else:
|
else:
|
||||||
self.dialog.hide()
|
self.dialog.hide()
|
||||||
@ -604,7 +602,8 @@ class OMVGtk:
|
|||||||
if (self.connected):
|
if (self.connected):
|
||||||
openmv.reset()
|
openmv.reset()
|
||||||
# Create bootloader object
|
# 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):
|
def button_pressed(self, widget, event):
|
||||||
self.x1 = int(event.x)
|
self.x1 = int(event.x)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user