<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/simtrace2/+/16679">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">migrate to libosmousb<br><br>the code we used to have in libusb_util.c has been migrated to<br>libosmousb, a new part of libosmocore.git.  Let's remove our historic<br>copy and use the new shared library instead.<br><br>Change-Id: Ib588c08f873c4da8f3a02815ee2767674a6a5061<br>---<br>M host/configure.ac<br>M host/include/Makefile.am<br>D host/include/osmocom/simtrace2/libusb_util.h<br>M host/lib/Makefile.am<br>D host/lib/libusb_util.c<br>M host/src/Makefile.am<br>M host/src/simtrace2-remsim.c<br>M host/src/simtrace2-sniff.c<br>M host/src/simtrace2_usb.c<br>M host/src/usb2udp.c<br>10 files changed, 17 insertions(+), 429 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/79/16679/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/host/configure.ac b/host/configure.ac</span><br><span>index 7929884..0f91cf2 100644</span><br><span>--- a/host/configure.ac</span><br><span>+++ b/host/configure.ac</span><br><span>@@ -58,6 +58,7 @@</span><br><span> </span><br><span> PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.0.0)</span><br><span> PKG_CHECK_MODULES(LIBOSMOSIM, libosmosim >= 1.0.0)</span><br><span style="color: hsl(120, 100%, 40%);">+PKG_CHECK_MODULES(LIBOSMOUSB, libosmousb >= 0.0.0)</span><br><span> PKG_CHECK_MODULES(LIBUSB, libusb-1.0)</span><br><span> </span><br><span> AC_ARG_ENABLE(sanitize,</span><br><span>diff --git a/host/include/Makefile.am b/host/include/Makefile.am</span><br><span>index 4222484..b7b453a 100644</span><br><span>--- a/host/include/Makefile.am</span><br><span>+++ b/host/include/Makefile.am</span><br><span>@@ -1,6 +1,5 @@</span><br><span> nobase_include_HEADERS = \</span><br><span>          osmocom/simtrace2/apdu_dispatch.h \</span><br><span style="color: hsl(0, 100%, 40%);">-             osmocom/simtrace2/libusb_util.h \</span><br><span>            osmocom/simtrace2/simtrace2_api.h \</span><br><span>          osmocom/simtrace2/simtrace_usb.h \</span><br><span>           osmocom/simtrace2/simtrace_prot.h \</span><br><span>diff --git a/host/include/osmocom/simtrace2/libusb_util.h b/host/include/osmocom/simtrace2/libusb_util.h</span><br><span>deleted file mode 100644</span><br><span>index 3280b27..0000000</span><br><span>--- a/host/include/osmocom/simtrace2/libusb_util.h</span><br><span>+++ /dev/null</span><br><span>@@ -1,73 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/* libisb utilities</span><br><span style="color: hsl(0, 100%, 40%);">- * </span><br><span style="color: hsl(0, 100%, 40%);">- * (C) 2010-2016 by Harald Welte <hwelte@hmw-consulting.de></span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is free software; you can redistribute it and/or</span><br><span style="color: hsl(0, 100%, 40%);">- * modify it under the terms of the GNU General Public License</span><br><span style="color: hsl(0, 100%, 40%);">- * as published by the Free Software Foundation; either version 2</span><br><span style="color: hsl(0, 100%, 40%);">- * of the License, or (at your option) any later version.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(0, 100%, 40%);">- * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(0, 100%, 40%);">- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(0, 100%, 40%);">- * GNU General Public License for more details.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(0, 100%, 40%);">- * along with this program; if not, write to the Free Software</span><br><span style="color: hsl(0, 100%, 40%);">- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-#pragma once</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include <libusb.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_MAX_PATH_LEN 20</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct dev_id {</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t vendor_id;</span><br><span style="color: hsl(0, 100%, 40%);">-     uint16_t product_id;</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Find any USB devices in the system matching the given Vendor and</span><br><span style="color: hsl(0, 100%, 40%);">- * Product ID */</span><br><span style="color: hsl(0, 100%, 40%);">-libusb_device **find_matching_usb_devs(const struct dev_id *dev_ids);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* structure describing a single matching interface found */</span><br><span style="color: hsl(0, 100%, 40%);">-struct usb_interface_match {</span><br><span style="color: hsl(0, 100%, 40%);">-  /* libusb device E*/</span><br><span style="color: hsl(0, 100%, 40%);">-    libusb_device *usb_dev;</span><br><span style="color: hsl(0, 100%, 40%);">- /* Vendor ID of the device running matching interface */</span><br><span style="color: hsl(0, 100%, 40%);">-        uint16_t vendor;</span><br><span style="color: hsl(0, 100%, 40%);">-        /* Product ID of the device running matching interface */</span><br><span style="color: hsl(0, 100%, 40%);">-       uint16_t product;</span><br><span style="color: hsl(0, 100%, 40%);">-       /* USB Bus Address */</span><br><span style="color: hsl(0, 100%, 40%);">-   uint8_t addr;</span><br><span style="color: hsl(0, 100%, 40%);">-   /* physical path */</span><br><span style="color: hsl(0, 100%, 40%);">-     char path[USB_MAX_PATH_LEN];</span><br><span style="color: hsl(0, 100%, 40%);">-    /* configuration of matching interface */</span><br><span style="color: hsl(0, 100%, 40%);">-       uint8_t configuration;</span><br><span style="color: hsl(0, 100%, 40%);">-  /* interface number of matching interface */</span><br><span style="color: hsl(0, 100%, 40%);">-    uint8_t interface;</span><br><span style="color: hsl(0, 100%, 40%);">-      /* altsetting of matching interface */</span><br><span style="color: hsl(0, 100%, 40%);">-  uint8_t altsetting;</span><br><span style="color: hsl(0, 100%, 40%);">-     /* bInterfaceClass of matching interface */</span><br><span style="color: hsl(0, 100%, 40%);">-     uint8_t class;</span><br><span style="color: hsl(0, 100%, 40%);">-  /* bInterfaceSubClass of matching interface */</span><br><span style="color: hsl(0, 100%, 40%);">-  uint8_t sub_class;</span><br><span style="color: hsl(0, 100%, 40%);">-      /* bInterfaceProtocol of matching interface */</span><br><span style="color: hsl(0, 100%, 40%);">-  uint8_t protocol;</span><br><span style="color: hsl(0, 100%, 40%);">-       /* index of string descriptor of matching interface */</span><br><span style="color: hsl(0, 100%, 40%);">-  uint8_t string_idx;</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int dev_find_matching_interfaces(libusb_device *dev, int class, int sub_class, int protocol,</span><br><span style="color: hsl(0, 100%, 40%);">-                                struct usb_interface_match *out, unsigned int out_len);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int usb_match_interfaces(libusb_context *ctx, const struct dev_id *dev_ids,</span><br><span style="color: hsl(0, 100%, 40%);">-                      int class, int sub_class, int protocol,</span><br><span style="color: hsl(0, 100%, 40%);">-                         struct usb_interface_match *out, unsigned int out_len);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-libusb_device_handle *usb_open_claim_interface(libusb_context *ctx,</span><br><span style="color: hsl(0, 100%, 40%);">-                                            const struct usb_interface_match *ifm);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int get_usb_ep_addrs(libusb_device_handle *devh, unsigned int if_num,</span><br><span style="color: hsl(0, 100%, 40%);">-                  uint8_t *out, uint8_t *in, uint8_t *irq);</span><br><span>diff --git a/host/lib/Makefile.am b/host/lib/Makefile.am</span><br><span>index 8416923..438ad9d 100644</span><br><span>--- a/host/lib/Makefile.am</span><br><span>+++ b/host/lib/Makefile.am</span><br><span>@@ -15,5 +15,4 @@</span><br><span> libosmo_simtrace2_la_SOURCES = \</span><br><span>  apdu_dispatch.c \</span><br><span>    gsmtap.c \</span><br><span style="color: hsl(0, 100%, 40%);">-      libusb_util.c \</span><br><span>      simtrace2_api.c</span><br><span>diff --git a/host/lib/libusb_util.c b/host/lib/libusb_util.c</span><br><span>deleted file mode 100644</span><br><span>index 50cd087..0000000</span><br><span>--- a/host/lib/libusb_util.c</span><br><span>+++ /dev/null</span><br><span>@@ -1,338 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/* libusb utilities</span><br><span style="color: hsl(0, 100%, 40%);">- * </span><br><span style="color: hsl(0, 100%, 40%);">- * (C) 2010-2019 by Harald Welte <hwelte@hmw-consulting.de></span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is free software; you can redistribute it and/or</span><br><span style="color: hsl(0, 100%, 40%);">- * modify it under the terms of the GNU General Public License</span><br><span style="color: hsl(0, 100%, 40%);">- * as published by the Free Software Foundation; either version 2</span><br><span style="color: hsl(0, 100%, 40%);">- * of the License, or (at your option) any later version.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(0, 100%, 40%);">- * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(0, 100%, 40%);">- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(0, 100%, 40%);">- * GNU General Public License for more details.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(0, 100%, 40%);">- * along with this program; if not, write to the Free Software</span><br><span style="color: hsl(0, 100%, 40%);">- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-#include <errno.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <unistd.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <stdio.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <stdlib.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <stdint.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <string.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include <libusb.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/simtrace2/libusb_util.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static char path_buf[USB_MAX_PATH_LEN];</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static char *get_path(libusb_device *dev)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-#if (defined(LIBUSB_API_VERSION) && LIBUSB_API_VERSION >= 0x01000102) || (defined(LIBUSBX_API_VERSION) && LIBUSBX_API_VERSION >= 0x01000102)</span><br><span style="color: hsl(0, 100%, 40%);">-     uint8_t path[8];</span><br><span style="color: hsl(0, 100%, 40%);">-        int r,j;</span><br><span style="color: hsl(0, 100%, 40%);">-        r = libusb_get_port_numbers(dev, path, sizeof(path));</span><br><span style="color: hsl(0, 100%, 40%);">-   if (r > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-         sprintf(path_buf,"%d-%d",libusb_get_bus_number(dev),path[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-         for (j = 1; j < r; j++){</span><br><span style="color: hsl(0, 100%, 40%);">-                     sprintf(path_buf+strlen(path_buf),".%d",path[j]);</span><br><span style="color: hsl(0, 100%, 40%);">-             };</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-       return path_buf;</span><br><span style="color: hsl(0, 100%, 40%);">-#else</span><br><span style="color: hsl(0, 100%, 40%);">-# warning "libusb too old - building without USB path support!"</span><br><span style="color: hsl(0, 100%, 40%);">-  return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int match_dev_id(const struct libusb_device_descriptor *desc, const struct dev_id *id)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       if ((desc->idVendor == id->vendor_id) && (desc->idProduct == id->product_id))</span><br><span style="color: hsl(0, 100%, 40%);">-               return 1;</span><br><span style="color: hsl(0, 100%, 40%);">-       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int match_dev_ids(const struct libusb_device_descriptor *desc, const struct dev_id *ids)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-      const struct dev_id *id;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        for (id = ids; id->vendor_id || id->product_id; id++) {</span><br><span style="color: hsl(0, 100%, 40%);">-           if (match_dev_id(desc, id))</span><br><span style="color: hsl(0, 100%, 40%);">-                     return 1;</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-libusb_device **find_matching_usb_devs(const struct dev_id *dev_ids)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- libusb_device **list;</span><br><span style="color: hsl(0, 100%, 40%);">-   libusb_device **out = calloc(256, sizeof(libusb_device *));</span><br><span style="color: hsl(0, 100%, 40%);">-     libusb_device **cur = out;</span><br><span style="color: hsl(0, 100%, 40%);">-      unsigned int i;</span><br><span style="color: hsl(0, 100%, 40%);">- int rc;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (!out)</span><br><span style="color: hsl(0, 100%, 40%);">-               return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    rc = libusb_get_device_list(NULL, &list);</span><br><span style="color: hsl(0, 100%, 40%);">-   if (rc <= 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-               perror("No USB devices found");</span><br><span style="color: hsl(0, 100%, 40%);">-               free(out);</span><br><span style="color: hsl(0, 100%, 40%);">-              return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       for (i = 0; list[i] != NULL; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-             struct libusb_device_descriptor dev_desc;</span><br><span style="color: hsl(0, 100%, 40%);">-               libusb_device *dev = list[i];</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-           rc = libusb_get_device_descriptor(dev, &dev_desc);</span><br><span style="color: hsl(0, 100%, 40%);">-          if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        perror("Couldn't get device descriptor\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                       libusb_unref_device(dev);</span><br><span style="color: hsl(0, 100%, 40%);">-                       continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               if (match_dev_ids(&dev_desc, dev_ids)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    *cur = dev;</span><br><span style="color: hsl(0, 100%, 40%);">-                     cur++;</span><br><span style="color: hsl(0, 100%, 40%);">-                  /* FIXME: overflow check */</span><br><span style="color: hsl(0, 100%, 40%);">-             } else</span><br><span style="color: hsl(0, 100%, 40%);">-                  libusb_unref_device(dev);</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       if (cur == out) {</span><br><span style="color: hsl(0, 100%, 40%);">-               libusb_free_device_list(list, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-               free(out);</span><br><span style="color: hsl(0, 100%, 40%);">-              return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       libusb_free_device_list(list, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-       return out;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int dev_find_matching_interfaces(libusb_device *dev, int class, int sub_class, int protocol,</span><br><span style="color: hsl(0, 100%, 40%);">-                                 struct usb_interface_match *out, unsigned int out_len)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-        struct libusb_device_descriptor dev_desc;</span><br><span style="color: hsl(0, 100%, 40%);">-       int rc, i, out_idx = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- uint8_t addr;</span><br><span style="color: hsl(0, 100%, 40%);">-   char *path;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     rc = libusb_get_device_descriptor(dev, &dev_desc);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                perror("Couldn't get device descriptor\n");</span><br><span style="color: hsl(0, 100%, 40%);">-               return -EIO;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       addr = libusb_get_device_address(dev);</span><br><span style="color: hsl(0, 100%, 40%);">-  path = get_path(dev);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   /* iterate over all configurations */</span><br><span style="color: hsl(0, 100%, 40%);">-   for (i = 0; i < dev_desc.bNumConfigurations; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-          struct libusb_config_descriptor *conf_desc;</span><br><span style="color: hsl(0, 100%, 40%);">-             int j;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-          rc = libusb_get_config_descriptor(dev, i, &conf_desc);</span><br><span style="color: hsl(0, 100%, 40%);">-              if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        fprintf(stderr, "Couldn't get config descriptor %u\n", i);</span><br><span style="color: hsl(0, 100%, 40%);">-                        continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-               /* iterate over all interfaces */</span><br><span style="color: hsl(0, 100%, 40%);">-               for (j = 0; j < conf_desc->bNumInterfaces; j++) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 const struct libusb_interface *intf = &conf_desc->interface[j];</span><br><span style="color: hsl(0, 100%, 40%);">-                  int k;</span><br><span style="color: hsl(0, 100%, 40%);">-                  /* iterate over all alternate settings */</span><br><span style="color: hsl(0, 100%, 40%);">-                       for (k = 0; k < intf->num_altsetting; k++) {</span><br><span style="color: hsl(0, 100%, 40%);">-                              const struct libusb_interface_descriptor *if_desc;</span><br><span style="color: hsl(0, 100%, 40%);">-                              if_desc = &intf->altsetting[k];</span><br><span style="color: hsl(0, 100%, 40%);">-                          if (class >= 0 && if_desc->bInterfaceClass != class)</span><br><span style="color: hsl(0, 100%, 40%);">-                                      continue;</span><br><span style="color: hsl(0, 100%, 40%);">-                               if (sub_class >= 0 && if_desc->bInterfaceSubClass != sub_class)</span><br><span style="color: hsl(0, 100%, 40%);">-                                   continue;</span><br><span style="color: hsl(0, 100%, 40%);">-                               if (protocol >= 0 && if_desc->bInterfaceProtocol != protocol)</span><br><span style="color: hsl(0, 100%, 40%);">-                                     continue;</span><br><span style="color: hsl(0, 100%, 40%);">-                               /* MATCH! */</span><br><span style="color: hsl(0, 100%, 40%);">-                            out[out_idx].usb_dev = dev;</span><br><span style="color: hsl(0, 100%, 40%);">-                             out[out_idx].vendor = dev_desc.idVendor;</span><br><span style="color: hsl(0, 100%, 40%);">-                                out[out_idx].product = dev_desc.idProduct;</span><br><span style="color: hsl(0, 100%, 40%);">-                              out[out_idx].addr = addr;</span><br><span style="color: hsl(0, 100%, 40%);">-                               strncpy(out[out_idx].path, path, sizeof(out[out_idx].path)-1);</span><br><span style="color: hsl(0, 100%, 40%);">-                          out[out_idx].path[sizeof(out[out_idx].path)-1] = '\0';</span><br><span style="color: hsl(0, 100%, 40%);">-                          out[out_idx].configuration = conf_desc->bConfigurationValue;</span><br><span style="color: hsl(0, 100%, 40%);">-                         out[out_idx].interface = if_desc->bInterfaceNumber;</span><br><span style="color: hsl(0, 100%, 40%);">-                          out[out_idx].altsetting = if_desc->bAlternateSetting;</span><br><span style="color: hsl(0, 100%, 40%);">-                                out[out_idx].class = if_desc->bInterfaceClass;</span><br><span style="color: hsl(0, 100%, 40%);">-                               out[out_idx].sub_class = if_desc->bInterfaceSubClass;</span><br><span style="color: hsl(0, 100%, 40%);">-                                out[out_idx].protocol = if_desc->bInterfaceProtocol;</span><br><span style="color: hsl(0, 100%, 40%);">-                         out[out_idx].string_idx = if_desc->iInterface;</span><br><span style="color: hsl(0, 100%, 40%);">-                               out_idx++;</span><br><span style="color: hsl(0, 100%, 40%);">-                              if (out_idx >= out_len)</span><br><span style="color: hsl(0, 100%, 40%);">-                                      return out_idx;</span><br><span style="color: hsl(0, 100%, 40%);">-                 }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       return out_idx;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int usb_match_interfaces(libusb_context *ctx, const struct dev_id *dev_ids,</span><br><span style="color: hsl(0, 100%, 40%);">-                      int class, int sub_class, int protocol,</span><br><span style="color: hsl(0, 100%, 40%);">-                         struct usb_interface_match *out, unsigned int out_len)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-        struct usb_interface_match *out_cur = out;</span><br><span style="color: hsl(0, 100%, 40%);">-      unsigned int out_len_remain = out_len;</span><br><span style="color: hsl(0, 100%, 40%);">-  libusb_device **list;</span><br><span style="color: hsl(0, 100%, 40%);">-   libusb_device **dev;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    list = find_matching_usb_devs(dev_ids);</span><br><span style="color: hsl(0, 100%, 40%);">- if (!list)</span><br><span style="color: hsl(0, 100%, 40%);">-              return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       for (dev = list; *dev; dev++) {</span><br><span style="color: hsl(0, 100%, 40%);">-         int rc;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#if 0</span><br><span style="color: hsl(0, 100%, 40%);">-            struct libusb_device_descriptor dev_desc;</span><br><span style="color: hsl(0, 100%, 40%);">-               uint8_t ports[8];</span><br><span style="color: hsl(0, 100%, 40%);">-               uint8_t addr;</span><br><span style="color: hsl(0, 100%, 40%);">-           rc = libusb_get_device_descriptor(*dev, &dev_desc);</span><br><span style="color: hsl(0, 100%, 40%);">-         if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        perror("Cannot get device descriptor");</span><br><span style="color: hsl(0, 100%, 40%);">-                       continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               addr = libusb_get_device_address(*dev);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-         rc = libusb_get_port_numbers(*dev, ports, sizeof(ports));</span><br><span style="color: hsl(0, 100%, 40%);">-               if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        perror("Cannot get device path");</span><br><span style="color: hsl(0, 100%, 40%);">-                     continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               printf("Found USB Device %04x:%04x at address %d\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                  dev_desc.idVendor, dev_desc.idProduct, addr);</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-             rc = dev_find_matching_interfaces(*dev, class, sub_class, protocol, out_cur, out_len_remain);</span><br><span style="color: hsl(0, 100%, 40%);">-           if (rc < 0)</span><br><span style="color: hsl(0, 100%, 40%);">-                  continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               out_cur += rc;</span><br><span style="color: hsl(0, 100%, 40%);">-          out_len_remain -= rc;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   }</span><br><span style="color: hsl(0, 100%, 40%);">-       return out_len - out_len_remain;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-libusb_device_handle *usb_open_claim_interface(libusb_context *ctx,</span><br><span style="color: hsl(0, 100%, 40%);">-                                           const struct usb_interface_match *ifm)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  int rc, config;</span><br><span style="color: hsl(0, 100%, 40%);">- struct dev_id dev_ids[] = { { ifm->vendor, ifm->product }, { 0, 0 } };</span><br><span style="color: hsl(0, 100%, 40%);">-    libusb_device **list;</span><br><span style="color: hsl(0, 100%, 40%);">-   libusb_device **dev;</span><br><span style="color: hsl(0, 100%, 40%);">-    libusb_device_handle *usb_devh = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  list = find_matching_usb_devs(dev_ids);</span><br><span style="color: hsl(0, 100%, 40%);">- if (!list) {</span><br><span style="color: hsl(0, 100%, 40%);">-            perror("No USB device with matching VID/PID");</span><br><span style="color: hsl(0, 100%, 40%);">-                return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       for (dev = list; *dev; dev++) {</span><br><span style="color: hsl(0, 100%, 40%);">-         int addr;</span><br><span style="color: hsl(0, 100%, 40%);">-               char *path;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-             addr = libusb_get_device_address(*dev);</span><br><span style="color: hsl(0, 100%, 40%);">-         path = get_path(*dev);</span><br><span style="color: hsl(0, 100%, 40%);">-          if ((ifm->addr && addr == ifm->addr) ||</span><br><span style="color: hsl(0, 100%, 40%);">-               (strlen(ifm->path) && !strcmp(path, ifm->path))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    rc = libusb_open(*dev, &usb_devh);</span><br><span style="color: hsl(0, 100%, 40%);">-                  if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                fprintf(stderr, "Cannot open device: %s\n", libusb_error_name(rc));</span><br><span style="color: hsl(0, 100%, 40%);">-                           usb_devh = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-                                break;</span><br><span style="color: hsl(0, 100%, 40%);">-                  }</span><br><span style="color: hsl(0, 100%, 40%);">-                       rc = libusb_get_configuration(usb_devh, &config);</span><br><span style="color: hsl(0, 100%, 40%);">-                   if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                fprintf(stderr, "Cannot get current configuration: %s\n", libusb_error_name(rc));</span><br><span style="color: hsl(0, 100%, 40%);">-                             libusb_close(usb_devh);</span><br><span style="color: hsl(0, 100%, 40%);">-                         usb_devh = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-                                break;</span><br><span style="color: hsl(0, 100%, 40%);">-                  }</span><br><span style="color: hsl(0, 100%, 40%);">-                       if (config != ifm->configuration) {</span><br><span style="color: hsl(0, 100%, 40%);">-                          rc = libusb_set_configuration(usb_devh, ifm->configuration);</span><br><span style="color: hsl(0, 100%, 40%);">-                         if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                        fprintf(stderr, "Cannot set configuration: %s\n", libusb_error_name(rc));</span><br><span style="color: hsl(0, 100%, 40%);">-                                     libusb_close(usb_devh);</span><br><span style="color: hsl(0, 100%, 40%);">-                                 usb_devh = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-                                        break;</span><br><span style="color: hsl(0, 100%, 40%);">-                          }</span><br><span style="color: hsl(0, 100%, 40%);">-                       }</span><br><span style="color: hsl(0, 100%, 40%);">-                       rc = libusb_claim_interface(usb_devh, ifm->interface);</span><br><span style="color: hsl(0, 100%, 40%);">-                       if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                fprintf(stderr, "Cannot claim interface: %s\n", libusb_error_name(rc));</span><br><span style="color: hsl(0, 100%, 40%);">-                               libusb_close(usb_devh);</span><br><span style="color: hsl(0, 100%, 40%);">-                         usb_devh = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-                                break;</span><br><span style="color: hsl(0, 100%, 40%);">-                  }</span><br><span style="color: hsl(0, 100%, 40%);">-                       rc = libusb_set_interface_alt_setting(usb_devh, ifm->interface, ifm->altsetting);</span><br><span style="color: hsl(0, 100%, 40%);">-                 if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                fprintf(stderr, "Cannot set interface altsetting: %s\n", libusb_error_name(rc));</span><br><span style="color: hsl(0, 100%, 40%);">-                              libusb_release_interface(usb_devh, ifm->interface);</span><br><span style="color: hsl(0, 100%, 40%);">-                          libusb_close(usb_devh);</span><br><span style="color: hsl(0, 100%, 40%);">-                         usb_devh = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-                                break;</span><br><span style="color: hsl(0, 100%, 40%);">-                  }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* unref / free list */</span><br><span style="color: hsl(0, 100%, 40%);">- for (dev = list; *dev; dev++)</span><br><span style="color: hsl(0, 100%, 40%);">-           libusb_unref_device(*dev);</span><br><span style="color: hsl(0, 100%, 40%);">-      free(list);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     return usb_devh;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief obtain the endpoint addresses for a given USB interface */</span><br><span style="color: hsl(0, 100%, 40%);">-int get_usb_ep_addrs(libusb_device_handle *devh, unsigned int if_num,</span><br><span style="color: hsl(0, 100%, 40%);">-                  uint8_t *out, uint8_t *in, uint8_t *irq)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  libusb_device *dev = libusb_get_device(devh);</span><br><span style="color: hsl(0, 100%, 40%);">-   struct libusb_config_descriptor *cdesc;</span><br><span style="color: hsl(0, 100%, 40%);">- const struct libusb_interface_descriptor *idesc;</span><br><span style="color: hsl(0, 100%, 40%);">-        const struct libusb_interface *iface;</span><br><span style="color: hsl(0, 100%, 40%);">-   int rc, l;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      rc = libusb_get_active_config_descriptor(dev, &cdesc);</span><br><span style="color: hsl(0, 100%, 40%);">-      if (rc < 0)</span><br><span style="color: hsl(0, 100%, 40%);">-          return rc;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      iface = &cdesc->interface[if_num];</span><br><span style="color: hsl(0, 100%, 40%);">-       /* FIXME: we assume there's no altsetting */</span><br><span style="color: hsl(0, 100%, 40%);">-        idesc = &iface->altsetting[0];</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   for (l = 0; l < idesc->bNumEndpoints; l++) {</span><br><span style="color: hsl(0, 100%, 40%);">-              const struct libusb_endpoint_descriptor *edesc = &idesc->endpoint[l];</span><br><span style="color: hsl(0, 100%, 40%);">-            switch (edesc->bmAttributes & 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-               case LIBUSB_TRANSFER_TYPE_BULK:</span><br><span style="color: hsl(0, 100%, 40%);">-                 if (edesc->bEndpointAddress & 0x80) {</span><br><span style="color: hsl(0, 100%, 40%);">-                            if (in)</span><br><span style="color: hsl(0, 100%, 40%);">-                                 *in = edesc->bEndpointAddress;</span><br><span style="color: hsl(0, 100%, 40%);">-                       } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                if (out)</span><br><span style="color: hsl(0, 100%, 40%);">-                                        *out = edesc->bEndpointAddress;</span><br><span style="color: hsl(0, 100%, 40%);">-                      }</span><br><span style="color: hsl(0, 100%, 40%);">-                       break;</span><br><span style="color: hsl(0, 100%, 40%);">-          case LIBUSB_TRANSFER_TYPE_INTERRUPT:</span><br><span style="color: hsl(0, 100%, 40%);">-                    if (irq)</span><br><span style="color: hsl(0, 100%, 40%);">-                                *irq = edesc->bEndpointAddress;</span><br><span style="color: hsl(0, 100%, 40%);">-                      break;</span><br><span style="color: hsl(0, 100%, 40%);">-          default:</span><br><span style="color: hsl(0, 100%, 40%);">-                        break;</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span>diff --git a/host/src/Makefile.am b/host/src/Makefile.am</span><br><span>index 29f2405..c3283ba 100644</span><br><span>--- a/host/src/Makefile.am</span><br><span>+++ b/host/src/Makefile.am</span><br><span>@@ -1,9 +1,9 @@</span><br><span> AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include</span><br><span style="color: hsl(0, 100%, 40%);">-AM_CFLAGS=-Wall -g $(LIBOSMOCORE_CFLAGS) $(LIBOSMOSIM_CFLAGS) $(LIBUSB_CFLAGS) $(COVERAGE_FLAGS)</span><br><span style="color: hsl(120, 100%, 40%);">+AM_CFLAGS=-Wall -g $(LIBOSMOCORE_CFLAGS) $(LIBOSMOSIM_CFLAGS) $(LIBOSMOUSB_CFLAGS) $(LIBUSB_CFLAGS) $(COVERAGE_FLAGS)</span><br><span> AM_LDFLAGS=$(COVERAGE_LDFLAGS)</span><br><span> </span><br><span> LDADD= $(top_builddir)/lib/libosmo-simtrace2.la \</span><br><span style="color: hsl(0, 100%, 40%);">-       $(LIBOSMOCORE_LIBS) $(LIBOSMOSIM_LIBS) $(LIBUSB_LIBS)</span><br><span style="color: hsl(120, 100%, 40%);">+       $(LIBOSMOCORE_LIBS) $(LIBOSMOSIM_LIBS) $(LIBOSMOUSB_LIBS) $(LIBUSB_LIBS)</span><br><span> </span><br><span> bin_PROGRAMS = simtrace2-remsim simtrace2-remsim-usb2udp simtrace2-list simtrace2-sniff</span><br><span> </span><br><span>diff --git a/host/src/simtrace2-remsim.c b/host/src/simtrace2-remsim.c</span><br><span>index d51f081..7d5ecd3 100644</span><br><span>--- a/host/src/simtrace2-remsim.c</span><br><span>+++ b/host/src/simtrace2-remsim.c</span><br><span>@@ -38,7 +38,7 @@</span><br><span> </span><br><span> #include <libusb.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/simtrace2/libusb_util.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/usb/libusb.h></span><br><span> #include <osmocom/simtrace2/simtrace2_api.h></span><br><span> #include <osmocom/simtrace2/simtrace_prot.h></span><br><span> #include <osmocom/simtrace2/apdu_dispatch.h></span><br><span>@@ -404,7 +404,7 @@</span><br><span>                        ifm->addr = addr;</span><br><span>                         if (path)</span><br><span>                            osmo_strlcpy(ifm->path, path, sizeof(ifm->path));</span><br><span style="color: hsl(0, 100%, 40%);">-                 transp->usb_devh = usb_open_claim_interface(NULL, ifm);</span><br><span style="color: hsl(120, 100%, 40%);">+                    transp->usb_devh = osmo_libusb_open_claim_interface(NULL, NULL, ifm);</span><br><span>                     if (!transp->usb_devh) {</span><br><span>                          fprintf(stderr, "can't open USB device\n");</span><br><span>                            goto close_exit;</span><br><span>@@ -416,7 +416,7 @@</span><br><span>                               goto close_exit;</span><br><span>                     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                   rc = get_usb_ep_addrs(transp->usb_devh, if_num, &transp->usb_ep.out,</span><br><span style="color: hsl(120, 100%, 40%);">+                        rc = osmo_libusb_get_ep_addrs(transp->usb_devh, if_num, &transp->usb_ep.out,</span><br><span>                                             &transp->usb_ep.in, &transp->usb_ep.irq_in);</span><br><span>                     if (rc < 0) {</span><br><span>                             fprintf(stderr, "can't obtain EP addrs; rc=%d\n", rc);</span><br><span>diff --git a/host/src/simtrace2-sniff.c b/host/src/simtrace2-sniff.c</span><br><span>index c4cec1e..dfb6e7c 100644</span><br><span>--- a/host/src/simtrace2-sniff.c</span><br><span>+++ b/host/src/simtrace2-sniff.c</span><br><span>@@ -37,7 +37,7 @@</span><br><span> </span><br><span> #include <libusb.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/simtrace2/libusb_util.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/usb/libusb.h></span><br><span> #include <osmocom/simtrace2/simtrace_usb.h></span><br><span> #include <osmocom/simtrace2/simtrace_prot.h></span><br><span> </span><br><span>@@ -384,7 +384,7 @@</span><br><span>               goto do_exit;</span><br><span>        }</span><br><span>    struct usb_interface_match ifm_scan[16];</span><br><span style="color: hsl(0, 100%, 40%);">-        int num_interfaces = usb_match_interfaces(NULL, compatible_dev_ids,</span><br><span style="color: hsl(120, 100%, 40%);">+   int num_interfaces = osmo_libusb_find_matching_interfaces(NULL, compatible_dev_ids,</span><br><span>                           USB_CLASS_PROPRIETARY, SIMTRACE_SNIFFER_USB_SUBCLASS, -1, ifm_scan, ARRAY_SIZE(ifm_scan));</span><br><span>  if (num_interfaces <= 0) {</span><br><span>                perror("No compatible USB devices found");</span><br><span>@@ -473,7 +473,7 @@</span><br><span>   signal(SIGINT, &signal_handler);</span><br><span> </span><br><span>     do {</span><br><span style="color: hsl(0, 100%, 40%);">-            _transp.usb_devh = usb_open_claim_interface(NULL, &ifm_selected);</span><br><span style="color: hsl(120, 100%, 40%);">+         _transp.usb_devh = osmo_libusb_open_claim_interface(NULL, NULL, &ifm_selected);</span><br><span>          if (!_transp.usb_devh) {</span><br><span>                     fprintf(stderr, "can't open USB device\n");</span><br><span>                    goto close_exit;</span><br><span>@@ -485,8 +485,8 @@</span><br><span>                       goto close_exit;</span><br><span>             }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           rc = get_usb_ep_addrs(_transp.usb_devh, ifm_selected.interface, &_transp.usb_ep.out,</span><br><span style="color: hsl(0, 100%, 40%);">-                                      &_transp.usb_ep.in, &_transp.usb_ep.irq_in);</span><br><span style="color: hsl(120, 100%, 40%);">+            rc = osmo_libusb_get_ep_addrs(_transp.usb_devh, ifm_selected.interface, &_transp.usb_ep.out,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            &_transp.usb_ep.in, &_transp.usb_ep.irq_in);</span><br><span>           if (rc < 0) {</span><br><span>                     fprintf(stderr, "can't obtain EP addrs; rc=%d\n", rc);</span><br><span>                         goto close_exit;</span><br><span>diff --git a/host/src/simtrace2_usb.c b/host/src/simtrace2_usb.c</span><br><span>index d31ff29..94e19ff 100644</span><br><span>--- a/host/src/simtrace2_usb.c</span><br><span>+++ b/host/src/simtrace2_usb.c</span><br><span>@@ -23,7 +23,7 @@</span><br><span> </span><br><span> #include <osmocom/core/utils.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/simtrace2/libusb_util.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/usb/libusb.h></span><br><span> #include <osmocom/simtrace2/simtrace_usb.h></span><br><span> </span><br><span> static const struct dev_id compatible_dev_ids[] = {</span><br><span>@@ -38,9 +38,9 @@</span><br><span>        struct usb_interface_match ifm[16];</span><br><span>  int rc, i, num_interfaces;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* scan for USB devices matching SIMtrace USB ID with proprietary class */ </span><br><span style="color: hsl(0, 100%, 40%);">-     rc = usb_match_interfaces(NULL, compatible_dev_ids,</span><br><span style="color: hsl(0, 100%, 40%);">-                              USB_CLASS_PROPRIETARY, -1, -1, ifm, ARRAY_SIZE(ifm));</span><br><span style="color: hsl(120, 100%, 40%);">+        /* scan for USB devices matching SIMtrace USB ID with proprietary class */</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = osmo_libusb_find_matching_interfaces(NULL, compatible_dev_ids,</span><br><span style="color: hsl(120, 100%, 40%);">+                                             USB_CLASS_PROPRIETARY, -1, -1, ifm, ARRAY_SIZE(ifm));</span><br><span>      printf("USB matches: %d\n", rc);</span><br><span>   if (rc < 0)</span><br><span>               return rc;</span><br><span>diff --git a/host/src/usb2udp.c b/host/src/usb2udp.c</span><br><span>index 23800fd..57cee74 100644</span><br><span>--- a/host/src/usb2udp.c</span><br><span>+++ b/host/src/usb2udp.c</span><br><span>@@ -35,9 +35,9 @@</span><br><span> </span><br><span> #include <libusb.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/usb/libusb.h></span><br><span> #include <osmocom/simtrace2/simtrace_usb.h></span><br><span> #include <osmocom/simtrace2/simtrace_prot.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/simtrace2/libusb_util.h></span><br><span> </span><br><span> #include <osmocom/core/utils.h></span><br><span> #include <osmocom/core/socket.h></span><br><span>@@ -259,7 +259,7 @@</span><br><span>      g_udp_ofd.cb = ofd_udp_cb;</span><br><span>   osmo_sock_init_ofd(&g_udp_ofd, AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, local_udp_port + if_num, OSMO_SOCK_F_BIND);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      rc = get_usb_ep_addrs(g_devh, if_num, &g_buf_out.ep, &g_buf_in.ep, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+     rc = osmo_libusb_get_ep_addrs(g_devh, if_num, &g_buf_out.ep, &g_buf_in.ep, NULL);</span><br><span>    if (rc < 0) {</span><br><span>             fprintf(stderr, "couldn't find enpdoint addresses; rc=%d\n", rc);</span><br><span>              goto close_exit;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/simtrace2/+/16679">change 16679</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/simtrace2/+/16679"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: simtrace2 </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ib588c08f873c4da8f3a02815ee2767674a6a5061 </div>
<div style="display:none"> Gerrit-Change-Number: 16679 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>