<p>tsaitgaist has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/simtrace2/+/15176">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">USB: place version string in interface<br><br>previously the version string was in the iConfiguration field of a<br>dedicated USB configuration.<br>this configuration had no interface, but the USB specification<br>requires at least one interface.<br>an interface has been added to this configuration.<br>the version string is now in the iInterface field, and the<br>iConfiguration field contains "firmware version".<br>the USB specification does not require an end-point, and none are<br>present.<br><br>Change-Id: I99361e313979711f4f45ad424a52faa3ddd7c558<br>---<br>M firmware/libcommon/source/usb.c<br>1 file changed, 39 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/76/15176/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/firmware/libcommon/source/usb.c b/firmware/libcommon/source/usb.c</span><br><span>index 9d3072f..e75646e 100644</span><br><span>--- a/firmware/libcommon/source/usb.c</span><br><span>+++ b/firmware/libcommon/source/usb.c</span><br><span>@@ -62,6 +62,7 @@</span><br><span>        CARDEM_USIM4_INTF_STR,</span><br><span>       // runtime strings</span><br><span>   SERIAL_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+   VERSION_CONF_STR,</span><br><span>    VERSION_STR,</span><br><span>         // count</span><br><span>     STRING_DESC_CNT</span><br><span>@@ -69,7 +70,7 @@</span><br><span> </span><br><span> /** array of static (from usb_strings) and runtime (serial, version) USB strings</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-static const unsigned char *usb_strings_extended[ARRAY_SIZE(usb_strings) + 2];</span><br><span style="color: hsl(120, 100%, 40%);">+static const unsigned char *usb_strings_extended[ARRAY_SIZE(usb_strings) + 3];</span><br><span> </span><br><span> /* USB string for the serial (using 128-bit device ID) */</span><br><span> static unsigned char usb_string_serial[] = {</span><br><span>@@ -110,6 +111,26 @@</span><br><span> };</span><br><span> </span><br><span> /* USB string for the version */</span><br><span style="color: hsl(120, 100%, 40%);">+static const unsigned char usb_string_version_conf[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+      USBStringDescriptor_LENGTH(16),</span><br><span style="color: hsl(120, 100%, 40%);">+       USBGenericDescriptor_STRING,</span><br><span style="color: hsl(120, 100%, 40%);">+  USBStringDescriptor_UNICODE('f'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('i'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('r'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('m'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('w'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('a'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('r'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('e'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE(' '),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('v'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('e'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('r'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('s'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('i'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('o'),</span><br><span style="color: hsl(120, 100%, 40%);">+     USBStringDescriptor_UNICODE('n'),</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span> static const char git_version[] = GIT_VERSION;</span><br><span> static unsigned char usb_string_version[2 + ARRAY_SIZE(git_version) * 2 - 2];</span><br><span> </span><br><span>@@ -582,21 +603,34 @@</span><br><span> typedef struct _SIMTraceDriverConfigurationDescriptorVersion {</span><br><span>       /** Standard configuration descriptor. */</span><br><span>    USBConfigurationDescriptor configuration;</span><br><span style="color: hsl(120, 100%, 40%);">+     USBInterfaceDescriptor version;</span><br><span> } __attribute__ ((packed)) SIMTraceDriverConfigurationDescriptorVersion;</span><br><span> </span><br><span> static const SIMTraceDriverConfigurationDescriptorVersion</span><br><span>                                 configurationDescriptorVersion = {</span><br><span style="color: hsl(0, 100%, 40%);">-      /* Standard configuration descriptor */</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Standard configuration descriptor for the interface descriptor*/</span><br><span>  .configuration = {</span><br><span>           .bLength                = sizeof(USBConfigurationDescriptor),</span><br><span>                .bDescriptorType        = USBGenericDescriptor_CONFIGURATION,</span><br><span>                .wTotalLength           = sizeof(SIMTraceDriverConfigurationDescriptorVersion),</span><br><span style="color: hsl(0, 100%, 40%);">-         .bNumInterfaces         = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          .bNumInterfaces         = 1,</span><br><span>                 .bConfigurationValue    = CFG_NUM_VERSION,</span><br><span style="color: hsl(0, 100%, 40%);">-              .iConfiguration         = VERSION_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+                .iConfiguration         = VERSION_CONF_STR,</span><br><span>          .bmAttributes           = USBD_BMATTRIBUTES,</span><br><span>                 .bMaxPower              = USBConfigurationDescriptor_POWER(100),</span><br><span>     },</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Interface standard descriptor just holding the version information */</span><br><span style="color: hsl(120, 100%, 40%);">+      .version = {</span><br><span style="color: hsl(120, 100%, 40%);">+          .bLength = sizeof(USBInterfaceDescriptor),</span><br><span style="color: hsl(120, 100%, 40%);">+            .bDescriptorType        = USBGenericDescriptor_INTERFACE,</span><br><span style="color: hsl(120, 100%, 40%);">+             .bInterfaceNumber       = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          .bAlternateSetting      = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          .bNumEndpoints          = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          .bInterfaceClass        = USB_CLASS_PROPRIETARY,</span><br><span style="color: hsl(120, 100%, 40%);">+              .bInterfaceSubClass     = 0xff,</span><br><span style="color: hsl(120, 100%, 40%);">+               .bInterfaceProtocol     = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          .iInterface             = VERSION_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span> };</span><br><span> </span><br><span> const USBConfigurationDescriptor *configurationDescriptorsArr[] = {</span><br><span>@@ -693,6 +727,7 @@</span><br><span>            usb_strings_extended[i] = usb_strings[i];</span><br><span>    }</span><br><span>    usb_strings_extended[SERIAL_STR] = usb_string_serial;</span><br><span style="color: hsl(120, 100%, 40%);">+ usb_strings_extended[VERSION_CONF_STR] = usb_string_version_conf;</span><br><span>    usb_strings_extended[VERSION_STR] = usb_string_version;</span><br><span> </span><br><span>  // Initialize standard USB driver</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/simtrace2/+/15176">change 15176</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/+/15176"/><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: I99361e313979711f4f45ad424a52faa3ddd7c558 </div>
<div style="display:none"> Gerrit-Change-Number: 15176 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: tsaitgaist <kredon@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>