From: Joel Holdsworth Date: Mon, 12 Jun 2017 17:30:52 +0000 (-0600) Subject: usb.c: Moved in usb_match_manuf_product X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=69f7d9b4a9327c32a7819dbf4aa89de642de59af;p=libsigrok.git usb.c: Moved in usb_match_manuf_product --- diff --git a/src/hardware/fx2lafw/api.c b/src/hardware/fx2lafw/api.c index 71aabd9f..58ed64d7 100644 --- a/src/hardware/fx2lafw/api.c +++ b/src/hardware/fx2lafw/api.c @@ -412,13 +412,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) devc->dslogic = TRUE; devc->samplerates = dslogic_samplerates; devc->num_samplerates = ARRAY_SIZE(dslogic_samplerates); - has_firmware = match_manuf_prod(devlist[i], "DreamSourceLab", "DSLogic") - || match_manuf_prod(devlist[i], "DreamSourceLab", "DSCope"); + has_firmware = usb_match_manuf_prod(devlist[i], "DreamSourceLab", "DSLogic") + || usb_match_manuf_prod(devlist[i], "DreamSourceLab", "DSCope"); } else { devc->dslogic = FALSE; devc->samplerates = samplerates; devc->num_samplerates = ARRAY_SIZE(samplerates); - has_firmware = match_manuf_prod(devlist[i], + has_firmware = usb_match_manuf_prod(devlist[i], "sigrok", "fx2lafw"); } diff --git a/src/hardware/fx2lafw/protocol.c b/src/hardware/fx2lafw/protocol.c index 7e2df5ad..6aca1808 100644 --- a/src/hardware/fx2lafw/protocol.c +++ b/src/hardware/fx2lafw/protocol.c @@ -141,49 +141,6 @@ SR_PRIV int fx2lafw_command_start_acquisition(const struct sr_dev_inst *sdi) return SR_OK; } -/** - * Check the USB configuration to determine if this is an fx2lafw device. - * - * @return TRUE if the device's configuration profile matches fx2lafw - * configuration, FALSE otherwise. - */ -SR_PRIV gboolean match_manuf_prod(libusb_device *dev, const char *manufacturer, - const char *product) -{ - struct libusb_device_descriptor des; - struct libusb_device_handle *hdl; - gboolean ret; - unsigned char strdesc[64]; - - hdl = NULL; - ret = FALSE; - while (!ret) { - /* Assume the FW has not been loaded, unless proven wrong. */ - libusb_get_device_descriptor(dev, &des); - - if (libusb_open(dev, &hdl) != 0) - break; - - if (libusb_get_string_descriptor_ascii(hdl, - des.iManufacturer, strdesc, sizeof(strdesc)) < 0) - break; - if (strcmp((const char *)strdesc, manufacturer)) - break; - - if (libusb_get_string_descriptor_ascii(hdl, - des.iProduct, strdesc, sizeof(strdesc)) < 0) - break; - if (strcmp((const char *)strdesc, product)) - break; - - ret = TRUE; - } - if (hdl) - libusb_close(hdl); - - return ret; -} - SR_PRIV int fx2lafw_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di) { libusb_device **devlist; diff --git a/src/hardware/fx2lafw/protocol.h b/src/hardware/fx2lafw/protocol.h index c3d6f32e..6113af8f 100644 --- a/src/hardware/fx2lafw/protocol.h +++ b/src/hardware/fx2lafw/protocol.h @@ -145,8 +145,6 @@ struct dev_context { }; SR_PRIV int fx2lafw_command_start_acquisition(const struct sr_dev_inst *sdi); -SR_PRIV gboolean match_manuf_prod(libusb_device *dev, const char *manufacturer, - const char *product); SR_PRIV int fx2lafw_dev_open(struct sr_dev_inst *sdi, struct sr_dev_driver *di); SR_PRIV struct dev_context *fx2lafw_dev_new(void); SR_PRIV void fx2lafw_abort_acquisition(struct dev_context *devc); diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index 2e041a26..73e49ef4 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -1050,6 +1050,8 @@ SR_PRIV int usb_source_add(struct sr_session *session, struct sr_context *ctx, int timeout, sr_receive_data_callback cb, void *cb_data); SR_PRIV int usb_source_remove(struct sr_session *session, struct sr_context *ctx); SR_PRIV int usb_get_port_path(libusb_device *dev, char *path, int path_len); +SR_PRIV gboolean usb_match_manuf_prod(libusb_device *dev, + const char *manufacturer, const char *product); #endif diff --git a/src/usb.c b/src/usb.c index f53119a6..c4d55673 100644 --- a/src/usb.c +++ b/src/usb.c @@ -510,3 +510,47 @@ SR_PRIV int usb_get_port_path(libusb_device *dev, char *path, int path_len) return SR_OK; } + +/** + * Check the USB configuration to determine if this device has a given + * manufacturer and product string. + * + * @return TRUE if the device's configuration profile strings + * configuration, FALSE otherwise. + */ +SR_PRIV gboolean usb_match_manuf_prod(libusb_device *dev, + const char *manufacturer, const char *product) +{ + struct libusb_device_descriptor des; + struct libusb_device_handle *hdl; + gboolean ret; + unsigned char strdesc[64]; + + hdl = NULL; + ret = FALSE; + while (!ret) { + /* Assume the FW has not been loaded, unless proven wrong. */ + libusb_get_device_descriptor(dev, &des); + + if (libusb_open(dev, &hdl) != 0) + break; + + if (libusb_get_string_descriptor_ascii(hdl, + des.iManufacturer, strdesc, sizeof(strdesc)) < 0) + break; + if (strcmp((const char *)strdesc, manufacturer)) + break; + + if (libusb_get_string_descriptor_ascii(hdl, + des.iProduct, strdesc, sizeof(strdesc)) < 0) + break; + if (strcmp((const char *)strdesc, product)) + break; + + ret = TRUE; + } + if (hdl) + libusb_close(hdl); + + return ret; +}