max4146x_comp

Dependencies:   MAX14690

Committer:
sdivarci
Date:
Sun Oct 25 20:10:02 2020 +0000
Revision:
0:0061165683ee
sdivarci

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sdivarci 0:0061165683ee 1 /***************************************************************************//**
sdivarci 0:0061165683ee 2 * @file em_usbtypes.h
sdivarci 0:0061165683ee 3 * @brief USB protocol stack library, internal type definitions.
sdivarci 0:0061165683ee 4 * @version 3.20.14
sdivarci 0:0061165683ee 5 *******************************************************************************
sdivarci 0:0061165683ee 6 * @section License
sdivarci 0:0061165683ee 7 * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
sdivarci 0:0061165683ee 8 *******************************************************************************
sdivarci 0:0061165683ee 9 *
sdivarci 0:0061165683ee 10 * Licensed under the Apache License, Version 2.0 (the "License");
sdivarci 0:0061165683ee 11 * you may not use this file except in compliance with the License.
sdivarci 0:0061165683ee 12 * You may obtain a copy of the License at
sdivarci 0:0061165683ee 13 *
sdivarci 0:0061165683ee 14 * http://www.apache.org/licenses/LICENSE-2.0
sdivarci 0:0061165683ee 15 *
sdivarci 0:0061165683ee 16 * Unless required by applicable law or agreed to in writing, software
sdivarci 0:0061165683ee 17 * distributed under the License is distributed on an "AS IS" BASIS,
sdivarci 0:0061165683ee 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
sdivarci 0:0061165683ee 19 * See the License for the specific language governing permissions and
sdivarci 0:0061165683ee 20 * limitations under the License.
sdivarci 0:0061165683ee 21 *
sdivarci 0:0061165683ee 22 ******************************************************************************/
sdivarci 0:0061165683ee 23
sdivarci 0:0061165683ee 24 #ifndef __EM_USBTYPES_H
sdivarci 0:0061165683ee 25 #define __EM_USBTYPES_H
sdivarci 0:0061165683ee 26
sdivarci 0:0061165683ee 27 #include "em_device.h"
sdivarci 0:0061165683ee 28 #if defined( USB_PRESENT ) && ( USB_COUNT == 1 )
sdivarci 0:0061165683ee 29 #include "em_usb.h"
sdivarci 0:0061165683ee 30 #if defined( USB_DEVICE ) || defined( USB_HOST )
sdivarci 0:0061165683ee 31
sdivarci 0:0061165683ee 32 #ifdef __cplusplus
sdivarci 0:0061165683ee 33 extern "C" {
sdivarci 0:0061165683ee 34 #endif
sdivarci 0:0061165683ee 35
sdivarci 0:0061165683ee 36 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
sdivarci 0:0061165683ee 37
sdivarci 0:0061165683ee 38 /* Limits imposed by the USB peripheral */
sdivarci 0:0061165683ee 39 #define NP_RX_QUE_DEPTH 8
sdivarci 0:0061165683ee 40 #define HP_RX_QUE_DEPTH 8
sdivarci 0:0061165683ee 41 #define MAX_XFER_LEN 524287L /* 2^19 - 1 bytes */
sdivarci 0:0061165683ee 42 #define MAX_PACKETS_PR_XFER 1023 /* 2^10 - 1 packets */
sdivarci 0:0061165683ee 43 #if defined( _USB_DIEPTXF6_MASK )
sdivarci 0:0061165683ee 44 #define MAX_NUM_TX_FIFOS 6 /* In addition to EP0 Tx FIFO */
sdivarci 0:0061165683ee 45 #define MAX_NUM_IN_EPS 6 /* In addition to EP0 */
sdivarci 0:0061165683ee 46 #define MAX_NUM_OUT_EPS 6 /* In addition to EP0 */
sdivarci 0:0061165683ee 47 #define MAX_DEVICE_FIFO_SIZE_INWORDS 512U
sdivarci 0:0061165683ee 48 #else
sdivarci 0:0061165683ee 49 #define MAX_NUM_TX_FIFOS 3 /* In addition to EP0 Tx FIFO */
sdivarci 0:0061165683ee 50 #define MAX_NUM_IN_EPS 3 /* In addition to EP0 */
sdivarci 0:0061165683ee 51 #define MAX_NUM_OUT_EPS 3 /* In addition to EP0 */
sdivarci 0:0061165683ee 52 #define MAX_DEVICE_FIFO_SIZE_INWORDS 384U
sdivarci 0:0061165683ee 53 #endif
sdivarci 0:0061165683ee 54 #define MIN_EP_FIFO_SIZE_INWORDS 16U /* Unit is words (32bit) */
sdivarci 0:0061165683ee 55 #define MIN_EP_FIFO_SIZE_INBYTES 64U /* Unit is bytes (8bit) */
sdivarci 0:0061165683ee 56
sdivarci 0:0061165683ee 57 /* For MCU's without USB host capability. */
sdivarci 0:0061165683ee 58 #if !defined( USB_ROUTE_VBUSENPEN )
sdivarci 0:0061165683ee 59 #define USB_VBUS_SWITCH_NOT_PRESENT
sdivarci 0:0061165683ee 60 #endif
sdivarci 0:0061165683ee 61
sdivarci 0:0061165683ee 62 /* Limit imposed by the USB standard */
sdivarci 0:0061165683ee 63 #define MAX_USB_EP_NUM 15
sdivarci 0:0061165683ee 64
sdivarci 0:0061165683ee 65 #if defined( USB_DEVICE )
sdivarci 0:0061165683ee 66 /* Check power saving modes. */
sdivarci 0:0061165683ee 67 #ifndef USB_PWRSAVE_MODE
sdivarci 0:0061165683ee 68 /* Default powersave-mode is OFF. */
sdivarci 0:0061165683ee 69 #define USB_PWRSAVE_MODE USB_PWRSAVE_MODE_OFF
sdivarci 0:0061165683ee 70 #else
sdivarci 0:0061165683ee 71 #if ( USB_PWRSAVE_MODE & \
sdivarci 0:0061165683ee 72 ~( USB_PWRSAVE_MODE_ONSUSPEND | USB_PWRSAVE_MODE_ONVBUSOFF | \
sdivarci 0:0061165683ee 73 USB_PWRSAVE_MODE_ENTEREM2 ) )
sdivarci 0:0061165683ee 74 #error "Illegal USB powersave mode."
sdivarci 0:0061165683ee 75 #endif
sdivarci 0:0061165683ee 76 #endif /* ifndef USB_PWRSAVE_MODE */
sdivarci 0:0061165683ee 77
sdivarci 0:0061165683ee 78 /* Check power saving low frequency clock selection. */
sdivarci 0:0061165683ee 79 #ifndef USB_USBC_32kHz_CLK
sdivarci 0:0061165683ee 80 /* Default clock source is LFXO. */
sdivarci 0:0061165683ee 81 #define USB_USBC_32kHz_CLK USB_USBC_32kHz_CLK_LFXO
sdivarci 0:0061165683ee 82 #else
sdivarci 0:0061165683ee 83 #if ( ( USB_USBC_32kHz_CLK != USB_USBC_32kHz_CLK_LFXO ) && \
sdivarci 0:0061165683ee 84 ( USB_USBC_32kHz_CLK != USB_USBC_32kHz_CLK_LFRCO ) )
sdivarci 0:0061165683ee 85 #error "Illegal USB 32kHz powersave clock selection."
sdivarci 0:0061165683ee 86 #endif
sdivarci 0:0061165683ee 87 #endif /* ifndef USB_USBC_32kHz_CLK */
sdivarci 0:0061165683ee 88 #endif /* defined( USB_DEVICE ) */
sdivarci 0:0061165683ee 89
sdivarci 0:0061165683ee 90 #if defined( USB_HOST )
sdivarci 0:0061165683ee 91 /* Check VBUS overcurrent definitions. */
sdivarci 0:0061165683ee 92 #ifndef USB_VBUSOVRCUR_PORT
sdivarci 0:0061165683ee 93 #define USB_VBUSOVRCUR_PORT gpioPortE
sdivarci 0:0061165683ee 94 #define USB_VBUSOVRCUR_PIN 2
sdivarci 0:0061165683ee 95 #define USB_VBUSOVRCUR_POLARITY USB_VBUSOVRCUR_POLARITY_LOW
sdivarci 0:0061165683ee 96 #endif
sdivarci 0:0061165683ee 97 #endif
sdivarci 0:0061165683ee 98
sdivarci 0:0061165683ee 99 /* Developer mode debugging macro's */
sdivarci 0:0061165683ee 100 #if defined( DEBUG_USB_INT_LO )
sdivarci 0:0061165683ee 101 #define DEBUG_USB_INT_LO_PUTS( s ) USB_PUTS( s )
sdivarci 0:0061165683ee 102 #define DEBUG_USB_INT_LO_PUTCHAR( c ) USB_PUTCHAR( c )
sdivarci 0:0061165683ee 103 #else
sdivarci 0:0061165683ee 104 #define DEBUG_USB_INT_LO_PUTS( s )
sdivarci 0:0061165683ee 105 #define DEBUG_USB_INT_LO_PUTCHAR( c )
sdivarci 0:0061165683ee 106 #endif /* defined( DEBUG_USB_INT_LO ) */
sdivarci 0:0061165683ee 107
sdivarci 0:0061165683ee 108 #if defined( DEBUG_USB_INT_HI )
sdivarci 0:0061165683ee 109 #define DEBUG_USB_INT_HI_PUTS( s ) USB_PUTS( s )
sdivarci 0:0061165683ee 110 #define DEBUG_USB_INT_HI_PUTCHAR( c ) USB_PUTCHAR( c )
sdivarci 0:0061165683ee 111 #else
sdivarci 0:0061165683ee 112 #define DEBUG_USB_INT_HI_PUTS( s )
sdivarci 0:0061165683ee 113 #define DEBUG_USB_INT_HI_PUTCHAR( c )
sdivarci 0:0061165683ee 114 #endif /* defined( DEBUG_USB_INT_HI ) */
sdivarci 0:0061165683ee 115
sdivarci 0:0061165683ee 116 #if defined( USB_HOST )
sdivarci 0:0061165683ee 117 #if defined( NUM_APP_TIMERS )
sdivarci 0:0061165683ee 118 #define HOSTPORT_TIMER_INDEX (NUM_APP_TIMERS)
sdivarci 0:0061165683ee 119 #else
sdivarci 0:0061165683ee 120 #define HOSTPORT_TIMER_INDEX (0)
sdivarci 0:0061165683ee 121 #endif
sdivarci 0:0061165683ee 122 #define HOSTCH_TIMER_INDEX (HOSTPORT_TIMER_INDEX + 1 )
sdivarci 0:0061165683ee 123 #endif
sdivarci 0:0061165683ee 124
sdivarci 0:0061165683ee 125 /* Macros for selecting a hardware timer. */
sdivarci 0:0061165683ee 126 #define USB_TIMER0 0
sdivarci 0:0061165683ee 127 #define USB_TIMER1 1
sdivarci 0:0061165683ee 128 #define USB_TIMER2 2
sdivarci 0:0061165683ee 129 #define USB_TIMER3 3
sdivarci 0:0061165683ee 130
sdivarci 0:0061165683ee 131 #if defined( USB_HOST )
sdivarci 0:0061165683ee 132 #define HCS_NAK 0x01
sdivarci 0:0061165683ee 133 #define HCS_STALL 0x02
sdivarci 0:0061165683ee 134 #define HCS_XACT 0x04
sdivarci 0:0061165683ee 135 #define HCS_TGLERR 0x08
sdivarci 0:0061165683ee 136 #define HCS_BABBLE 0x10
sdivarci 0:0061165683ee 137 #define HCS_TIMEOUT 0x20
sdivarci 0:0061165683ee 138 #define HCS_COMPLETED 0x40
sdivarci 0:0061165683ee 139 #define HCS_RETRY 0x80
sdivarci 0:0061165683ee 140 #endif
sdivarci 0:0061165683ee 141
sdivarci 0:0061165683ee 142 #if defined( USB_DEVICE )
sdivarci 0:0061165683ee 143 typedef enum
sdivarci 0:0061165683ee 144 {
sdivarci 0:0061165683ee 145 D_EP_IDLE = 0,
sdivarci 0:0061165683ee 146 D_EP_TRANSMITTING = 1,
sdivarci 0:0061165683ee 147 D_EP_RECEIVING = 2,
sdivarci 0:0061165683ee 148 D_EP0_IN_STATUS = 3,
sdivarci 0:0061165683ee 149 D_EP0_OUT_STATUS = 4
sdivarci 0:0061165683ee 150 } USBD_EpState_TypeDef;
sdivarci 0:0061165683ee 151
sdivarci 0:0061165683ee 152 typedef struct
sdivarci 0:0061165683ee 153 {
sdivarci 0:0061165683ee 154 bool in;
sdivarci 0:0061165683ee 155 uint8_t zlp;
sdivarci 0:0061165683ee 156 uint8_t num;
sdivarci 0:0061165683ee 157 uint8_t addr;
sdivarci 0:0061165683ee 158 uint8_t type;
sdivarci 0:0061165683ee 159 uint8_t txFifoNum;
sdivarci 0:0061165683ee 160 uint8_t *buf;
sdivarci 0:0061165683ee 161 uint16_t packetSize;
sdivarci 0:0061165683ee 162 uint16_t mask;
sdivarci 0:0061165683ee 163 uint32_t remaining;
sdivarci 0:0061165683ee 164 uint32_t xferred;
sdivarci 0:0061165683ee 165 uint32_t hwXferSize;
sdivarci 0:0061165683ee 166 uint32_t fifoSize;
sdivarci 0:0061165683ee 167 USBD_EpState_TypeDef state;
sdivarci 0:0061165683ee 168 USB_XferCompleteCb_TypeDef xferCompleteCb;
sdivarci 0:0061165683ee 169 } USBD_Ep_TypeDef;
sdivarci 0:0061165683ee 170
sdivarci 0:0061165683ee 171 typedef struct
sdivarci 0:0061165683ee 172 {
sdivarci 0:0061165683ee 173 USB_Setup_TypeDef *setup;
sdivarci 0:0061165683ee 174 USB_Setup_TypeDef setupPkt[3];
sdivarci 0:0061165683ee 175 uint8_t configurationValue; /* Must be DWORD aligned */
sdivarci 0:0061165683ee 176 bool remoteWakeupEnabled;
sdivarci 0:0061165683ee 177 uint8_t numberOfStrings;
sdivarci 0:0061165683ee 178 uint8_t numberOfInterfaces;
sdivarci 0:0061165683ee 179 USBD_State_TypeDef state;
sdivarci 0:0061165683ee 180 USBD_State_TypeDef savedState;
sdivarci 0:0061165683ee 181 USBD_State_TypeDef lastState;
sdivarci 0:0061165683ee 182 const USB_DeviceDescriptor_TypeDef *deviceDescriptor;
sdivarci 0:0061165683ee 183 const USB_ConfigurationDescriptor_TypeDef *configDescriptor;
sdivarci 0:0061165683ee 184 const void * const *stringDescriptors;
sdivarci 0:0061165683ee 185 const USBD_Callbacks_TypeDef *callbacks;
sdivarci 0:0061165683ee 186 USBD_Ep_TypeDef ep[ NUM_EP_USED + 1 ];
sdivarci 0:0061165683ee 187 uint8_t inEpAddr2EpIndex[ MAX_USB_EP_NUM + 1 ];
sdivarci 0:0061165683ee 188 uint8_t outEpAddr2EpIndex[ MAX_USB_EP_NUM + 1 ];
sdivarci 0:0061165683ee 189 uint32_t ep0MpsCode;
sdivarci 0:0061165683ee 190 } USBD_Device_TypeDef;
sdivarci 0:0061165683ee 191 #endif /* defined( USB_DEVICE ) */
sdivarci 0:0061165683ee 192
sdivarci 0:0061165683ee 193 #if defined( USB_HOST )
sdivarci 0:0061165683ee 194 typedef enum
sdivarci 0:0061165683ee 195 {
sdivarci 0:0061165683ee 196 H_PORT_DISCONNECTED = 0,
sdivarci 0:0061165683ee 197 H_PORT_CONNECTED_DEBOUNCING = 1,
sdivarci 0:0061165683ee 198 H_PORT_CONNECTED_RESETTING = 2,
sdivarci 0:0061165683ee 199 H_PORT_CONNECTED = 3,
sdivarci 0:0061165683ee 200 H_PORT_OVERCURRENT = 4
sdivarci 0:0061165683ee 201 } USBH_PortState_TypeDef;
sdivarci 0:0061165683ee 202
sdivarci 0:0061165683ee 203 typedef struct
sdivarci 0:0061165683ee 204 {
sdivarci 0:0061165683ee 205 int debounceTime;
sdivarci 0:0061165683ee 206 int resetTime;
sdivarci 0:0061165683ee 207 } USBH_AttachTiming_TypeDef;
sdivarci 0:0061165683ee 208
sdivarci 0:0061165683ee 209 typedef struct
sdivarci 0:0061165683ee 210 {
sdivarci 0:0061165683ee 211 uint8_t *buf;
sdivarci 0:0061165683ee 212 int errorCnt;
sdivarci 0:0061165683ee 213 uint32_t remaining;
sdivarci 0:0061165683ee 214 uint32_t xferred;
sdivarci 0:0061165683ee 215 uint32_t hwXferSize;
sdivarci 0:0061165683ee 216 uint8_t status;
sdivarci 0:0061165683ee 217 bool idle;
sdivarci 0:0061165683ee 218 USBH_Ep_TypeDef *ep;
sdivarci 0:0061165683ee 219 } USBH_Hc_TypeDef;
sdivarci 0:0061165683ee 220 #endif /* defined( USB_HOST ) */
sdivarci 0:0061165683ee 221
sdivarci 0:0061165683ee 222 /** @endcond */
sdivarci 0:0061165683ee 223
sdivarci 0:0061165683ee 224 #ifdef __cplusplus
sdivarci 0:0061165683ee 225 }
sdivarci 0:0061165683ee 226 #endif
sdivarci 0:0061165683ee 227
sdivarci 0:0061165683ee 228 #endif /* defined( USB_DEVICE ) || defined( USB_HOST ) */
sdivarci 0:0061165683ee 229 #endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
sdivarci 0:0061165683ee 230 #endif /* __EM_USBTYPES_H */