diff --git a/src/omv/usbdbg.c b/src/omv/usbdbg.c index 5babe259d..f333e13b8 100644 --- a/src/omv/usbdbg.c +++ b/src/omv/usbdbg.c @@ -12,6 +12,7 @@ #include "framebuffer.h" #include "ff.h" #include "py/py_file.h" +#include "core_cm4.h" #include "usbdbg.h" #define USB_TX_BUF_SIZE (64) @@ -185,6 +186,10 @@ void usbdbg_control(void *buffer, uint8_t request, uint16_t length) break; } + case USBDBG_SYS_RESET: + NVIC_SystemReset(); + break; + default: /* error */ cmd = USBDBG_NONE; break; diff --git a/src/omv/usbdbg.h b/src/omv/usbdbg.h index 43beef9b5..8fda766e2 100644 --- a/src/omv/usbdbg.h +++ b/src/omv/usbdbg.h @@ -21,6 +21,7 @@ enum usbdbg_cmd { USBDBG_DESCRIPTOR_SAVE, USBDBG_ATTR_READ, USBDBG_ATTR_WRITE, + USBDBG_SYS_RESET, }; void usbdbg_init(); int usbdbg_script_ready(); diff --git a/usr/openmv-ide.glade b/usr/openmv-ide.glade index 97403b762..7ce594521 100644 --- a/usr/openmv-ide.glade +++ b/usr/openmv-ide.glade @@ -452,6 +452,21 @@ True + + + True + False + False + toolbutton5 + True + gtk-quit + + + + False + True + + True @@ -523,20 +538,6 @@ True - - - True - False - False - toolbutton5 - True - gtk-apply - - - False - True - - True diff --git a/usr/openmv-ide.py b/usr/openmv-ide.py index f625e7f78..0a1cbd1ca 100755 --- a/usr/openmv-ide.py +++ b/usr/openmv-ide.py @@ -88,6 +88,7 @@ class OMVGtk: signals = { "on_top_window_destroy" : self.quit, "on_connect_clicked" : self.connect_clicked, + "on_reset_clicked" : self.reset_clicked, "on_execute_clicked" : self.execute_clicked, "on_stop_clicked" : self.stop_clicked, "on_motion_notify" : self.motion_notify, @@ -108,6 +109,7 @@ class OMVGtk: self.connected = False self.builder.get_object('connect_button').set_sensitive(True) + self.builder.get_object('reset_button').set_sensitive(False) self.builder.get_object('exec_button').set_sensitive(False) self.builder.get_object('stop_button').set_sensitive(False) self.builder.get_object('zoomin_button').set_sensitive(False) @@ -147,6 +149,7 @@ class OMVGtk: self.connected = True self.builder.get_object('connect_button').set_sensitive(False) + self.builder.get_object('reset_button').set_sensitive(True) self.builder.get_object('exec_button').set_sensitive(True) self.builder.get_object('stop_button').set_sensitive(True) self.builder.get_object('zoomin_button').set_sensitive(True) @@ -176,6 +179,7 @@ class OMVGtk: self.connected = False self.builder.get_object('connect_button').set_sensitive(True) + self.builder.get_object('reset_button').set_sensitive(False) self.builder.get_object('exec_button').set_sensitive(False) self.builder.get_object('stop_button').set_sensitive(False) self.builder.get_object('zoomin_button').set_sensitive(False) @@ -187,6 +191,10 @@ class OMVGtk: def connect_clicked(self, widget): self.connect() + def reset_clicked(self, widget): + if (self.connected): + openmv.reset() + def execute_clicked(self, widget): buf = self.buffer.get_text(self.buffer.get_start_iter(), self.buffer.get_end_iter()) # interrupt any running code diff --git a/usr/openmv.py b/usr/openmv.py index 7becabcd8..ded28922c 100755 --- a/usr/openmv.py +++ b/usr/openmv.py @@ -33,6 +33,7 @@ __USBDBG_TEMPLATE_SAVE=8 __USBDBG_DESCRIPTOR_SAVE=9 __USBDBG_ATTR_READ=10 __USBDBG_ATTR_WRITE=11 +__USBDBG_SYS_RESET=12 ATTR_CONTRAST=0 ATTR_BRIGHTNESS=1 @@ -152,6 +153,13 @@ def set_attr(attr, value): def get_attr(attr): return 0 +def reset(): + try: + # This will timeout. + __dev.ctrl_transfer(0x41, __USBDBG_SYS_RESET, 0, __INTERFACE, None, __TIMEOUT) + except: + pass + if __name__ == '__main__': if len(sys.argv)!= 2: print 'usage: openmv.py