X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fserial.c;fp=src%2Fserial.c;h=acee0dcacca6e4960c888596b70095480957afd7;hb=4417074c68ce998c2d666fc8a034204a1b74fc2f;hp=b1e21eecbcbd69a3e21ffcd28620f76d122be444;hpb=ad5aa993ae5f5277755ed9c6e99fd647f4fa0d7b;p=libsigrok.git diff --git a/src/serial.c b/src/serial.c index b1e21eec..acee0dca 100644 --- a/src/serial.c +++ b/src/serial.c @@ -91,8 +91,15 @@ SR_PRIV int serial_open(struct sr_serial_dev_inst *serial, int flags) sr_spew("Opening serial port '%s' (flags %d).", serial->port, flags); - /* Default to the libserialport transport layer. */ - serial->lib_funcs = ser_lib_funcs_libsp; + /* + * Determine which serial transport library to use. Derive the + * variant from the serial port's name. Default to libserialport + * for backwards compatibility. + */ + if (ser_name_is_hid(serial)) + serial->lib_funcs = ser_lib_funcs_hid; + else + serial->lib_funcs = ser_lib_funcs_libsp; if (!serial->lib_funcs) return SR_ERR_NA; @@ -930,6 +937,10 @@ SR_API GSList *sr_serial_list(const struct sr_dev_driver *driver) list_func = ser_lib_funcs_libsp->list; tty_devs = list_func(tty_devs, append_port_list); } + if (ser_lib_funcs_hid && ser_lib_funcs_hid->list) { + list_func = ser_lib_funcs_hid->list; + tty_devs = list_func(tty_devs, append_port_list); + } return tty_devs; } @@ -966,6 +977,11 @@ SR_PRIV GSList *sr_serial_find_usb(uint16_t vendor_id, uint16_t product_id) tty_devs = find_func(tty_devs, append_port_find, vendor_id, product_id); } + if (ser_lib_funcs_hid && ser_lib_funcs_hid->find_usb) { + find_func = ser_lib_funcs_hid->find_usb; + tty_devs = find_func(tty_devs, append_port_find, + vendor_id, product_id); + } return tty_devs; }