int ezusb_upload_firmware(struct slogic_ctx *handle, int configuration, const char *filename){ log_printf(DEBUG, "uploading firmware to device on %d.%d\n", libusb_get_bus_number(handle->dev), libusb_get_device_address(handle->dev)); if ((ezusb_reset(handle->device_handle, 1)) < 0) return 1; if (ezusb_install_firmware(handle->device_handle, filename) != 0) return 1; if ((ezusb_reset(handle->device_handle, 0)) < 0) return 1; return 0; }
SR_PRIV int ezusb_upload_firmware(libusb_device *dev, int configuration, const char *filename) { struct libusb_device_handle *hdl; int ret; sr_info("uploading firmware to device on %d.%d", libusb_get_bus_number(dev), libusb_get_device_address(dev)); if ((ret = libusb_open(dev, &hdl)) < 0) { sr_err("failed to open device: %s.", libusb_error_name(ret)); return SR_ERR; } /* * The libusbx darwin backend is broken: it can report a kernel driver being * active, but detaching it always returns an error. */ #if !defined(__APPLE__) if (libusb_kernel_driver_active(hdl, 0) == 1) { if ((ret = libusb_detach_kernel_driver(hdl, 0)) < 0) { sr_err("failed to detach kernel driver: %s", libusb_error_name(ret)); return SR_ERR; } } #endif if ((ret = libusb_set_configuration(hdl, configuration)) < 0) { sr_err("Unable to set configuration: %s", libusb_error_name(ret)); return SR_ERR; } if ((ezusb_reset(hdl, 1)) < 0) return SR_ERR; if (ezusb_install_firmware(hdl, filename) < 0) return SR_ERR; if ((ezusb_reset(hdl, 0)) < 0) return SR_ERR; libusb_close(hdl); return SR_OK; }
SR_PRIV int ezusb_upload_firmware(libusb_device *dev, int configuration, const char *filename) { struct libusb_device_handle *hdl; int ret; sr_info("uploading firmware to device on %d.%d", libusb_get_bus_number(dev), libusb_get_device_address(dev)); if ((ret = libusb_open(dev, &hdl)) < 0) { sr_err("failed to open device: %s.", libusb_error_name(ret)); return SR_ERR; } /* Neither Windows/MinGW nor Darwin/Mac support these libusb-1.0 calls. */ #if !defined(_WIN32) && !defined(__APPLE__) if (libusb_kernel_driver_active(hdl, 0)) { if ((ret = libusb_detach_kernel_driver(hdl, 0)) < 0) { sr_err("failed to detach kernel driver: %s", libusb_error_name(ret)); return SR_ERR; } } #endif if ((ret = libusb_set_configuration(hdl, configuration)) < 0) { sr_err("Unable to set configuration: %s", libusb_error_name(ret)); return SR_ERR; } if ((ezusb_reset(hdl, 1)) < 0) return SR_ERR; if (ezusb_install_firmware(hdl, filename) < 0) return SR_ERR; if ((ezusb_reset(hdl, 0)) < 0) return SR_ERR; libusb_close(hdl); return SR_OK; }
int ezusb_upload_firmware(libusb_device *dev, int configuration, const char *filename) { struct libusb_device_handle *hdl; int err; sr_info("uploading firmware to device on %d.%d", libusb_get_bus_number(dev), libusb_get_device_address(dev)); if ((err = libusb_open(dev, &hdl)) < 0) { sr_warn("failed to open device: %d", err); return SR_ERR; } if (libusb_kernel_driver_active(hdl, 0)) { if ((err = libusb_detach_kernel_driver(hdl, 0)) < 0) { sr_warn("failed to detach kernel driver: %d", err); return SR_ERR; } } if ((err = libusb_set_configuration(hdl, configuration)) < 0) { sr_warn("Unable to set configuration: %d", err); return SR_ERR; } if ((ezusb_reset(hdl, 1)) < 0) return SR_ERR; if (ezusb_install_firmware(hdl, filename) < 0) return SR_ERR; if ((ezusb_reset(hdl, 0)) < 0) return SR_ERR; libusb_close(hdl); return SR_OK; }
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; 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); return 0; }