<p>Kévin Redon has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/9869">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">USB: add central file to define USB IDs, classes, and endpoints<br><br>Change-Id: Iba81f32a92c68a973e8e7adbc4c2a1064ba5290f<br>---<br>M firmware/atmel_softpack_libraries/usb/device/dfu/dfu_desc.c<br>M firmware/libboard/common/include/board_common.h<br>M firmware/libboard/owhw/include/board.h<br>M firmware/libboard/qmod/include/board.h<br>M firmware/libboard/simtrace/include/board.h<br>M firmware/libcommon/include/simtrace.h<br>A firmware/libcommon/include/simtrace_usb.h<br>M firmware/libcommon/source/mode_cardemu.c<br>M firmware/libcommon/source/simtrace_iso7816.c<br>M firmware/libcommon/source/usb.c<br>M firmware/libcommon/source/usb_buf.c<br>11 files changed, 120 insertions(+), 105 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/69/9869/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_desc.c b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_desc.c</span><br><span>index f6d484c..75fded1 100644</span><br><span>--- a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_desc.c</span><br><span>+++ b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_desc.c</span><br><span>@@ -28,7 +28,7 @@</span><br><span>   .bDeviceClass =         0,</span><br><span>   .bDeviceSubClass =      0,</span><br><span>   .bDeviceProtocol =      0,</span><br><span style="color: hsl(0, 100%, 40%);">-      .bMaxPacketSize0 =      BOARD_USB_ENDPOINTS_MAXPACKETSIZE(0),</span><br><span style="color: hsl(120, 100%, 40%);">+ .bMaxPacketSize0 =      USBEndpointDescriptor_MAXCTRLSIZE_FS,</span><br><span>        .idVendor =             BOARD_USB_VENDOR_ID,</span><br><span>         .idProduct =            BOARD_DFU_USB_PRODUCT_ID,</span><br><span>    .bcdDevice =            BOARD_USB_RELEASE,</span><br><span>diff --git a/firmware/libboard/common/include/board_common.h b/firmware/libboard/common/include/board_common.h</span><br><span>index 64bdf0f..a995d88 100644</span><br><span>--- a/firmware/libboard/common/include/board_common.h</span><br><span>+++ b/firmware/libboard/common/include/board_common.h</span><br><span>@@ -108,21 +108,6 @@</span><br><span> // D+ has external pull-up</span><br><span> #define BOARD_USB_PULLUP_EXTERNAL</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define BOARD_USB_NUMENDPOINTS      8</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-// FIXME: in all other cases return 0?</span><br><span style="color: hsl(0, 100%, 40%);">-#define BOARD_USB_ENDPOINTS_MAXPACKETSIZE(i)    (((i == 4) || (i == 5))? 512 : 64)</span><br><span style="color: hsl(0, 100%, 40%);">-#define BOARD_USB_ENDPOINTS_BANKS(i)            (((i == 0) || (i == 3)) ? 1 : 2)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_VENDOR_OPENMOKO               0x1d50</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_PRODUCT_OWHW_SAM3_DFU 0x4001  /* was 0x4000 */</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_PRODUCT_OWHW_SAM3           0x4001</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_PRODUCT_QMOD_HUB              0x4002</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_PRODUCT_QMOD_SAM3_DFU 0x4004  /* was 0x4003 */</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_PRODUCT_QMOD_SAM3           0x4004</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_PRODUCT_SIMTRACE2_DFU 0x60e3  /* was 0x60e2 */</span><br><span style="color: hsl(0, 100%, 40%);">-#define USB_PRODUCT_SIMTRACE2           0x60e3</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #define BOARD_USB_DFU</span><br><span> #define BOARD_DFU_BOOT_SIZE  (16 * 1024)</span><br><span> #define BOARD_DFU_RAM_SIZE       (2 * 1024)</span><br><span>diff --git a/firmware/libboard/owhw/include/board.h b/firmware/libboard/owhw/include/board.h</span><br><span>index c770749..def3d8b 100644</span><br><span>--- a/firmware/libboard/owhw/include/board.h</span><br><span>+++ b/firmware/libboard/owhw/include/board.h</span><br><span>@@ -1,5 +1,6 @@</span><br><span> #pragma once</span><br><span> #include "board_common.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "simtrace_usb.h"</span><br><span> </span><br><span> /** Name of the board */</span><br><span> #define BOARD_NAME "OWHW"</span><br><span>diff --git a/firmware/libboard/qmod/include/board.h b/firmware/libboard/qmod/include/board.h</span><br><span>index b8af8d8..2db94ab 100644</span><br><span>--- a/firmware/libboard/qmod/include/board.h</span><br><span>+++ b/firmware/libboard/qmod/include/board.h</span><br><span>@@ -1,5 +1,6 @@</span><br><span> #pragma once</span><br><span> #include "board_common.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "simtrace_usb.h"</span><br><span> </span><br><span> #define LED_USIM1        LED_GREEN</span><br><span> #define LED_USIM2  LED_RED</span><br><span>diff --git a/firmware/libboard/simtrace/include/board.h b/firmware/libboard/simtrace/include/board.h</span><br><span>index 891ab33..b21d4fb 100644</span><br><span>--- a/firmware/libboard/simtrace/include/board.h</span><br><span>+++ b/firmware/libboard/simtrace/include/board.h</span><br><span>@@ -1,5 +1,6 @@</span><br><span> #pragma once</span><br><span> #include "board_common.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "simtrace_usb.h"</span><br><span> </span><br><span> /* Name of the board */</span><br><span> #define BOARD_NAME "SAM3S-SIMTRACE"</span><br><span>diff --git a/firmware/libcommon/include/simtrace.h b/firmware/libcommon/include/simtrace.h</span><br><span>index 3dfefe4..43dbf2a 100644</span><br><span>--- a/firmware/libcommon/include/simtrace.h</span><br><span>+++ b/firmware/libcommon/include/simtrace.h</span><br><span>@@ -5,21 +5,8 @@</span><br><span> #include "board.h"</span><br><span> #include <usb/device/dfu/dfu.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Endpoint numbers */</span><br><span style="color: hsl(0, 100%, 40%);">-#define DATAOUT     1</span><br><span style="color: hsl(0, 100%, 40%);">-#define DATAIN      2</span><br><span style="color: hsl(0, 100%, 40%);">-#define INT         3</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #define BUFLEN  512</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define PHONE_DATAOUT     4</span><br><span style="color: hsl(0, 100%, 40%);">-#define PHONE_DATAIN      5</span><br><span style="color: hsl(0, 100%, 40%);">-#define PHONE_INT         6</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define CARDEM_USIM2_DATAOUT        DATAOUT</span><br><span style="color: hsl(0, 100%, 40%);">-#define CARDEM_USIM2_DATAIN      DATAIN</span><br><span style="color: hsl(0, 100%, 40%);">-#define CARDEM_USIM2_INT  INT</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #define CLK_MASTER      true</span><br><span> #define CLK_SLAVE       false</span><br><span> </span><br><span>diff --git a/firmware/libcommon/include/simtrace_usb.h b/firmware/libcommon/include/simtrace_usb.h</span><br><span>new file mode 100644</span><br><span>index 0000000..b9ee5e2</span><br><span>--- /dev/null</span><br><span>+++ b/firmware/libcommon/include/simtrace_usb.h</span><br><span>@@ -0,0 +1,66 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU Affero General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2018 by Kevin Redon <kredon@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</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%);">+/* SIMtrace USB IDs */</span><br><span style="color: hsl(120, 100%, 40%);">+#define USB_VENDOR_OPENMOKO                  0x1d50</span><br><span style="color: hsl(120, 100%, 40%);">+#define USB_PRODUCT_OWHW_SAM3_DFU       0x4001  /* was 0x4000 */</span><br><span style="color: hsl(120, 100%, 40%);">+#define USB_PRODUCT_OWHW_SAM3         0x4001</span><br><span style="color: hsl(120, 100%, 40%);">+#define USB_PRODUCT_QMOD_HUB            0x4002</span><br><span style="color: hsl(120, 100%, 40%);">+#define USB_PRODUCT_QMOD_SAM3_DFU       0x4004  /* was 0x4003 */</span><br><span style="color: hsl(120, 100%, 40%);">+#define USB_PRODUCT_QMOD_SAM3         0x4004</span><br><span style="color: hsl(120, 100%, 40%);">+#define USB_PRODUCT_SIMTRACE2_DFU       0x60e3  /* was 0x60e2 */</span><br><span style="color: hsl(120, 100%, 40%);">+#define USB_PRODUCT_SIMTRACE2         0x60e3</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* USB proprietary class */</span><br><span style="color: hsl(120, 100%, 40%);">+#define USB_CLASS_PROPRIETARY                    0xff</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* SIMtrace USB sub-classes */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Sniffer USB sub-class */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_SNIFFER_USB_SUBCLASS     1</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Card-emulation USB sub-class */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_CARDEM_USB_SUBCLASS    2</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Generic USB endpoint numbers */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Card-side USB data out (host to device) endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_USB_EP_CARD_DATAOUT   1</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Card-side USB data in (device to host) endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_USB_EP_CARD_DATAIN           2</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Card-side USB interrupt endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_USB_EP_CARD_INT             3</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Phone-side USB data out (host to device) endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_USB_EP_PHONE_DATAOUT       4</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Phone-side USB data in (device to host) endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_USB_EP_PHONE_DATAIN 5</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Phone-side USB interrupt endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_USB_EP_PHONE_INT           6</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Card-emulation USB endpoint numbers */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! USIM1 USB data out (host to device) endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_CARDEM_USB_EP_USIM1_DATAOUT        4</span><br><span style="color: hsl(120, 100%, 40%);">+/*! USIM1 USB data in (device to host) endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_CARDEM_USB_EP_USIM1_DATAIN               5</span><br><span style="color: hsl(120, 100%, 40%);">+/*! USIM1 USB interrupt endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_CARDEM_USB_EP_USIM1_INT         6</span><br><span style="color: hsl(120, 100%, 40%);">+/*! USIM2 USB data out (host to device) endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_CARDEM_USB_EP_USIM2_DATAOUT     1</span><br><span style="color: hsl(120, 100%, 40%);">+/*! USIM2 USB data in (device to host) endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_CARDEM_USB_EP_USIM2_DATAIN               2</span><br><span style="color: hsl(120, 100%, 40%);">+/*! USIM2 USB interrupt endpoint number */</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIMTRACE_CARDEM_USB_EP_USIM2_INT         3</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Maximum number of endpoints */</span><br><span style="color: hsl(120, 100%, 40%);">+#define BOARD_USB_NUMENDPOINTS         6</span><br><span>diff --git a/firmware/libcommon/source/mode_cardemu.c b/firmware/libcommon/source/mode_cardemu.c</span><br><span>index 7de67df..8051b25 100644</span><br><span>--- a/firmware/libcommon/source/mode_cardemu.c</span><br><span>+++ b/firmware/libcommon/source/mode_cardemu.c</span><br><span>@@ -10,6 +10,7 @@</span><br><span> #include <osmocom/core/msgb.h></span><br><span> #include "llist_irqsafe.h"</span><br><span> #include "usb_buf.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "simtrace_usb.h"</span><br><span> #include "simtrace_prot.h"</span><br><span> #include "sim_switch.h"</span><br><span> </span><br><span>@@ -53,9 +54,9 @@</span><br><span>                       .id = ID_USART1,</span><br><span>                     .state = USART_RCV</span><br><span>           },</span><br><span style="color: hsl(0, 100%, 40%);">-              .ep_out = PHONE_DATAOUT,</span><br><span style="color: hsl(0, 100%, 40%);">-                .ep_in = PHONE_DATAIN,</span><br><span style="color: hsl(0, 100%, 40%);">-          .ep_int = PHONE_INT,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ep_out = SIMTRACE_CARDEM_USB_EP_USIM1_DATAOUT,</span><br><span style="color: hsl(120, 100%, 40%);">+               .ep_in = SIMTRACE_CARDEM_USB_EP_USIM1_DATAIN,</span><br><span style="color: hsl(120, 100%, 40%);">+         .ep_int = SIMTRACE_CARDEM_USB_EP_USIM1_INT,</span><br><span> #ifdef PIN_SET_USIM1_PRES</span><br><span>             .pin_insert = PIN_SET_USIM1_PRES,</span><br><span> #endif</span><br><span>@@ -68,9 +69,9 @@</span><br><span>                      .id = ID_USART0,</span><br><span>                     .state = USART_RCV</span><br><span>           },</span><br><span style="color: hsl(0, 100%, 40%);">-              .ep_out = CARDEM_USIM2_DATAOUT,</span><br><span style="color: hsl(0, 100%, 40%);">-         .ep_in = CARDEM_USIM2_DATAIN,</span><br><span style="color: hsl(0, 100%, 40%);">-           .ep_int = CARDEM_USIM2_INT,</span><br><span style="color: hsl(120, 100%, 40%);">+           .ep_out = SIMTRACE_CARDEM_USB_EP_USIM2_DATAOUT,</span><br><span style="color: hsl(120, 100%, 40%);">+               .ep_in = SIMTRACE_CARDEM_USB_EP_USIM2_DATAIN,</span><br><span style="color: hsl(120, 100%, 40%);">+         .ep_int = SIMTRACE_CARDEM_USB_EP_USIM2_INT,</span><br><span> #ifdef PIN_SET_USIM2_PRES</span><br><span>             .pin_insert = PIN_SET_USIM2_PRES,</span><br><span> #endif</span><br><span>@@ -397,7 +398,7 @@</span><br><span>    PIO_ConfigureIt(&pin_usim1_vcc, usim1_vcc_irqhandler);</span><br><span>   PIO_EnableIt(&pin_usim1_vcc);</span><br><span> #endif /* DETECT_VCC_BY_ADC */</span><br><span style="color: hsl(0, 100%, 40%);">-     cardem_inst[0].ch = card_emu_init(0, 2, 0, PHONE_DATAIN, PHONE_INT);</span><br><span style="color: hsl(120, 100%, 40%);">+  cardem_inst[0].ch = card_emu_init(0, 2, 0, SIMTRACE_CARDEM_USB_EP_USIM1_DATAIN, SIMTRACE_CARDEM_USB_EP_USIM1_INT);</span><br><span>   sim_switch_use_physical(0, 1);</span><br><span> </span><br><span> #ifdef CARDEMU_SECOND_UART</span><br><span>@@ -412,7 +413,7 @@</span><br><span>       PIO_ConfigureIt(&pin_usim2_vcc, usim2_vcc_irqhandler);</span><br><span>   PIO_EnableIt(&pin_usim2_vcc);</span><br><span> #endif /* DETECT_VCC_BY_ADC */</span><br><span style="color: hsl(0, 100%, 40%);">-     cardem_inst[1].ch = card_emu_init(1, 0, 1, CARDEM_USIM2_DATAIN, CARDEM_USIM2_INT);</span><br><span style="color: hsl(120, 100%, 40%);">+    cardem_inst[1].ch = card_emu_init(1, 0, 1, SIMTRACE_CARDEM_USB_EP_USIM2_DATAIN, SIMTRACE_CARDEM_USB_EP_USIM2_INT);</span><br><span>   sim_switch_use_physical(1, 1);</span><br><span> #endif /* CARDEMU_SECOND_UART */</span><br><span> </span><br><span>diff --git a/firmware/libcommon/source/simtrace_iso7816.c b/firmware/libcommon/source/simtrace_iso7816.c</span><br><span>index fe8b88e..c1b2c82 100644</span><br><span>--- a/firmware/libcommon/source/simtrace_iso7816.c</span><br><span>+++ b/firmware/libcommon/source/simtrace_iso7816.c</span><br><span>@@ -33,6 +33,7 @@</span><br><span> </span><br><span> #include "board.h"</span><br><span> #include "simtrace.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "simtrace_usb.h"</span><br><span> #include "ringbuffer.h"</span><br><span> #include "iso7816_fidi.h"</span><br><span> </span><br><span>@@ -67,7 +68,7 @@</span><br><span>      }</span><br><span> </span><br><span>        if ((ret =</span><br><span style="color: hsl(0, 100%, 40%);">-           USBD_Write(PHONE_INT, "R", 1,</span><br><span style="color: hsl(120, 100%, 40%);">+       USBD_Write(SIMTRACE_USB_EP_PHONE_INT, "R", 1,</span><br><span>                         (TransferCallback) & Callback_PhoneRST_ISR,</span><br><span>                      0)) != USBD_STATUS_SUCCESS) {</span><br><span>                TRACE_ERROR("USB err status: %d (%s)\n", ret, __FUNCTION__);</span><br><span>diff --git a/firmware/libcommon/source/usb.c b/firmware/libcommon/source/usb.c</span><br><span>index d317435..e929a05 100644</span><br><span>--- a/firmware/libcommon/source/usb.c</span><br><span>+++ b/firmware/libcommon/source/usb.c</span><br><span>@@ -33,15 +33,13 @@</span><br><span> </span><br><span> #include "board.h"</span><br><span> #include "simtrace.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "simtrace_usb.h"</span><br><span> #include "utils.h"</span><br><span> </span><br><span> #include <cciddriverdescriptors.h></span><br><span> #include <usb/common/dfu/usb_dfu.h></span><br><span> #include <usb/device/dfu/dfu.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define SIMTRACE_SUBCLASS_SNIFFER    1</span><br><span style="color: hsl(0, 100%, 40%);">-#define SIMTRACE_SUBCLASS_CARDEM       2</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*------------------------------------------------------------------------------</span><br><span>  *       USB String descriptors </span><br><span>  *------------------------------------------------------------------------------*/</span><br><span>@@ -94,8 +92,8 @@</span><br><span>          .bInterfaceNumber       = 0,</span><br><span>                 .bAlternateSetting      = 0,</span><br><span>                 .bNumEndpoints          = 3,</span><br><span style="color: hsl(0, 100%, 40%);">-            .bInterfaceClass        = 0xff,</span><br><span style="color: hsl(0, 100%, 40%);">-         .bInterfaceSubClass     = SIMTRACE_SUBCLASS_SNIFFER,</span><br><span style="color: hsl(120, 100%, 40%);">+          .bInterfaceClass        = USB_CLASS_PROPRIETARY,</span><br><span style="color: hsl(120, 100%, 40%);">+              .bInterfaceSubClass     = SIMTRACE_SNIFFER_USB_SUBCLASS,</span><br><span>             .bInterfaceProtocol     = 0,</span><br><span>                 .iInterface             = SNIFFER_CONF_STR,</span><br><span>  },</span><br><span>@@ -105,11 +103,9 @@</span><br><span>            .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_OUT,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              PHONE_DATAOUT),</span><br><span style="color: hsl(120, 100%, 40%);">+                                               SIMTRACE_USB_EP_CARD_DATAOUT),</span><br><span>               .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        PHONE_DATAOUT),</span><br><span style="color: hsl(0, 100%, 40%);">-                               USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+          .wMaxPacketSize = USBEndpointDescriptor_MAXBULKSIZE_FS,</span><br><span>              .bInterval              = 0,</span><br><span>         },</span><br><span>   /* Bulk-IN endpoint descriptor */</span><br><span>@@ -118,11 +114,9 @@</span><br><span>             .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_IN,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               PHONE_DATAIN),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                SIMTRACE_USB_EP_CARD_DATAIN),</span><br><span>                .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                PHONE_DATAIN),</span><br><span style="color: hsl(0, 100%, 40%);">-                                USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+          .wMaxPacketSize = USBEndpointDescriptor_MAXBULKSIZE_FS,</span><br><span>              .bInterval              = 0,</span><br><span>         },</span><br><span>   // Notification endpoint descriptor</span><br><span>@@ -131,11 +125,9 @@</span><br><span>           .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_IN,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               PHONE_INT),</span><br><span style="color: hsl(120, 100%, 40%);">+                                           SIMTRACE_USB_EP_CARD_INT),</span><br><span>           .bmAttributes           = USBEndpointDescriptor_INTERRUPT,</span><br><span style="color: hsl(0, 100%, 40%);">-              .wMaxPacketSize = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                PHONE_INT),</span><br><span style="color: hsl(0, 100%, 40%);">-                                   USBEndpointDescriptor_MAXINTERRUPTSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+             .wMaxPacketSize = USBEndpointDescriptor_MAXINTERRUPTSIZE_FS,</span><br><span>                 .bInterval = 0x10,</span><br><span>   },</span><br><span>   DFURT_IF_DESCRIPTOR(1, 0),</span><br><span>@@ -205,9 +197,7 @@</span><br><span>                     USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_OUT,</span><br><span>                                                   CCID_EPT_DATA_OUT),</span><br><span>            .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(</span><br><span style="color: hsl(0, 100%, 40%);">-                                        CCID_EPT_DATA_OUT),</span><br><span style="color: hsl(0, 100%, 40%);">-                                     USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+                .wMaxPacketSize = USBEndpointDescriptor_MAXBULKSIZE_FS,</span><br><span>              .bInterval              = 0x00,</span><br><span>      },</span><br><span>   // Bulk-IN endpoint descriptor</span><br><span>@@ -218,9 +208,7 @@</span><br><span>                         USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN,</span><br><span>                                                    CCID_EPT_DATA_IN),</span><br><span>             .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(</span><br><span style="color: hsl(0, 100%, 40%);">-                                        CCID_EPT_DATA_IN),</span><br><span style="color: hsl(0, 100%, 40%);">-                                      USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+                .wMaxPacketSize = USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span>             .bInterval              = 0x00,</span><br><span>      },</span><br><span>   // Notification endpoint descriptor</span><br><span>@@ -231,9 +219,7 @@</span><br><span>                    USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN,</span><br><span>                                                    CCID_EPT_NOTIFICATION),</span><br><span>                .bmAttributes           = USBEndpointDescriptor_INTERRUPT,</span><br><span style="color: hsl(0, 100%, 40%);">-              .wMaxPacketSize = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(</span><br><span style="color: hsl(0, 100%, 40%);">-                                        CCID_EPT_NOTIFICATION),</span><br><span style="color: hsl(0, 100%, 40%);">-                                 USBEndpointDescriptor_MAXINTERRUPTSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+           .wMaxPacketSize = USBEndpointDescriptor_MAXINTERRUPTSIZE_FS,</span><br><span>                 .bInterval = 0x10,</span><br><span>   },</span><br><span>   DFURT_IF_DESCRIPTOR(1, 0),</span><br><span>@@ -282,8 +268,8 @@</span><br><span>             .bInterfaceNumber       = 0,</span><br><span>                 .bAlternateSetting      = 0,</span><br><span>                 .bNumEndpoints          = 3,</span><br><span style="color: hsl(0, 100%, 40%);">-            .bInterfaceClass        = 0xff,</span><br><span style="color: hsl(0, 100%, 40%);">-         .bInterfaceSubClass     = SIMTRACE_SUBCLASS_CARDEM,</span><br><span style="color: hsl(120, 100%, 40%);">+           .bInterfaceClass        = USB_CLASS_PROPRIETARY,</span><br><span style="color: hsl(120, 100%, 40%);">+              .bInterfaceSubClass     = SIMTRACE_CARDEM_USB_SUBCLASS,</span><br><span>              .bInterfaceProtocol     = 0,</span><br><span>                 .iInterface             = CARDEM_USIM1_INTF_STR,</span><br><span>     },</span><br><span>@@ -293,10 +279,9 @@</span><br><span>            .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_OUT,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              PHONE_DATAOUT),</span><br><span style="color: hsl(120, 100%, 40%);">+                                               SIMTRACE_CARDEM_USB_EP_USIM1_DATAOUT),</span><br><span>               .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize         = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(PHONE_DATAOUT),</span><br><span style="color: hsl(0, 100%, 40%);">-                                       USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+          .wMaxPacketSize         = USBEndpointDescriptor_MAXBULKSIZE_FS,</span><br><span>              .bInterval              = 0     /* Must be 0 for full-speed bulk endpoints */</span><br><span>        },</span><br><span>   /* Bulk-IN endpoint descriptor */</span><br><span>@@ -305,10 +290,9 @@</span><br><span>             .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_IN,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               PHONE_DATAIN),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                SIMTRACE_CARDEM_USB_EP_USIM1_DATAIN),</span><br><span>                .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize         = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(PHONE_DATAIN),</span><br><span style="color: hsl(0, 100%, 40%);">-                                        USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+          .wMaxPacketSize         = USBEndpointDescriptor_MAXBULKSIZE_FS,</span><br><span>              .bInterval              = 0     /* Must be 0 for full-speed bulk endpoints */</span><br><span>        },</span><br><span>   /* Notification endpoint descriptor */</span><br><span>@@ -317,10 +301,9 @@</span><br><span>                .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_IN,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               PHONE_INT),</span><br><span style="color: hsl(120, 100%, 40%);">+                                           SIMTRACE_CARDEM_USB_EP_USIM1_INT),</span><br><span>           .bmAttributes           = USBEndpointDescriptor_INTERRUPT,</span><br><span style="color: hsl(0, 100%, 40%);">-              .wMaxPacketSize         = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(PHONE_INT),</span><br><span style="color: hsl(0, 100%, 40%);">-                                           USBEndpointDescriptor_MAXINTERRUPTSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+             .wMaxPacketSize         = USBEndpointDescriptor_MAXINTERRUPTSIZE_FS,</span><br><span>                 .bInterval              = 0x10</span><br><span>       },</span><br><span> #ifdef CARDEMU_SECOND_UART</span><br><span>@@ -331,8 +314,8 @@</span><br><span>               .bInterfaceNumber       = 1,</span><br><span>                 .bAlternateSetting      = 0,</span><br><span>                 .bNumEndpoints          = 3,</span><br><span style="color: hsl(0, 100%, 40%);">-            .bInterfaceClass        = 0xff,</span><br><span style="color: hsl(0, 100%, 40%);">-         .bInterfaceSubClass     = SIMTRACE_SUBCLASS_CARDEM,</span><br><span style="color: hsl(120, 100%, 40%);">+           .bInterfaceClass        = USB_CLASS_PROPRIETARY,</span><br><span style="color: hsl(120, 100%, 40%);">+              .bInterfaceSubClass     = SIMTRACE_CARDEM_USB_SUBCLASS,</span><br><span>              .bInterfaceProtocol     = 0,</span><br><span>                 .iInterface             = CARDEM_USIM2_INTF_STR,</span><br><span>     },</span><br><span>@@ -342,10 +325,9 @@</span><br><span>            .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_OUT,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              CARDEM_USIM2_DATAOUT),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                SIMTRACE_CARDEM_USB_EP_USIM2_DATAOUT),</span><br><span>               .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize         = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(CARDEM_USIM2_DATAOUT),</span><br><span style="color: hsl(0, 100%, 40%);">-                                        USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+          .wMaxPacketSize         = USBEndpointDescriptor_MAXBULKSIZE_FS,</span><br><span>              .bInterval              = 0     /* Must be 0 for full-speed bulk endpoints */</span><br><span>        }</span><br><span>    ,</span><br><span>@@ -355,10 +337,9 @@</span><br><span>             .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_IN,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               CARDEM_USIM2_DATAIN),</span><br><span style="color: hsl(120, 100%, 40%);">+                                         SIMTRACE_CARDEM_USB_EP_USIM2_DATAIN),</span><br><span>                .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize         = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(CARDEM_USIM2_DATAIN),</span><br><span style="color: hsl(0, 100%, 40%);">-                                         USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+          .wMaxPacketSize         = USBEndpointDescriptor_MAXBULKSIZE_FS,</span><br><span>              .bInterval              = 0     /* Must be 0 for full-speed bulk endpoints */</span><br><span>        },</span><br><span>   /* Notification endpoint descriptor */</span><br><span>@@ -367,10 +348,9 @@</span><br><span>                .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_IN,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               CARDEM_USIM2_INT),</span><br><span style="color: hsl(120, 100%, 40%);">+                                            SIMTRACE_CARDEM_USB_EP_USIM2_INT),</span><br><span>           .bmAttributes           = USBEndpointDescriptor_INTERRUPT,</span><br><span style="color: hsl(0, 100%, 40%);">-              .wMaxPacketSize         = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(CARDEM_USIM2_INT),</span><br><span style="color: hsl(0, 100%, 40%);">-                                            USBEndpointDescriptor_MAXINTERRUPTSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+             .wMaxPacketSize         = USBEndpointDescriptor_MAXINTERRUPTSIZE_FS,</span><br><span>                 .bInterval              = 0x10,</span><br><span>      },</span><br><span>   DFURT_IF_DESCRIPTOR(2, 0),</span><br><span>@@ -466,9 +446,7 @@</span><br><span>                     USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_OUT,</span><br><span>                                                   CCID_EPT_DATA_OUT),</span><br><span>            .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(</span><br><span style="color: hsl(0, 100%, 40%);">-                                        CCID_EPT_DATA_OUT),</span><br><span style="color: hsl(0, 100%, 40%);">-                                     USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+                .wMaxPacketSize = USBEndpointDescriptor_MAXBULKSIZE_FS,</span><br><span>              .bInterval              = 0x00,</span><br><span>      },</span><br><span>   // Bulk-IN endpoint descriptor</span><br><span>@@ -479,9 +457,7 @@</span><br><span>                         USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN,</span><br><span>                                                    CCID_EPT_DATA_IN),</span><br><span>             .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(</span><br><span style="color: hsl(0, 100%, 40%);">-                                        CCID_EPT_DATA_IN),</span><br><span style="color: hsl(0, 100%, 40%);">-                                      USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+                .wMaxPacketSize = USBEndpointDescriptor_MAXBULKSIZE_FS,</span><br><span>              .bInterval              = 0x00,</span><br><span>      },</span><br><span>   // Notification endpoint descriptor</span><br><span>@@ -492,9 +468,7 @@</span><br><span>                    USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN,</span><br><span>                                                    CCID_EPT_NOTIFICATION),</span><br><span>                .bmAttributes           = USBEndpointDescriptor_INTERRUPT,</span><br><span style="color: hsl(0, 100%, 40%);">-              .wMaxPacketSize = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(</span><br><span style="color: hsl(0, 100%, 40%);">-                                        CCID_EPT_NOTIFICATION),</span><br><span style="color: hsl(0, 100%, 40%);">-                                 USBEndpointDescriptor_MAXINTERRUPTSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+           .wMaxPacketSize = USBEndpointDescriptor_MAXINTERRUPTSIZE_FS,</span><br><span>                 .bInterval = 0x10,</span><br><span>   },</span><br><span> </span><br><span>@@ -516,10 +490,9 @@</span><br><span>                .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_OUT,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              PHONE_DATAOUT),</span><br><span style="color: hsl(120, 100%, 40%);">+                                               SIMTRACE_USB_EP_PHONE_DATAOUT),</span><br><span>              .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize         = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(PHONE_DATAOUT),</span><br><span style="color: hsl(0, 100%, 40%);">-                                       USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+          .wMaxPacketSize         = USBEndpointDescriptor_MAXBULKSIZE_FS,</span><br><span>              .bInterval              = 0, /* Must be 0 for full-speed bulk endpoints */</span><br><span>   },</span><br><span>   /* Bulk-IN endpoint descriptor */</span><br><span>@@ -528,10 +501,9 @@</span><br><span>             .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_IN,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               PHONE_DATAIN),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                SIMTRACE_USB_EP_PHONE_DATAIN),</span><br><span>               .bmAttributes           = USBEndpointDescriptor_BULK,</span><br><span style="color: hsl(0, 100%, 40%);">-           .wMaxPacketSize         = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(PHONE_DATAIN),</span><br><span style="color: hsl(0, 100%, 40%);">-                                        USBEndpointDescriptor_MAXBULKSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+          .wMaxPacketSize         = USBEndpointDescriptor_MAXBULKSIZE_FS,</span><br><span>              .bInterval              = 0, /* Must be 0 for full-speed bulk endpoints */</span><br><span>   },</span><br><span>   /* Notification endpoint descriptor */</span><br><span>@@ -540,10 +512,9 @@</span><br><span>                .bDescriptorType        = USBGenericDescriptor_ENDPOINT,</span><br><span>             .bEndpointAddress       = USBEndpointDescriptor_ADDRESS(</span><br><span>                                             USBEndpointDescriptor_IN,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               PHONE_INT),</span><br><span style="color: hsl(120, 100%, 40%);">+                                           SIMTRACE_USB_EP_PHONE_INT),</span><br><span>          .bmAttributes           = USBEndpointDescriptor_INTERRUPT,</span><br><span style="color: hsl(0, 100%, 40%);">-              .wMaxPacketSize         = MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(PHONE_INT),</span><br><span style="color: hsl(0, 100%, 40%);">-                                           USBEndpointDescriptor_MAXINTERRUPTSIZE_FS),</span><br><span style="color: hsl(120, 100%, 40%);">+             .wMaxPacketSize         = USBEndpointDescriptor_MAXINTERRUPTSIZE_FS,</span><br><span>                 .bInterval              = 0x10</span><br><span>       },</span><br><span>   DFURT_IF_DESCRIPTOR(2, 0),</span><br><span>@@ -573,7 +544,7 @@</span><br><span>     .bDeviceClass           = 0,</span><br><span>         .bDeviceSubClass        = 0,</span><br><span>         .bDeviceProtocol        = 0,</span><br><span style="color: hsl(0, 100%, 40%);">-    .bMaxPacketSize0        = BOARD_USB_ENDPOINTS_MAXPACKETSIZE(0),</span><br><span style="color: hsl(120, 100%, 40%);">+       .bMaxPacketSize0        = 64,</span><br><span>        .idVendor               = BOARD_USB_VENDOR_ID,</span><br><span>       .idProduct              = BOARD_USB_PRODUCT_ID,</span><br><span>      .bcdDevice              = 2,    /* Release number */</span><br><span>diff --git a/firmware/libcommon/source/usb_buf.c b/firmware/libcommon/source/usb_buf.c</span><br><span>index 848fd24..b8d4dd7 100644</span><br><span>--- a/firmware/libcommon/source/usb_buf.c</span><br><span>+++ b/firmware/libcommon/source/usb_buf.c</span><br><span>@@ -1,6 +1,7 @@</span><br><span> #include "board.h"</span><br><span> #include "trace.h"</span><br><span> #include "usb_buf.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "simtrace_usb.h"</span><br><span> </span><br><span> #include <osmocom/core/linuxlist.h></span><br><span> #include <osmocom/core/msgb.h></span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9869">change 9869</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/9869"/><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-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Iba81f32a92c68a973e8e7adbc4c2a1064ba5290f </div>
<div style="display:none"> Gerrit-Change-Number: 9869 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Kévin Redon <kredon@sysmocom.de> </div>