}
/*
- * The HIDAPI specific find_usb() callback, invoked by common serial.c code.
- * Enumerate devices for the specified VID:PID pair.
- * Invoke an "append" callback with 'path' for the device.
+ * Enumerate devices for the specified VID:PID pair. Invoke an "append"
+ * callback with 'path' for found devices. Exclusively finds supported
+ * chip types, skips unknown VID:PID pairs (even if caller specified).
*/
static GSList *ser_hid_hidapi_find_usb(GSList *list, sr_ser_find_append_t append,
uint16_t vendor_id, uint16_t product_id)
{
+ const char *caller_chip;
+ const char *dev_chip;
struct hid_device_info *devs, *curdev;
const char *name;
+ char *path;
+
+ caller_chip = ser_hid_chip_find_name_vid_pid(vendor_id, product_id);
devs = hid_enumerate(vendor_id, product_id);
for (curdev = devs; curdev; curdev = curdev->next) {
- name = curdev->path;
+ dev_chip = caller_chip;
+ if (!dev_chip) {
+ dev_chip = ser_hid_chip_find_name_vid_pid(
+ curdev->vendor_id, curdev->product_id);
+ }
+ if (!dev_chip)
+ continue;
+ path = get_hidapi_path_copy(curdev->path);
+ if (!path)
+ continue;
+ name = g_strdup_printf("%s/%s/%s",
+ SER_HID_CONN_PREFIX, dev_chip, path);
+ g_free(path);
list = append(list, name);
}
hid_free_enumeration(devs);