summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/mimxrt/Makefile5
-rw-r--r--ports/mimxrt/mpconfigport.h8
-rw-r--r--ports/mimxrt/tusb_port.c138
-rw-r--r--ports/mimxrt/usbd.c (renamed from ports/mimxrt/tusb_config.h)27
4 files changed, 28 insertions, 150 deletions
diff --git a/ports/mimxrt/Makefile b/ports/mimxrt/Makefile
index e98073d33..3a9550cc9 100644
--- a/ports/mimxrt/Makefile
+++ b/ports/mimxrt/Makefile
@@ -78,6 +78,7 @@ INC += -I$(TOP)/lib/oofatfs
INC += -I$(TOP)/lib/tinyusb/hw
INC += -I$(TOP)/lib/tinyusb/hw/bsp/teensy_40
INC += -I$(TOP)/lib/tinyusb/src
+INC += -I$(TOP)/shared/tinyusb
INC += -I.
INC += -Ihal
@@ -215,7 +216,7 @@ SRC_C += \
sdio.c \
systick.c \
ticks.c \
- tusb_port.c \
+ usbd.c \
SHARED_SRC_C += \
shared/libc/printf.c \
@@ -234,6 +235,7 @@ SHARED_SRC_C += \
shared/timeutils/timeutils.c \
shared/tinyusb/mp_usbd.c \
shared/tinyusb/mp_usbd_cdc.c \
+ shared/tinyusb/mp_usbd_descriptor.c \
# Set flash driver name, base address and internal flash flag, based on the flash type.
ifeq ($(MICROPY_HW_FLASH_TYPE),$(filter $(MICROPY_HW_FLASH_TYPE),qspi_nor_flash))
@@ -343,6 +345,7 @@ CFLAGS += \
-DBOARD_$(BOARD) \
-DBOARD_FLASH_SIZE=$(MICROPY_HW_FLASH_SIZE) \
-DCFG_TUSB_MCU=OPT_MCU_MIMXRT1XXX \
+ -DCFG_TUD_MAX_SPEED=OPT_MODE_HIGH_SPEED \
-DCLOCK_CONFIG_H='<boards/$(MCU_SERIES)_clock_config.h>' \
-DCPU_$(MCU_SERIES)$(MCU_CORE) \
-DCPU_$(MCU_VARIANT) \
diff --git a/ports/mimxrt/mpconfigport.h b/ports/mimxrt/mpconfigport.h
index 5ef6695c1..31444e498 100644
--- a/ports/mimxrt/mpconfigport.h
+++ b/ports/mimxrt/mpconfigport.h
@@ -188,6 +188,14 @@ extern const struct _mp_obj_type_t mp_network_cyw43_type;
#define MP_STATE_PORT MP_STATE_VM
// Miscellaneous settings
+#ifndef MICROPY_HW_USB_VID
+#define MICROPY_HW_USB_VID (0xf055)
+#endif
+
+#ifndef MICROPY_HW_USB_PID
+#define MICROPY_HW_USB_PID (0x9802)
+#endif
+
#ifndef MICROPY_EVENT_POLL_HOOK
#define MICROPY_EVENT_POLL_HOOK \
do { \
diff --git a/ports/mimxrt/tusb_port.c b/ports/mimxrt/tusb_port.c
deleted file mode 100644
index f81200e2c..000000000
--- a/ports/mimxrt/tusb_port.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Damien P. George
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "tusb.h"
-#include "py/mphal.h"
-
-#ifndef MICROPY_HW_USB_VID
-#define MICROPY_HW_USB_VID (0xf055)
-#endif
-
-#ifndef MICROPY_HW_USB_PID
-#define MICROPY_HW_USB_PID (0x9802)
-#endif
-
-#ifndef MICROPY_HW_USB_MANUFACTURER_STRING
-#define MICROPY_HW_USB_MANUFACTURER_STRING ("MicroPython")
-#endif
-
-#define USBD_DESC_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN)
-#define USBD_MAX_POWER_MA (250)
-
-#define USBD_ITF_CDC (0) // needs 2 interfaces
-#define USBD_ITF_MAX (2)
-
-#define USBD_CDC_EP_CMD (0x81)
-#define USBD_CDC_EP_OUT (0x02)
-#define USBD_CDC_EP_IN (0x82)
-#define USBD_CDC_CMD_MAX_SIZE (8)
-#define USBD_CDC_IN_OUT_MAX_SIZE (512)
-
-#define USBD_STR_0 (0x00)
-#define USBD_STR_MANUF (0x01)
-#define USBD_STR_PRODUCT (0x02)
-#define USBD_STR_SERIAL (0x03)
-#define USBD_STR_CDC (0x04)
-
-// Note: descriptors returned from callbacks must exist long enough for transfer to complete
-
-static const tusb_desc_device_t usbd_desc_device = {
- .bLength = sizeof(tusb_desc_device_t),
- .bDescriptorType = TUSB_DESC_DEVICE,
- .bcdUSB = 0x0200,
- .bDeviceClass = TUSB_CLASS_MISC,
- .bDeviceSubClass = MISC_SUBCLASS_COMMON,
- .bDeviceProtocol = MISC_PROTOCOL_IAD,
- .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE,
- .idVendor = MICROPY_HW_USB_VID,
- .idProduct = MICROPY_HW_USB_PID,
- .bcdDevice = 0x0100,
- .iManufacturer = USBD_STR_MANUF,
- .iProduct = USBD_STR_PRODUCT,
- .iSerialNumber = USBD_STR_SERIAL,
- .bNumConfigurations = 1,
-};
-
-static const uint8_t usbd_desc_cfg[USBD_DESC_LEN] = {
- TUD_CONFIG_DESCRIPTOR(1, USBD_ITF_MAX, USBD_STR_0, USBD_DESC_LEN,
- TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, USBD_MAX_POWER_MA),
-
- TUD_CDC_DESCRIPTOR(USBD_ITF_CDC, USBD_STR_CDC, USBD_CDC_EP_CMD,
- USBD_CDC_CMD_MAX_SIZE, USBD_CDC_EP_OUT, USBD_CDC_EP_IN, USBD_CDC_IN_OUT_MAX_SIZE),
-};
-
-static const char *const usbd_desc_str[] = {
- [USBD_STR_MANUF] = MICROPY_HW_USB_MANUFACTURER_STRING,
- [USBD_STR_PRODUCT] = MICROPY_HW_BOARD_NAME,
- [USBD_STR_SERIAL] = "00000000000000000000",
- [USBD_STR_CDC] = "Board CDC",
-};
-
-const uint8_t *tud_descriptor_device_cb(void) {
- return (const uint8_t *)&usbd_desc_device;
-}
-
-const uint8_t *tud_descriptor_configuration_cb(uint8_t index) {
- (void)index;
- return usbd_desc_cfg;
-}
-
-const uint16_t *tud_descriptor_string_cb(uint8_t index, uint16_t langid) {
- #define DESC_STR_MAX (20)
- static uint16_t desc_str[DESC_STR_MAX];
- static const char hexchr[16] = "0123456789ABCDEF";
-
- memset(desc_str, 0, sizeof(desc_str));
-
- uint8_t len;
- if (index == 0) {
- desc_str[1] = 0x0409; // supported language is English
- len = 1;
- } else {
- if (index >= sizeof(usbd_desc_str) / sizeof(usbd_desc_str[0])) {
- return NULL;
- }
- if (index == USBD_STR_SERIAL) {
- uint8_t uid[8];
- mp_hal_get_unique_id(uid);
- // store it as a hex string
- for (len = 0; len < 16; len += 2) {
- desc_str[1 + len] = hexchr[uid[len / 2] >> 4];
- desc_str[1 + len + 1] = hexchr[uid[len / 2] & 0x0f];
- }
- } else {
- const char *str = usbd_desc_str[index];
- for (len = 0; len < DESC_STR_MAX - 1 && str[len]; ++len) {
- desc_str[1 + len] = str[len];
- }
- }
- }
-
- // first byte is length (including header), second byte is string type
- desc_str[0] = (TUSB_DESC_STRING << 8) | (2 * len + 2);
-
- return desc_str;
-}
diff --git a/ports/mimxrt/tusb_config.h b/ports/mimxrt/usbd.c
index 607f36446..47126ddc0 100644
--- a/ports/mimxrt/tusb_config.h
+++ b/ports/mimxrt/usbd.c
@@ -1,7 +1,9 @@
/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
* The MIT License (MIT)
*
- * Copyright (c) 2020 Jim Mussared
+ * Copyright (c) 2024 Damien P. George
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -20,18 +22,21 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
- *
*/
-#ifndef MICROPY_INCLUDED_MIMXRT_TUSB_CONFIG_H
-#define MICROPY_INCLUDED_MIMXRT_TUSB_CONFIG_H
-#define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED)
+#include "py/mpconfig.h"
+
+#if MICROPY_HW_ENABLE_USBDEV
-#define CFG_TUSB_OS (OPT_OS_NONE)
+#include "py/mphal.h"
+#include "mp_usbd.h"
+#include "string.h"
+#include "tusb.h"
-#define CFG_TUD_CDC (1)
-#define CFG_TUD_CDC_RX_BUFSIZE (512)
-#define CFG_TUD_CDC_TX_BUFSIZE (512)
-#define CFG_TUD_CDC_PERSISTENT_TX_BUFF (1)
+void mp_usbd_port_get_serial_number(char *serial_buf) {
+ uint8_t uid[8];
+ mp_hal_get_unique_id(uid);
+ mp_usbd_hex_str(serial_buf, uid, sizeof(uid));
+}
-#endif // MICROPY_INCLUDED_MIMXRT_TUSB_CONFIG_H
+#endif