<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>