X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fserial_hid.c;fp=src%2Fserial_hid.c;h=759a58c487499aeb5f82d18c5ef779166dfc7610;hb=a8fcee15e0308042143c21e531f470110968bc68;hp=221bb6af43b37adb35287f8c35b3144387591263;hpb=74eeebfb6da68d128575eaeebdeeb588f7787808;p=libsigrok.git diff --git a/src/serial_hid.c b/src/serial_hid.c index 221bb6af..759a58c4 100644 --- a/src/serial_hid.c +++ b/src/serial_hid.c @@ -251,19 +251,36 @@ static GSList *ser_hid_hidapi_list(GSList *list, sr_ser_list_append_t append) } /* - * 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);