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_usbd.h
sdivarci 0:0061165683ee 3 * @brief USB protocol stack library API for EFM32.
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_USBD_H
sdivarci 0:0061165683ee 25 #define __EM_USBD_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 )
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 #if defined( DEBUG_USB_API )
sdivarci 0:0061165683ee 39 #define DEBUG_TRACE_ABORT( x ) \
sdivarci 0:0061165683ee 40 { \
sdivarci 0:0061165683ee 41 if ( x == USB_STATUS_EP_STALLED ) \
sdivarci 0:0061165683ee 42 { DEBUG_USB_API_PUTS( "\nEP cb(), EP stalled" ); } \
sdivarci 0:0061165683ee 43 else if ( x == USB_STATUS_EP_ABORTED ) \
sdivarci 0:0061165683ee 44 { DEBUG_USB_API_PUTS( "\nEP cb(), EP aborted" ); } \
sdivarci 0:0061165683ee 45 else if ( x == USB_STATUS_DEVICE_UNCONFIGURED ) \
sdivarci 0:0061165683ee 46 { DEBUG_USB_API_PUTS( "\nEP cb(), device unconfigured" ); } \
sdivarci 0:0061165683ee 47 else if ( x == USB_STATUS_DEVICE_SUSPENDED ) \
sdivarci 0:0061165683ee 48 { DEBUG_USB_API_PUTS( "\nEP cb(), device suspended" ); } \
sdivarci 0:0061165683ee 49 else /* ( x == USB_STATUS_DEVICE_RESET ) */ \
sdivarci 0:0061165683ee 50 { DEBUG_USB_API_PUTS( "\nEP cb(), device reset" ); } \
sdivarci 0:0061165683ee 51 }
sdivarci 0:0061165683ee 52 #else
sdivarci 0:0061165683ee 53 #define DEBUG_TRACE_ABORT( x )
sdivarci 0:0061165683ee 54 #endif
sdivarci 0:0061165683ee 55
sdivarci 0:0061165683ee 56 extern USBD_Device_TypeDef *dev;
sdivarci 0:0061165683ee 57 extern volatile bool USBD_poweredDown;
sdivarci 0:0061165683ee 58
sdivarci 0:0061165683ee 59 __STATIC_INLINE void USBD_ArmEp0( USBD_Ep_TypeDef *ep );
sdivarci 0:0061165683ee 60 __STATIC_INLINE void USBD_ArmEpN( USBD_Ep_TypeDef *ep );
sdivarci 0:0061165683ee 61 __STATIC_INLINE void USBD_AbortEp( USBD_Ep_TypeDef *ep );
sdivarci 0:0061165683ee 62
sdivarci 0:0061165683ee 63 void USBD_SetUsbState( USBD_State_TypeDef newState );
sdivarci 0:0061165683ee 64
sdivarci 0:0061165683ee 65 int USBDCH9_SetupCmd( USBD_Device_TypeDef *device );
sdivarci 0:0061165683ee 66
sdivarci 0:0061165683ee 67 void USBDEP_Ep0Handler( USBD_Device_TypeDef *device );
sdivarci 0:0061165683ee 68 void USBDEP_EpHandler( uint8_t epAddr );
sdivarci 0:0061165683ee 69
sdivarci 0:0061165683ee 70 __STATIC_INLINE void USBD_ActivateAllEps( bool forceIdle )
sdivarci 0:0061165683ee 71 {
sdivarci 0:0061165683ee 72 int i;
sdivarci 0:0061165683ee 73
sdivarci 0:0061165683ee 74 for ( i = 1; i <= NUM_EP_USED; i++ )
sdivarci 0:0061165683ee 75 {
sdivarci 0:0061165683ee 76 USBDHAL_ActivateEp( &dev->ep[ i ], forceIdle );
sdivarci 0:0061165683ee 77 }
sdivarci 0:0061165683ee 78 }
sdivarci 0:0061165683ee 79
sdivarci 0:0061165683ee 80 __STATIC_INLINE void USBD_ArmEp( USBD_Ep_TypeDef *ep )
sdivarci 0:0061165683ee 81 {
sdivarci 0:0061165683ee 82 if ( ep->num == 0 )
sdivarci 0:0061165683ee 83 {
sdivarci 0:0061165683ee 84 USBD_ArmEp0( ep );
sdivarci 0:0061165683ee 85 }
sdivarci 0:0061165683ee 86 else
sdivarci 0:0061165683ee 87 {
sdivarci 0:0061165683ee 88 USBD_ArmEpN( ep );
sdivarci 0:0061165683ee 89 }
sdivarci 0:0061165683ee 90 }
sdivarci 0:0061165683ee 91
sdivarci 0:0061165683ee 92 __STATIC_INLINE void USBD_ArmEp0( USBD_Ep_TypeDef *ep )
sdivarci 0:0061165683ee 93 {
sdivarci 0:0061165683ee 94 if ( ep->in )
sdivarci 0:0061165683ee 95 {
sdivarci 0:0061165683ee 96 if ( ep->remaining == 0 ) /* Zero Length Packet? */
sdivarci 0:0061165683ee 97 {
sdivarci 0:0061165683ee 98 ep->zlp = 1;
sdivarci 0:0061165683ee 99 }
sdivarci 0:0061165683ee 100
sdivarci 0:0061165683ee 101 USBDHAL_SetEp0InDmaPtr( ep->buf );
sdivarci 0:0061165683ee 102 USBDHAL_StartEp0In( EFM32_MIN( ep->remaining, ep->packetSize ),
sdivarci 0:0061165683ee 103 dev->ep0MpsCode );
sdivarci 0:0061165683ee 104 }
sdivarci 0:0061165683ee 105 else
sdivarci 0:0061165683ee 106 {
sdivarci 0:0061165683ee 107 USBDHAL_SetEp0OutDmaPtr( ep->buf );
sdivarci 0:0061165683ee 108 USBDHAL_StartEp0Out( ep->packetSize, dev->ep0MpsCode );
sdivarci 0:0061165683ee 109 }
sdivarci 0:0061165683ee 110 }
sdivarci 0:0061165683ee 111
sdivarci 0:0061165683ee 112 __STATIC_INLINE void USBD_ArmEpN( USBD_Ep_TypeDef *ep )
sdivarci 0:0061165683ee 113 {
sdivarci 0:0061165683ee 114 if ( ep->in )
sdivarci 0:0061165683ee 115 {
sdivarci 0:0061165683ee 116 USBDHAL_StartEpIn( ep );
sdivarci 0:0061165683ee 117 }
sdivarci 0:0061165683ee 118 else
sdivarci 0:0061165683ee 119 {
sdivarci 0:0061165683ee 120 USBDHAL_StartEpOut( ep );
sdivarci 0:0061165683ee 121 }
sdivarci 0:0061165683ee 122 }
sdivarci 0:0061165683ee 123
sdivarci 0:0061165683ee 124 __STATIC_INLINE void USBD_DeactivateAllEps( USB_Status_TypeDef reason )
sdivarci 0:0061165683ee 125 {
sdivarci 0:0061165683ee 126 int i;
sdivarci 0:0061165683ee 127 USBD_Ep_TypeDef *ep;
sdivarci 0:0061165683ee 128
sdivarci 0:0061165683ee 129 for ( i = 1; i <= NUM_EP_USED; i++ )
sdivarci 0:0061165683ee 130 {
sdivarci 0:0061165683ee 131 ep = &dev->ep[ i ];
sdivarci 0:0061165683ee 132
sdivarci 0:0061165683ee 133 if ( ep->state == D_EP_IDLE )
sdivarci 0:0061165683ee 134 {
sdivarci 0:0061165683ee 135 USBDHAL_DeactivateEp( ep );
sdivarci 0:0061165683ee 136 }
sdivarci 0:0061165683ee 137 }
sdivarci 0:0061165683ee 138
sdivarci 0:0061165683ee 139 USBDHAL_AbortAllTransfers( reason );
sdivarci 0:0061165683ee 140 }
sdivarci 0:0061165683ee 141
sdivarci 0:0061165683ee 142 __STATIC_INLINE USBD_Ep_TypeDef *USBD_GetEpFromAddr( uint8_t epAddr )
sdivarci 0:0061165683ee 143 {
sdivarci 0:0061165683ee 144 int epIndex;
sdivarci 0:0061165683ee 145 USBD_Ep_TypeDef *ep = NULL;
sdivarci 0:0061165683ee 146
sdivarci 0:0061165683ee 147 if ( epAddr & USB_SETUP_DIR_MASK )
sdivarci 0:0061165683ee 148 {
sdivarci 0:0061165683ee 149 epIndex = dev->inEpAddr2EpIndex[ epAddr & USB_EPNUM_MASK ];
sdivarci 0:0061165683ee 150 }
sdivarci 0:0061165683ee 151 else
sdivarci 0:0061165683ee 152 {
sdivarci 0:0061165683ee 153 epIndex = dev->outEpAddr2EpIndex[ epAddr & USB_EPNUM_MASK ];
sdivarci 0:0061165683ee 154 }
sdivarci 0:0061165683ee 155
sdivarci 0:0061165683ee 156 if ( epIndex )
sdivarci 0:0061165683ee 157 {
sdivarci 0:0061165683ee 158 ep = &dev->ep[ epIndex ];
sdivarci 0:0061165683ee 159 }
sdivarci 0:0061165683ee 160 else if ( ( epAddr & USB_EPNUM_MASK ) == 0 )
sdivarci 0:0061165683ee 161 {
sdivarci 0:0061165683ee 162 ep = &dev->ep[ 0 ];
sdivarci 0:0061165683ee 163 }
sdivarci 0:0061165683ee 164
sdivarci 0:0061165683ee 165 return ep;
sdivarci 0:0061165683ee 166 }
sdivarci 0:0061165683ee 167
sdivarci 0:0061165683ee 168 __STATIC_INLINE void USBD_ReArmEp0( USBD_Ep_TypeDef *ep )
sdivarci 0:0061165683ee 169 {
sdivarci 0:0061165683ee 170 if ( ep->in )
sdivarci 0:0061165683ee 171 {
sdivarci 0:0061165683ee 172 USBDHAL_StartEp0In( EFM32_MIN( ep->remaining, ep->packetSize ),
sdivarci 0:0061165683ee 173 dev->ep0MpsCode );
sdivarci 0:0061165683ee 174 }
sdivarci 0:0061165683ee 175 else
sdivarci 0:0061165683ee 176 {
sdivarci 0:0061165683ee 177 USBDHAL_StartEp0Out( ep->packetSize, dev->ep0MpsCode );
sdivarci 0:0061165683ee 178 }
sdivarci 0:0061165683ee 179 }
sdivarci 0:0061165683ee 180
sdivarci 0:0061165683ee 181 __STATIC_INLINE void USBD_AbortEp( USBD_Ep_TypeDef *ep )
sdivarci 0:0061165683ee 182 {
sdivarci 0:0061165683ee 183 if ( ep->state == D_EP_IDLE )
sdivarci 0:0061165683ee 184 {
sdivarci 0:0061165683ee 185 return;
sdivarci 0:0061165683ee 186 }
sdivarci 0:0061165683ee 187
sdivarci 0:0061165683ee 188 if ( ep->in )
sdivarci 0:0061165683ee 189 {
sdivarci 0:0061165683ee 190 USBDHAL_AbortEpIn( ep );
sdivarci 0:0061165683ee 191 }
sdivarci 0:0061165683ee 192 else
sdivarci 0:0061165683ee 193 {
sdivarci 0:0061165683ee 194 USBDHAL_AbortEpOut( ep );
sdivarci 0:0061165683ee 195 }
sdivarci 0:0061165683ee 196 }
sdivarci 0:0061165683ee 197
sdivarci 0:0061165683ee 198 /** @endcond */
sdivarci 0:0061165683ee 199
sdivarci 0:0061165683ee 200 #ifdef __cplusplus
sdivarci 0:0061165683ee 201 }
sdivarci 0:0061165683ee 202 #endif
sdivarci 0:0061165683ee 203
sdivarci 0:0061165683ee 204 #endif /* defined( USB_DEVICE ) */
sdivarci 0:0061165683ee 205 #endif /* defined( USB_PRESENT ) && ( USB_COUNT == 1 ) */
sdivarci 0:0061165683ee 206 #endif /* __EM_USBD_H */