usb.c: Moved in usb_match_manuf_product
This commit is contained in:
parent
e40ee26b45
commit
69f7d9b4a9
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
44
src/usb.c
44
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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue