]> sigrok.org Git - libsigrok.git/commitdiff
Factor out common ezusb_upload_firmware().
authorUwe Hermann <redacted>
Fri, 9 Apr 2010 18:44:51 +0000 (20:44 +0200)
committerUwe Hermann <redacted>
Fri, 9 Apr 2010 18:44:51 +0000 (20:44 +0200)
hardware/common/ezusb.c
hardware/saleae-logic/saleae-logic.c
sigrok.h

index fe204a00208ab738fd7a41e3767ea3f319e482eb..68692c3a29fbbabb6f1f87d3fca590d86b0079ba 100644 (file)
@@ -78,3 +78,38 @@ int ezusb_install_firmware(libusb_device_handle *hdl, const char *filename)
 
        return result;
 }
+
+int ezusb_upload_firmware(libusb_device *dev, int configuration,
+                         const char *filename)
+{
+       struct libusb_device_handle *hdl;
+       int err;
+
+       g_message("uploading firmware to device on %d.%d",
+                 libusb_get_bus_number(dev), libusb_get_device_address(dev));
+
+       err = libusb_open(dev, &hdl);
+       if (err != 0) {
+               g_warning("failed to open device: %d", err);
+               return 1;
+       }
+
+       err = libusb_set_configuration(hdl, configuration);
+       if (err != 0) {
+               g_warning("Unable to set configuration: %d", err);
+               return 1;
+       }
+
+       if ((ezusb_reset(hdl, 1)) < 0)
+               return 1;
+
+       if (ezusb_install_firmware(hdl, filename) != 0)
+               return 1;
+
+       if ((ezusb_reset(hdl, 0)) < 0)
+               return 1;
+
+       libusb_close(hdl);
+
+       return 0;
+}
index 9ebb207e6d6a2f5779ead62720715f3ee600cdf1..ee6a406deb74771a9e6eae241f86733584743d14 100644 (file)
@@ -275,35 +275,11 @@ struct sigrok_device_instance *sl_open_device(int device_index)
 
 int upload_firmware(libusb_device *dev)
 {
-       struct libusb_device_handle *hdl;
-       int err;
-
-       g_message("uploading firmware to device on %d.%d",
-                 libusb_get_bus_number(dev), libusb_get_device_address(dev));
-
-       err = libusb_open(dev, &hdl);
-       if (err != 0) {
-               g_warning("failed to open device: %d", err);
-               return 1;
-       }
-
-       err = libusb_set_configuration(hdl, USB_CONFIGURATION);
-       if (err != 0) {
-               g_warning("Unable to set configuration: %d", err);
-               return 1;
-       }
-
-       if ((ezusb_reset(hdl, 1)) < 0)
-               return 1;
-
-       if (ezusb_install_firmware(hdl, FIRMWARE) != 0)
-               return 1;
+       int ret;
 
-       if ((ezusb_reset(hdl, 0)) < 0)
+       if (ret = ezusb_upload_firmware(dev, USB_CONFIGURATION, FIRMWARE) != 0)
                return 1;
 
-       libusb_close(hdl);
-
        /* Remember when the last firmware update was done. */
        g_get_current_time(&firmware_updated);
 
index f5678e7603a293b310bb8178896d9868770ed7ec..4c3af637779d5fbfd5089631d712c63593449ea9 100644 (file)
--- a/sigrok.h
+++ b/sigrok.h
@@ -394,6 +394,8 @@ int session_save(char *filename);
 
 int ezusb_reset(struct libusb_device_handle *hdl, int set_clear);
 int ezusb_install_firmware(libusb_device_handle *hdl, char *filename);
+int ezusb_upload_firmware(libusb_device *dev, int configuration,
+                          const char *filename);
 
 GSList *list_serial_ports(void);
 int serial_open(const char *pathname, int flags);