USB device stack
Dependents: mbed-mX-USB-TEST1 USBMSD_SD_HID_HelloWorld HidTest MIDI_usb_bridge ... more
Legacy Warning
This is an mbed 2 library. To learn more about mbed OS 5, visit the docs.
Pull requests against this repository are no longer supported. Please raise against mbed OS 5 as documented above.
Diff: USBDevice/TARGET_Silicon_Labs/inc/em_usbtypes.h
- Revision:
- 59:2af474687369
diff -r f3cad7e6984e -r 2af474687369 USBDevice/TARGET_Silicon_Labs/inc/em_usbtypes.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/USBDevice/TARGET_Silicon_Labs/inc/em_usbtypes.h Thu Aug 13 15:46:06 2015 +0100 @@ -0,0 +1,230 @@ +/***************************************************************************//** + * @file em_usbtypes.h + * @brief USB protocol stack library, internal type definitions. + * @version 3.20.14 + ******************************************************************************* + * @section License + * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b> + ******************************************************************************* + * + * Licensed 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. + * + ******************************************************************************/ + +#ifndef __EM_USBTYPES_H +#define __EM_USBTYPES_H + +#include "em_device.h" +#if defined( USB_PRESENT ) && ( USB_COUNT == 1 ) +#include "em_usb.h" +#if defined( USB_DEVICE ) || defined( USB_HOST ) + +#ifdef __cplusplus +extern "C" { +#endif + +/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */ + +/* Limits imposed by the USB peripheral */ +#define NP_RX_QUE_DEPTH 8 +#define HP_RX_QUE_DEPTH 8 +#define MAX_XFER_LEN 524287L /* 2^19 - 1 bytes */ +#define MAX_PACKETS_PR_XFER 1023 /* 2^10 - 1 packets */ +#if defined( _USB_DIEPTXF6_MASK ) + #define MAX_NUM_TX_FIFOS 6 /* In addition to EP0 Tx FIFO */ + #define MAX_NUM_IN_EPS 6 /* In addition to EP0 */ + #define MAX_NUM_OUT_EPS 6 /* In addition to EP0 */ + #define MAX_DEVICE_FIFO_SIZE_INWORDS 512U +#else + #define MAX_NUM_TX_FIFOS 3 /* In addition to EP0 Tx FIFO */ + #define MAX_NUM_IN_EPS 3 /* In addition to EP0 */ + #define MAX_NUM_OUT_EPS 3 /* In addition to EP0 */ + #define MAX_DEVICE_FIFO_SIZE_INWORDS 384U +#endif +#define MIN_EP_FIFO_SIZE_INWORDS 16U /* Unit is words (32bit) */ +#define MIN_EP_FIFO_SIZE_INBYTES 64U /* Unit is bytes (8bit) */ + +/* For MCU's without USB host capability. */ +#if !defined( USB_ROUTE_VBUSENPEN ) +#define USB_VBUS_SWITCH_NOT_PRESENT +#endif + +/* Limit imposed by the USB standard */ +#define MAX_USB_EP_NUM 15 + +#if defined( USB_DEVICE ) + /* Check power saving modes. */ + #ifndef USB_PWRSAVE_MODE + /* Default powersave-mode is OFF. */ + #define USB_PWRSAVE_MODE USB_PWRSAVE_MODE_OFF + #else + #if ( USB_PWRSAVE_MODE & \ + ~( USB_PWRSAVE_MODE_ONSUSPEND | USB_PWRSAVE_MODE_ONVBUSOFF | \ + USB_PWRSAVE_MODE_ENTEREM2 ) ) + #error "Illegal USB powersave mode." + #endif + #endif /* ifndef USB_PWRSAVE_MODE */ + + /* Check power saving low frequency clock selection. */ + #ifndef USB_USBC_32kHz_CLK + /* Default clock source is LFXO. */ + #define USB_USBC_32kHz_CLK USB_USBC_32kHz_CLK_LFXO + #else + #if ( ( USB_USBC_32kHz_CLK != USB_USBC_32kHz_CLK_LFXO ) && \ + ( USB_USBC_32kHz_CLK != USB_USBC_32kHz_CLK_LFRCO ) ) + #error "Illegal USB 32kHz powersave clock selection." + #endif + #endif /* ifndef USB_USBC_32kHz_CLK */ +#endif /* defined( USB_DEVICE ) */ + +#if defined( USB_HOST ) + /* Check VBUS overcurrent definitions. */ + #ifndef USB_VBUSOVRCUR_PORT + #define USB_VBUSOVRCUR_PORT gpioPortE + #define USB_VBUSOVRCUR_PIN 2 + #define USB_VBUSOVRCUR_POLARITY USB_VBUSOVRCUR_POLARITY_LOW + #endif +#endif + +/* Developer mode debugging macro's */ +#if defined( DEBUG_USB_INT_LO ) + #define DEBUG_USB_INT_LO_PUTS( s ) USB_PUTS( s ) + #define DEBUG_USB_INT_LO_PUTCHAR( c ) USB_PUTCHAR( c ) +#else + #define DEBUG_USB_INT_LO_PUTS( s ) + #define DEBUG_USB_INT_LO_PUTCHAR( c ) +#endif /* defined( DEBUG_USB_INT_LO ) */ + +#if defined( DEBUG_USB_INT_HI ) + #define DEBUG_USB_INT_HI_PUTS( s ) USB_PUTS( s ) + #define DEBUG_USB_INT_HI_PUTCHAR( c ) USB_PUTCHAR( c ) +#else + #define DEBUG_USB_INT_HI_PUTS( s ) + #define DEBUG_USB_INT_HI_PUTCHAR( c ) +#endif /* defined( DEBUG_USB_INT_HI ) */ + +#if defined( USB_HOST ) + #if defined( NUM_APP_TIMERS ) + #define HOSTPORT_TIMER_INDEX (NUM_APP_TIMERS) + #else + #define HOSTPORT_TIMER_INDEX (0) + #endif + #define HOSTCH_TIMER_INDEX (HOSTPORT_TIMER_INDEX + 1 ) +#endif + +/* Macros for selecting a hardware timer. */ +#define USB_TIMER0 0 +#define USB_TIMER1 1 +#define USB_TIMER2 2 +#define USB_TIMER3 3 + +#if defined( USB_HOST ) +#define HCS_NAK 0x01 +#define HCS_STALL 0x02 +#define HCS_XACT 0x04 +#define HCS_TGLERR 0x08 +#define HCS_BABBLE 0x10 +#define HCS_TIMEOUT 0x20 +#define HCS_COMPLETED 0x40 +#define HCS_RETRY 0x80 +#endif + +#if defined( USB_DEVICE ) +typedef enum +{ + D_EP_IDLE = 0, + D_EP_TRANSMITTING = 1, + D_EP_RECEIVING = 2, + D_EP0_IN_STATUS = 3, + D_EP0_OUT_STATUS = 4 +} USBD_EpState_TypeDef; + +typedef struct +{ + bool in; + uint8_t zlp; + uint8_t num; + uint8_t addr; + uint8_t type; + uint8_t txFifoNum; + uint8_t *buf; + uint16_t packetSize; + uint16_t mask; + uint32_t remaining; + uint32_t xferred; + uint32_t hwXferSize; + uint32_t fifoSize; + USBD_EpState_TypeDef state; + USB_XferCompleteCb_TypeDef xferCompleteCb; +} USBD_Ep_TypeDef; + +typedef struct +{ + USB_Setup_TypeDef *setup; + USB_Setup_TypeDef setupPkt[3]; + uint8_t configurationValue; /* Must be DWORD aligned */ + bool remoteWakeupEnabled; + uint8_t numberOfStrings; + uint8_t numberOfInterfaces; + USBD_State_TypeDef state; + USBD_State_TypeDef savedState; + USBD_State_TypeDef lastState; + const USB_DeviceDescriptor_TypeDef *deviceDescriptor; + const USB_ConfigurationDescriptor_TypeDef *configDescriptor; + const void * const *stringDescriptors; + const USBD_Callbacks_TypeDef *callbacks; + USBD_Ep_TypeDef ep[ NUM_EP_USED + 1 ]; + uint8_t inEpAddr2EpIndex[ MAX_USB_EP_NUM + 1 ]; + uint8_t outEpAddr2EpIndex[ MAX_USB_EP_NUM + 1 ]; + uint32_t ep0MpsCode; +} USBD_Device_TypeDef; +#endif /* defined( USB_DEVICE ) */ + +#if defined( USB_HOST ) +typedef enum +{ + H_PORT_DISCONNECTED = 0, + H_PORT_CONNECTED_DEBOUNCING = 1, + H_PORT_CONNECTED_RESETTING = 2, + H_PORT_CONNECTED = 3, + H_PORT_OVERCURRENT = 4 +} USBH_PortState_TypeDef; + +typedef struct +{ + int debounceTime; + int resetTime; +} USBH_AttachTiming_TypeDef; + +typedef struct +{ + uint8_t *buf; + int errorCnt; + uint32_t remaining; + uint32_t xferred; + uint32_t hwXferSize; + uint8_t status; + bool idle; + USBH_Ep_TypeDef *ep; +} USBH_Hc_TypeDef; +#endif /* defined( USB_HOST ) */ + +/** @endcond */ + +#ifdef __cplusplus +} +#endif + +#endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */ +#endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */ +#endif /* __EM_USBTYPES_H */