From 1e5bd82af28c6005fa0ecf008e44322a6ee46461 Mon Sep 17 00:00:00 2001 From: hathach Date: Tue, 28 May 2013 15:24:27 +0700 Subject: rename NGX to ngx add a bunch of stub header for dcd (175x_6x, 13xx, 18xx_43xx) add dcd_nxp_romdriver for handling usb rom driver add BIT_TEST_ in binary.h remove mw_usbd_hid.h include due to lexical conflict --- demos/bsp/boards/NGX/board_ngx4330.c | 115 --------- demos/bsp/boards/NGX/board_ngx4330.h | 73 ------ demos/bsp/boards/ngx/board_ngx4330.h | 73 ------ demos/device/keyboard/.cproject | 4 +- demos/device/keyboard/.project | 4 +- demos/device/keyboard/descriptors.c | 396 ---------------------------- demos/device/keyboard/descriptors.h | 163 ------------ demos/device/keyboard/tusb_config.h | 3 +- demos/device/keyboard/tusb_descriptors.c | 397 +++++++++++++++++++++++++++++ demos/device/keyboard/tusb_descriptors.h | 164 ++++++++++++ tests/test/device/usbd/test_usbd.c | 72 ++++++ tests/test/host/usbh/test_enum_task.c | 8 +- tests/test/support/tusb_config.h | 3 +- tinyusb/class/hid.h | 66 ++--- tinyusb/class/hid_device.c | 62 +++++ tinyusb/common/binary.h | 2 + tinyusb/device/dcd.c | 10 - tinyusb/device/dcd.h | 22 +- tinyusb/device/dcd_lpc13xx.h | 63 +++++ tinyusb/device/dcd_lpc175x_6x.c | 63 +++++ tinyusb/device/dcd_lpc175x_6x.h | 60 +++++ tinyusb/device/dcd_lpc18xx_lpc43xx.h | 62 +++++ tinyusb/device/dcd_lpc43xx.c | 78 ------ tinyusb/device/dcd_lpc43xx.h | 63 ----- tinyusb/device/dcd_nxp_romdriver.c | 166 ++++++++++++ tinyusb/device/dcd_nxp_romdriver.h | 67 +++++ tinyusb/device/romdriver/mw_usbd_hiduser.h | 2 +- tinyusb/device/usbd.c | 18 ++ tinyusb/hal/hal_lpc11uxx.h | 5 +- tinyusb/hal/hal_lpc13uxx.h | 4 - tinyusb/hal/hal_lpc43xx.c | 8 +- tinyusb/hal/hal_lpc43xx.h | 3 - tinyusb/tusb_option.h | 4 + 33 files changed, 1253 insertions(+), 1050 deletions(-) delete mode 100644 demos/bsp/boards/NGX/board_ngx4330.c delete mode 100644 demos/bsp/boards/NGX/board_ngx4330.h delete mode 100644 demos/bsp/boards/ngx/board_ngx4330.h delete mode 100644 demos/device/keyboard/descriptors.c delete mode 100644 demos/device/keyboard/descriptors.h create mode 100644 demos/device/keyboard/tusb_descriptors.c create mode 100644 demos/device/keyboard/tusb_descriptors.h create mode 100644 tests/test/device/usbd/test_usbd.c create mode 100644 tinyusb/class/hid_device.c create mode 100644 tinyusb/device/dcd_lpc13xx.h create mode 100644 tinyusb/device/dcd_lpc175x_6x.c create mode 100644 tinyusb/device/dcd_lpc175x_6x.h create mode 100644 tinyusb/device/dcd_lpc18xx_lpc43xx.h delete mode 100644 tinyusb/device/dcd_lpc43xx.c delete mode 100644 tinyusb/device/dcd_lpc43xx.h create mode 100644 tinyusb/device/dcd_nxp_romdriver.c create mode 100644 tinyusb/device/dcd_nxp_romdriver.h diff --git a/demos/bsp/boards/NGX/board_ngx4330.c b/demos/bsp/boards/NGX/board_ngx4330.c deleted file mode 100644 index 620393d21..000000000 --- a/demos/bsp/boards/NGX/board_ngx4330.c +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************/ -/*! - @file board_ngx4330.c - @author hathach (tinyusb.org) - - @section LICENSE - - Software License Agreement (BSD License) - - Copyright (c) 2013, hathach (tinyusb.org) - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the copyright holders nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - This file is part of the tinyusb stack. -*/ -/**************************************************************************/ - -#include "../board.h" - -#if BOARD == BOARD_NGX4330 - -#define BOARD_MAX_LEDS 2 -const static struct { - uint8_t port; - uint8_t pin; -}leds[BOARD_MAX_LEDS] = { {1, 11}, {1,12} }; - -void board_init(void) -{ - SystemInit(); - CGU_Init(); - SysTick_Config( CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/CFG_TICKS_PER_SECOND ); /* 1 ms Timer */ - - //------------- USB Bus power HOST ONLY-------------// - scu_pinmux(0x1, 7, MD_PUP | MD_EZI, FUNC4); // P1_7 USB0_PWR_EN, USB0 VBus function Xplorer - - scu_pinmux(0x2, 6, MD_PUP | MD_EZI, FUNC4); // P2_6 is configured as GPIO5[6] for USB1_PWR_EN - GPIO_SetDir (5, BIT_(6), 1); // GPIO5[6] is output - GPIO_SetValue (5, BIT_(6)); // GPIO5[6] output high - - // Leds Init - for (uint8_t i=0; i - + @@ -1389,7 +1389,7 @@ - + diff --git a/demos/device/keyboard/.project b/demos/device/keyboard/.project index ebcb46372..d2ab64e32 100644 --- a/demos/device/keyboard/.project +++ b/demos/device/keyboard/.project @@ -88,12 +88,12 @@ tinyusb 2 - C:/Users/hathach/Dropbox/tinyusb/workspace/tinyusb/tinyusb + PARENT-3-PROJECT_LOC/tinyusb - 1357896068317 + 1369631005268 26 diff --git a/demos/device/keyboard/descriptors.c b/demos/device/keyboard/descriptors.c deleted file mode 100644 index e17527f63..000000000 --- a/demos/device/keyboard/descriptors.c +++ /dev/null @@ -1,396 +0,0 @@ -/* - * descriptors.c - * - * Created on: Nov 26, 2012 - * Author: hathach - */ - -/* - * Software License Agreement (BSD License) - * Copyright (c) 2012, hathach (tinyusb.org) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the tinyUSB stack - */ - -#include "descriptors.h" - -#if TUSB_CFG_DEVICE_HID_KEYBOARD -TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) -const uint8_t keyboard_report_descriptor[] = { - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), - HID_USAGE ( HID_USAGE_DESKTOP_KEYBOARD ), - HID_COLLECTION ( HID_COLLECTION_APPLICATION ), - HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ), - HID_USAGE_MIN ( 224 ), - HID_USAGE_MAX ( 231 ), - HID_LOGICAL_MIN ( 0 ), - HID_LOGICAL_MAX ( 1 ), - - HID_REPORT_COUNT ( 8 ), /* 8 bits */ - HID_REPORT_SIZE ( 1 ), - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), /* maskable modifier key */ - - HID_REPORT_COUNT ( 1 ), - HID_REPORT_SIZE ( 8 ), - HID_INPUT ( HID_CONSTANT ), /* reserved */ - - HID_USAGE_PAGE ( HID_USAGE_PAGE_LED ), - HID_USAGE_MIN ( 1 ), - HID_USAGE_MAX ( 5 ), - HID_REPORT_COUNT ( 5 ), - HID_REPORT_SIZE ( 1 ), - HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), /* 5-bit Led report */ - - HID_REPORT_COUNT ( 1 ), - HID_REPORT_SIZE ( 3 ), /* led padding */ - HID_OUTPUT ( HID_CONSTANT ), - - HID_USAGE_PAGE (HID_USAGE_PAGE_KEYBOARD), - HID_USAGE_MIN ( 0 ), - HID_USAGE_MAX ( 101 ), - HID_LOGICAL_MIN ( 0 ), - HID_LOGICAL_MAX ( 101 ), - - HID_REPORT_COUNT ( 6 ), - HID_REPORT_SIZE ( 8 ), - HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ), /* keycodes array 6 items */ - HID_COLLECTION_END -}; -#endif - -#if TUSB_CFG_DEVICE_HID_MOUSE -TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) -const uint8_t mouse_report_descriptor[] = { - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), - HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ), - HID_COLLECTION ( HID_COLLECTION_APPLICATION ), - HID_USAGE (HID_USAGE_DESKTOP_POINTER), - - HID_COLLECTION ( HID_COLLECTION_PHYSICAL ), - HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ), - HID_USAGE_MIN ( 1 ), - HID_USAGE_MAX ( 3 ), - HID_LOGICAL_MIN ( 0 ), - HID_LOGICAL_MAX ( 1 ), - - HID_REPORT_COUNT ( 3 ), /* Left, Right and Middle mouse*/ - HID_REPORT_SIZE ( 1 ), - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), - - HID_REPORT_COUNT ( 1 ), - HID_REPORT_SIZE ( 5 ), - HID_INPUT ( HID_CONSTANT ), /* reserved */ - - HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), - HID_USAGE ( HID_USAGE_DESKTOP_X ), - HID_USAGE ( HID_USAGE_DESKTOP_Y ), - HID_LOGICAL_MIN ( 0x81 ), /* -127 */ - HID_LOGICAL_MAX ( 0x7f ), /* 127 */ - - HID_REPORT_COUNT ( 2 ), /* X, Y position */ - HID_REPORT_SIZE ( 8 ), - HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), /* relative values */ - HID_COLLECTION_END, - - HID_COLLECTION_END -}; -#endif - -TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) -tusb_descriptor_device_t const desc_device = -{ - .bLength = sizeof(tusb_descriptor_device_t), - .bDescriptorType = TUSB_DESC_TYPE_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, - - .bMaxPacketSize0 = USB_MAX_PACKET0, - - .idVendor = CFG_USB_VENDORID, - .idProduct = USB_PRODUCT_ID, - .bcdDevice = 0x0100, - - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, - - .bNumConfigurations = 0x01 // TODO configuration number -}; - - -TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) -const app_configuration_desc_t desc_configuration = -{ - .configuration = - { - .bLength = sizeof(tusb_descriptor_configuration_t), - .bDescriptorType = TUSB_DESC_TYPE_CONFIGURATION, - - .wTotalLength = sizeof(app_configuration_desc_t) - 1, // exclude termination - .bNumInterfaces = TOTAL_INTEFACES, - - .bConfigurationValue = 1, - .iConfiguration = 0x00, - .bmAttributes = TUSB_DESC_CONFIG_ATT_BUS_POWER, - .bMaxPower = TUSB_DESC_CONFIG_POWER_MA(100) - }, - - #if IAD_DESC_REQUIRED - // IAD points to CDC Interfaces - .CDC_IAD = - { - .bLength = sizeof(tusb_descriptor_interface_association_t), - .bDescriptorType = TUSB_DESC_TYPE_INTERFACE_ASSOCIATION, - - .bFirstInterface = 0, - .bInterfaceCount = 2, - - .bFunctionClass = CDC_COMMUNICATION_INTERFACE_CLASS, - .bFunctionSubClass = CDC_ABSTRACT_CONTROL_MODEL, - .bFunctionProtocol = CDC_PROTOCOL_COMMON_AT_COMMANDS, - - .iFunction = 0 - }, - #endif - - #ifdef TUSB_CFG_DEVICE_CDC - // USB CDC Serial Interface - // CDC Control Interface - .CDC_CCI_Interface = - { - .bLength = sizeof(tusb_descriptor_interface_t), - .bDescriptorType = TUSB_DESC_TYPE_INTERFACE, - .bInterfaceNumber = INTERFACE_INDEX_CDC, - .bAlternateSetting = 0, - .bNumEndpoints = 1, - .bInterfaceClass = CDC_COMMUNICATION_INTERFACE_CLASS, - .bInterfaceSubClass = CDC_ABSTRACT_CONTROL_MODEL, - .bInterfaceProtocol = CDC_PROTOCOL_COMMON_AT_COMMANDS, - .iInterface = 0x00 - }, - - .CDC_Header = - { - .bFunctionLength = sizeof(CDC_HEADER_DESCRIPTOR), - .bDescriptorType = CDC_CS_INTERFACE, - .bDescriptorSubtype = CDC_HEADER, - .bcdCDC = 0x0120 - }, - - .CDC_ACM = - { - .bFunctionLength = sizeof(CDC_ABSTRACT_CONTROL_MANAGEMENT_DESCRIPTOR), - .bDescriptorType = CDC_CS_INTERFACE, - .bDescriptorSubtype = CDC_ABSTRACT_CONTROL_MANAGEMENT, - .bmCapabilities = 0x06 // Support Send_Break and Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State - }, - - .CDC_Union = - { - .sUnion = - { - .bFunctionLength = sizeof(CDC_UNION_1SLAVE_DESCRIPTOR), - .bDescriptorType = CDC_CS_INTERFACE, - .bDescriptorSubtype = CDC_UNION, - .bMasterInterface = 0 - }, - .bSlaveInterfaces[0] = 1 - }, - - .CDC_NotificationEndpoint = - { - .bLength = sizeof(tusb_descriptor_endpoint_t), - .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, - .bEndpointAddress = CDC_NOTIFICATION_EP, - .bmAttributes = USB_ENDPOINT_TYPE_INTERRUPT, - .wMaxPacketSize = CDC_NOTIFICATION_EP_MAXPACKETSIZE, - .bInterval = 0xff // lowest polling rate - }, - - // CDC Data Interface - .CDC_DCI_Interface = - { - .bLength = sizeof(tusb_descriptor_interface_t), - .bDescriptorType = TUSB_DESC_TYPE_INTERFACE, - .bInterfaceNumber = INTERFACE_INDEX_CDC+1, - .bAlternateSetting = 0x00, - .bNumEndpoints = 2, - .bInterfaceClass = CDC_DATA_INTERFACE_CLASS, - .bInterfaceSubClass = 0, - .bInterfaceProtocol = 0, - .iInterface = 0x00 - }, - - .CDC_DataOutEndpoint = - { - .bLength = sizeof(tusb_descriptor_endpoint_t), - .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, - .bEndpointAddress = CDC_DATA_EP_OUT, - .bmAttributes = USB_ENDPOINT_TYPE_BULK, - .wMaxPacketSize = CDC_DATA_EP_MAXPACKET_SIZE, - .bInterval = 0 - }, - - .CDC_DataInEndpoint = - { - .bLength = sizeof(tusb_descriptor_endpoint_t), - .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, - .bEndpointAddress = CDC_DATA_EP_IN, - .bmAttributes = USB_ENDPOINT_TYPE_BULK, - .wMaxPacketSize = CDC_DATA_EP_MAXPACKET_SIZE, - .bInterval = 0 - }, - #endif - - //------------- HID Keyboard -------------// - #if TUSB_CFG_DEVICE_HID_KEYBOARD - .keyboard_interface = - { - .bLength = sizeof(tusb_descriptor_interface_t), - .bDescriptorType = TUSB_DESC_TYPE_INTERFACE, - .bInterfaceNumber = 1, - .bAlternateSetting = 0x00, - .bNumEndpoints = 1, - .bInterfaceClass = TUSB_CLASS_HID, - .bInterfaceSubClass = HID_SUBCLASS_BOOT, - .bInterfaceProtocol = HID_PROTOCOL_KEYBOARD, - .iInterface = 0x00 - }, - - .keyboard_hid = - { - .bLength = sizeof(tusb_hid_descriptor_hid_t), - .bDescriptorType = HID_DESC_TYPE_HID, - .bcdHID = 0x0111, - .bCountryCode = HID_Local_NotSupported, - .bNumDescriptors = 1, - .bReportType = HID_DESC_TYPE_REPORT, - .wReportLength = sizeof(keyboard_report_descriptor) - }, - - .keyboard_endpoint = - { - .bLength = sizeof(tusb_descriptor_endpoint_t), - .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, - .bEndpointAddress = 0x81, - .bmAttributes = { .xfer = TUSB_XFER_INTERRUPT }, - .wMaxPacketSize = { .size = 0x08 }, - .bInterval = 0x0A - }, - #endif - - //------------- HID Mouse -------------// - #if TUSB_CFG_DEVICE_HID_MOUSE - .HID_MouseInterface = - { - .bLength = sizeof(tusb_descriptor_interface_t), - .bDescriptorType = TUSB_DESC_TYPE_INTERFACE, - .bInterfaceNumber = INTERFACE_INDEX_HID_MOUSE, - .bAlternateSetting = 0x00, - .bNumEndpoints = 1, - .bInterfaceClass = TUSB_CLASS_HID, - .bInterfaceSubClass = TUSB_HID_SUBCLASS_BOOT, - .bInterfaceProtocol = HID_PROTOCOL_MOUSE, - .iInterface = 0x00 - }, - - .mouse_hid = - { - .bLength = sizeof(tusb_hid_descriptor_hid_t), - .bDescriptorType = HID_DESC_TYPE_HID, - .bcdHID = 0x0111, - .bCountryCode = HID_Local_NotSupported, - .bNumDescriptors = 1, - .bReportType = HID_DESC_TYPE_REPORT, - .wReportLength = sizeof(mouse_report_descriptor) - }, - - .mouse_endpoint = - { - .bLength = sizeof(tusb_descriptor_endpoint_t), - .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, - .bEndpointAddress = 0x82, - .bmAttributes = { .xfer = TUSB_XFER_INTERRUPT }, - .wMaxPacketSize = 0x08, - .bInterval = 0x0A - }, - #endif - - //------------- Mass Storage -------------// - #if TUSB_CFG_DEVICE_MSC - .msc_interface = - { - .bLength = sizeof(tusb_descriptor_interface_t), - .bDescriptorType = TUSB_DESC_TYPE_INTERFACE, - .bInterfaceNumber = 3, - .bAlternateSetting = 0x00, - .bNumEndpoints = 2, - .bInterfaceClass = TUSB_CLASS_MSC, - .bInterfaceSubClass = MSC_SUBCLASS_SCSI, - .bInterfaceProtocol = MSC_PROTOCOL_BOT, - .iInterface = 0x00 - }, - - .msc_endpoint_in = - { - .bLength = sizeof(tusb_descriptor_endpoint_t), - .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, - .bEndpointAddress = 0x83, - .bmAttributes = { .xfer = TUSB_XFER_BULK }, - .wMaxPacketSize = 512, - .bInterval = 1 - }, - - .msc_endpoint_out = - { - .bLength = sizeof(tusb_descriptor_endpoint_t), - .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, - .bEndpointAddress = 0x03, - .bmAttributes = { .xfer = TUSB_XFER_BULK }, - .wMaxPacketSize = 512, - .bInterval = 1 - }, - #endif - - .null_termination = 0, -}; - -TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) const USB_STR_DESCRIPTOR USB_StringDescriptor = -{ - .LangID = { .bLength = 0x04, .bDescriptorType = USB_STRING_DESCRIPTOR_TYPE }, - .strLangID= {0x0409}, // US English - - .Manufacturer = { .bLength = USB_STRING_LEN(sizeof(CFG_USB_STRING_MANUFACTURER)-1), .bDescriptorType = USB_STRING_DESCRIPTOR_TYPE }, - .strManufacturer = {'t', 'i', 'n', 'y', 'U', 'S', 'B'}, - - .Product = { .bLength = USB_STRING_LEN(sizeof(CFG_USB_STRING_PRODUCT)-1), .bDescriptorType = USB_STRING_DESCRIPTOR_TYPE }, - .strProduct = {'D', 'e', 'v', 'i', 'c', 'e', ' ', 'K', 'e', 'y', 'b', 'o', 'a', 'r', 'd'}, - - .Serial = { .bLength = USB_STRING_LEN(sizeof(CFG_USB_STRING_SERIAL)-1), .bDescriptorType = USB_STRING_DESCRIPTOR_TYPE }, - .strSerial = {'1', '2', '3', '4'} -}; diff --git a/demos/device/keyboard/descriptors.h b/demos/device/keyboard/descriptors.h deleted file mode 100644 index 0c89ba4bd..000000000 --- a/demos/device/keyboard/descriptors.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * descriptors.h - * - * Created on: Nov 26, 2012 - * Author: hathachtware License Agreement (BSD License) - * Copyright (c) 2012, hathach (tinyusb.org)All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the tinyUSB stack - */ - -#ifndef _DESCRIPTORS_H_ -#define _DESCRIPTORS_H_ - -#include "tusb.h" - -#define CFG_USB_STRING_MANUFACTURER "tinyUSB" -#define CFG_USB_STRING_PRODUCT "Device Keyboard" -#define CFG_USB_STRING_SERIAL "1234" -#define CFG_USB_VENDORID 0x1FC9 - -/* USB Serial uses the MCUs unique 128-bit chip ID via an IAP call = 32 hex chars */ -#define USB_STRING_SERIAL_LEN 32 - -#define USB_STRING_LEN(n) (2 + ((n)<<1)) - -typedef ATTR_PREPACKED struct ATTR_PACKED _USB_STR_DESCRIPTOR -{ - USB_COMMON_DESCRIPTOR LangID; - uint16_t strLangID[1]; - - USB_COMMON_DESCRIPTOR Manufacturer; - uint16_t strManufacturer[sizeof(CFG_USB_STRING_MANUFACTURER)-1]; // exclude null-character - - USB_COMMON_DESCRIPTOR Product; - uint16_t strProduct[sizeof(CFG_USB_STRING_PRODUCT)-1]; // exclude null-character - - USB_COMMON_DESCRIPTOR Serial; - uint16_t strSerial[sizeof(CFG_USB_STRING_SERIAL)-1]; -} USB_STR_DESCRIPTOR; - -// USB Interface Assosication Descriptor -#define USB_DEVICE_CLASS_IAD USB_DEVICE_CLASS_MISCELLANEOUS -#define USB_DEVICE_SUBCLASS_IAD 0x02 -#define USB_DEVICE_PROTOCOL_IAD 0x01 - -/////////////////////////////////////////////////////////////////////// -// Interface Assosication Descriptor if device is CDC + other class -#define IAD_DESC_REQUIRED ( defined(TUSB_CFG_DEVICE_CDC) && (DEVICE_CLASS_HID) ) - -#ifdef TUSB_CFG_DEVICE_CDC - #define INTERFACES_OF_CDC 2 -#else - #define INTERFACES_OF_CDC 0 -#endif - -#ifdef TUSB_CFG_DEVICE_HID_KEYBOARD - #define INTERFACES_OF_HID_KEYBOARD 1 -#else - #define INTERFACES_OF_HID_KEYBOARD 0 -#endif - -#ifdef TUSB_CFG_DEVICE_HID_MOUSE - #define INTERFACES_OF_HID_MOUSE 1 -#else - #define INTERFACES_OF_HID_MOUSE 0 -#endif - -#ifdef CFG_USB_HID_GENERIC - #define INTERFACES_OF_HID_GENERIC 1 -#else - #define INTERFACES_OF_HID_GENERIC 0 -#endif - -#ifdef CFG_USB_MASS_STORAGE - #define INTERFACES_OF_MASS_STORAGE 2 -#else - #define INTERFACES_OF_MASS_STORAGE 0 -#endif - -#define INTERFACE_INDEX_CDC 0 -#define INTERFACE_INDEX_HID_KEYBOARD (INTERFACE_INDEX_CDC + INTERFACES_OF_CDC ) -#define INTERFACE_INDEX_HID_MOUSE (INTERFACE_INDEX_HID_KEYBOARD + INTERFACES_OF_HID_KEYBOARD ) -#define INTERFACE_INDEX_HID_GENERIC (INTERFACE_INDEX_HID_MOUSE + INTERFACES_OF_HID_MOUSE ) -#define INTERFACE_INDEX_MASS_STORAGE (INTERFACE_INDEX_HID_GENERIC + INTERFACES_OF_HID_GENERIC ) - -#define TOTAL_INTEFACES (INTERFACES_OF_CDC + INTERFACES_OF_HID_KEYBOARD + INTERFACES_OF_HID_MOUSE + INTERFACES_OF_HID_GENERIC + INTERFACES_OF_MASS_STORAGE) - -// Bitmap: MassStorage | Generic | Mouse | Key | CDC -#define PRODUCTID_BITMAP(interface, n) ( (INTERFACES_OF_##interface ? 1 : 0) << (n) ) -#define USB_PRODUCT_ID (0x2000 | ( PRODUCTID_BITMAP(CDC, 0) | PRODUCTID_BITMAP(HID_KEYBOARD, 1) | PRODUCTID_BITMAP(HID_MOUSE, 2) | \ - PRODUCTID_BITMAP(HID_GENERIC, 3) | PRODUCTID_BITMAP(MASS_STORAGE, 4) ) ) - -/////////////////////////////////////////////////////////////////////// -typedef struct -{ - tusb_descriptor_configuration_t configuration; - -#if IAD_DESC_REQUIRED - tusb_descriptor_interface_association_t CDC_IAD; -#endif - -#if TUSB_CFG_DEVICE_CDC - //CDC - Serial - //CDC Control Interface - tusb_descriptor_interface_t CDC_CCI_Interface; - CDC_HEADER_DESCRIPTOR CDC_Header; - CDC_ABSTRACT_CONTROL_MANAGEMENT_DESCRIPTOR CDC_ACM; - CDC_UNION_1SLAVE_DESCRIPTOR CDC_Union; - tusb_descriptor_endpoint_t CDC_NotificationEndpoint; - - //CDC Data Interface - tusb_descriptor_interface_t CDC_DCI_Interface; - tusb_descriptor_endpoint_t CDC_DataOutEndpoint; - tusb_descriptor_endpoint_t CDC_DataInEndpoint; -#endif - - //------------- HID Keyboard -------------// -#if TUSB_CFG_DEVICE_HID_KEYBOARD - tusb_descriptor_interface_t keyboard_interface; - tusb_hid_descriptor_hid_t keyboard_hid; - tusb_descriptor_endpoint_t keyboard_endpoint; -#endif - -//------------- HID Mouse -------------// -#if TUSB_CFG_DEVICE_HID_MOUSE - tusb_descriptor_interface_t mouse_interface; - tusb_hid_descriptor_hid_t mouse_hid; - tusb_descriptor_endpoint_t mouse_endpoint; -#endif - - uint8_t null_termination; -} app_configuration_desc_t; - -extern const tusb_descriptor_device_t desc_device; -extern const app_configuration_desc_t desc_configuration; -extern const USB_STR_DESCRIPTOR USB_StringDescriptor; - -extern const uint8_t keyboard_report_descriptor[]; -extern const uint8_t HID_MouseReportDescriptor[]; - -#endif diff --git a/demos/device/keyboard/tusb_config.h b/demos/device/keyboard/tusb_config.h index 8ca515033..e7e9207ab 100644 --- a/demos/device/keyboard/tusb_config.h +++ b/demos/device/keyboard/tusb_config.h @@ -81,8 +81,7 @@ //--------------------------------------------------------------------+ // DEVICE CONFIGURATION //--------------------------------------------------------------------+ - -//------------- CORE/CONTROLLER -------------// +#define TUSB_CFG_DEVICE_USE_ROM_DRIVER 1 //------------- CLASS -------------// #define TUSB_CFG_DEVICE_HID_KEYBOARD 1 diff --git a/demos/device/keyboard/tusb_descriptors.c b/demos/device/keyboard/tusb_descriptors.c new file mode 100644 index 000000000..f392d65ea --- /dev/null +++ b/demos/device/keyboard/tusb_descriptors.c @@ -0,0 +1,397 @@ +/* + * tusb_descriptors.c + * + * Created on: Nov 26, 2012 + * Author: hathach + */ + +/* + * Software License Agreement (BSD License) + * Copyright (c) 2012, hathach (tinyusb.org) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the tinyUSB stack + */ + +#include "tusb_descriptors.h" + +#if TUSB_CFG_DEVICE_HID_KEYBOARD +TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) +const uint8_t keyboard_report_descriptor[] = { + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), + HID_USAGE ( HID_USAGE_DESKTOP_KEYBOARD ), + HID_COLLECTION ( HID_COLLECTION_APPLICATION ), + HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ), + HID_USAGE_MIN ( 224 ), + HID_USAGE_MAX ( 231 ), + HID_LOGICAL_MIN ( 0 ), + HID_LOGICAL_MAX ( 1 ), + + HID_REPORT_COUNT ( 8 ), /* 8 bits */ + HID_REPORT_SIZE ( 1 ), + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), /* maskable modifier key */ + + HID_REPORT_COUNT ( 1 ), + HID_REPORT_SIZE ( 8 ), + HID_INPUT ( HID_CONSTANT ), /* reserved */ + + HID_USAGE_PAGE ( HID_USAGE_PAGE_LED ), + HID_USAGE_MIN ( 1 ), + HID_USAGE_MAX ( 5 ), + HID_REPORT_COUNT ( 5 ), + HID_REPORT_SIZE ( 1 ), + HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), /* 5-bit Led report */ + + HID_REPORT_COUNT ( 1 ), + HID_REPORT_SIZE ( 3 ), /* led padding */ + HID_OUTPUT ( HID_CONSTANT ), + + HID_USAGE_PAGE (HID_USAGE_PAGE_KEYBOARD), + HID_USAGE_MIN ( 0 ), + HID_USAGE_MAX ( 101 ), + HID_LOGICAL_MIN ( 0 ), + HID_LOGICAL_MAX ( 101 ), + + HID_REPORT_COUNT ( 6 ), + HID_REPORT_SIZE ( 8 ), + HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ), /* keycodes array 6 items */ + HID_COLLECTION_END +}; +#endif + +#if TUSB_CFG_DEVICE_HID_MOUSE +TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) +const uint8_t mouse_report_descriptor[] = { + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), + HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ), + HID_COLLECTION ( HID_COLLECTION_APPLICATION ), + HID_USAGE (HID_USAGE_DESKTOP_POINTER), + + HID_COLLECTION ( HID_COLLECTION_PHYSICAL ), + HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ), + HID_USAGE_MIN ( 1 ), + HID_USAGE_MAX ( 3 ), + HID_LOGICAL_MIN ( 0 ), + HID_LOGICAL_MAX ( 1 ), + + HID_REPORT_COUNT ( 3 ), /* Left, Right and Middle mouse*/ + HID_REPORT_SIZE ( 1 ), + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), + + HID_REPORT_COUNT ( 1 ), + HID_REPORT_SIZE ( 5 ), + HID_INPUT ( HID_CONSTANT ), /* reserved */ + + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), + HID_USAGE ( HID_USAGE_DESKTOP_X ), + HID_USAGE ( HID_USAGE_DESKTOP_Y ), + HID_LOGICAL_MIN ( 0x81 ), /* -127 */ + HID_LOGICAL_MAX ( 0x7f ), /* 127 */ + + HID_REPORT_COUNT ( 2 ), /* X, Y position */ + HID_REPORT_SIZE ( 8 ), + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), /* relative values */ + HID_COLLECTION_END, + + HID_COLLECTION_END +}; +#endif + +TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) +tusb_descriptor_device_t const app_desc_device = +{ + .bLength = sizeof(tusb_descriptor_device_t), + .bDescriptorType = TUSB_DESC_TYPE_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + + .bMaxPacketSize0 = USB_MAX_PACKET0, + + .idVendor = TUSB_CFG_DEVICE_VENDORID, + .idProduct = USB_PRODUCT_ID, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x01 // TODO configuration number +}; + + +TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) +const app_descriptor_configuration_t app_desc_configuration = +{ + .configuration = + { + .bLength = sizeof(tusb_descriptor_configuration_t), + .bDescriptorType = TUSB_DESC_TYPE_CONFIGURATION, + + .wTotalLength = sizeof(app_descriptor_configuration_t) - 1, // exclude termination + .bNumInterfaces = TOTAL_INTEFACES, + + .bConfigurationValue = 1, + .iConfiguration = 0x00, + .bmAttributes = TUSB_DESC_CONFIG_ATT_BUS_POWER, + .bMaxPower = TUSB_DESC_CONFIG_POWER_MA(100) + }, + + #if IAD_DESC_REQUIRED + // IAD points to CDC Interfaces + .CDC_IAD = + { + .bLength = sizeof(tusb_descriptor_interface_association_t), + .bDescriptorType = TUSB_DESC_TYPE_INTERFACE_ASSOCIATION, + + .bFirstInterface = 0, + .bInterfaceCount = 2, + + .bFunctionClass = CDC_COMMUNICATION_INTERFACE_CLASS, + .bFunctionSubClass = CDC_ABSTRACT_CONTROL_MODEL, + .bFunctionProtocol = CDC_PROTOCOL_COMMON_AT_COMMANDS, + + .iFunction = 0 + }, + #endif + + #ifdef TUSB_CFG_DEVICE_CDC + // USB CDC Serial Interface + // CDC Control Interface + .CDC_CCI_Interface = + { + .bLength = sizeof(tusb_descriptor_interface_t), + .bDescriptorType = TUSB_DESC_TYPE_INTERFACE, + .bInterfaceNumber = INTERFACE_INDEX_CDC, + .bAlternateSetting = 0, + .bNumEndpoints = 1, + .bInterfaceClass = CDC_COMMUNICATION_INTERFACE_CLASS, + .bInterfaceSubClass = CDC_ABSTRACT_CONTROL_MODEL, + .bInterfaceProtocol = CDC_PROTOCOL_COMMON_AT_COMMANDS, + .iInterface = 0x00 + }, + + .CDC_Header = + { + .bFunctionLength = sizeof(CDC_HEADER_DESCRIPTOR), + .bDescriptorType = CDC_CS_INTERFACE, + .bDescriptorSubtype = CDC_HEADER, + .bcdCDC = 0x0120 + }, + + .CDC_ACM = + { + .bFunctionLength = sizeof(CDC_ABSTRACT_CONTROL_MANAGEMENT_DESCRIPTOR), + .bDescriptorType = CDC_CS_INTERFACE, + .bDescriptorSubtype = CDC_ABSTRACT_CONTROL_MANAGEMENT, + .bmCapabilities = 0x06 // Support Send_Break and Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State + }, + + .CDC_Union = + { + .sUnion = + { + .bFunctionLength = sizeof(CDC_UNION_1SLAVE_DESCRIPTOR), + .bDescriptorType = CDC_CS_INTERFACE, + .bDescriptorSubtype = CDC_UNION, + .bMasterInterface = 0 + }, + .bSlaveInterfaces[0] = 1 + }, + + .CDC_NotificationEndpoint = + { + .bLength = sizeof(tusb_descriptor_endpoint_t), + .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, + .bEndpointAddress = CDC_NOTIFICATION_EP, + .bmAttributes = USB_ENDPOINT_TYPE_INTERRUPT, + .wMaxPacketSize = CDC_NOTIFICATION_EP_MAXPACKETSIZE, + .bInterval = 0xff // lowest polling rate + }, + + // CDC Data Interface + .CDC_DCI_Interface = + { + .bLength = sizeof(tusb_descriptor_interface_t), + .bDescriptorType = TUSB_DESC_TYPE_INTERFACE, + .bInterfaceNumber = INTERFACE_INDEX_CDC+1, + .bAlternateSetting = 0x00, + .bNumEndpoints = 2, + .bInterfaceClass = CDC_DATA_INTERFACE_CLASS, + .bInterfaceSubClass = 0, + .bInterfaceProtocol = 0, + .iInterface = 0x00 + }, + + .CDC_DataOutEndpoint = + { + .bLength = sizeof(tusb_descriptor_endpoint_t), + .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, + .bEndpointAddress = CDC_DATA_EP_OUT, + .bmAttributes = USB_ENDPOINT_TYPE_BULK, + .wMaxPacketSize = CDC_DATA_EP_MAXPACKET_SIZE, + .bInterval = 0 + }, + + .CDC_DataInEndpoint = + { + .bLength = sizeof(tusb_descriptor_endpoint_t), + .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, + .bEndpointAddress = CDC_DATA_EP_IN, + .bmAttributes = USB_ENDPOINT_TYPE_BULK, + .wMaxPacketSize = CDC_DATA_EP_MAXPACKET_SIZE, + .bInterval = 0 + }, + #endif + + //------------- HID Keyboard -------------// + #if TUSB_CFG_DEVICE_HID_KEYBOARD + .keyboard_interface = + { + .bLength = sizeof(tusb_descriptor_interface_t), + .bDescriptorType = TUSB_DESC_TYPE_INTERFACE, + .bInterfaceNumber = 1, + .bAlternateSetting = 0x00, + .bNumEndpoints = 1, + .bInterfaceClass = TUSB_CLASS_HID, + .bInterfaceSubClass = HID_SUBCLASS_BOOT, + .bInterfaceProtocol = HID_PROTOCOL_KEYBOARD, + .iInterface = 0x00 + }, + + .keyboard_hid = + { + .bLength = sizeof(tusb_hid_descriptor_hid_t), + .bDescriptorType = HID_DESC_TYPE_HID, + .bcdHID = 0x0111, + .bCountryCode = HID_Local_NotSupported, + .bNumDescriptors = 1, + .bReportType = HID_DESC_TYPE_REPORT, + .wReportLength = sizeof(keyboard_report_descriptor) + }, + + .keyboard_endpoint = + { + .bLength = sizeof(tusb_descriptor_endpoint_t), + .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, + .bEndpointAddress = 0x81, + .bmAttributes = { .xfer = TUSB_XFER_INTERRUPT }, + .wMaxPacketSize = { .size = 0x08 }, + .bInterval = 0x0A + }, + #endif + + //------------- HID Mouse -------------// + #if TUSB_CFG_DEVICE_HID_MOUSE + .HID_MouseInterface = + { + .bLength = sizeof(tusb_descriptor_interface_t), + .bDescriptorType = TUSB_DESC_TYPE_INTERFACE, + .bInterfaceNumber = INTERFACE_INDEX_HID_MOUSE, + .bAlternateSetting = 0x00, + .bNumEndpoints = 1, + .bInterfaceClass = TUSB_CLASS_HID, + .bInterfaceSubClass = TUSB_HID_SUBCLASS_BOOT, + .bInterfaceProtocol = HID_PROTOCOL_MOUSE, + .iInterface = 0x00 + }, + + .mouse_hid = + { + .bLength = sizeof(tusb_hid_descriptor_hid_t), + .bDescriptorType = HID_DESC_TYPE_HID, + .bcdHID = 0x0111, + .bCountryCode = HID_Local_NotSupported, + .bNumDescriptors = 1, + .bReportType = HID_DESC_TYPE_REPORT, + .wReportLength = sizeof(mouse_report_descriptor) + }, + + .mouse_endpoint = + { + .bLength = sizeof(tusb_descriptor_endpoint_t), + .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, + .bEndpointAddress = 0x82, + .bmAttributes = { .xfer = TUSB_XFER_INTERRUPT }, + .wMaxPacketSize = 0x08, + .bInterval = 0x0A + }, + #endif + + //------------- Mass Storage -------------// + #if TUSB_CFG_DEVICE_MSC + .msc_interface = + { + .bLength = sizeof(tusb_descriptor_interface_t), + .bDescriptorType = TUSB_DESC_TYPE_INTERFACE, + .bInterfaceNumber = 3, + .bAlternateSetting = 0x00, + .bNumEndpoints = 2, + .bInterfaceClass = TUSB_CLASS_MSC, + .bInterfaceSubClass = MSC_SUBCLASS_SCSI, + .bInterfaceProtocol = MSC_PROTOCOL_BOT, + .iInterface = 0x00 + }, + + .msc_endpoint_in = + { + .bLength = sizeof(tusb_descriptor_endpoint_t), + .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, + .bEndpointAddress = 0x83, + .bmAttributes = { .xfer = TUSB_XFER_BULK }, + .wMaxPacketSize = 512, + .bInterval = 1 + }, + + .msc_endpoint_out = + { + .bLength = sizeof(tusb_descriptor_endpoint_t), + .bDescriptorType = TUSB_DESC_TYPE_ENDPOINT, + .bEndpointAddress = 0x03, + .bmAttributes = { .xfer = TUSB_XFER_BULK }, + .wMaxPacketSize = 512, + .bInterval = 1 + }, + #endif + + .null_termination = 0, +}; + +TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) +const app_descriptor_string_t app_desc_strings = +{ + .LangID = { .bLength = 0x04, .bDescriptorType = TUSB_DESC_TYPE_STRING }, + .strLangID= {0x0409}, // US English + + .Manufacturer = { .bLength = USB_STRING_LEN(sizeof(TUSB_CFG_DEVICE_STRING_MANUFACTURER)-1), .bDescriptorType = TUSB_DESC_TYPE_STRING }, + .strManufacturer = {'t', 'i', 'n', 'y', 'U', 'S', 'B'}, + + .Product = { .bLength = USB_STRING_LEN(sizeof(TUSB_CFG_DEVICE_STRING_PRODUCT)-1), .bDescriptorType = TUSB_DESC_TYPE_STRING }, + .strProduct = {'D', 'e', 'v', 'i', 'c', 'e', ' ', 'K', 'e', 'y', 'b', 'o', 'a', 'r', 'd'}, + + .Serial = { .bLength = USB_STRING_LEN(sizeof(TUSB_CFG_DEVICE_STRING_SERIAL)-1), .bDescriptorType = TUSB_DESC_TYPE_STRING }, + .strSerial = {'1', '2', '3', '4'} +}; diff --git a/demos/device/keyboard/tusb_descriptors.h b/demos/device/keyboard/tusb_descriptors.h new file mode 100644 index 000000000..a3beb66f2 --- /dev/null +++ b/demos/device/keyboard/tusb_descriptors.h @@ -0,0 +1,164 @@ +/* + * tusb_descriptors.h + * + * Created on: Nov 26, 2012 + * Author: hathachtware License Agreement (BSD License) + * Copyright (c) 2012, hathach (tinyusb.org)All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the tinyUSB stack + */ + +#ifndef _DESCRIPTORS_H_ +#define _DESCRIPTORS_H_ + +#include "tusb.h" + +#define TUSB_CFG_DEVICE_STRING_MANUFACTURER "tinyUSB" +#define TUSB_CFG_DEVICE_STRING_PRODUCT "Device Keyboard" +#define TUSB_CFG_DEVICE_STRING_SERIAL "1234" +#define TUSB_CFG_DEVICE_VENDORID 0x1FC9 +//#define TUSB_CFG_DEVICE_PRODUCTID + +/* USB Serial uses the MCUs unique 128-bit chip ID via an IAP call = 32 hex chars */ +#define USB_STRING_SERIAL_LEN 32 + +#define USB_STRING_LEN(n) (2 + ((n)<<1)) + +typedef ATTR_PACKED_STRUCT(struct) +{ + tusb_descriptor_header_t LangID; + uint16_t strLangID[1]; + + tusb_descriptor_header_t Manufacturer; + uint16_t strManufacturer[sizeof(TUSB_CFG_DEVICE_STRING_MANUFACTURER)-1]; // exclude null-character + + tusb_descriptor_header_t Product; + uint16_t strProduct[sizeof(TUSB_CFG_DEVICE_STRING_PRODUCT)-1]; // exclude null-character + + tusb_descriptor_header_t Serial; + uint16_t strSerial[sizeof(TUSB_CFG_DEVICE_STRING_SERIAL)-1]; +} app_descriptor_string_t; + +// USB Interface Assosication Descriptor +#define USB_DEVICE_CLASS_IAD USB_DEVICE_CLASS_MISCELLANEOUS +#define USB_DEVICE_SUBCLASS_IAD 0x02 +#define USB_DEVICE_PROTOCOL_IAD 0x01 + +/////////////////////////////////////////////////////////////////////// +// Interface Assosication Descriptor if device is CDC + other class +#define IAD_DESC_REQUIRED ( defined(TUSB_CFG_DEVICE_CDC) && (DEVICE_CLASS_HID) ) + +#ifdef TUSB_CFG_DEVICE_CDC + #define INTERFACES_OF_CDC 2 +#else + #define INTERFACES_OF_CDC 0 +#endif + +#ifdef TUSB_CFG_DEVICE_HID_KEYBOARD + #define INTERFACES_OF_HID_KEYBOARD 1 +#else + #define INTERFACES_OF_HID_KEYBOARD 0 +#endif + +#ifdef TUSB_CFG_DEVICE_HID_MOUSE + #define INTERFACES_OF_HID_MOUSE 1 +#else + #define INTERFACES_OF_HID_MOUSE 0 +#endif + +#ifdef CFG_USB_HID_GENERIC + #define INTERFACES_OF_HID_GENERIC 1 +#else + #define INTERFACES_OF_HID_GENERIC 0 +#endif + +#ifdef CFG_USB_MASS_STORAGE + #define INTERFACES_OF_MASS_STORAGE 2 +#else + #define INTERFACES_OF_MASS_STORAGE 0 +#endif + +#define INTERFACE_INDEX_CDC 0 +#define INTERFACE_INDEX_HID_KEYBOARD (INTERFACE_INDEX_CDC + INTERFACES_OF_CDC ) +#define INTERFACE_INDEX_HID_MOUSE (INTERFACE_INDEX_HID_KEYBOARD + INTERFACES_OF_HID_KEYBOARD ) +#define INTERFACE_INDEX_HID_GENERIC (INTERFACE_INDEX_HID_MOUSE + INTERFACES_OF_HID_MOUSE ) +#define INTERFACE_INDEX_MASS_STORAGE (INTERFACE_INDEX_HID_GENERIC + INTERFACES_OF_HID_GENERIC ) + +#define TOTAL_INTEFACES (INTERFACES_OF_CDC + INTERFACES_OF_HID_KEYBOARD + INTERFACES_OF_HID_MOUSE + INTERFACES_OF_HID_GENERIC + INTERFACES_OF_MASS_STORAGE) + +// Bitmap: MassStorage | Generic | Mouse | Key | CDC +#define PRODUCTID_BITMAP(interface, n) ( (INTERFACES_OF_##interface ? 1 : 0) << (n) ) +#define USB_PRODUCT_ID (0x2000 | ( PRODUCTID_BITMAP(CDC, 0) | PRODUCTID_BITMAP(HID_KEYBOARD, 1) | PRODUCTID_BITMAP(HID_MOUSE, 2) | \ + PRODUCTID_BITMAP(HID_GENERIC, 3) | PRODUCTID_BITMAP(MASS_STORAGE, 4) ) ) + +/////////////////////////////////////////////////////////////////////// +typedef ATTR_PACKED_STRUCT(struct) +{ + tusb_descriptor_configuration_t configuration; + +#if IAD_DESC_REQUIRED + tusb_descriptor_interface_association_t CDC_IAD; +#endif + +#if TUSB_CFG_DEVICE_CDC + //CDC - Serial + //CDC Control Interface + tusb_descriptor_interface_t CDC_CCI_Interface; + CDC_HEADER_DESCRIPTOR CDC_Header; + CDC_ABSTRACT_CONTROL_MANAGEMENT_DESCRIPTOR CDC_ACM; + CDC_UNION_1SLAVE_DESCRIPTOR CDC_Union; + tusb_descriptor_endpoint_t CDC_NotificationEndpoint; + + //CDC Data Interface + tusb_descriptor_interface_t CDC_DCI_Interface; + tusb_descriptor_endpoint_t CDC_DataOutEndpoint; + tusb_descriptor_endpoint_t CDC_DataInEndpoint; +#endif + + //------------- HID Keyboard -------------// +#if TUSB_CFG_DEVICE_HID_KEYBOARD + tusb_descriptor_interface_t keyboard_interface; + tusb_hid_descriptor_hid_t keyboard_hid; + tusb_descriptor_endpoint_t keyboard_endpoint; +#endif + +//------------- HID Mouse -------------// +#if TUSB_CFG_DEVICE_HID_MOUSE + tusb_descriptor_interface_t mouse_interface; + tusb_hid_descriptor_hid_t mouse_hid; + tusb_descriptor_endpoint_t mouse_endpoint; +#endif + + uint8_t null_termination; // NXP rom driver requires this to work +} app_descriptor_configuration_t; + +extern const tusb_descriptor_device_t app_desc_device; +extern const app_descriptor_configuration_t app_desc_configuration; +extern const app_descriptor_string_t app_desc_strings; +extern const uint8_t keyboard_report_descriptor[]; + +//extern const uint8_t HID_MouseReportDescriptor[]; + +#endif diff --git a/tests/test/device/usbd/test_usbd.c b/tests/test/device/usbd/test_usbd.c new file mode 100644 index 000000000..a41118201 --- /dev/null +++ b/tests/test/device/usbd/test_usbd.c @@ -0,0 +1,72 @@ +/**************************************************************************/ +/*! + @file test_usbd.c + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2013, hathach (tinyusb.org) + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This file is part of the tinyusb stack. +*/ +/**************************************************************************/ + +#include +#include "unity.h" +#include "errors.h" +#include "type_helper.h" + +#include "mock_dcd.h" +#include "usbd.h" + +void setUp(void) +{ + +} + +void tearDown(void) +{ +} + +void test_dcd_init_failed(void) +{ + dcd_init_ExpectAndReturn(TUSB_ERROR_FAILED); + + //------------- Code Under Test -------------// + TEST_ASSERT_EQUAL( TUSB_ERROR_FAILED, usbd_init() ); +} + +void test_usbd_init_ok(void) +{ + dcd_init_ExpectAndReturn(TUSB_ERROR_NONE); + + + //------------- Code Under Test -------------// + TEST_ASSERT_EQUAL( TUSB_ERROR_NONE, usbd_init() ); + +} diff --git a/tests/test/host/usbh/test_enum_task.c b/tests/test/host/usbh/test_enum_task.c index eef0a0ce6..3d0f9f193 100644 --- a/tests/test/host/usbh/test_enum_task.c +++ b/tests/test/host/usbh/test_enum_task.c @@ -122,7 +122,7 @@ tusb_error_t control_xfer_stub(uint8_t dev_addr, const tusb_std_request_t * cons { case 0: // get 8 bytes of device descriptor TEST_ASSERT_EQUAL(TUSB_REQUEST_GET_DESCRIPTOR, p_request->bRequest); - TEST_ASSERT_EQUAL(TUSB_DESC_DEVICE, p_request->wValue >> 8); + TEST_ASSERT_EQUAL(TUSB_DESC_TYPE_DEVICE, p_request->wValue >> 8); TEST_ASSERT_EQUAL(8, p_request->wLength); memcpy(data, &desc_device, p_request->wLength); break; @@ -134,21 +134,21 @@ tusb_error_t control_xfer_stub(uint8_t dev_addr, const tusb_std_request_t * cons case 2: // get full device decriptor for new address TEST_ASSERT_EQUAL(TUSB_REQUEST_GET_DESCRIPTOR, p_request->bRequest); - TEST_ASSERT_EQUAL(TUSB_DESC_DEVICE, p_request->wValue >> 8); + TEST_ASSERT_EQUAL(TUSB_DESC_TYPE_DEVICE, p_request->wValue >> 8); TEST_ASSERT_EQUAL(18, p_request->wLength); memcpy(data, &desc_device, p_request->wLength); break; case 3: // get 9 bytes of configuration descriptor TEST_ASSERT_EQUAL(TUSB_REQUEST_GET_DESCRIPTOR, p_request->bRequest); - TEST_ASSERT_EQUAL(TUSB_DESC_CONFIGURATION, p_request->wValue >> 8); + TEST_ASSERT_EQUAL(TUSB_DESC_TYPE_CONFIGURATION, p_request->wValue >> 8); TEST_ASSERT_EQUAL(9, p_request->wLength); memcpy(data, &desc_configuration, p_request->wLength); break; case 4: // get full-length configuration descriptor TEST_ASSERT_EQUAL(TUSB_REQUEST_GET_DESCRIPTOR, p_request->bRequest); - TEST_ASSERT_EQUAL(TUSB_DESC_CONFIGURATION, p_request->wValue >> 8); + TEST_ASSERT_EQUAL(TUSB_DESC_TYPE_CONFIGURATION, p_request->wValue >> 8); TEST_ASSERT_EQUAL(desc_configuration.configuration.wTotalLength, p_request->wLength); memcpy(data, &desc_configuration, p_request->wLength); break; diff --git a/tests/test/support/tusb_config.h b/tests/test/support/tusb_config.h index fe881551d..ad882c65c 100644 --- a/tests/test/support/tusb_config.h +++ b/tests/test/support/tusb_config.h @@ -59,7 +59,7 @@ //--------------------------------------------------------------------+ // CONTROLLER CONFIGURATION //--------------------------------------------------------------------+ -#define TUSB_CFG_CONTROLLER0_MODE TUSB_MODE_HOST +#define TUSB_CFG_CONTROLLER0_MODE (TUSB_MODE_HOST | TUSB_MODE_DEVICE) #define TUSB_CFG_CONTROLLER1_MODE TUSB_MODE_HOST //--------------------------------------------------------------------+ @@ -86,6 +86,7 @@ //--------------------------------------------------------------------+ // DEVICE CONFIGURATION //--------------------------------------------------------------------+ +#define TUSB_CFG_DEVICE_USE_ROM_DRIVER 1 //------------- CLASS -------------// //#define TUSB_CFG_DEVICE_CDC diff --git a/tinyusb/class/hid.h b/tinyusb/class/hid.h index 5cf9a4907..43af4d7cd 100644 --- a/tinyusb/class/hid.h +++ b/tinyusb/class/hid.h @@ -51,17 +51,17 @@ #ifdef __cplusplus extern "C" { #endif -// -//enum { -// HID_SUBCLASS_NONE = 0, -// HID_SUBCLASS_BOOT = 1 -//}; -// -//enum { -// HID_PROTOCOL_NONE = 0, -// HID_PROTOCOL_KEYBOARD = 1, -// HID_PROTOCOL_MOUSE = 2 -//}; + +enum { + HID_SUBCLASS_NONE = 0, + HID_SUBCLASS_BOOT = 1 +}; + +enum { + HID_PROTOCOL_NONE = 0, + HID_PROTOCOL_KEYBOARD = 1, + HID_PROTOCOL_MOUSE = 2 +}; enum { HID_DESC_TYPE_HID = 0x21, @@ -382,28 +382,28 @@ enum { HID_USAGE_PAGE_DESKTOP = 0x01, HID_USAGE_PAGE_SIMULATE = 0x02, HID_USAGE_PAGE_VIRTUAL_REALITY = 0x03, -// HID_USAGE_PAGE_SPORT = 0x04, -// HID_USAGE_PAGE_GAME = 0x05, -// HID_USAGE_PAGE_GENERIC_DEVICE = 0x06, -// HID_USAGE_PAGE_KEYBOARD = 0x07, -// HID_USAGE_PAGE_LED = 0x08, -// HID_USAGE_PAGE_BUTTON = 0x09, -// HID_USAGE_PAGE_ORDINAL = 0x0a, -// HID_USAGE_PAGE_TELEPHONY = 0x0b, -// HID_USAGE_PAGE_CONSUMER = 0x0c, -// HID_USAGE_PAGE_DIGITIZER = 0x0d, -// HID_USAGE_PAGE_PID = 0x0f, -// HID_USAGE_PAGE_UNICODE = 0x10, -// HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14, -// HID_USAGE_PAGE_MEDICAL = 0x40, -// HID_USAGE_PAGE_MONITOR = 0x80, //0x80 - 0x83 -// HID_USAGE_PAGE_POWER = 0x84, // 0x084 - 0x87 -// HID_USAGE_PAGE_BARCODE_SCANNER = 0x8c, -// HID_USAGE_PAGE_SCALE = 0x8d, -// HID_USAGE_PAGE_MSR = 0x8e, -// HID_USAGE_PAGE_CAMERA = 0x90, -// HID_USAGE_PAGE_ARCADE = 0x91, -// HID_USAGE_PAGE_VENDOR = 0xFFFF // 0xFF00 - 0xFFFF + HID_USAGE_PAGE_SPORT = 0x04, + HID_USAGE_PAGE_GAME = 0x05, + HID_USAGE_PAGE_GENERIC_DEVICE = 0x06, + HID_USAGE_PAGE_KEYBOARD = 0x07, + HID_USAGE_PAGE_LED = 0x08, + HID_USAGE_PAGE_BUTTON = 0x09, + HID_USAGE_PAGE_ORDINAL = 0x0a, + HID_USAGE_PAGE_TELEPHONY = 0x0b, + HID_USAGE_PAGE_CONSUMER = 0x0c, + HID_USAGE_PAGE_DIGITIZER = 0x0d, + HID_USAGE_PAGE_PID = 0x0f, + HID_USAGE_PAGE_UNICODE = 0x10, + HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14, + HID_USAGE_PAGE_MEDICAL = 0x40, + HID_USAGE_PAGE_MONITOR = 0x80, //0x80 - 0x83 + HID_USAGE_PAGE_POWER = 0x84, // 0x084 - 0x87 + HID_USAGE_PAGE_BARCODE_SCANNER = 0x8c, + HID_USAGE_PAGE_SCALE = 0x8d, + HID_USAGE_PAGE_MSR = 0x8e, + HID_USAGE_PAGE_CAMERA = 0x90, + HID_USAGE_PAGE_ARCADE = 0x91, + HID_USAGE_PAGE_VENDOR = 0xFFFF // 0xFF00 - 0xFFFF }; /// HID Usage Table - Table 6: Generic Desktop Page diff --git a/tinyusb/class/hid_device.c b/tinyusb/class/hid_device.c new file mode 100644 index 000000000..02f1974aa --- /dev/null +++ b/tinyusb/class/hid_device.c @@ -0,0 +1,62 @@ +/**************************************************************************/ +/*! + @file hid_device.c + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2013, hathach (tinyusb.org) + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This file is part of the tinyusb stack. +*/ +/**************************************************************************/ + +#include "tusb_option.h" + +#if (MODE_DEVICE_SUPPORTED && defined HOST_CLASS_HID) + +#define _TINY_USB_SOURCE_FILE_ +//--------------------------------------------------------------------+ +// INCLUDE +//--------------------------------------------------------------------+ +#include "common/common.h" +#include "hid_device.h" + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ + +//--------------------------------------------------------------------+ +// INTERNAL OBJECT & FUNCTION DECLARATION +//--------------------------------------------------------------------+ + +//--------------------------------------------------------------------+ +// IMPLEMENTATION +//--------------------------------------------------------------------+ + +#endif diff --git a/tinyusb/common/binary.h b/tinyusb/common/binary.h index 30be2a130..78305ea60 100644 --- a/tinyusb/common/binary.h +++ b/tinyusb/common/binary.h @@ -65,6 +65,8 @@ /// clear n-th bit of x #define BIT_CLR_(x, n) ( (x) & (~BIT_(n)) ) +/// test n-th bit of x +#define BIT_TEST_(x, n) ( (x) & BIT_(n) ) #if defined(__GNUC__) && !defined(__CC_ARM) diff --git a/tinyusb/device/dcd.c b/tinyusb/device/dcd.c index cd3c85063..c0115c4e5 100644 --- a/tinyusb/device/dcd.c +++ b/tinyusb/device/dcd.c @@ -151,14 +151,4 @@ bool usb_isConfigured(void) return isConfigured; } -/**************************************************************************/ -/*! - @brief Redirect the USB IRQ handler to the ROM handler -*/ -/**************************************************************************/ -void USB_IRQHandler(void) -{ - USBD_API->hw->ISR(g_hUsb); -} - #endif diff --git a/tinyusb/device/dcd.h b/tinyusb/device/dcd.h index b040bed77..be139b713 100644 --- a/tinyusb/device/dcd.h +++ b/tinyusb/device/dcd.h @@ -57,26 +57,10 @@ #include "common/common.h" -#ifdef DEVICE_ROMDRIVER - #include "romdriver/mw_usbd_rom_api.h" - #define USBD_API ((USBD_API_T*) DEVICE_ROM_DRIVER_ADDR) -#endif - - -/** \brief Initialize DCD - * - * \param[in] para1 - * \param[out] para2 - * \return Error Code of the \ref TUSB_ERROR enum - * \note - */ - -tusb_error_t dcd_init(uint8_t coreid) ATTR_WARN_UNUSED_RESULT; - +tusb_error_t dcd_init(void) ATTR_WARN_UNUSED_RESULT; tusb_error_t dcd_controller_reset(uint8_t coreid) ATTR_WARN_UNUSED_RESULT; -tusb_error_t dcd_controller_connect(uint8_t coreid) ATTR_WARN_UNUSED_RESULT; - -void dcd_isr(uint8_t hostid); +void dcd_controller_connect(uint8_t coreid); +void dcd_isr(uint8_t coreid); #ifdef __cplusplus } diff --git a/tinyusb/device/dcd_lpc13xx.h b/tinyusb/device/dcd_lpc13xx.h new file mode 100644 index 000000000..9d9780b36 --- /dev/null +++ b/tinyusb/device/dcd_lpc13xx.h @@ -0,0 +1,63 @@ +/**************************************************************************/ +/*! + @file dcd_lpc13xx.h + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2013, hathach (tinyusb.org) + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This file is part of the tinyusb stack. +*/ +/**************************************************************************/ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_DCD_LPC13XX_H_ +#define _TUSB_DCD_LPC13XX_H_ + +#define DEVICE_ROM_REG_BASE LPC_USB_BASE +#define DEVICE_ROM_DRIVER_ADDR 0x1FFF1FF8 + +#ifdef __cplusplus + extern "C" { +#endif + + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_DCD_LPC13XX_H_ */ + +/** @} */ diff --git a/tinyusb/device/dcd_lpc175x_6x.c b/tinyusb/device/dcd_lpc175x_6x.c new file mode 100644 index 000000000..8d7717e56 --- /dev/null +++ b/tinyusb/device/dcd_lpc175x_6x.c @@ -0,0 +1,63 @@ +/**************************************************************************/ +/*! + @file dcd_lpc175x_6x.c + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2013, hathach (tinyusb.org) + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This file is part of the tinyusb stack. +*/ +/**************************************************************************/ + +#include "tusb_option.h" + +#if MODE_DEVICE_SUPPORTED && (MCU == MCU_LPC175X_6X) + +#define _TINY_USB_SOURCE_FILE_ + +//--------------------------------------------------------------------+ +// INCLUDE +//--------------------------------------------------------------------+ +#include "dcd.h" +#include "dcd_lpc175x_6x.h" + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ + +//--------------------------------------------------------------------+ +// INTERNAL OBJECT & FUNCTION DECLARATION +//--------------------------------------------------------------------+ + +//--------------------------------------------------------------------+ +// IMPLEMENTATION +//--------------------------------------------------------------------+ + +#endif diff --git a/tinyusb/device/dcd_lpc175x_6x.h b/tinyusb/device/dcd_lpc175x_6x.h new file mode 100644 index 000000000..e57bfcab1 --- /dev/null +++ b/tinyusb/device/dcd_lpc175x_6x.h @@ -0,0 +1,60 @@ +/**************************************************************************/ +/*! + @file dcd_lpc175x_6x.h + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2013, hathach (tinyusb.org) + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This file is part of the tinyusb stack. +*/ +/**************************************************************************/ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_DCD_LPC175X_6X_H_ +#define _TUSB_DCD_LPC175X_6X_H_ + +#ifdef __cplusplus + extern "C" { +#endif + + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_DCD_LPC175X_6X_H_ */ + +/** @} */ diff --git a/tinyusb/device/dcd_lpc18xx_lpc43xx.h b/tinyusb/device/dcd_lpc18xx_lpc43xx.h new file mode 100644 index 000000000..a98196f6a --- /dev/null +++ b/tinyusb/device/dcd_lpc18xx_lpc43xx.h @@ -0,0 +1,62 @@ +/**************************************************************************/ +/*! + @file dcd_lpc18xx_lpc43xx.h + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2013, hathach (tinyusb.org) + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This file is part of the tinyusb stack. +*/ +/**************************************************************************/ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_DCD_LPC18XX_LPC43XX_H_ +#define _TUSB_DCD_LPC18XX_LPC43XX_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +#define DEVICE_ROM_REG_BASE LPC_USB0_BASE // TODO USB1 +#define DEVICE_ROM_DRIVER_ADDR 0x1040011C + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_DCD_LPC18XX_LPC43XX_H_ */ + +/** @} */ diff --git a/tinyusb/device/dcd_lpc43xx.c b/tinyusb/device/dcd_lpc43xx.c deleted file mode 100644 index 0d38740ba..000000000 --- a/tinyusb/device/dcd_lpc43xx.c +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************/ -/*! - @file dcd_lpc43xx.c - @author hathach (tinyusb.org) - - @section LICENSE - - Software License Agreement (BSD License) - - Copyright (c) 2013, hathach (tinyusb.org) - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the copyright holders nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - This file is part of the tinyusb stack. -*/ -/**************************************************************************/ - -#include "tusb_option.h" - -#if MODE_DEVICE_SUPPORTED && (MCU == MCU_LPC43XX) - -#define _TINY_USB_SOURCE_FILE_ - -//--------------------------------------------------------------------+ -// INCLUDE -//--------------------------------------------------------------------+ -#include "dcd_lpc43xx.h" - -//--------------------------------------------------------------------+ -// MACRO CONSTANT TYPEDEF -//--------------------------------------------------------------------+ - -//--------------------------------------------------------------------+ -// INTERNAL OBJECT & FUNCTION DECLARATION -//--------------------------------------------------------------------+ - -//--------------------------------------------------------------------+ -// IMPLEMENTATION -//--------------------------------------------------------------------+ -tusb_error_t dcd_controller_reset(uint8_t hostid) -{ - - return TUSB_ERROR_NONE; -} - -tusb_error_t dcd_controller_connect(uint8_t coreid) -{ - return TUSB_ERROR_NONE; -} - -void dcd_isr(uint8_t hostid) -{ - -} - -#endif - diff --git a/tinyusb/device/dcd_lpc43xx.h b/tinyusb/device/dcd_lpc43xx.h deleted file mode 100644 index 777626743..000000000 --- a/tinyusb/device/dcd_lpc43xx.h +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************/ -/*! - @file dcd_lpc43xx.h - @author hathach (tinyusb.org) - - @section LICENSE - - Software License Agreement (BSD License) - - Copyright (c) 2013, hathach (tinyusb.org) - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the copyright holders nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - This file is part of the tinyusb stack. -*/ -/**************************************************************************/ - -/** \ingroup TBD - * \defgroup TBD - * \brief TBD - * - * @{ - */ - -#ifndef _TUSB_DCD_LPC43XX_H_ -#define _TUSB_DCD_LPC43XX_H_ - -#include "common/common.h" - -#ifdef __cplusplus - extern "C" { -#endif - - - -#ifdef __cplusplus - } -#endif - -#endif /* _TUSB_DCD_LPC43XX_H_ */ - -/** @} */ diff --git a/tinyusb/device/dcd_nxp_romdriver.c b/tinyusb/device/dcd_nxp_romdriver.c new file mode 100644 index 000000000..8587a66f3 --- /dev/null +++ b/tinyusb/device/dcd_nxp_romdriver.c @@ -0,0 +1,166 @@ +/**************************************************************************/ +/*! + @file dcd_nxp_romdriver.c + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2013, hathach (tinyusb.org) + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This file is part of the tinyusb stack. +*/ +/**************************************************************************/ + +#include "tusb_option.h" + +#if MODE_DEVICE_SUPPORTED && TUSB_CFG_DEVICE_USE_ROM_DRIVER + +#define _TINY_USB_SOURCE_FILE_ + +//--------------------------------------------------------------------+ +// INCLUDE +//--------------------------------------------------------------------+ +#include "dcd.h" +#include "dcd_nxp_romdriver.h" +#include "romdriver/mw_usbd_rom_api.h" + +#include "tusb_descriptors.h" + +#define USBD_API ((USBD_API_T*) DEVICE_ROM_DRIVER_ADDR) +#define USB_ROM_SIZE (1024*2) // TODO dcd abstract later +uint8_t usb_RomDriver_buffer[USB_ROM_SIZE] ATTR_ALIGNED(2048) TUSB_CFG_ATTR_USBRAM; +USBD_HANDLE_T g_hUsb; + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ + + +//--------------------------------------------------------------------+ +// INTERNAL OBJECT & FUNCTION DECLARATION +//--------------------------------------------------------------------+ + + +//--------------------------------------------------------------------+ +// IMPLEMENTATION +//--------------------------------------------------------------------+ +ErrorCode_t USB_Configure_Event (USBD_HANDLE_T hUsb) +{ + USB_CORE_CTRL_T* pCtrl = (USB_CORE_CTRL_T*)hUsb; + if (pCtrl->config_value) + { +// usbd_info.state = TUSB_DEVICE_STATE_CONFIGURED; + + #if defined(DEVICE_CLASS_HID) +// ASSERT( TUSB_ERROR_NONE == tusb_hid_configured(hUsb), ERR_FAILED ); + #endif + + #ifdef TUSB_CFG_DEVICE_CDC + ASSERT( TUSB_ERROR_NONE == tusb_cdc_configured(hUsb), ERR_FAILED ); + #endif + } + + + return LPC_OK; +} + +ErrorCode_t USB_Reset_Event (USBD_HANDLE_T hUsb) +{ +// usbd_info.state = TUSB_DEVICE_STATE_UNPLUG; + return LPC_OK; +} + + +tusb_error_t dcd_init(void) +{ + uint32_t membase = (uint32_t) usb_RomDriver_buffer; + uint32_t memsize = USB_ROM_SIZE; + + USBD_API_INIT_PARAM_T usb_param = + { + .usb_reg_base = DEVICE_ROM_REG_BASE, + .max_num_ep = USB_MAX_EP_NUM, + .mem_base = membase, + .mem_size = memsize, + + .USB_Configure_Event = USB_Configure_Event, + .USB_Reset_Event = USB_Reset_Event + }; + + USB_CORE_DESCS_T desc_core = + { + .device_desc = (uint8_t*) &app_desc_device, + .string_desc = (uint8_t*) &app_desc_strings, + .full_speed_desc = (uint8_t*) &app_desc_configuration, + .high_speed_desc = (uint8_t*) &app_desc_configuration, + .device_qualifier = NULL + }; + + /* USB hardware core initialization */ + ASSERT(LPC_OK == USBD_API->hw->Init(&g_hUsb, &desc_core, &usb_param), TUSB_ERROR_FAILED); + + // TODO need to confirm the mem_size is reduced by the number of byte used + membase += (memsize - usb_param.mem_size); + memsize = usb_param.mem_size; + + + #if TUSB_CFG_DEVICE_HID_KEYBOARD + ASSERT_STATUS( tusb_hid_init(g_hUsb , &app_desc_configuration.keyboard_interface, + keyboard_report_descriptor, app_desc_configuration.keyboard_hid.wReportLength, + &membase , &memsize) ); + #endif + + #if TUSB_CFG_DEVICE_HID_MOUSE + ASSERT_STATUS( tusb_hid_init(g_hUsb , &USB_FsConfigDescriptor.HID_MouseInterface , + HID_MouseReportDescriptor, USB_FsConfigDescriptor.HID_MouseHID.DescriptorList[0].wDescriptorLength, + &membase , &memsize) ); + #endif + + + return TUSB_ERROR_NONE; +} + +tusb_error_t dcd_controller_reset(uint8_t coreid) +{ +//TODO merge with hcd_controller_reset +// default mode is device ? + return TUSB_ERROR_NONE; +} + +void dcd_controller_connect(uint8_t coreid) +{ +// USBD_API->hw->Connect(g_hUsb, 1); +} + +void dcd_isr(uint8_t coreid) +{ +// USBD_API->hw->ISR(g_hUsb); +} + +#endif + diff --git a/tinyusb/device/dcd_nxp_romdriver.h b/tinyusb/device/dcd_nxp_romdriver.h new file mode 100644 index 000000000..c185bab07 --- /dev/null +++ b/tinyusb/device/dcd_nxp_romdriver.h @@ -0,0 +1,67 @@ +/**************************************************************************/ +/*! + @file dcd_nxp_romdriver.h + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2013, hathach (tinyusb.org) + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This file is part of the tinyusb stack. +*/ +/**************************************************************************/ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_DCD_NXP_ROMDRIVER_H_ +#define _TUSB_DCD_NXP_ROMDRIVER_H_ + +#include "common/common.h" + +#ifdef __cplusplus + extern "C" { +#endif + +#if (MCU == MCU_LPC18XX) || (MCU == MCU_LPC43XX) + #include "dcd_lpc18xx_lpc43xx.h" +#else + #error forgot something, thach ? +#endif + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_DCD_NXP_ROMDRIVER_H_ */ + +/** @} */ diff --git a/tinyusb/device/romdriver/mw_usbd_hiduser.h b/tinyusb/device/romdriver/mw_usbd_hiduser.h index 79fa55d0b..72b983a5d 100644 --- a/tinyusb/device/romdriver/mw_usbd_hiduser.h +++ b/tinyusb/device/romdriver/mw_usbd_hiduser.h @@ -26,7 +26,7 @@ #define __HIDUSER_H__ #include "mw_usbd.h" -#include "mw_usbd_hid.h" +//#include "mw_usbd_hid.h" #include "mw_usbd_core.h" /** \file diff --git a/tinyusb/device/usbd.c b/tinyusb/device/usbd.c index b5a4044c0..cbbc28995 100644 --- a/tinyusb/device/usbd.c +++ b/tinyusb/device/usbd.c @@ -50,6 +50,22 @@ //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ +//typedef struct { +// volatile uint8_t state; +// +//}; +typedef struct { + volatile uint8_t state; +}usbd_info_t; // TODO rename + +usbd_info_t usbd_info; // TODO rename + +typedef struct { + void (* const init) (void); + void (* const configured) (void); + void (* const unmounted) (void); +}device_class_driver_t; + //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION @@ -60,6 +76,8 @@ //--------------------------------------------------------------------+ tusb_error_t usbd_init (void) { + ASSERT_STATUS ( dcd_init() ); + return TUSB_ERROR_NONE; } diff --git a/tinyusb/hal/hal_lpc11uxx.h b/tinyusb/hal/hal_lpc11uxx.h index 4b77461fc..4374586d2 100644 --- a/tinyusb/hal/hal_lpc11uxx.h +++ b/tinyusb/hal/hal_lpc11uxx.h @@ -54,12 +54,9 @@ #include "LPC11Uxx.h" -#define DEVICE_ROMDRIVER -#define DEVICE_ROM_REG_BASE LPC_USB_BASE +#define DEVICE_ROM_REG_BASE LPC_USB_BASE #define DEVICE_ROM_DRIVER_ADDR 0x1FFF1FF8 - - #ifdef __cplusplus extern "C" { #endif diff --git a/tinyusb/hal/hal_lpc13uxx.h b/tinyusb/hal/hal_lpc13uxx.h index da4481341..259f9de11 100644 --- a/tinyusb/hal/hal_lpc13uxx.h +++ b/tinyusb/hal/hal_lpc13uxx.h @@ -54,10 +54,6 @@ #include "LPC13Uxx.h" -#define DEVICE_ROMDRIVER -#define DEVICE_ROM_REG_BASE LPC_USB_BASE -#define DEVICE_ROM_DRIVER_ADDR 0x1FFF1FF8 - #ifdef __cplusplus extern "C" { #endif diff --git a/tinyusb/hal/hal_lpc43xx.c b/tinyusb/hal/hal_lpc43xx.c index 2863aba0a..e700041b1 100644 --- a/tinyusb/hal/hal_lpc43xx.c +++ b/tinyusb/hal/hal_lpc43xx.c @@ -69,8 +69,8 @@ tusb_error_t hal_init(void) hcd_controller_reset(0); // TODO where to place prototype LPC_USB0->USBMODE_H = LPC43XX_USBMODE_HOST | (LPC43XX_USBMODE_VBUS_HIGH << 5); #else // TODO OTG - dcd_controller_reset(0); - LPC_USB0->USBMODE_D = LPC43XX_USBMODE_DEVICE; +// dcd_controller_reset(0); +// LPC_USB0->USBMODE_D = LPC43XX_USBMODE_DEVICE; dcd_controller_connect(0); #endif @@ -91,8 +91,8 @@ tusb_error_t hal_init(void) hcd_controller_reset(1); // TODO where to place prototype LPC_USB1->USBMODE_H = LPC43XX_USBMODE_HOST | (LPC43XX_USBMODE_VBUS_HIGH << 5); #else // TODO OTG - dcd_controller_reset(1); - LPC_USB0->USBMODE_D = LPC43XX_USBMODE_DEVICE; +// dcd_controller_reset(1); +// LPC_USB0->USBMODE_D = LPC43XX_USBMODE_DEVICE; dcd_controller_connect(1); #endif diff --git a/tinyusb/hal/hal_lpc43xx.h b/tinyusb/hal/hal_lpc43xx.h index 1f56e8284..77a0332de 100644 --- a/tinyusb/hal/hal_lpc43xx.h +++ b/tinyusb/hal/hal_lpc43xx.h @@ -58,9 +58,6 @@ extern "C" { #endif -#define DEVICE_ROMDRIVER -#define DEVICE_ROM_REG_BASE LPC_USB0_BASE // TODO USB1 -#define DEVICE_ROM_DRIVER_ADDR 0x1040011C static inline void hal_interrupt_enable(uint8_t controller_id) { diff --git a/tinyusb/tusb_option.h b/tinyusb/tusb_option.h index 75a01f103..11f961d2c 100644 --- a/tinyusb/tusb_option.h +++ b/tinyusb/tusb_option.h @@ -158,6 +158,10 @@ //--------------------------------------------------------------------+ //#if MODE_DEVICE_SUPPORTED +#if !TUSB_CFG_DEVICE_USE_ROM_DRIVER + #error only rom driver is supported now +#endif + #define DEVICE_CLASS_HID ( (defined TUSB_CFG_DEVICE_HID_KEYBOARD) || (defined TUSB_CFG_DEVICE_HID_MOUSE) ) // TODO Device APP -- cgit v1.3.1