<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/simtrace2/+/16681">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">simtrace2-remsim: Better semi-automatic interface matching<br><br>Now it's sufficient to specify only the minimum required parameters<br>to uniquely identify the USB device and/or interface to use<br><br>* the program knows which VendorId/ProductId is supported<br>* if more than one device are found, you need to specify<br>  the USB path like '-H 1-2.1' to disambiguate<br>* if more than one matching interface are found in the device,<br>  you need to specify if like '-I 1'<br><br>Change-Id: Icbcb5e8a00d189859310117880a763864b72b6c3<br>---<br>M host/src/simtrace2-remsim.c<br>1 file changed, 58 insertions(+), 14 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/81/16681/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/host/src/simtrace2-remsim.c b/host/src/simtrace2-remsim.c</span><br><span>index 7d5ecd3..7abaa79 100644</span><br><span>--- a/host/src/simtrace2-remsim.c</span><br><span>+++ b/host/src/simtrace2-remsim.c</span><br><span>@@ -43,7 +43,11 @@</span><br><span> #include <osmocom/simtrace2/simtrace_prot.h></span><br><span> #include <osmocom/simtrace2/apdu_dispatch.h></span><br><span> #include <osmocom/simtrace2/gsmtap.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/simtrace2/usb_util.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/simtrace2/simtrace_usb.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/application.h></span><br><span> #include <osmocom/core/utils.h></span><br><span> #include <osmocom/core/socket.h></span><br><span> #include <osmocom/core/msgb.h></span><br><span>@@ -274,6 +278,14 @@</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static const struct log_info_cat log_categories[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct log_info log_info = {</span><br><span style="color: hsl(120, 100%, 40%);">+    .cat = log_categories,</span><br><span style="color: hsl(120, 100%, 40%);">+        .num_cat = ARRAY_SIZE(log_categories),</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span>         struct osmo_st2_transport *transp = ci->slot->transp;</span><br><span>@@ -291,6 +303,7 @@</span><br><span>    struct osim_card_hdl *card;</span><br><span> </span><br><span>      print_welcome();</span><br><span style="color: hsl(120, 100%, 40%);">+      osmo_init_logging2(NULL, &log_info);</span><br><span> </span><br><span>         while (1) {</span><br><span>          int option_index = 0;</span><br><span>@@ -342,11 +355,6 @@</span><br><span>                 }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (!remote_udp_host && (vendor_id < 0 || product_id < 0)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              fprintf(stderr, "You have to specify the vendor and product ID\n");</span><br><span style="color: hsl(0, 100%, 40%);">-           goto do_exit;</span><br><span style="color: hsl(0, 100%, 40%);">-   }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    transp->udp_fd = -1;</span><br><span> </span><br><span>  ci->card_prof = &osim_uicc_sim_cic_profile;</span><br><span>@@ -395,15 +403,51 @@</span><br><span> </span><br><span>       do {</span><br><span>                 if (transp->udp_fd < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 struct usb_interface_match _ifm, *ifm = &_ifm;</span><br><span style="color: hsl(0, 100%, 40%);">-                      ifm->vendor = vendor_id;</span><br><span style="color: hsl(0, 100%, 40%);">-                     ifm->product = product_id;</span><br><span style="color: hsl(0, 100%, 40%);">-                   ifm->configuration = config_id;</span><br><span style="color: hsl(0, 100%, 40%);">-                      ifm->interface = if_num;</span><br><span style="color: hsl(0, 100%, 40%);">-                     ifm->altsetting = altsetting;</span><br><span style="color: hsl(0, 100%, 40%);">-                        ifm->addr = addr;</span><br><span style="color: hsl(0, 100%, 40%);">-                    if (path)</span><br><span style="color: hsl(0, 100%, 40%);">-                               osmo_strlcpy(ifm->path, path, sizeof(ifm->path));</span><br><span style="color: hsl(120, 100%, 40%);">+                       struct usb_interface_match if_matches[16];</span><br><span style="color: hsl(120, 100%, 40%);">+                    struct usb_interface_match *ifm = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+                       struct dev_id user_dev_ids[2] = {</span><br><span style="color: hsl(120, 100%, 40%);">+                             { vendor_id, product_id },</span><br><span style="color: hsl(120, 100%, 40%);">+                            { 0, 0 }</span><br><span style="color: hsl(120, 100%, 40%);">+                      };</span><br><span style="color: hsl(120, 100%, 40%);">+                    const struct dev_id *dev_ids = osmo_st2_compatible_dev_ids;</span><br><span style="color: hsl(120, 100%, 40%);">+                   libusb_device *dev;</span><br><span style="color: hsl(120, 100%, 40%);">+                   int i;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (vendor_id != -1 || product_id != -1)</span><br><span style="color: hsl(120, 100%, 40%);">+                              dev_ids = user_dev_ids;</span><br><span style="color: hsl(120, 100%, 40%);">+                       dev = osmo_libusb_find_matching_dev_path(NULL, dev_ids, path);</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (!dev)</span><br><span style="color: hsl(120, 100%, 40%);">+                             goto close_exit;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                    rc = osmo_libusb_dev_find_matching_interfaces(dev, USB_CLASS_PROPRIETARY,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                   SIMTRACE_CARDEM_USB_SUBCLASS, -1,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                     if_matches, sizeof(if_matches));</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (rc < 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              fprintf(stderr, "can't find matching USB interface at device\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                               goto close_exit;</span><br><span style="color: hsl(120, 100%, 40%);">+                      } else if (rc == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         ifm = if_matches;</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else if (rc > 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               if (if_num == -1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                   fprintf(stderr, "found %d matching USB interfaces, you "</span><br><span style="color: hsl(120, 100%, 40%);">+                                            "have to specify the interface number (try "</span><br><span style="color: hsl(120, 100%, 40%);">+                                                "simtrace2-list)\n", rc);</span><br><span style="color: hsl(120, 100%, 40%);">+                                   goto close_exit;</span><br><span style="color: hsl(120, 100%, 40%);">+                              }</span><br><span style="color: hsl(120, 100%, 40%);">+                             for (i = 0; i < rc; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                 if (if_matches[i].interface == if_num) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                              ifm = &if_matches[i];</span><br><span style="color: hsl(120, 100%, 40%);">+                                             break;</span><br><span style="color: hsl(120, 100%, 40%);">+                                        }</span><br><span style="color: hsl(120, 100%, 40%);">+                                     /* FIXME: match altsetting */</span><br><span style="color: hsl(120, 100%, 40%);">+                         }</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (!ifm) {</span><br><span style="color: hsl(120, 100%, 40%);">+                           fprintf(stderr, "Couldn't find matching interface\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                          goto close_exit;</span><br><span style="color: hsl(120, 100%, 40%);">+                      }</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* FIXME: we may need to switch configuration, if found interface has different config */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>                  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></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/simtrace2/+/16681">change 16681</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/+/16681"/><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: Icbcb5e8a00d189859310117880a763864b72b6c3 </div>
<div style="display:none"> Gerrit-Change-Number: 16681 </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>