tfx2001 пре 4 година
родитељ
комит
83aa0cf8f6

+ 25 - 0
rt-thread/bsp/stm32/drv_tinyusb.c

@@ -11,6 +11,28 @@
 #include <tusb.h>
 #include <drv_config.h>
 
+#define to_hex_digit(x) ((x) < 10 ? '0' + (x) : 'A' + (x) - 10)
+
+static void _write_hex_chars(char *dest, uint32_t val)
+{
+    for (int i = 8; i > 0; i--)
+    {
+        uint8_t x = val >> 28u;
+        *dest++ = to_hex_digit(x);
+        val <<= 4u;
+    }
+}
+
+/* USB device serial number */
+extern char _serial_number[25];
+
+static void _generate_serial_number()
+{
+    _write_hex_chars(_serial_number, HAL_GetUIDw0());
+    _write_hex_chars(_serial_number + 8, HAL_GetUIDw1());
+    _write_hex_chars(_serial_number + 16, HAL_GetUIDw2());
+}
+
 int tusb_board_init(void)
 {
     PCD_HandleTypeDef hpcd;
@@ -29,6 +51,9 @@ int tusb_board_init(void)
     /* USB interrupt Init */
     HAL_NVIC_SetPriority(USBD_IRQ_TYPE, 2, 0);
     HAL_NVIC_EnableIRQ(USBD_IRQ_TYPE);
+
+    _generate_serial_number();
+
     return 0;
 }
 

+ 10 - 0
rt-thread/example/cdc_example.c

@@ -1,3 +1,13 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2021-12-04     tfx2001      first version
+ */
+
 #include <stdint.h>
 #include <rtthread.h>
 #include <tusb.h>

+ 10 - 0
rt-thread/port/hid_device_port.c

@@ -1,3 +1,13 @@
+/*
+ * Copyright (c) 2006-2022, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2022-01-15     tfx2001      first version
+ */
+
 #include <tusb.h>
 
 TU_ATTR_WEAK uint16_t tud_hid_get_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen)

+ 5 - 20
rt-thread/port/msc_device_port.c

@@ -1,26 +1,11 @@
 /*
- * The MIT License (MIT)
+ * Copyright (c) 2006-2022, RT-Thread Development Team
  *
- * Copyright (c) 2021 tfx2001 (2479727366@qq.com)
- *
- * 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.
+ * SPDX-License-Identifier: Apache-2.0
  *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2021-10-20     tfx2001      first version
  */
 
 #include <tusb.h>

+ 5 - 24
rt-thread/tinyusb_port.c

@@ -1,30 +1,13 @@
 /*
- * The MIT License (MIT)
+ * Copyright (c) 2006-2022, RT-Thread Development Team
  *
- * Copyright (c) 2021 RT-Thread Development Team (rt-thread.io)
- *
- * 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.
+ * SPDX-License-Identifier: Apache-2.0
  *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2021-10-20     tfx2001      first version
  */
 
-#ifdef __RTTHREAD__
-
 #include <rtthread.h>
 #define DBG_TAG    "TinyUSB"
 #define DBG_LVL    DBG_INFO
@@ -75,5 +58,3 @@ static int init_tinyusb(void) {
     return 0;
 }
 INIT_COMPONENT_EXPORT(init_tinyusb);
-
-#endif

+ 28 - 38
rt-thread/tusb_config.h

@@ -1,26 +1,11 @@
 /*
- * The MIT License (MIT)
+ * Copyright (c) 2006-2022, RT-Thread Development Team
  *
- * Copyright (c) 2021 RT-Thread Development Team (rt-thread.io)
- *
- * 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.
+ * SPDX-License-Identifier: Apache-2.0
  *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2021-10-20     tfx2001      first version
  */
 
 #ifndef _TUSB_CONFIG_H_
@@ -46,6 +31,8 @@ extern "C" {
 #define CFG_TUSB_MCU    OPT_MCU_STM32L4
 #elif defined(SOC_NRF52840)
 #define CFG_TUSB_MCU    OPT_MCU_NRF5X
+#elif defined(SOC_HPM6000)
+#define CFG_TUSB_MCU    OPT_MCU_HPM
 #else
 #error "Not support for current MCU"
 #endif
@@ -59,23 +46,14 @@ extern "C" {
 #define CFG_TUSB_DEBUG_PRINTF rt_kprintf
 #endif /* CFG_TUSB_DEBUG */
 
-// RHPort number used for device can be defined by board.mk, default to port 0
 #ifndef BOARD_DEVICE_RHPORT_NUM
-#define BOARD_DEVICE_RHPORT_NUM     0
+#define BOARD_DEVICE_RHPORT_NUM     PKG_TINYUSB_RHPORT_NUM
 #endif
 
-// RHPort max operational speed can defined by board.mk
-// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed
 #ifndef BOARD_DEVICE_RHPORT_SPEED
-#if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \
-       CFG_TUSB_MCU == OPT_MCU_NUC505  || CFG_TUSB_MCU == OPT_MCU_CXD56)
-#define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_HIGH_SPEED
-#else
-#define BOARD_DEVICE_RHPORT_SPEED   OPT_MODE_FULL_SPEED
-#endif
+#define BOARD_DEVICE_RHPORT_SPEED   PKG_TINYUSB_DEVICE_PORT_SPEED
 #endif
 
-// Device mode with rhport and speed defined by board.mk
 #if   BOARD_DEVICE_RHPORT_NUM == 0
 #define CFG_TUSB_RHPORT0_MODE     (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED)
 #elif BOARD_DEVICE_RHPORT_NUM == 1
@@ -92,11 +70,11 @@ extern "C" {
  * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4)))
  */
 #ifndef CFG_TUSB_MEM_SECTION
-#define CFG_TUSB_MEM_SECTION
+#define CFG_TUSB_MEM_SECTION        RT_SECTION(PKG_TINYUSB_MEM_SECTION)
 #endif
 
 #ifndef CFG_TUSB_MEM_ALIGN
-#define CFG_TUSB_MEM_ALIGN          ALIGN(4)
+#define CFG_TUSB_MEM_ALIGN          ALIGN(PKG_TINYUSB_MEM_ALIGN)
 #endif
 
 //--------------------------------------------------------------------
@@ -104,16 +82,28 @@ extern "C" {
 //--------------------------------------------------------------------
 
 #ifndef CFG_TUD_ENDPOINT0_SIZE
-#define CFG_TUD_ENDPOINT0_SIZE    64
+#define CFG_TUD_ENDPOINT0_SIZE        PKG_TINYUSB_EDPT0_SIZE
 #endif
 
 // CDC FIFO size of TX and RX
-#define CFG_TUD_CDC_RX_BUFSIZE    64
-#define CFG_TUD_CDC_TX_BUFSIZE    64
+#define CFG_TUD_CDC_RX_BUFSIZE        PKG_TINYUSB_DEVICE_CDC_RX_BUFSIZE
+#define CFG_TUD_CDC_TX_BUFSIZE        PKG_TINYUSB_DEVICE_CDC_TX_BUFSIZE
+
+#define CFG_TUD_MSC_EP_BUFSIZE        PKG_TINYUSB_DEVICE_MSC_EP_BUFSIZE
 
-#define CFG_TUD_MSC_EP_BUFSIZE    4096
+#define CFG_TUD_HID_EP_BUFSIZE        PKG_TINYUSB_DEVICE_HID_EP_BUFSIZE
 
-#define CFG_TUD_HID_EP_BUFSIZE    16
+#ifndef PKG_TINYUSB_DEVICE_CDC_STRING
+#define PKG_TINYUSB_DEVICE_CDC_STRING ""
+#endif
+
+#ifndef PKG_TINYUSB_DEVICE_MSC_STRING
+#define PKG_TINYUSB_DEVICE_MSC_STRING ""
+#endif
+
+#ifndef PKG_TINYUSB_DEVICE_HID_STRING
+#define PKG_TINYUSB_DEVICE_HID_STRING ""
+#endif
 
 
 #ifdef __cplusplus

+ 49 - 62
rt-thread/usb_descriptor.c

@@ -1,26 +1,11 @@
 /*
- * The MIT License (MIT)
+ * Copyright (c) 2006-2022, RT-Thread Development Team
  *
- * Copyright (c) 2019 Ha Thach (tinyusb.org)
- *
- * 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.
+ * SPDX-License-Identifier: Apache-2.0
  *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2021-10-20     tfx2001      first version
  */
 
 #include "tusb.h"
@@ -29,7 +14,7 @@
 //--------------------------------------------------------------------+
 // Device Descriptors
 //--------------------------------------------------------------------+
-tusb_desc_device_t const desc_device =
+static tusb_desc_device_t const desc_device =
 {
         .bLength            = sizeof(tusb_desc_device_t),
         .bDescriptorType    = TUSB_DESC_DEVICE,
@@ -52,40 +37,11 @@ tusb_desc_device_t const desc_device =
 
 // Invoked when received GET DEVICE DESCRIPTOR
 // Application return pointer to descriptor
-uint8_t const *tud_descriptor_device_cb(void)
+TU_ATTR_WEAK uint8_t const *tud_descriptor_device_cb(void)
 {
     return (uint8_t const *) &desc_device;
 }
 
-//--------------------------------------------------------------------+
-// HID Report Descriptor
-//--------------------------------------------------------------------+
-
-uint8_t const desc_hid_report[] =
-{
-#ifdef PKG_TINYUSB_DEVICE_HID_KEYBOARD
-    TUD_HID_REPORT_DESC_KEYBOARD(HID_REPORT_ID(REPORT_ID_KEYBOARD)),
-#endif
-#ifdef PKG_TINYUSB_DEVICE_HID_MOUSE
-    TUD_HID_REPORT_DESC_MOUSE(HID_REPORT_ID(REPORT_ID_MOUSE)),
-#endif
-#ifdef PKG_TINYUSB_DEVICE_HID_CONSUMER
-    TUD_HID_REPORT_DESC_CONSUMER(HID_REPORT_ID(REPORT_ID_CONSUMER_CONTROL)),
-#endif
-#ifdef PKG_TINYUSB_DEVICE_HID_GAMEPAD
-    TUD_HID_REPORT_DESC_GAMEPAD(HID_REPORT_ID(REPORT_ID_GAMEPAD))
-#endif
-};
-
-// Invoked when received GET HID REPORT DESCRIPTOR
-// Application return pointer to descriptor
-// Descriptor contents must exist long enough for transfer to complete
-uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance)
-{
-    (void)instance;
-    return desc_hid_report;
-}
-
 //--------------------------------------------------------------------+
 // Configuration Descriptor
 //--------------------------------------------------------------------+
@@ -119,7 +75,7 @@ enum
 
 #define EPNUM_HID         0x84
 
-uint8_t const desc_fs_configuration[] =
+static uint8_t const desc_fs_configuration[] =
 {
     TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100),
 #if CFG_TUD_CDC
@@ -136,7 +92,7 @@ uint8_t const desc_fs_configuration[] =
 // Invoked when received GET CONFIGURATION DESCRIPTOR
 // Application return pointer to descriptor
 // Descriptor contents must exist long enough for transfer to complete
-uint8_t const *tud_descriptor_configuration_cb(uint8_t index)
+TU_ATTR_WEAK uint8_t const *tud_descriptor_configuration_cb(uint8_t index)
 {
     (void) index; // for multiple configurations
 
@@ -148,22 +104,24 @@ uint8_t const *tud_descriptor_configuration_cb(uint8_t index)
 //--------------------------------------------------------------------+
 
 // array of pointer to string descriptors
-char const *string_desc_arr[] =
+char _serial_number[25] = "123456";
+
+static char *string_desc_arr[] =
 {
-        (const char[]) {0x09, 0x04},   // 0: is supported language is English (0x0409)
-        "TinyUSB",                     // 1: Manufacturer
-        "TinyUSB Device",              // 2: Product
-        "123456",                      // 3: Serials, should use chip ID
-        "TinyUSB CDC",
-        "TinyUSB MSC",
-        "TinyUSB HID",
+    (char[]) {0x09, 0x04},        // 0: is supported language is English (0x0409)
+    PKG_TINYUSB_DEVICE_MANUFACTURER,    // 1: Manufacturer
+    PKG_TINYUSB_DEVICE_PRODUCT,         // 2: Product
+    _serial_number,                    // 3: Serials, should use chip ID
+    PKG_TINYUSB_DEVICE_CDC_STRING,
+    PKG_TINYUSB_DEVICE_MSC_STRING,
+    PKG_TINYUSB_DEVICE_HID_STRING,
 };
 
 static uint16_t desc_str[32];
 
 // Invoked when received GET STRING DESCRIPTOR request
 // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
-uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid)
+TU_ATTR_WEAK uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid)
 {
     (void) langid;
 
@@ -199,3 +157,32 @@ uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid)
 
     return desc_str;
 }
+
+//--------------------------------------------------------------------+
+// HID Report Descriptor
+//--------------------------------------------------------------------+
+
+static uint8_t const desc_hid_report[] =
+{
+#ifdef PKG_TINYUSB_DEVICE_HID_KEYBOARD
+    TUD_HID_REPORT_DESC_KEYBOARD(HID_REPORT_ID(REPORT_ID_KEYBOARD)),
+#endif
+#ifdef PKG_TINYUSB_DEVICE_HID_MOUSE
+    TUD_HID_REPORT_DESC_MOUSE(HID_REPORT_ID(REPORT_ID_MOUSE)),
+#endif
+#ifdef PKG_TINYUSB_DEVICE_HID_CONSUMER
+    TUD_HID_REPORT_DESC_CONSUMER(HID_REPORT_ID(REPORT_ID_CONSUMER_CONTROL)),
+#endif
+#ifdef PKG_TINYUSB_DEVICE_HID_GAMEPAD
+    TUD_HID_REPORT_DESC_GAMEPAD(HID_REPORT_ID(REPORT_ID_GAMEPAD))
+#endif
+};
+
+// Invoked when received GET HID REPORT DESCRIPTOR
+// Application return pointer to descriptor
+// Descriptor contents must exist long enough for transfer to complete
+TU_ATTR_WEAK uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance)
+{
+    (void)instance;
+    return desc_hid_report;
+}

+ 13 - 3
rt-thread/usb_descriptor.h

@@ -1,5 +1,15 @@
-#ifndef USB_DESCRIPTORS_H_
-#define USB_DESCRIPTORS_H_
+/*
+ * Copyright (c) 2006-2022, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2022-01-15     tfx2001      first version
+ */
+
+#ifndef _USB_DESCRIPTORS_H_
+#define _USB_DESCRIPTORS_H_
 
 #include <rtconfig.h>
 
@@ -21,4 +31,4 @@ enum
     REPORT_ID_COUNT
 };
 
-#endif /* USB_DESCRIPTORS_H_ */
+#endif /* _USB_DESCRIPTORS_H_ */