USBDevice with MAX32620HSP platform support

Fork of USBDevice by mbed official

Revision:
59:2af474687369
--- /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 */