This is an automated email from the ASF dual-hosted git repository. jerzy pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-core.git
commit 371c3d0556c7e7b1a38a6c6a1e7f7fb2ee04680d Author: Jerzy Kasenberg <jerzy.kasenb...@codecoup.pl> AuthorDate: Thu Apr 30 14:57:53 2020 +0200 tinyusb: Add package for standard descriptors CDC,HID --- hw/usb/tinyusb/README.md | 12 + hw/usb/tinyusb/nrf5x/include/tusb_hw.h | 50 ++++ hw/usb/tinyusb/pkg.yml | 11 + .../tinyusb/std_descriptors/include/tusb_config.h | 91 +++++++ hw/usb/tinyusb/{ => std_descriptors}/pkg.yml | 21 +- .../tinyusb/std_descriptors/src/std_descriptors.c | 261 +++++++++++++++++++++ hw/usb/tinyusb/std_descriptors/syscfg.yml | 121 ++++++++++ hw/usb/tinyusb/stm32_fsdev/include/tusb_hw.h | 50 ++++ hw/usb/tinyusb/synopsys/include/tusb_hw.h | 48 ++++ hw/usb/tinyusb/syscfg.yml | 5 + 10 files changed, 656 insertions(+), 14 deletions(-) diff --git a/hw/usb/tinyusb/README.md b/hw/usb/tinyusb/README.md index 9c4d160..5142326 100644 --- a/hw/usb/tinyusb/README.md +++ b/hw/usb/tinyusb/README.md @@ -34,3 +34,15 @@ This dependency will start USB stack task. pkg.deps: - "@apache-mynewt-core/hw/usb/tinyusb" ``` + +To easy add support for CDC or HID class device simply add +**hw/usb/tinyusb/std_descriptors** package to project +```yaml +pkg.deps: + - "@apache-mynewt-core/hw/usb/tinyusb/std_descriptors" +``` +Vendor and product ID must be specified in **syscfg.vals:** section +```yaml + USBD_VID: 0xABCD + USBD_PID: 0x1234 +``` diff --git a/hw/usb/tinyusb/nrf5x/include/tusb_hw.h b/hw/usb/tinyusb/nrf5x/include/tusb_hw.h index c3a280f..682e08b 100755 --- a/hw/usb/tinyusb/nrf5x/include/tusb_hw.h +++ b/hw/usb/tinyusb/nrf5x/include/tusb_hw.h @@ -22,4 +22,54 @@ #define CFG_TUSB_MCU OPT_MCU_NRF5X +#include <syscfg/syscfg.h> + +#if defined(MYNEWT_VAL_USBD_CDC_NOTIFY_EP) +#define USBD_CDC_NOTIFY_EP MYNEWT_VAL(USBD_CDC_NOTIFY_EP) +#else +#define USBD_CDC_NOTIFY_EP 0x81 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_NOTIFY_EP_SIZE) +#define USBD_CDC_NOTIFY_EP_SIZE MYNEWT_VAL(USBD_CDC_NOTIFY_EP_SIZE) +#else +#define USBD_CDC_NOTIFY_EP_SIZE 0x08 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_DATA_OUT_EP) +#define USBD_CDC_DATA_OUT_EP MYNEWT_VAL(USBD_CDC_DATA_OUT_EP) +#else +#define USBD_CDC_DATA_OUT_EP 0x02 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_DATA_IN_EP) +#define USBD_CDC_DATA_IN_EP MYNEWT_VAL(USBD_CDC_DATA_IN_EP) +#else +#define USBD_CDC_DATA_IN_EP 0x82 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_DATA_EP_SIZE) +#define USBD_CDC_DATA_EP_SIZE MYNEWT_VAL(USBD_CDC_DATA_EP_SIZE) +#else +#define USBD_CDC_DATA_EP_SIZE 0x40 +#endif + +#if defined(MYNEWT_VAL_USBD_HID_REPORT_EP) +#define USBD_HID_REPORT_EP MYNEWT_VAL(USBD_HID_REPORT_EP) +#else +#define USBD_HID_REPORT_EP 0x83 +#endif + +#if defined(MYNEWT_VAL_USBD_HID_REPORT_EP_SIZE) +#define USBD_HID_REPORT_EP_SIZE MYNEWT_VAL(USBD_HID_REPORT_EP_SIZE) +#else +#define USBD_HID_REPORT_EP_SIZE 0x10 +#endif + +#if defined(MYNEWT_VAL_USBD_HID_REPORT_EP_INTERVAL) +#define USBD_HID_REPORT_EP_INTERVAL MYNEWT_VAL(USBD_HID_REPORT_EP_INTERVAL) +#else +#define USBD_HID_REPORT_EP_INTERVAL 10 +#endif + #endif diff --git a/hw/usb/tinyusb/pkg.yml b/hw/usb/tinyusb/pkg.yml index 2ff9a3f..aeeaa94 100644 --- a/hw/usb/tinyusb/pkg.yml +++ b/hw/usb/tinyusb/pkg.yml @@ -36,5 +36,16 @@ pkg.deps: pkg.init: tinyusb_start: 'MYNEWT_VAL(USBD_SYSINIT_STAGE)' +pkg.deps.USBD_STD_DESCRIPTORS: + - "@apache-mynewt-core/hw/usb/tinyusb/std_descriptors" +pkg.deps.'MCU_TARGET == "nRF52840"': + - "@apache-mynewt-core/hw/usb/tinyusb/nrf5x" +pkg.deps.MCU_STM32F4: + - "@apache-mynewt-core/hw/usb/tinyusb/synopsys" +pkg.deps.MCU_STM32L4: + - "@apache-mynewt-core/hw/usb/tinyusb/synopsys" +pkg.deps.MCU_STM32F1: + - "@apache-mynewt-core/hw/usb/tinyusb/stm32_fsdev" + pkg.req_apis: - TINYUSB_HW_INIT diff --git a/hw/usb/tinyusb/std_descriptors/include/tusb_config.h b/hw/usb/tinyusb/std_descriptors/include/tusb_config.h new file mode 100755 index 0000000..3a8310d --- /dev/null +++ b/hw/usb/tinyusb/std_descriptors/include/tusb_config.h @@ -0,0 +1,91 @@ +/* + * The MIT License (MIT) + * + * 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. + * + */ + +#ifndef _TUSB_CONFIG_H_ +#define _TUSB_CONFIG_H_ + +#include "syscfg/syscfg.h" + +#ifdef __cplusplus +extern "C" { +#endif +/** + * COMMON CONFIGURATION + */ + +#include <tusb_hw.h> + +/* defined by compiler flags for flexibility */ +#ifndef CFG_TUSB_MCU +#error CFG_TUSB_MCU must be defined +#endif + +#define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE + +#define CFG_TUSB_OS OPT_OS_MYNEWT +#define CFG_TUSB_DEBUG 0 + +/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. + * Tinyusb use follows macros to declare transferring memory so that they can be put + * into those specific section. + * e.g + * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) + * - CFG_TUSB_MEM_ALIGN : __attribute__ ((aligned(4))) + */ +#ifndef CFG_TUSB_MEM_SECTION +#define CFG_TUSB_MEM_SECTION +#endif + +#ifndef CFG_TUSB_MEM_ALIGN +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#endif + +/** + * DEVICE CONFIGURATION + */ +#define CFG_TUD_ENDPOINT0_SIZE MYNEWT_VAL(USBD_EP0_SIZE) + +/* ------------- CLASS ------------- */ +#define CFG_TUD_CDC MYNEWT_VAL(USBD_CDC) +#define CFG_TUD_HID MYNEWT_VAL(USBD_HID) +#define CFG_TUD_MSC 0 +#define CFG_TUD_MIDI 0 +#define CFG_TUD_VENDOR 0 +#define CFG_TUD_USBTMC 0 +#define CFG_TUD_DFU_RT 0 +#define CFG_TUD_NET 0 + +/* CDC FIFO size of TX and RX */ +#define CFG_TUD_CDC_RX_BUFSIZE 64 +#define CFG_TUD_CDC_TX_BUFSIZE 64 + +/* HID buffer size Should be sufficient to hold ID (if any) + Data */ +#define CFG_TUD_HID_BUFSIZE 16 + +#ifdef __cplusplus +} +#endif + +#endif /* _TUSB_CONFIG_H_ */ diff --git a/hw/usb/tinyusb/pkg.yml b/hw/usb/tinyusb/std_descriptors/pkg.yml similarity index 75% copy from hw/usb/tinyusb/pkg.yml copy to hw/usb/tinyusb/std_descriptors/pkg.yml index 2ff9a3f..5a68cda 100644 --- a/hw/usb/tinyusb/pkg.yml +++ b/hw/usb/tinyusb/std_descriptors/pkg.yml @@ -6,7 +6,7 @@ # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, @@ -17,24 +17,17 @@ # under the License. # -pkg.name: hw/usb/tinyusb -pkg.description: > - Package provides task for TinyUSB. - This package requires API TINYUSB_HW_INIT that will - provide function tinyusb_hardware_init(). - +pkg.name: hw/usb/tinyusb/std_descriptors +pkg.description: TinyUSB standard descriptor package pkg.author: "Apache Mynewt <d...@mynewt.apache.org>" pkg.homepage: "http://mynewt.apache.org/" pkg.keywords: - usb - tinyusb + - CDC + - HID + - MSC pkg.deps: - "@apache-mynewt-core/kernel/os" - - "@tinyusb/tinyusb" - -pkg.init: - tinyusb_start: 'MYNEWT_VAL(USBD_SYSINIT_STAGE)' - -pkg.req_apis: - - TINYUSB_HW_INIT + - "@apache-mynewt-core/hw/usb/tinyusb" diff --git a/hw/usb/tinyusb/std_descriptors/src/std_descriptors.c b/hw/usb/tinyusb/std_descriptors/src/std_descriptors.c new file mode 100755 index 0000000..6825a33 --- /dev/null +++ b/hw/usb/tinyusb/std_descriptors/src/std_descriptors.c @@ -0,0 +1,261 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2018, hathach (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. + * + */ + +#include <syscfg/syscfg.h> +#include <bsp/bsp.h> +#include <string.h> +#include <tusb.h> +#include <device/usbd.h> +#include <os/util.h> +#include <console/console.h> +#include <hal/hal_gpio.h> + +#define USBD_PRODUCT_RELEASE_NUMBER MYNEWT_VAL(USBD_PRODUCT_RELEASE_NUMBER) + +#ifndef CONFIG_NUM +#define CONFIG_NUM 1 +#endif + +#define CDC_IF_STR_IX (MYNEWT_VAL(USBD_CDC_DESCRIPTOR_STRING) == NULL ? 0 : 4) +#define MSC_IF_STR_IX (MYNEWT_VAL(USBD_MSC_DESCRIPTOR_STRING) == NULL ? 0 : 5) +#define HID_IF_STR_IX (MYNEWT_VAL(USBD_HID_DESCRIPTOR_STRING) == NULL ? 0 : 6) + + +#if CFG_TUD_HID + +#if MYNEWT_VAL(USBD_HID_REPORT_ID_KEYBOARD) || MYNEWT_VAL(USBD_HID_REPORT_ID_MOUSE) +const uint8_t desc_hid_report[] = { +#if MYNEWT_VAL(USBD_HID_REPORT_ID_KEYBOARD) + TUD_HID_REPORT_DESC_KEYBOARD(MYNEWT_VAL(USBD_HID_REPORT_ID_KEYBOARD),), +#endif +#if MYNEWT_VAL(USBD_HID_REPORT_ID_MOUSE) + TUD_HID_REPORT_DESC_MOUSE(HID_REPORT_ID(REPORT_ID_MOUSE),) +#endif +}; +#else +#error Please specify keybaord and/or mouse report id +#endif + +/* + * Invoked when received GET HID REPORT DESCRIPTOR + * Application return pointer to descriptor + * Descriptor contents must exist long enough for transfer to complete + */ +const uint8_t * +tud_hid_descriptor_report_cb(void) +{ + return desc_hid_report; +} + +/* + * Invoked when received GET_REPORT control request + * Application must fill buffer report's content and return its length. + * Return zero will cause the stack to STALL request + */ +uint16_t +tud_hid_get_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t *buffer, uint16_t reqlen) +{ + /* TODO: not implemented yet */ + (void)report_id; + (void)report_type; + (void)buffer; + (void)reqlen; + + return 0; +} + +/* + * Invoked when received SET_REPORT control request or + * received data on OUT endpoint ( Report ID = 0, Type = 0 ) + */ +void +tud_hid_set_report_cb(uint8_t report_id, hid_report_type_t report_type, const uint8_t *report, uint16_t report_size) +{ + (void)report_id; + (void)report_type; + (void)report_size; + if (MYNEWT_VAL(USBD_HID_CAPS_LOCK_LED_PIN) >= 0) { + hal_gpio_write(MYNEWT_VAL(USBD_HID_CAPS_LOCK_LED_PIN), + 1 & ((report[0] >> 1) ^ 1u ^ MYNEWT_VAL(USBD_HID_CAPS_LOCK_LED_ON_VALUE))); + } + if (MYNEWT_VAL(USBD_HID_NUM_LOCK_LED_PIN) >= 0) { + hal_gpio_write(MYNEWT_VAL(USBD_HID_NUM_LOCK_LED_PIN), + 1 & (report[0] ^ 1u ^ MYNEWT_VAL(USBD_HID_CAPS_LOCK_LED_ON_VALUE))); + } +} +#endif /* CFG_TUD_HID */ + +const tusb_desc_device_t desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + +#if CFG_TUD_CDC + /* + * Use Interface Association Descriptor (IAD) for CDC + * As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1) + */ + .bDeviceClass = TUSB_CLASS_MISC, + .bDeviceSubClass = MISC_SUBCLASS_COMMON, + .bDeviceProtocol = MISC_PROTOCOL_IAD, +#else + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, +#endif + + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = MYNEWT_VAL(USBD_VID), + .idProduct = MYNEWT_VAL(USBD_PID), + .bcdDevice = USBD_PRODUCT_RELEASE_NUMBER, + + .iManufacturer = 0x02, + .iProduct = 0x03, + .iSerialNumber = 0x01, + + .bNumConfigurations = 0x01 +}; + +/* + * Invoked when received GET DEVICE DESCRIPTOR + * Application return pointer to descriptor + */ +const uint8_t * +tud_descriptor_device_cb(void) +{ + return (const uint8_t *)&desc_device; +} + +/* + * Configuration Descriptor + */ + +enum { +#if CFG_TUD_CDC + ITF_NUM_CDC, + ITF_NUM_CDC_DATA, +#endif + +#if CFG_TUD_MSC + ITF_NUM_MSC, +#endif + +#if CFG_TUD_HID + ITF_NUM_HID, +#endif + + ITF_NUM_TOTAL +}; + +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + \ + CFG_TUD_CDC * TUD_CDC_DESC_LEN + \ + CFG_TUD_MSC * TUD_MSC_DESC_LEN + \ + CFG_TUD_HID * TUD_HID_DESC_LEN + \ + 0) + +const uint8_t desc_configuration[] = { + TUD_CONFIG_DESCRIPTOR(CONFIG_NUM, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, + MYNEWT_VAL(USBD_CONFIGURATION_MAX_POWER)), + +#if CFG_TUD_CDC + TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, CDC_IF_STR_IX, USBD_CDC_NOTIFY_EP, USBD_CDC_NOTIFY_EP_SIZE, + USBD_CDC_DATA_OUT_EP, USBD_CDC_DATA_IN_EP, USBD_CDC_DATA_EP_SIZE), +#endif + +#if CFG_TUD_MSC + /* TODO: MSC not handled yet */ + TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, MSC_IF_STR_IX, EPNUM_MSC_OUT, EPNUM_MSC_IN, + (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HIGH_SPEED) ? 512 : 64), +#endif + +#if CFG_TUD_HID + TUD_HID_DESCRIPTOR(ITF_NUM_HID, HID_IF_STR_IX, HID_PROTOCOL_NONE, sizeof(desc_hid_report), + USBD_HID_REPORT_EP, USBD_HID_REPORT_EP_SIZE, USBD_HID_REPORT_EP_INTERVAL), +#endif +}; + +/** + * Invoked when received GET CONFIGURATION DESCRIPTOR + * Application return pointer to descriptor + * Descriptor contents must exist long enough for transfer to complete + */ +const uint8_t * +tud_descriptor_configuration_cb(uint8_t index) +{ + (void)index; + + return desc_configuration; +} + +const char *string_desc_arr[] = { + MYNEWT_VAL(USBD_VENDOR_STRING), + MYNEWT_VAL(USBD_PRODUCT_STRING), + MYNEWT_VAL(USBD_CDC_DESCRIPTOR_STRING), + MYNEWT_VAL(USBD_MSC_DESCRIPTOR_STRING), + MYNEWT_VAL(USBD_HID_DESCRIPTOR_STRING), +}; + +static uint16_t desc_string[MYNEWT_VAL(USBD_STRING_DESCRIPTOR_MAX_LENGTH) + 1]; + +/* + * Invoked when received GET STRING DESCRIPTOR request + * Application return pointer to descriptor, whose contents must exist long enough for transfer to complete + */ +const uint16_t * +tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + int char_num = 0; + int i; + const char *str; + + if (index == 0) { + desc_string[1] = MYNEWT_VAL(USBD_LANGID); + char_num = 1; + } else if (index == 1) { + /* TODO: Add function call to get serial number */ + desc_string[1] = '1'; + char_num = 1; + } else if (index - 2 < ARRAY_SIZE(string_desc_arr)) { + str = string_desc_arr[index - 2]; + + char_num = strlen(str); + if (char_num >= ARRAY_SIZE(desc_string)) { + char_num = ARRAY_SIZE(desc_string); + } + + for (i = 0; i < char_num; ++i) { + desc_string[1 + i] = str[i]; + } + } + + if (char_num) { + /* Encode length in first byte */ + desc_string[0] = (TUSB_DESC_STRING << 8) | (2 * char_num + 2); + return desc_string; + } else { + return NULL; + } +} diff --git a/hw/usb/tinyusb/std_descriptors/syscfg.yml b/hw/usb/tinyusb/std_descriptors/syscfg.yml new file mode 100644 index 0000000..f313028 --- /dev/null +++ b/hw/usb/tinyusb/std_descriptors/syscfg.yml @@ -0,0 +1,121 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +syscfg.defs: + USBD_STRING_DESCRIPTOR_MAX_LENGTH: + description: Maximum length of string descriptor in characters + value: 31 + USBD_EP0_SIZE: + description: > + Endpoint 0 size + value: 64 + USBD_VID: + description: Vendor ID + value: + restrictions: + - $notnull + USBD_PID: + description: Product ID + value: + restrictions: + - $notnull + USBD_PRODUCT_RELEASE_NUMBER: + description: Product release number needed for USB descriptor + value: 0x100 + USBD_CONFIGURATION_MAX_POWER: + description: > + Maximum power consumption of the USB device from the bus in this specific + configuration when the device is fully operational. Expressed in 2 mA units + (i.e., 50 = 100 mA). + value: 100 + USBD_LANGID: + description: Language ID as specified by usb.org + value: 0x0409 + USBD_VENDOR_STRING: + description: Manufacturer identification string + value: '"Vendor string"' + USBD_PRODUCT_STRING: + description: Device friendly name + value: '"Dev device"' + USBD_CDC: + description: Enable CDC device + value: 0 + USBD_HID: + description: Enable HID device + value: 0 + USBD_MSC: + description: Enable MSC device + value: 0 + + USBD_CDC_DATA_OUT_EP: + description: CDC data out endpoint number + value: + USBD_CDC_DATA_IN_EP: + description: CDC data out endpoint number + value: + USBD_CDC_DATA_EP_SIZE: + description: CDC data endpoint size + value: + USBD_CDC_NOTIFY_EP: + description: CDC notify endpoint number + value: + USBD_CDC_NOTIFY_EP_SIZE: + description: CDC notify endpoint size + value: + + USBD_CDC_DESCRIPTOR_STRING: + description: String for CDC interface + value: NULL + + USBD_MSC_DESCRIPTOR_STRING: + description: String for MSC interface + value: NULL + + USBD_HID_DESCRIPTOR_STRING: + description: String for HID interface + value: NULL + + USBD_HID_REPORT_EP: + description: HID report endpoint number + value: + USBD_HID_REPORT_EP_SIZE: + description: HID report endpoint size + value: + USBD_HID_REPORT_EP_INTERVAL: + description: HID report endpoint interval + value: + + USBD_HID_REPORT_ID_KEYBOARD: + description: HID keyboard report ID + value: + USBD_HID_CAPS_LOCK_LED_PIN: + description: Caps Lock LED + value: -1 + USBD_HID_CAPS_LOCK_LED_ON_VALUE: + description: Value to set to pin to turn led on + value: 0 + USBD_HID_NUM_LOCK_LED_PIN: + description: Num Lock LED + value: -1 + USBD_HID_NUM_LOCK_LED_ON_VALUE: + description: Value to set to pin to turn led on + value: 0 + USBD_HID_REPORT_ID_MOUSE: + description: HID keyboard report ID + value: diff --git a/hw/usb/tinyusb/stm32_fsdev/include/tusb_hw.h b/hw/usb/tinyusb/stm32_fsdev/include/tusb_hw.h index e8cbe2a..9a4752e 100755 --- a/hw/usb/tinyusb/stm32_fsdev/include/tusb_hw.h +++ b/hw/usb/tinyusb/stm32_fsdev/include/tusb_hw.h @@ -22,4 +22,54 @@ #define CFG_TUSB_MCU OPT_MCU_STM32F1 +#include <syscfg/syscfg.h> + +#if defined(MYNEWT_VAL_USBD_CDC_NOTIFY_EP) +#define USBD_CDC_NOTIFY_EP MYNEWT_VAL(USBD_CDC_NOTIFY_EP) +#else +#define USBD_CDC_NOTIFY_EP 0x81 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_NOTIFY_EP_SIZE) +#define USBD_CDC_NOTIFY_EP_SIZE MYNEWT_VAL(USBD_CDC_NOTIFY_EP_SIZE) +#else +#define USBD_CDC_NOTIFY_EP_SIZE 0x08 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_DATA_OUT_EP) +#define USBD_CDC_DATA_OUT_EP MYNEWT_VAL(USBD_CDC_DATA_OUT_EP) +#else +#define USBD_CDC_DATA_OUT_EP 0x01 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_DATA_IN_EP) +#define USBD_CDC_DATA_IN_EP MYNEWT_VAL(USBD_CDC_DATA_IN_EP) +#else +#define USBD_CDC_DATA_IN_EP 0x82 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_DATA_EP_SIZE) +#define USBD_CDC_DATA_EP_SIZE MYNEWT_VAL(USBD_CDC_DATA_EP_SIZE) +#else +#define USBD_CDC_DATA_EP_SIZE 0x40 +#endif + +#if defined(MYNEWT_VAL_USBD_HID_REPORT_EP) +#define USBD_HID_REPORT_EP MYNEWT_VAL(USBD_HID_REPORT_EP) +#else +#define USBD_HID_REPORT_EP 0x83 +#endif + +#if defined(MYNEWT_VAL_USBD_HID_REPORT_EP_SIZE) +#define USBD_HID_REPORT_EP_SIZE MYNEWT_VAL(USBD_HID_REPORT_EP_SIZE) +#else +#define USBD_HID_REPORT_EP_SIZE 0x10 +#endif + +#if defined(MYNEWT_VAL_USBD_HID_REPORT_EP_INTERVAL) +#define USBD_HID_REPORT_EP_INTERVAL MYNEWT_VAL(USBD_HID_REPORT_EP_INTERVAL) +#else +#define USBD_HID_REPORT_EP_INTERVAL 10 +#endif + #endif diff --git a/hw/usb/tinyusb/synopsys/include/tusb_hw.h b/hw/usb/tinyusb/synopsys/include/tusb_hw.h index fe1dd71..34471fd 100755 --- a/hw/usb/tinyusb/synopsys/include/tusb_hw.h +++ b/hw/usb/tinyusb/synopsys/include/tusb_hw.h @@ -28,4 +28,52 @@ #define CFG_TUSB_MCU OPT_MCU_STM32L4 #endif +#if defined(MYNEWT_VAL_USBD_CDC_NOTIFY_EP) +#define USBD_CDC_NOTIFY_EP MYNEWT_VAL(USBD_CDC_NOTIFY_EP) +#else +#define USBD_CDC_NOTIFY_EP 0x81 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_NOTIFY_EP_SIZE) +#define USBD_CDC_NOTIFY_EP_SIZE MYNEWT_VAL(USBD_CDC_NOTIFY_EP_SIZE) +#else +#define USBD_CDC_NOTIFY_EP_SIZE 0x08 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_DATA_OUT_EP) +#define USBD_CDC_DATA_OUT_EP MYNEWT_VAL(USBD_CDC_DATA_OUT_EP) +#else +#define USBD_CDC_DATA_OUT_EP 0x01 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_DATA_IN_EP) +#define USBD_CDC_DATA_IN_EP MYNEWT_VAL(USBD_CDC_DATA_IN_EP) +#else +#define USBD_CDC_DATA_IN_EP 0x82 +#endif + +#if defined(MYNEWT_VAL_USBD_CDC_DATA_EP_SIZE) +#define USBD_CDC_DATA_EP_SIZE MYNEWT_VAL(USBD_CDC_DATA_EP_SIZE) +#else +#define USBD_CDC_DATA_EP_SIZE 0x40 +#endif + +#if defined(MYNEWT_VAL_USBD_HID_REPORT_EP) +#define USBD_HID_REPORT_EP MYNEWT_VAL(USBD_HID_REPORT_EP) +#else +#define USBD_HID_REPORT_EP 0x83 +#endif + +#if defined(MYNEWT_VAL_USBD_HID_REPORT_EP_SIZE) +#define USBD_HID_REPORT_EP_SIZE MYNEWT_VAL(USBD_HID_REPORT_EP_SIZE) +#else +#define USBD_HID_REPORT_EP_SIZE 0x10 +#endif + +#if defined(MYNEWT_VAL_USBD_HID_REPORT_EP_INTERVAL) +#define USBD_HID_REPORT_EP_INTERVAL MYNEWT_VAL(USBD_HID_REPORT_EP_INTERVAL) +#else +#define USBD_HID_REPORT_EP_INTERVAL 10 +#endif + #endif diff --git a/hw/usb/tinyusb/syscfg.yml b/hw/usb/tinyusb/syscfg.yml index 726f90c..c76307b 100644 --- a/hw/usb/tinyusb/syscfg.yml +++ b/hw/usb/tinyusb/syscfg.yml @@ -34,3 +34,8 @@ syscfg.defs: description: > Sysinit stage for USB device functionality. value: 500 + USBD_STD_DESCRIPTORS: + description: > + Include descriptor support. This allows to easily use CDC, MSC, HID device + functionality. + value: 1