X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fserial.c;h=5c3648317298af1d9232fc6e4bea69ed0443f2c1;hb=2fba14d05a9dd65fc873b59c438f62b87ab5e2d9;hp=b1e21eecbcbd69a3e21ffcd28620f76d122be444;hpb=ad5aa993ae5f5277755ed9c6e99fd647f4fa0d7b;p=libsigrok.git diff --git a/src/serial.c b/src/serial.c index b1e21eec..5c364831 100644 --- a/src/serial.c +++ b/src/serial.c @@ -5,6 +5,7 @@ * Copyright (C) 2010-2012 Uwe Hermann * Copyright (C) 2012 Alexandru Gagniuc * Copyright (C) 2014 Uffe Jakobsen + * Copyright (C) 2017-2019 Gerhard Sittig * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -91,8 +92,17 @@ 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 if (ser_name_is_bt(serial)) + serial->lib_funcs = ser_lib_funcs_bt; + else + serial->lib_funcs = ser_lib_funcs_libsp; if (!serial->lib_funcs) return SR_ERR_NA; @@ -930,6 +940,14 @@ 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); + } + if (ser_lib_funcs_bt && ser_lib_funcs_bt->list) { + list_func = ser_lib_funcs_bt->list; + tty_devs = list_func(tty_devs, append_port_list); + } return tty_devs; } @@ -966,6 +984,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; }