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