Factor out common ezusb_upload_firmware().

This commit is contained in:
Uwe Hermann 2010-04-09 20:44:51 +02:00
parent 9d2933fbe9
commit edf60d0575
3 changed files with 39 additions and 26 deletions

View 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;
}

View File

@ -275,34 +275,10 @@ struct sigrok_device_instance *sl_open_device(int device_index)
int upload_firmware(libusb_device *dev)
{
struct libusb_device_handle *hdl;
int err;
int ret;
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);
if (ret = ezusb_upload_firmware(dev, USB_CONFIGURATION, FIRMWARE) != 0)
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;
if ((ezusb_reset(hdl, 0)) < 0)
return 1;
libusb_close(hdl);
/* Remember when the last firmware update was done. */
g_get_current_time(&firmware_updated);

View File

@ -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);