21 #ifndef STM32L4xx_HAL_PCD_H 22 #define STM32L4xx_HAL_PCD_H 31 #if defined (USB) || defined (USB_OTG_FS) 87 #if defined (USB_OTG_FS) 101 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) 102 typedef struct __PCD_HandleTypeDef
110 #if defined (USB_OTG_FS) 111 PCD_EPTypeDef IN_ep[16];
112 PCD_EPTypeDef OUT_ep[16];
115 PCD_EPTypeDef IN_ep[8];
116 PCD_EPTypeDef OUT_ep[8];
120 __IO uint32_t ErrorCode;
133 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) 134 void (* SOFCallback)(
struct __PCD_HandleTypeDef *hpcd);
135 void (* SetupStageCallback)(
struct __PCD_HandleTypeDef *hpcd);
136 void (* ResetCallback)(
struct __PCD_HandleTypeDef *hpcd);
137 void (* SuspendCallback)(
struct __PCD_HandleTypeDef *hpcd);
138 void (* ResumeCallback)(
struct __PCD_HandleTypeDef *hpcd);
139 void (* ConnectCallback)(
struct __PCD_HandleTypeDef *hpcd);
140 void (* DisconnectCallback)(
struct __PCD_HandleTypeDef *hpcd);
142 void (* DataOutStageCallback)(
struct __PCD_HandleTypeDef *hpcd, uint8_t epnum);
143 void (* DataInStageCallback)(
struct __PCD_HandleTypeDef *hpcd, uint8_t epnum);
144 void (* ISOOUTIncompleteCallback)(
struct __PCD_HandleTypeDef *hpcd, uint8_t epnum);
145 void (* ISOINIncompleteCallback)(
struct __PCD_HandleTypeDef *hpcd, uint8_t epnum);
149 void (* MspInitCallback)(
struct __PCD_HandleTypeDef *hpcd);
150 void (* MspDeInitCallback)(
struct __PCD_HandleTypeDef *hpcd);
169 #define PCD_SPEED_FULL USBD_FS_SPEED 177 #define PCD_PHY_ULPI 1U 178 #define PCD_PHY_EMBEDDED 2U 179 #define PCD_PHY_UTMI 3U 188 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) 189 #define HAL_PCD_ERROR_INVALID_CALLBACK (0x00000010U) 205 #if defined (USB_OTG_FS) 206 #define __HAL_PCD_ENABLE(__HANDLE__) (void)USB_EnableGlobalInt ((__HANDLE__)->Instance) 207 #define __HAL_PCD_DISABLE(__HANDLE__) (void)USB_DisableGlobalInt ((__HANDLE__)->Instance) 209 #define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) 210 #define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->GINTSTS) &= (__INTERRUPT__)) 211 #define __HAL_PCD_IS_INVALID_INTERRUPT(__HANDLE__) (USB_ReadInterrupts((__HANDLE__)->Instance) == 0U) 214 #define __HAL_PCD_UNGATE_PHYCLOCK(__HANDLE__) *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) &= \ 215 ~(USB_OTG_PCGCCTL_STOPCLK) 217 #define __HAL_PCD_GATE_PHYCLOCK(__HANDLE__) *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) |= USB_OTG_PCGCCTL_STOPCLK 219 #define __HAL_PCD_IS_PHY_SUSPENDED(__HANDLE__) ((*(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE)) & 0x10U) 221 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR1 |= USB_OTG_FS_WAKEUP_EXTI_LINE 222 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR1 &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE) 226 #define __HAL_PCD_ENABLE(__HANDLE__) (void)USB_EnableGlobalInt ((__HANDLE__)->Instance) 227 #define __HAL_PCD_DISABLE(__HANDLE__) (void)USB_DisableGlobalInt ((__HANDLE__)->Instance) 228 #define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) 229 #define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->ISTR) &= ~(__INTERRUPT__)) 231 #define __HAL_USB_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR1 |= USB_WAKEUP_EXTI_LINE 232 #define __HAL_USB_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR1 &= ~(USB_WAKEUP_EXTI_LINE) 253 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U) 384 #if defined (USB_OTG_FS) 385 #define USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE 0x08U 386 #define USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE 0x0CU 387 #define USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE 0x10U 389 #define USB_OTG_FS_WAKEUP_EXTI_LINE (0x1U << 17) 393 #define USB_WAKEUP_EXTI_LINE (0x1U << 17) 403 #define PCD_EP0MPS_64 DEP0CTL_MPS_64 404 #define PCD_EP0MPS_32 DEP0CTL_MPS_32 405 #define PCD_EP0MPS_16 DEP0CTL_MPS_16 406 #define PCD_EP0MPS_08 DEP0CTL_MPS_8 429 #define PCD_SNG_BUF 0U 430 #define PCD_DBL_BUF 1U 439 #if defined (USB_OTG_FS) 440 #ifndef USB_OTG_DOEPINT_OTEPSPR 441 #define USB_OTG_DOEPINT_OTEPSPR (0x1UL << 5) 444 #ifndef USB_OTG_DOEPMSK_OTEPSPRM 445 #define USB_OTG_DOEPMSK_OTEPSPRM (0x1UL << 5) 448 #ifndef USB_OTG_DOEPINT_NAK 449 #define USB_OTG_DOEPINT_NAK (0x1UL << 13) 452 #ifndef USB_OTG_DOEPMSK_NAKM 453 #define USB_OTG_DOEPMSK_NAKM (0x1UL << 13) 456 #ifndef USB_OTG_DOEPINT_STPKTRX 457 #define USB_OTG_DOEPINT_STPKTRX (0x1UL << 15) 460 #ifndef USB_OTG_DOEPMSK_NYETM 461 #define USB_OTG_DOEPMSK_NYETM (0x1UL << 14) 471 #define USB_CNTRX_NBLK_MSK (0x1FU << 10) 472 #define USB_CNTRX_BLSIZE (0x1U << 15) 475 #define PCD_SET_ENDPOINT(USBx, bEpNum, wRegValue) (*(__IO uint16_t *)(&(USBx)->EP0R + ((bEpNum) * 2U)) = (uint16_t)(wRegValue)) 478 #define PCD_GET_ENDPOINT(USBx, bEpNum) (*(__IO uint16_t *)(&(USBx)->EP0R + ((bEpNum) * 2U))) 481 #define USB_EP0StartXfer USB_EPStartXfer 490 #define PCD_SET_EPTYPE(USBx, bEpNum, wType) (PCD_SET_ENDPOINT((USBx), (bEpNum), \ 491 ((PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_T_MASK) | (wType) | USB_EP_CTR_TX | USB_EP_CTR_RX))) 499 #define PCD_GET_EPTYPE(USBx, bEpNum) (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_T_FIELD) 508 #define PCD_FreeUserBuffer(USBx, bEpNum, bDir) do { \ 512 PCD_TX_DTOG((USBx), (bEpNum)); \ 514 else if ((bDir) == 1U) \ 517 PCD_RX_DTOG((USBx), (bEpNum)); \ 528 #define PCD_SET_EP_TX_STATUS(USBx, bEpNum, wState) do { \ 529 register uint16_t _wRegVal; \ 531 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPTX_DTOGMASK; \ 533 if ((USB_EPTX_DTOG1 & (wState))!= 0U) \ 535 _wRegVal ^= USB_EPTX_DTOG1; \ 538 if ((USB_EPTX_DTOG2 & (wState))!= 0U) \ 540 _wRegVal ^= USB_EPTX_DTOG2; \ 542 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ 552 #define PCD_SET_EP_RX_STATUS(USBx, bEpNum,wState) do { \ 553 register uint16_t _wRegVal; \ 555 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPRX_DTOGMASK; \ 557 if ((USB_EPRX_DTOG1 & (wState))!= 0U) \ 559 _wRegVal ^= USB_EPRX_DTOG1; \ 562 if ((USB_EPRX_DTOG2 & (wState))!= 0U) \ 564 _wRegVal ^= USB_EPRX_DTOG2; \ 566 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ 577 #define PCD_SET_EP_TXRX_STATUS(USBx, bEpNum, wStaterx, wStatetx) do { \ 578 register uint16_t _wRegVal; \ 580 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (USB_EPRX_DTOGMASK | USB_EPTX_STAT); \ 582 if ((USB_EPRX_DTOG1 & (wStaterx))!= 0U) \ 584 _wRegVal ^= USB_EPRX_DTOG1; \ 587 if ((USB_EPRX_DTOG2 & (wStaterx))!= 0U) \ 589 _wRegVal ^= USB_EPRX_DTOG2; \ 592 if ((USB_EPTX_DTOG1 & (wStatetx))!= 0U) \ 594 _wRegVal ^= USB_EPTX_DTOG1; \ 597 if ((USB_EPTX_DTOG2 & (wStatetx))!= 0U) \ 599 _wRegVal ^= USB_EPTX_DTOG2; \ 602 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ 612 #define PCD_GET_EP_TX_STATUS(USBx, bEpNum) ((uint16_t)PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPTX_STAT) 613 #define PCD_GET_EP_RX_STATUS(USBx, bEpNum) ((uint16_t)PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPRX_STAT) 621 #define PCD_SET_EP_TX_VALID(USBx, bEpNum) (PCD_SET_EP_TX_STATUS((USBx), (bEpNum), USB_EP_TX_VALID)) 622 #define PCD_SET_EP_RX_VALID(USBx, bEpNum) (PCD_SET_EP_RX_STATUS((USBx), (bEpNum), USB_EP_RX_VALID)) 630 #define PCD_GET_EP_TX_STALL_STATUS(USBx, bEpNum) (PCD_GET_EP_TX_STATUS((USBx), (bEpNum)) \ 632 #define PCD_GET_EP_RX_STALL_STATUS(USBx, bEpNum) (PCD_GET_EP_RX_STATUS((USBx), (bEpNum)) \ 641 #define PCD_SET_EP_KIND(USBx, bEpNum) do { \ 642 register uint16_t _wRegVal; \ 644 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK; \ 646 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX | USB_EP_KIND)); \ 649 #define PCD_CLEAR_EP_KIND(USBx, bEpNum) do { \ 650 register uint16_t _wRegVal; \ 652 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPKIND_MASK; \ 654 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ 663 #define PCD_SET_OUT_STATUS(USBx, bEpNum) PCD_SET_EP_KIND((USBx), (bEpNum)) 664 #define PCD_CLEAR_OUT_STATUS(USBx, bEpNum) PCD_CLEAR_EP_KIND((USBx), (bEpNum)) 672 #define PCD_SET_EP_DBUF(USBx, bEpNum) PCD_SET_EP_KIND((USBx), (bEpNum)) 673 #define PCD_CLEAR_EP_DBUF(USBx, bEpNum) PCD_CLEAR_EP_KIND((USBx), (bEpNum)) 681 #define PCD_CLEAR_RX_EP_CTR(USBx, bEpNum) do { \ 682 register uint16_t _wRegVal; \ 684 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (0x7FFFU & USB_EPREG_MASK); \ 686 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_TX)); \ 689 #define PCD_CLEAR_TX_EP_CTR(USBx, bEpNum) do { \ 690 register uint16_t _wRegVal; \ 692 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (0xFF7FU & USB_EPREG_MASK); \ 694 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX)); \ 703 #define PCD_RX_DTOG(USBx, bEpNum) do { \ 704 register uint16_t _wEPVal; \ 706 _wEPVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK; \ 708 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wEPVal | USB_EP_CTR_RX | USB_EP_CTR_TX | USB_EP_DTOG_RX)); \ 711 #define PCD_TX_DTOG(USBx, bEpNum) do { \ 712 register uint16_t _wEPVal; \ 714 _wEPVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK; \ 716 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wEPVal | USB_EP_CTR_RX | USB_EP_CTR_TX | USB_EP_DTOG_TX)); \ 724 #define PCD_CLEAR_RX_DTOG(USBx, bEpNum) do { \ 725 register uint16_t _wRegVal; \ 727 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)); \ 729 if ((_wRegVal & USB_EP_DTOG_RX) != 0U)\ 731 PCD_RX_DTOG((USBx), (bEpNum)); \ 735 #define PCD_CLEAR_TX_DTOG(USBx, bEpNum) do { \ 736 register uint16_t _wRegVal; \ 738 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)); \ 740 if ((_wRegVal & USB_EP_DTOG_TX) != 0U)\ 742 PCD_TX_DTOG((USBx), (bEpNum)); \ 753 #define PCD_SET_EP_ADDRESS(USBx, bEpNum, bAddr) do { \ 754 register uint16_t _wRegVal; \ 756 _wRegVal = (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK) | (bAddr); \ 758 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX | USB_EP_CTR_TX)); \ 767 #define PCD_GET_EP_ADDRESS(USBx, bEpNum) ((uint8_t)(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPADDR_FIELD)) 769 #define PCD_EP_TX_CNT(USBx, bEpNum) ((uint16_t *)((((uint32_t)(USBx)->BTABLE + ((uint32_t)(bEpNum) * 8U) + 2U) * PMA_ACCESS) + ((uint32_t)(USBx) + 0x400U))) 770 #define PCD_EP_RX_CNT(USBx, bEpNum) ((uint16_t *)((((uint32_t)(USBx)->BTABLE + ((uint32_t)(bEpNum) * 8U) + 6U) * PMA_ACCESS) + ((uint32_t)(USBx) + 0x400U))) 779 #define PCD_SET_EP_TX_ADDRESS(USBx, bEpNum, wAddr) do { \ 780 register uint16_t *_wRegVal; \ 781 register uint32_t _wRegBase = (uint32_t)USBx; \ 783 _wRegBase += (uint32_t)(USBx)->BTABLE; \ 784 _wRegVal = (uint16_t *)(_wRegBase + 0x400U + (((uint32_t)(bEpNum) * 8U) * PMA_ACCESS)); \ 785 *_wRegVal = ((wAddr) >> 1) << 1; \ 788 #define PCD_SET_EP_RX_ADDRESS(USBx, bEpNum, wAddr) do { \ 789 register uint16_t *_wRegVal; \ 790 register uint32_t _wRegBase = (uint32_t)USBx; \ 792 _wRegBase += (uint32_t)(USBx)->BTABLE; \ 793 _wRegVal = (uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 4U) * PMA_ACCESS)); \ 794 *_wRegVal = ((wAddr) >> 1) << 1; \ 803 #define PCD_GET_EP_TX_ADDRESS(USBx, bEpNum) ((uint16_t)*PCD_EP_TX_ADDRESS((USBx), (bEpNum))) 804 #define PCD_GET_EP_RX_ADDRESS(USBx, bEpNum) ((uint16_t)*PCD_EP_RX_ADDRESS((USBx), (bEpNum))) 813 #define PCD_CALC_BLK32(pdwReg, wCount, wNBlocks) do { \ 814 (wNBlocks) = (wCount) >> 5; \ 815 *(pdwReg) = (uint16_t)(((wNBlocks) << 10) | USB_CNTRX_BLSIZE); \ 818 #define PCD_CALC_BLK2(pdwReg, wCount, wNBlocks) do { \ 819 (wNBlocks) = (wCount) >> 1; \ 820 if (((wCount) & 0x1U) != 0U) \ 824 *(pdwReg) = (uint16_t)((wNBlocks) << 10); \ 827 #define PCD_SET_EP_CNT_RX_REG(pdwReg, wCount) do { \ 829 if ((wCount) == 0U) \ 831 *(pdwReg) &= (uint16_t)~USB_CNTRX_NBLK_MSK; \ 832 *(pdwReg) |= USB_CNTRX_BLSIZE; \ 834 else if((wCount) < 62U) \ 836 PCD_CALC_BLK2((pdwReg), (wCount), wNBlocks); \ 840 PCD_CALC_BLK32((pdwReg),(wCount), wNBlocks); \ 844 #define PCD_SET_EP_RX_DBUF0_CNT(USBx, bEpNum, wCount) do { \ 845 register uint32_t _wRegBase = (uint32_t)(USBx); \ 848 _wRegBase += (uint32_t)(USBx)->BTABLE; \ 849 pdwReg = (uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 2U) * PMA_ACCESS)); \ 850 PCD_SET_EP_CNT_RX_REG(pdwReg, (wCount)); \ 860 #define PCD_SET_EP_TX_CNT(USBx, bEpNum, wCount) do { \ 861 register uint32_t _wRegBase = (uint32_t)(USBx); \ 862 uint16_t *_wRegVal; \ 864 _wRegBase += (uint32_t)(USBx)->BTABLE; \ 865 _wRegVal = (uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 2U) * PMA_ACCESS)); \ 866 *_wRegVal = (uint16_t)(wCount); \ 869 #define PCD_SET_EP_RX_CNT(USBx, bEpNum, wCount) do { \ 870 register uint32_t _wRegBase = (uint32_t)(USBx); \ 871 uint16_t *_wRegVal; \ 873 _wRegBase += (uint32_t)(USBx)->BTABLE; \ 874 _wRegVal = (uint16_t *)(_wRegBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 6U) * PMA_ACCESS)); \ 875 PCD_SET_EP_CNT_RX_REG(_wRegVal, (wCount)); \ 884 #define PCD_GET_EP_TX_CNT(USBx, bEpNum) ((uint32_t)(*PCD_EP_TX_CNT((USBx), (bEpNum))) & 0x3ffU) 885 #define PCD_GET_EP_RX_CNT(USBx, bEpNum) ((uint32_t)(*PCD_EP_RX_CNT((USBx), (bEpNum))) & 0x3ffU) 894 #define PCD_SET_EP_DBUF0_ADDR(USBx, bEpNum, wBuf0Addr) do { \ 895 PCD_SET_EP_TX_ADDRESS((USBx), (bEpNum), (wBuf0Addr)); \ 897 #define PCD_SET_EP_DBUF1_ADDR(USBx, bEpNum, wBuf1Addr) do { \ 898 PCD_SET_EP_RX_ADDRESS((USBx), (bEpNum), (wBuf1Addr)); \ 909 #define PCD_SET_EP_DBUF_ADDR(USBx, bEpNum, wBuf0Addr, wBuf1Addr) do { \ 910 PCD_SET_EP_DBUF0_ADDR((USBx), (bEpNum), (wBuf0Addr)); \ 911 PCD_SET_EP_DBUF1_ADDR((USBx), (bEpNum), (wBuf1Addr)); \ 920 #define PCD_GET_EP_DBUF0_ADDR(USBx, bEpNum) (PCD_GET_EP_TX_ADDRESS((USBx), (bEpNum))) 921 #define PCD_GET_EP_DBUF1_ADDR(USBx, bEpNum) (PCD_GET_EP_RX_ADDRESS((USBx), (bEpNum))) 932 #define PCD_SET_EP_DBUF0_CNT(USBx, bEpNum, bDir, wCount) do { \ 936 PCD_SET_EP_RX_DBUF0_CNT((USBx), (bEpNum), (wCount)); \ 943 PCD_SET_EP_TX_CNT((USBx), (bEpNum), (wCount)); \ 948 #define PCD_SET_EP_DBUF1_CNT(USBx, bEpNum, bDir, wCount) do { \ 949 register uint32_t _wBase = (uint32_t)(USBx); \ 950 uint16_t *_wEPRegVal; \ 955 PCD_SET_EP_RX_CNT((USBx), (bEpNum), (wCount)); \ 962 _wBase += (uint32_t)(USBx)->BTABLE; \ 963 _wEPRegVal = (uint16_t *)(_wBase + 0x400U + ((((uint32_t)(bEpNum) * 8U) + 6U) * PMA_ACCESS)); \ 964 *_wEPRegVal = (uint16_t)(wCount); \ 969 #define PCD_SET_EP_DBUF_CNT(USBx, bEpNum, bDir, wCount) do { \ 970 PCD_SET_EP_DBUF0_CNT((USBx), (bEpNum), (bDir), (wCount)); \ 971 PCD_SET_EP_DBUF1_CNT((USBx), (bEpNum), (bDir), (wCount)); \ 980 #define PCD_GET_EP_DBUF0_CNT(USBx, bEpNum) (PCD_GET_EP_TX_CNT((USBx), (bEpNum))) 981 #define PCD_GET_EP_DBUF1_CNT(USBx, bEpNum) (PCD_GET_EP_RX_CNT((USBx), (bEpNum))) HAL_StatusTypeDef HAL_PCD_RegisterDataInStageCallback(PCD_HandleTypeDef *hpcd, pPCD_DataInStageCallbackTypeDef pCallback)
Register USB PCD Data IN Stage Callback To be used instead of the weak HAL_PCD_DataInStageCallback() ...
void(* pPCD_CallbackTypeDef)(PCD_HandleTypeDef *hpcd)
USB_OTG_GlobalTypeDef PCD_TypeDef
void(* pPCD_IsoInIncpltCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum)
void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
Resume event callback.
USB_OTG_EPTypeDef PCD_EPTypeDef
uint32_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
Get Received Data Size.
HAL_StatusTypeDef HAL_PCD_RegisterCallback(PCD_HandleTypeDef *hpcd, HAL_PCD_CallbackIDTypeDef CallbackID, pPCD_CallbackTypeDef pCallback)
Register a User USB PCD Callback To be used instead of the weak predefined callback.
HAL_StatusTypeDef HAL_PCD_RegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd, pPCD_IsoOutIncpltCallbackTypeDef pCallback)
Register USB PCD Iso OUT incomplete Callback To be used instead of the weak HAL_PCD_ISOOUTIncompleteC...
void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
Initializes the PCD MSP.
void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
Data OUT stage callback.
HAL_StatusTypeDef HAL_PCD_UnRegisterDataInStageCallback(PCD_HandleTypeDef *hpcd)
UnRegister the USB PCD Data IN Stage Callback USB PCD Data OUT Stage Callback is redirected to the we...
PCD_StateTypeDef
PCD State structure definition.
void(* pPCD_DataInStageCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum)
HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
Clear a STALL condition over in an endpoint.
HAL_StatusTypeDef HAL_PCD_UnRegisterLpmCallback(PCD_HandleTypeDef *hpcd)
UnRegister the USB PCD LPM Callback USB LPM Callback is redirected to the weak HAL_PCDEx_LPM_Callback...
void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
USB Start Of Frame callback.
Header file of PCD HAL Extension module.
void(* pPCD_DataOutStageCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum)
HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
Deactivate an endpoint.
HAL_PCD_CallbackIDTypeDef
struct __PCD_HandleTypeDef else typedef struct endif PCD_HandleTypeDef
PCD Handle Structure definition.
HAL_StatusTypeDef HAL_PCD_UnRegisterBcdCallback(PCD_HandleTypeDef *hpcd)
UnRegister the USB PCD BCD Callback USB BCD Callback is redirected to the weak HAL_PCDEx_BCD_Callback...
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
Incomplete ISO IN callback.
HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd)
Disconnect the USB device.
void(* pPCD_IsoOutIncpltCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum)
void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
Data IN stage callback.
HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len)
Send an amount of data.
void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
USB Reset callback.
HAL_StatusTypeDef HAL_PCD_RegisterBcdCallback(PCD_HandleTypeDef *hpcd, pPCD_BcdCallbackTypeDef pCallback)
Register USB PCD BCD Callback To be used instead of the weak HAL_PCDEx_BCD_Callback() predefined call...
void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
Incomplete ISO OUT callback.
HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd)
Connect the USB device.
USB_OTG_CfgTypeDef PCD_InitTypeDef
void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
Setup stage callback.
HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd)
Start the USB device.
HAL_StatusTypeDef HAL_PCD_RegisterLpmCallback(PCD_HandleTypeDef *hpcd, pPCD_LpmCallbackTypeDef pCallback)
Register USB PCD LPM Callback To be used instead of the weak HAL_PCDEx_LPM_Callback() predefined call...
HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
Set a STALL condition over an endpoint.
HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
Initializes the PCD according to the specified parameters in the PCD_InitTypeDef and initialize the a...
__IO PCD_StateTypeDef State
PCD_LPM_StateTypeDef LPM_State
HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
Flush an endpoint.
HAL_StatusTypeDef HAL_PCD_DeInit(PCD_HandleTypeDef *hpcd)
DeInitializes the PCD peripheral.
HAL_StatusTypeDef HAL_PCD_UnRegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd)
UnRegister the USB PCD Data OUT Stage Callback USB PCD Data OUT Stage Callback is redirected to the w...
void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
Suspend event callback.
USB OTG Initialization Structure definition.
USB Initialization Structure definition.
PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd)
Return the PCD handle state.
HAL_LockTypeDef
HAL Lock structures definition.
uint32_t battery_charging_active
HAL_StatusTypeDef HAL_PCD_UnRegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd)
UnRegister the USB PCD Iso IN incomplete Callback USB PCD Iso IN incomplete Callback is redirected to...
HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len)
Receive an amount of data.
ADC handle Structure definition.
HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd)
Stop the USB device.
HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint16_t ep_mps, uint8_t ep_type)
Open and configure an endpoint.
HAL_StatusTypeDef HAL_PCD_RegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd, pPCD_DataOutStageCallbackTypeDef pCallback)
Register USB PCD Data OUT Stage Callback To be used instead of the weak HAL_PCD_DataOutStageCallback(...
void(* pPCD_LpmCallbackTypeDef)(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address)
Set the USB Device address.
HAL_StatusTypeDef HAL_PCD_UnRegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd)
UnRegister the USB PCD Iso OUT incomplete Callback USB PCD Iso OUT incomplete Callback is redirected ...
HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd)
Activate remote wakeup signalling.
Header file of USB Low Layer HAL module.
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
Disconnection event callback.
HAL_StatusTypeDef HAL_PCD_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd)
De-activate remote wakeup signalling.
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
Connection event callback.
HAL_StatusTypeDef HAL_PCD_UnRegisterCallback(PCD_HandleTypeDef *hpcd, HAL_PCD_CallbackIDTypeDef CallbackID)
Unregister an USB PCD Callback USB PCD callabck is redirected to the weak predefined callback...
void(* pPCD_BcdCallbackTypeDef)(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg)
void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
Handles PCD interrupt request.
void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd)
DeInitializes PCD MSP.
HAL_StatusTypeDef HAL_PCD_RegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd, pPCD_IsoInIncpltCallbackTypeDef pCallback)
Register USB PCD Iso IN incomplete Callback To be used instead of the weak HAL_PCD_ISOINIncompleteCal...