<p>Hoernchen <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/17037">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">usb dfu header cleanup<br><br>Let's stick to one set of headers, the hand-crafted usb descriptor structs<br>are prettier than the asf define galore.<br><br>Change-Id: I689d7122872b28444b6c5343df3bac0c30f23b1d<br>---<br>M sysmoOCTSIM/usb/class/dfu/device/dfudf.c<br>M sysmoOCTSIM/usb/class/dfu/device/dfudf.h<br>D sysmoOCTSIM/usb/class/dfu/device/dfudf_desc.h<br>D sysmoOCTSIM/usb/class/dfu/usb_protocol_dfu.h<br>M sysmoOCTSIM/usb_dfu.h<br>M sysmoOCTSIM/usb_start.h<br>6 files changed, 44 insertions(+), 317 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/sysmoOCTSIM/usb/class/dfu/device/dfudf.c b/sysmoOCTSIM/usb/class/dfu/device/dfudf.c</span><br><span>index 2b11fb4..5e5db89 100644</span><br><span>--- a/sysmoOCTSIM/usb/class/dfu/device/dfudf.c</span><br><span>+++ b/sysmoOCTSIM/usb/class/dfu/device/dfudf.c</span><br><span>@@ -21,8 +21,8 @@</span><br><span>  */</span><br><span> </span><br><span> #include "dfudf.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "usb_protocol_dfu.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "dfudf_desc.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "usb_dfu.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> /** USB Device DFU Function Specific Data */</span><br><span> struct dfudf_func_data {</span><br><span>@@ -35,12 +35,8 @@</span><br><span> static struct usbdf_driver _dfudf;</span><br><span> static struct dfudf_func_data _dfudf_funcd;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/** USB DFU functional descriptor (with DFU attributes) */</span><br><span style="color: hsl(0, 100%, 40%);">-static const uint8_t usb_dfu_func_desc_bytes[] = {DFUD_IFACE_DESCB};</span><br><span style="color: hsl(0, 100%, 40%);">-static const usb_dfu_func_desc_t* usb_dfu_func_desc = (usb_dfu_func_desc_t*)&usb_dfu_func_desc_bytes;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-enum usb_dfu_state dfu_state = USB_DFU_STATE_APP_IDLE;</span><br><span style="color: hsl(0, 100%, 40%);">-enum usb_dfu_status dfu_status = USB_DFU_STATUS_OK;</span><br><span style="color: hsl(120, 100%, 40%);">+enum dfu_state dfu_state = DFU_STATE_appIDLE;</span><br><span style="color: hsl(120, 100%, 40%);">+enum usb_dfu_status dfu_status = DFU_STATUS_OK;</span><br><span> </span><br><span> uint8_t dfu_download_data[512];</span><br><span> uint16_t dfu_download_length = 0;</span><br><span>@@ -156,7 +152,7 @@</span><br><span>     uint8_t response[6]; // buffer for the response to this request</span><br><span>      switch (req->bRequest) {</span><br><span>  case USB_DFU_UPLOAD: // upload firmware from flash not supported</span><br><span style="color: hsl(0, 100%, 40%);">-                dfu_state = USB_DFU_STATE_DFU_ERROR; // unsupported class request</span><br><span style="color: hsl(120, 100%, 40%);">+             dfu_state = DFU_STATE_dfuERROR; // unsupported class request</span><br><span>                 to_return = ERR_UNSUPPORTED_OP; // stall control pipe (don't reply to the request)</span><br><span>               break;</span><br><span>       case USB_DFU_GETSTATUS: // get status</span><br><span>@@ -167,24 +163,13 @@</span><br><span>                response[4] = dfu_state; // set state</span><br><span>                response[5] = 0; // string not used</span><br><span>          to_return = usbdc_xfer(ep, response, 6, false); // send back status</span><br><span style="color: hsl(0, 100%, 40%);">-             if (USB_DFU_STATE_DFU_DNLOAD_SYNC == dfu_state) { // download has not completed</span><br><span style="color: hsl(0, 100%, 40%);">-                 dfu_state = USB_DFU_STATE_DFU_DNBUSY; // switch to busy state</span><br><span style="color: hsl(0, 100%, 40%);">-           } else if (USB_DFU_STATE_DFU_MANIFEST_SYNC == dfu_state) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      if (!dfu_manifestation_complete) {</span><br><span style="color: hsl(0, 100%, 40%);">-                              dfu_state = USB_DFU_STATE_DFU_MANIFEST; // go to manifest mode</span><br><span style="color: hsl(0, 100%, 40%);">-                  } else if (usb_dfu_func_desc->bmAttributes & USB_DFU_ATTRIBUTES_MANIFEST_TOLERANT) {</span><br><span style="color: hsl(0, 100%, 40%);">-                             dfu_state = USB_DFU_STATE_DFU_IDLE; // go back to idle mode</span><br><span style="color: hsl(0, 100%, 40%);">-                     } else { // this should not happen (after manifestation the state should be dfuMANIFEST-WAIT-RESET if we are not manifest tolerant)</span><br><span style="color: hsl(0, 100%, 40%);">-                             dfu_state = USB_DFU_STATE_DFU_MANIFEST_WAIT_RESET; // wait for reset</span><br><span style="color: hsl(0, 100%, 40%);">-                    }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span>            break;</span><br><span>       case USB_DFU_GETSTATE: // get state</span><br><span>          response[0] = dfu_state; // return state</span><br><span>             to_return = usbdc_xfer(ep, response, 1, false); // send back state</span><br><span>           break;</span><br><span>       default: // all other DFU class IN request</span><br><span style="color: hsl(0, 100%, 40%);">-              dfu_state = USB_DFU_STATE_DFU_ERROR; // unknown or unsupported class request</span><br><span style="color: hsl(120, 100%, 40%);">+          dfu_state = DFU_STATE_dfuERROR; // unknown or unsupported class request</span><br><span>              to_return = ERR_INVALID_ARG; // stall control pipe (don't reply to the request)</span><br><span>          break;</span><br><span>       }</span><br><span>@@ -205,7 +190,7 @@</span><br><span>      switch (req->bRequest) {</span><br><span>  case USB_DFU_DETACH: // detach makes only sense in DFU run-time/application mode</span><br><span> #if (DISABLE_DFU_DETACH != 0)</span><br><span style="color: hsl(0, 100%, 40%);">-               dfu_state = USB_DFU_STATE_DFU_ERROR; // unsupported class request</span><br><span style="color: hsl(120, 100%, 40%);">+             dfu_state = DFU_STATE_dfuERROR; // unsupported class request</span><br><span>                 to_return = ERR_UNSUPPORTED_OP; // stall control pipe (don't reply to the request)</span><br><span> #else</span><br><span>              to_return = usbdc_xfer(ep, NULL, 0, false);</span><br><span>@@ -218,19 +203,19 @@</span><br><span> #endif</span><br><span>                break;</span><br><span>       case USB_DFU_CLRSTATUS: // clear status</span><br><span style="color: hsl(0, 100%, 40%);">-         if (USB_DFU_STATE_DFU_ERROR == dfu_state || USB_DFU_STATUS_OK != dfu_status) { // only clear in case there is an error</span><br><span style="color: hsl(0, 100%, 40%);">-                  dfu_status = USB_DFU_STATUS_OK; // clear error status</span><br><span style="color: hsl(0, 100%, 40%);">-                   dfu_state = USB_DFU_STATE_DFU_IDLE; // put back in idle state</span><br><span style="color: hsl(120, 100%, 40%);">+         if (DFU_STATE_dfuERROR == dfu_state || DFU_STATUS_OK != dfu_status) { // only clear in case there is an error</span><br><span style="color: hsl(120, 100%, 40%);">+                 dfu_status = DFU_STATUS_OK; // clear error status</span><br><span style="color: hsl(120, 100%, 40%);">+                     dfu_state = DFU_STATE_dfuIDLE; // put back in idle state</span><br><span>             }</span><br><span>            to_return = usbdc_xfer(ep, NULL, 0, false); // send ACK</span><br><span>              break;</span><br><span>       case USB_DFU_ABORT: // abort current operation</span><br><span>               dfu_download_offset = 0; // reset download progress</span><br><span style="color: hsl(0, 100%, 40%);">-             dfu_state = USB_DFU_STATE_DFU_IDLE; // put back in idle state (nothing else to do)</span><br><span style="color: hsl(120, 100%, 40%);">+            dfu_state = DFU_STATE_dfuIDLE; // put back in idle state (nothing else to do)</span><br><span>                to_return = usbdc_xfer(ep, NULL, 0, false); // send ACK</span><br><span>              break;</span><br><span>       default: // all other DFU class OUT request</span><br><span style="color: hsl(0, 100%, 40%);">-             dfu_state = USB_DFU_STATE_DFU_ERROR; // unknown class request</span><br><span style="color: hsl(120, 100%, 40%);">+         dfu_state = DFU_STATE_dfuERROR; // unknown class request</span><br><span>             to_return = ERR_INVALID_ARG; // stall control pipe (don't reply to the request)</span><br><span>          break;</span><br><span>       }</span><br><span>diff --git a/sysmoOCTSIM/usb/class/dfu/device/dfudf.h b/sysmoOCTSIM/usb/class/dfu/device/dfudf.h</span><br><span>index cee5845..3a1be1e 100644</span><br><span>--- a/sysmoOCTSIM/usb/class/dfu/device/dfudf.h</span><br><span>+++ b/sysmoOCTSIM/usb/class/dfu/device/dfudf.h</span><br><span>@@ -35,10 +35,10 @@</span><br><span> #define USBDF_DFU_H_</span><br><span> </span><br><span> #include "usbdc.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "usb_protocol_dfu.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> /** Current DFU state */</span><br><span style="color: hsl(0, 100%, 40%);">-extern enum usb_dfu_state dfu_state;</span><br><span style="color: hsl(120, 100%, 40%);">+extern enum dfu_state dfu_state;</span><br><span> /**< Current DFU status */</span><br><span> extern enum usb_dfu_status dfu_status;</span><br><span> </span><br><span>diff --git a/sysmoOCTSIM/usb/class/dfu/device/dfudf_desc.h b/sysmoOCTSIM/usb/class/dfu/device/dfudf_desc.h</span><br><span>deleted file mode 100644</span><br><span>index 50a79e4..0000000</span><br><span>--- a/sysmoOCTSIM/usb/class/dfu/device/dfudf_desc.h</span><br><span>+++ /dev/null</span><br><span>@@ -1,114 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/**</span><br><span style="color: hsl(0, 100%, 40%);">- * \file</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * \brief USB Device Stack DFU Function Descriptor Setting.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Copyright (c) 2015-2018 Microchip Technology Inc. and its subsidiaries.</span><br><span style="color: hsl(0, 100%, 40%);">- * Copyright (c) 2018 sysmocom -s.f.m.c. GmbH, Author: Kevin Redon <kredon@sysmocom.de></span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * \asf_license_start</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * \page License</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Subject to your compliance with these terms, you may use Microchip</span><br><span style="color: hsl(0, 100%, 40%);">- * software and any derivatives exclusively with Microchip products.</span><br><span style="color: hsl(0, 100%, 40%);">- * It is your responsibility to comply with third party license terms applicable</span><br><span style="color: hsl(0, 100%, 40%);">- * to your use of third party software (including open source software) that</span><br><span style="color: hsl(0, 100%, 40%);">- * may accompany Microchip software.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,</span><br><span style="color: hsl(0, 100%, 40%);">- * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,</span><br><span style="color: hsl(0, 100%, 40%);">- * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,</span><br><span style="color: hsl(0, 100%, 40%);">- * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE</span><br><span style="color: hsl(0, 100%, 40%);">- * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL</span><br><span style="color: hsl(0, 100%, 40%);">- * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE</span><br><span style="color: hsl(0, 100%, 40%);">- * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE</span><br><span style="color: hsl(0, 100%, 40%);">- * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE.  TO THE FULLEST EXTENT</span><br><span style="color: hsl(0, 100%, 40%);">- * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY</span><br><span style="color: hsl(0, 100%, 40%);">- * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,</span><br><span style="color: hsl(0, 100%, 40%);">- * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * \asf_license_stop</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%);">-#ifndef USBDF_DFU_DESC_H_</span><br><span style="color: hsl(0, 100%, 40%);">-#define USBDF_DFU_DESC_H_</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "usb_protocol.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "usbd_config.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "usb_protocol_dfu.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFUD_DEV_DESC \</span><br><span style="color: hsl(0, 100%, 40%);">-    USB_DEV_DESC_BYTES(CONF_USB_DFUD_BCDUSB, \</span><br><span style="color: hsl(0, 100%, 40%);">-                         CONF_USB_DFUD_BDEVICECLASS, \</span><br><span style="color: hsl(0, 100%, 40%);">-                           CONF_USB_DFUD_BDEVICESUBCLASS, \</span><br><span style="color: hsl(0, 100%, 40%);">-                        CONF_USB_DFUD_BDEVICEPROTOCOL, \</span><br><span style="color: hsl(0, 100%, 40%);">-                        CONF_USB_DFUD_BMAXPKSZ0, \</span><br><span style="color: hsl(0, 100%, 40%);">-                      CONF_USB_OPENMOKO_IDVENDOR, \</span><br><span style="color: hsl(0, 100%, 40%);">-                           CONF_USB_OSMOASF4DFU_IDPRODUCT, \</span><br><span style="color: hsl(0, 100%, 40%);">-                       CONF_USB_DFUD_BCDDEVICE, \</span><br><span style="color: hsl(0, 100%, 40%);">-                      CONF_USB_DFUD_IMANUFACT, \</span><br><span style="color: hsl(0, 100%, 40%);">-                      CONF_USB_DFUD_IPRODUCT, \</span><br><span style="color: hsl(0, 100%, 40%);">-                       CONF_USB_DFUD_ISERIALNUM, \</span><br><span style="color: hsl(0, 100%, 40%);">-                     CONF_USB_DFUD_BNUMCONFIG)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFUD_DEV_QUAL_DESC \</span><br><span style="color: hsl(0, 100%, 40%);">-        USB_DEV_QUAL_DESC_BYTES(CONF_USB_DFUD_BCDUSB, \</span><br><span style="color: hsl(0, 100%, 40%);">-                         CONF_USB_DFUD_BDEVICECLASS, \</span><br><span style="color: hsl(0, 100%, 40%);">-                           CONF_USB_DFUD_BDEVICESUBCLASS, \</span><br><span style="color: hsl(0, 100%, 40%);">-                                CONF_USB_DFUD_BMAXPKSZ0, \</span><br><span style="color: hsl(0, 100%, 40%);">-                              CONF_USB_DFUD_BNUMCONFIG)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFUD_CFG_DESC \</span><br><span style="color: hsl(0, 100%, 40%);">-        USB_CONFIG_DESC_BYTES(CONF_USB_DFUD_WTOTALLENGTH, \</span><br><span style="color: hsl(0, 100%, 40%);">-                           CONF_USB_DFUD_BNUMINTERFACES, \</span><br><span style="color: hsl(0, 100%, 40%);">-                         CONF_USB_DFUD_BCONFIGVAL, \</span><br><span style="color: hsl(0, 100%, 40%);">-                             CONF_USB_DFUD_ICONFIG, \</span><br><span style="color: hsl(0, 100%, 40%);">-                        CONF_USB_DFUD_BMATTRI, \</span><br><span style="color: hsl(0, 100%, 40%);">-                        CONF_USB_DFUD_BMAXPOWER)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFUD_OTH_SPD_CFG_DESC \</span><br><span style="color: hsl(0, 100%, 40%);">-   USB_OTH_SPD_CFG_DESC_BYTES(CONF_USB_DFUD_WTOTALLENGTH, \</span><br><span style="color: hsl(0, 100%, 40%);">-                                   CONF_USB_DFUD_BNUMINTERFACES, \</span><br><span style="color: hsl(0, 100%, 40%);">-                                 CONF_USB_DFUD_BCONFIGVAL, \</span><br><span style="color: hsl(0, 100%, 40%);">-                             CONF_USB_DFUD_ICONFIG, \</span><br><span style="color: hsl(0, 100%, 40%);">-                                CONF_USB_DFUD_BMATTRI, \</span><br><span style="color: hsl(0, 100%, 40%);">-                                CONF_USB_DFUD_BMAXPOWER)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFUD_IFACE_DESCB USB_DFU_FUNC_DESC_BYTES(USB_DFU_ATTRIBUTES_CAN_DOWNLOAD | USB_DFU_ATTRIBUTES_WILL_DETACH, \</span><br><span style="color: hsl(0, 100%, 40%);">-                                              0, /**< detaching makes only sense in run-time mode */ \</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     512, /**< transfer size corresponds to page size for optimal flash writing */ \</span><br><span style="color: hsl(0, 100%, 40%);">-                                              0x0110 /**< DFU specification version 1.1 used */ )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFUD_IFACE_DESCES \</span><br><span style="color: hsl(0, 100%, 40%);">-  USB_IFACE_DESC_BYTES(CONF_USB_DFUD_BIFCNUM, \</span><br><span style="color: hsl(0, 100%, 40%);">-                        CONF_USB_DFUD_BALTSET, \</span><br><span style="color: hsl(0, 100%, 40%);">-                        CONF_USB_DFUD_BNUMEP, \</span><br><span style="color: hsl(0, 100%, 40%);">-                         USB_DFU_CLASS, \</span><br><span style="color: hsl(0, 100%, 40%);">-                        USB_DFU_SUBCLASS, \</span><br><span style="color: hsl(0, 100%, 40%);">-                             USB_DFU_PROTOCOL_DFU, \</span><br><span style="color: hsl(0, 100%, 40%);">-                         CONF_USB_DFUD_IINTERFACE), \</span><br><span style="color: hsl(0, 100%, 40%);">-                            DFUD_IFACE_DESCB</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFUD_STR_DESCES \</span><br><span style="color: hsl(0, 100%, 40%);">-  CONF_USB_DFUD_LANGID_DESC \</span><br><span style="color: hsl(0, 100%, 40%);">-     CONF_USB_DFUD_IMANUFACT_STR_DESC \</span><br><span style="color: hsl(0, 100%, 40%);">-      CONF_USB_DFUD_IPRODUCT_STR_DESC \</span><br><span style="color: hsl(0, 100%, 40%);">-       CONF_USB_DFUD_ISERIALNUM_STR_DESC \</span><br><span style="color: hsl(0, 100%, 40%);">-     CONF_USB_DFUD_ICONFIG_STR_DESC \</span><br><span style="color: hsl(0, 100%, 40%);">-        CONF_USB_DFUD_IINTERFACE_STR_DESC</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/** USB Device descriptors and configuration descriptors */</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFUD_DESCES_LS_FS \</span><br><span style="color: hsl(0, 100%, 40%);">- DFUD_DEV_DESC, DFUD_CFG_DESC, DFUD_IFACE_DESCES, DFUD_STR_DESCES</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFUD_HS_DESCES_LS_FS \</span><br><span style="color: hsl(0, 100%, 40%);">-  DFUD_DEV_DESC, DFUD_DEV_QUAL_DESC, DFUD_CFG_DESC, DFUD_M_IFACE_DESCES, \</span><br><span style="color: hsl(0, 100%, 40%);">-            DFUD_IFACE_DESCES, DFUD_OTH_SPD_CFG_DESC, \</span><br><span style="color: hsl(0, 100%, 40%);">-     DFUD_IFACE_DESCES_HS, DFUD_STR_DESCES</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFUD_HS_DESCES_HS \</span><br><span style="color: hsl(0, 100%, 40%);">-    DFUD_CFG_DESC, DFUD_IFACE_DESCES, DFUD_IFACE_DESCES_HS, DFUD_OTH_SPD_CFG_DESC, \</span><br><span style="color: hsl(0, 100%, 40%);">-            DFUD_IFACE_DESCES</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#endif /* USBDF_DFU_DESC_H_ */</span><br><span>diff --git a/sysmoOCTSIM/usb/class/dfu/usb_protocol_dfu.h b/sysmoOCTSIM/usb/class/dfu/usb_protocol_dfu.h</span><br><span>deleted file mode 100644</span><br><span>index 7f82743..0000000</span><br><span>--- a/sysmoOCTSIM/usb/class/dfu/usb_protocol_dfu.h</span><br><span>+++ /dev/null</span><br><span>@@ -1,150 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/**</span><br><span style="color: hsl(0, 100%, 40%);">- * \file</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * \brief USB Device Firmware Upgrade (DFU) protocol definitions</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Copyright (c) 2018 sysmocom -s.f.m.c. GmbH, Author: Kevin Redon <kredon@sysmocom.de></span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This library 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 Lesser General Public</span><br><span style="color: hsl(0, 100%, 40%);">- * License as published by the Free Software Foundation; either</span><br><span style="color: hsl(0, 100%, 40%);">- * version 2.1 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 library 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 GNU</span><br><span style="color: hsl(0, 100%, 40%);">- * Lesser 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 Lesser General Public</span><br><span style="color: hsl(0, 100%, 40%);">- * License along with this library; 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%);">-#ifndef _USB_PROTOCOL_DFU_H_</span><br><span style="color: hsl(0, 100%, 40%);">-#define _USB_PROTOCOL_DFU_H_</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "usb_includes.h"</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%);">- * \ingroup usb_protocol_group</span><br><span style="color: hsl(0, 100%, 40%);">- * \defgroup dfu_protocol_group Device Firmware Upgrade Definitions</span><br><span style="color: hsl(0, 100%, 40%);">- * \implements USB Device Firmware Upgrade Specification, Revision 1.1</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%);">- * \name USB DFU Subclass IDs</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%);">-#define USB_DFU_CLASS 0xFE //!< Application Specific Class Code</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%);">-//! \name USB DFU Subclass IDs</span><br><span style="color: hsl(0, 100%, 40%);">-//@{</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_DFU_SUBCLASS 0x01 //!< Device Firmware Upgrade Code</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%);">-//! \name USB DFU Protocol IDs</span><br><span style="color: hsl(0, 100%, 40%);">-//@{</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_DFU_PROTOCOL_RUNTIME 0x01 //!< Runtime protocol</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_DFU_PROTOCOL_DFU 0x02 //!< DFU mode protocol</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%);">-//! \name USB DFU Attributes bits mask</span><br><span style="color: hsl(0, 100%, 40%);">-//@{</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_DFU_ATTRIBUTES_CAN_DOWNLOAD 0x01</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_DFU_ATTRIBUTES_CAN_UPLOAD 0x02</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_DFU_ATTRIBUTES_MANIFEST_TOLERANT 0x04</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_DFU_ATTRIBUTES_WILL_DETACH 0x08</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%);">-//! \name USB DFU Request IDs</span><br><span style="color: hsl(0, 100%, 40%);">-//@{</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_DETACH 0x00</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_DNLOAD 0x01</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_UPLOAD 0x02</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_GETSTATUS 0x03</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_CLRSTATUS 0x04</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_GETSTATE 0x05</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_ABORT 0x06</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%);">- * Need to pack structures tightly, or the compiler might insert padding</span><br><span style="color: hsl(0, 100%, 40%);">- * and violate the spec-mandated layout.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-COMPILER_PACK_SET(1)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-//! \name USB DFU Descriptors</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%);">-//! DFU Functional Descriptor</span><br><span style="color: hsl(0, 100%, 40%);">-typedef struct usb_dfu_func_desc {</span><br><span style="color: hsl(0, 100%, 40%);">-      uint8_t bFunctionLength; /**< Size of this descriptor, in bytes (always 9) */</span><br><span style="color: hsl(0, 100%, 40%);">-        uint8_t bDescriptorType; /**< DFU FUNCTIONAL descriptor type (always 0x21) */</span><br><span style="color: hsl(0, 100%, 40%);">-        uint8_t bmAttributes; /**< DFU attributes bit mask */</span><br><span style="color: hsl(0, 100%, 40%);">-        le16_t  wDetachTimeOut; /**< Time, in milliseconds, that the device will wait after receipt of the DFU_DETACH request */</span><br><span style="color: hsl(0, 100%, 40%);">-     le16_t  wTransferSize; /**< Maximum number of bytes that the device can accept per control-write transaction */</span><br><span style="color: hsl(0, 100%, 40%);">-      le16_t  bcdDFUVersion; /**< Numeric expression identifying the version of the DFU Specification release */</span><br><span style="color: hsl(0, 100%, 40%);">-} usb_dfu_func_desc_t;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_DFU_FUNC_DESC_LEN 9</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_DFU_FUNC_DESC_TYPE 0x21</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_DFU_FUNC_DESC_BYTES(bmAttributes, wDetachTimeOut, wTransferSize, bcdDFUVersion) \</span><br><span style="color: hsl(0, 100%, 40%);">-      USB_DFU_FUNC_DESC_LEN, /* bFunctionLength */ \</span><br><span style="color: hsl(0, 100%, 40%);">-  USB_DFU_FUNC_DESC_TYPE, /* bDescriptorType */ \</span><br><span style="color: hsl(0, 100%, 40%);">- bmAttributes, \</span><br><span style="color: hsl(0, 100%, 40%);">- LE_BYTE0(wDetachTimeOut), LE_BYTE1(wDetachTimeOut), \</span><br><span style="color: hsl(0, 100%, 40%);">-   LE_BYTE0(wTransferSize), LE_BYTE1(wTransferSize), \</span><br><span style="color: hsl(0, 100%, 40%);">-     LE_BYTE0(bcdDFUVersion), LE_BYTE1(bcdDFUVersion)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-COMPILER_PACK_RESET()</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%);">-//! USB DFU Request IDs</span><br><span style="color: hsl(0, 100%, 40%);">-enum usb_dfu_req {</span><br><span style="color: hsl(0, 100%, 40%);">-    USB_DFU_DETACH,</span><br><span style="color: hsl(0, 100%, 40%);">- USB_DFU_DNLOAD,</span><br><span style="color: hsl(0, 100%, 40%);">- USB_DFU_UPLOAD,</span><br><span style="color: hsl(0, 100%, 40%);">- USB_DFU_GETSTATUS,</span><br><span style="color: hsl(0, 100%, 40%);">-      USB_DFU_CLRSTATUS,</span><br><span style="color: hsl(0, 100%, 40%);">-      USB_DFU_GETSTATE,</span><br><span style="color: hsl(0, 100%, 40%);">-       USB_DFU_ABORT,</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%);">-//! USB DFU Device Status IDs</span><br><span style="color: hsl(0, 100%, 40%);">-enum usb_dfu_status {</span><br><span style="color: hsl(0, 100%, 40%);">-      USB_DFU_STATUS_OK,</span><br><span style="color: hsl(0, 100%, 40%);">-      USB_DFU_STATUS_ERR_TARGET,</span><br><span style="color: hsl(0, 100%, 40%);">-      USB_DFU_STATUS_ERR_FILE,</span><br><span style="color: hsl(0, 100%, 40%);">-        USB_DFU_STATUS_ERR_WRITE,</span><br><span style="color: hsl(0, 100%, 40%);">-       USB_DFU_STATUS_ERR_ERASE,</span><br><span style="color: hsl(0, 100%, 40%);">-       USB_DFU_STATUS_ERR_CHECK_ERASED,</span><br><span style="color: hsl(0, 100%, 40%);">-        USB_DFU_STATUS_ERR_PROG,</span><br><span style="color: hsl(0, 100%, 40%);">-        USB_DFU_STATUS_ERR_VERIFY,</span><br><span style="color: hsl(0, 100%, 40%);">-      USB_DFU_STATUS_ERR_ADDRESS,</span><br><span style="color: hsl(0, 100%, 40%);">-     USB_DFU_STATUS_ERR_NOTDONE,</span><br><span style="color: hsl(0, 100%, 40%);">-     USB_DFU_STATUS_ERR_FIRMWARE,</span><br><span style="color: hsl(0, 100%, 40%);">-    USB_DFU_STATUS_ERR_VENDOR,</span><br><span style="color: hsl(0, 100%, 40%);">-      USB_DFU_STATUS_ERR_USBR,</span><br><span style="color: hsl(0, 100%, 40%);">-        USB_DFU_STATUS_ERR_POR,</span><br><span style="color: hsl(0, 100%, 40%);">- USB_DFU_STATUS_ERR_UNKNOWN,</span><br><span style="color: hsl(0, 100%, 40%);">-     USB_DFU_STATUS_ERR_STALLEDPKT,</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%);">-//! USB DFU Device State IDs</span><br><span style="color: hsl(0, 100%, 40%);">-enum usb_dfu_state {</span><br><span style="color: hsl(0, 100%, 40%);">-        USB_DFU_STATE_APP_IDLE,</span><br><span style="color: hsl(0, 100%, 40%);">- USB_DFU_STATE_APP_DETACH,</span><br><span style="color: hsl(0, 100%, 40%);">-       USB_DFU_STATE_DFU_IDLE,</span><br><span style="color: hsl(0, 100%, 40%);">- USB_DFU_STATE_DFU_DNLOAD_SYNC,</span><br><span style="color: hsl(0, 100%, 40%);">-  USB_DFU_STATE_DFU_DNBUSY,</span><br><span style="color: hsl(0, 100%, 40%);">-       USB_DFU_STATE_DFU_DNLOAD_IDLE,</span><br><span style="color: hsl(0, 100%, 40%);">-  USB_DFU_STATE_DFU_MANIFEST_SYNC,</span><br><span style="color: hsl(0, 100%, 40%);">-        USB_DFU_STATE_DFU_MANIFEST,</span><br><span style="color: hsl(0, 100%, 40%);">-     USB_DFU_STATE_DFU_MANIFEST_WAIT_RESET,</span><br><span style="color: hsl(0, 100%, 40%);">-  USB_DFU_STATE_DFU_UPLOAD_IDLE,</span><br><span style="color: hsl(0, 100%, 40%);">-  USB_DFU_STATE_DFU_ERROR,</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%);">-#endif // _USB_PROTOCOL_DFU_H_</span><br><span>diff --git a/sysmoOCTSIM/usb_dfu.h b/sysmoOCTSIM/usb_dfu.h</span><br><span>index b447c7c..2e7e171 100644</span><br><span>--- a/sysmoOCTSIM/usb_dfu.h</span><br><span>+++ b/sysmoOCTSIM/usb_dfu.h</span><br><span>@@ -11,6 +11,7 @@</span><br><span>  */</span><br><span> </span><br><span> #include <stdint.h></span><br><span style="color: hsl(120, 100%, 40%);">+#define USB_DFU_CLASS 0xfe</span><br><span> </span><br><span> #define USB_DT_DFU                     0x21</span><br><span> </span><br><span>@@ -30,13 +31,16 @@</span><br><span> #define USB_DT_DFU_SIZE                       9</span><br><span> </span><br><span> /* DFU class-specific requests (Section 3, DFU Rev 1.1) */</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_DETACH   0x00</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_DNLOAD  0x01</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_UPLOAD  0x02</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_GETSTATUS       0x03</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_CLRSTATUS       0x04</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_GETSTATE        0x05</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_REQ_DFU_ABORT   0x06</span><br><span style="color: hsl(120, 100%, 40%);">+enum usb_dfu_req {</span><br><span style="color: hsl(120, 100%, 40%);">+      USB_DFU_DETACH,</span><br><span style="color: hsl(120, 100%, 40%);">+       USB_DFU_DNLOAD,</span><br><span style="color: hsl(120, 100%, 40%);">+       USB_DFU_UPLOAD,</span><br><span style="color: hsl(120, 100%, 40%);">+       USB_DFU_GETSTATUS,</span><br><span style="color: hsl(120, 100%, 40%);">+    USB_DFU_CLRSTATUS,</span><br><span style="color: hsl(120, 100%, 40%);">+    USB_DFU_GETSTATE,</span><br><span style="color: hsl(120, 100%, 40%);">+     USB_DFU_ABORT,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> struct dfu_status {</span><br><span>      uint8_t bStatus;</span><br><span>@@ -45,22 +49,24 @@</span><br><span>       uint8_t iString;</span><br><span> } __attribute__((packed));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_OK                 0x00</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errTARGET                0x01</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errFILE          0x02</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errWRITE         0x03</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errERASE         0x04</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errCHECK_ERASED  0x05</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errPROG          0x06</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errVERIFY                0x07</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errADDRESS               0x08</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errNOTDONE               0x09</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errFIRMWARE              0x0a</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errVENDOR                0x0b</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errUSBR          0x0c</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errPOR           0x0d</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errUNKNOWN               0x0e</span><br><span style="color: hsl(0, 100%, 40%);">-#define DFU_STATUS_errSTALLEDPKT    0x0f</span><br><span style="color: hsl(120, 100%, 40%);">+enum usb_dfu_status {</span><br><span style="color: hsl(120, 100%, 40%);">+   DFU_STATUS_OK                   =0x00,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errTARGET    =0x01,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errFILE              =0x02,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errWRITE             =0x03,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errERASE             =0x04,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errCHECK_ERASED      =0x05,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errPROG              =0x06,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errVERIFY            =0x07,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errADDRESS           =0x08,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errNOTDONE           =0x09,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errFIRMWARE          =0x0a,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errVENDOR            =0x0b,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errUSBR              =0x0c,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errPOR               =0x0d,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errUNKNOWN           =0x0e,</span><br><span style="color: hsl(120, 100%, 40%);">+        DFU_STATUS_errSTALLEDPKT        =0x0f,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span> </span><br><span> enum dfu_state {</span><br><span>   DFU_STATE_appIDLE               = 0,</span><br><span>diff --git a/sysmoOCTSIM/usb_start.h b/sysmoOCTSIM/usb_start.h</span><br><span>index 089c58d..12537bb 100644</span><br><span>--- a/sysmoOCTSIM/usb_start.h</span><br><span>+++ b/sysmoOCTSIM/usb_start.h</span><br><span>@@ -16,7 +16,7 @@</span><br><span> #include "cdcdf_acm_desc.h"</span><br><span> #include "ccid_df.h"</span><br><span> #include "dfudf.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "dfudf_desc.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> void usb_start(void);</span><br><span> void cdc_device_acm_init(void);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/17037">change 17037</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/osmo-ccid-firmware/+/17037"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ccid-firmware </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I689d7122872b28444b6c5343df3bac0c30f23b1d </div>
<div style="display:none"> Gerrit-Change-Number: 17037 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>