69 #ifdef HAL_PCD_MODULE_ENABLED
71 #if defined (USB_OTG_FS) || defined (USB_OTG_HS)
80 #define PCD_MIN(a, b) (((a) < (b)) ? (a) : (b))
81 #define PCD_MAX(a, b) (((a) > (b)) ? (a) : (b))
90 #if defined (USB_OTG_FS) || defined (USB_OTG_HS)
91 static HAL_StatusTypeDef PCD_WriteEmptyTxFifo(
PCD_HandleTypeDef *hpcd, uint32_t epnum);
92 static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(
PCD_HandleTypeDef *hpcd, uint32_t epnum);
93 static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(
PCD_HandleTypeDef *hpcd, uint32_t epnum);
125 #if defined (USB_OTG_FS)
126 const USB_OTG_GlobalTypeDef *USBx;
137 assert_param(IS_PCD_ALL_INSTANCE(hpcd->Instance));
139 #if defined (USB_OTG_FS)
140 USBx = hpcd->Instance;
143 if (hpcd->State == HAL_PCD_STATE_RESET)
146 hpcd->Lock = HAL_UNLOCKED;
148 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
163 if (hpcd->MspInitCallback == NULL)
169 hpcd->MspInitCallback(hpcd);
176 hpcd->State = HAL_PCD_STATE_BUSY;
178 #if defined (USB_OTG_FS)
180 if (USBx == USB_OTG_FS)
182 hpcd->Init.dma_enable = 0U;
187 __HAL_PCD_DISABLE(hpcd);
192 hpcd->State = HAL_PCD_STATE_ERROR;
199 hpcd->State = HAL_PCD_STATE_ERROR;
204 for (i = 0U; i < hpcd->Init.dev_endpoints; i++)
207 hpcd->IN_ep[i].is_in = 1U;
208 hpcd->IN_ep[i].num = i;
209 hpcd->IN_ep[i].tx_fifo_num = i;
211 hpcd->IN_ep[i].type = EP_TYPE_CTRL;
212 hpcd->IN_ep[i].maxpacket = 0U;
213 hpcd->IN_ep[i].xfer_buff = 0U;
214 hpcd->IN_ep[i].xfer_len = 0U;
217 for (i = 0U; i < hpcd->Init.dev_endpoints; i++)
219 hpcd->OUT_ep[i].is_in = 0U;
220 hpcd->OUT_ep[i].num = i;
222 hpcd->OUT_ep[i].type = EP_TYPE_CTRL;
223 hpcd->OUT_ep[i].maxpacket = 0U;
224 hpcd->OUT_ep[i].xfer_buff = 0U;
225 hpcd->OUT_ep[i].xfer_len = 0U;
229 if (
USB_DevInit(hpcd->Instance, hpcd->Init) != HAL_OK)
231 hpcd->State = HAL_PCD_STATE_ERROR;
235 hpcd->USB_Address = 0U;
236 hpcd->State = HAL_PCD_STATE_READY;
237 #if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) \
238 || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) \
239 || defined(STM32F423xx)
241 if (hpcd->Init.lpm_enable == 1U)
266 hpcd->State = HAL_PCD_STATE_BUSY;
274 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
275 if (hpcd->MspDeInitCallback == NULL)
281 hpcd->MspDeInitCallback(hpcd);
287 hpcd->State = HAL_PCD_STATE_RESET;
322 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
345 HAL_StatusTypeDef status = HAL_OK;
347 if (pCallback == NULL)
350 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
356 if (hpcd->State == HAL_PCD_STATE_READY)
361 hpcd->SOFCallback = pCallback;
365 hpcd->SetupStageCallback = pCallback;
369 hpcd->ResetCallback = pCallback;
373 hpcd->SuspendCallback = pCallback;
377 hpcd->ResumeCallback = pCallback;
381 hpcd->ConnectCallback = pCallback;
385 hpcd->DisconnectCallback = pCallback;
389 hpcd->MspInitCallback = pCallback;
393 hpcd->MspDeInitCallback = pCallback;
398 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
404 else if (hpcd->State == HAL_PCD_STATE_RESET)
409 hpcd->MspInitCallback = pCallback;
413 hpcd->MspDeInitCallback = pCallback;
418 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
427 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
456 HAL_StatusTypeDef status = HAL_OK;
462 if (hpcd->State == HAL_PCD_STATE_READY)
504 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
511 else if (hpcd->State == HAL_PCD_STATE_RESET)
525 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
535 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
556 HAL_StatusTypeDef status = HAL_OK;
558 if (pCallback == NULL)
561 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
569 if (hpcd->State == HAL_PCD_STATE_READY)
571 hpcd->DataOutStageCallback = pCallback;
576 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
596 HAL_StatusTypeDef status = HAL_OK;
601 if (hpcd->State == HAL_PCD_STATE_READY)
608 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
630 HAL_StatusTypeDef status = HAL_OK;
632 if (pCallback == NULL)
635 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
643 if (hpcd->State == HAL_PCD_STATE_READY)
645 hpcd->DataInStageCallback = pCallback;
650 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
670 HAL_StatusTypeDef status = HAL_OK;
675 if (hpcd->State == HAL_PCD_STATE_READY)
682 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
704 HAL_StatusTypeDef status = HAL_OK;
706 if (pCallback == NULL)
709 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
717 if (hpcd->State == HAL_PCD_STATE_READY)
719 hpcd->ISOOUTIncompleteCallback = pCallback;
724 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
745 HAL_StatusTypeDef status = HAL_OK;
750 if (hpcd->State == HAL_PCD_STATE_READY)
757 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
779 HAL_StatusTypeDef status = HAL_OK;
781 if (pCallback == NULL)
784 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
792 if (hpcd->State == HAL_PCD_STATE_READY)
794 hpcd->ISOINIncompleteCallback = pCallback;
799 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
820 HAL_StatusTypeDef status = HAL_OK;
825 if (hpcd->State == HAL_PCD_STATE_READY)
832 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
853 HAL_StatusTypeDef status = HAL_OK;
855 if (pCallback == NULL)
858 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
866 if (hpcd->State == HAL_PCD_STATE_READY)
868 hpcd->BCDCallback = pCallback;
873 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
893 HAL_StatusTypeDef status = HAL_OK;
898 if (hpcd->State == HAL_PCD_STATE_READY)
905 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
926 HAL_StatusTypeDef status = HAL_OK;
928 if (pCallback == NULL)
931 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
939 if (hpcd->State == HAL_PCD_STATE_READY)
941 hpcd->LPMCallback = pCallback;
946 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
966 HAL_StatusTypeDef status = HAL_OK;
971 if (hpcd->State == HAL_PCD_STATE_READY)
978 hpcd->ErrorCode |= HAL_PCD_ERROR_INVALID_CALLBACK;
1017 USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
1021 if (((USBx->GUSBCFG & USB_OTG_GUSBCFG_PHYSEL) != 0U) &&
1022 (hpcd->Init.battery_charging_enable == 1U))
1025 USBx->GCCFG |= USB_OTG_GCCFG_PWRDWN;
1028 __HAL_PCD_ENABLE(hpcd);
1042 USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
1045 __HAL_PCD_DISABLE(hpcd);
1050 if (((USBx->GUSBCFG & USB_OTG_GUSBCFG_PHYSEL) != 0U) &&
1051 (hpcd->Init.battery_charging_enable == 1U))
1054 USBx->GCCFG &= ~(USB_OTG_GCCFG_PWRDWN);
1062 #if defined (USB_OTG_FS) || defined (USB_OTG_HS)
1070 USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
1071 uint32_t USBx_BASE = (uint32_t)USBx;
1077 uint32_t fifoemptymsk;
1081 if (
USB_GetMode(hpcd->Instance) == USB_OTG_MODE_DEVICE)
1084 if (__HAL_PCD_IS_INVALID_INTERRUPT(hpcd))
1090 hpcd->FrameNumber = (USBx_DEVICE->DSTS & USB_OTG_DSTS_FNSOF_Msk) >> USB_OTG_DSTS_FNSOF_Pos;
1092 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_MMIS))
1095 __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_MMIS);
1099 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
1101 USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
1103 RegVal = USBx->GRXSTSP;
1105 ep = &hpcd->OUT_ep[RegVal & USB_OTG_GRXSTSP_EPNUM];
1107 if (((RegVal & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT)
1109 if ((RegVal & USB_OTG_GRXSTSP_BCNT) != 0U)
1112 (uint16_t)((RegVal & USB_OTG_GRXSTSP_BCNT) >> 4));
1114 ep->
xfer_buff += (RegVal & USB_OTG_GRXSTSP_BCNT) >> 4;
1115 ep->
xfer_count += (RegVal & USB_OTG_GRXSTSP_BCNT) >> 4;
1118 else if (((RegVal & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT)
1121 ep->
xfer_count += (RegVal & USB_OTG_GRXSTSP_BCNT) >> 4;
1128 USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
1131 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_OEPINT))
1138 while (ep_intr != 0U)
1140 if ((ep_intr & 0x1U) != 0U)
1144 if ((epint & USB_OTG_DOEPINT_XFRC) == USB_OTG_DOEPINT_XFRC)
1146 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_XFRC);
1147 (void)PCD_EP_OutXfrComplete_int(hpcd, epnum);
1150 if ((epint & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP)
1152 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
1154 (void)PCD_EP_OutSetupPacket_int(hpcd, epnum);
1157 if ((epint & USB_OTG_DOEPINT_OTEPDIS) == USB_OTG_DOEPINT_OTEPDIS)
1159 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPDIS);
1163 if ((epint & USB_OTG_DOEPINT_EPDISD) == USB_OTG_DOEPINT_EPDISD)
1165 if ((USBx->GINTSTS & USB_OTG_GINTSTS_BOUTNAKEFF) == USB_OTG_GINTSTS_BOUTNAKEFF)
1167 USBx_DEVICE->DCTL |= USB_OTG_DCTL_CGONAK;
1170 ep = &hpcd->OUT_ep[epnum];
1176 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1177 hpcd->ISOOUTIncompleteCallback(hpcd, (uint8_t)epnum);
1183 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_EPDISD);
1187 if ((epint & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR)
1189 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR);
1193 if ((epint & USB_OTG_DOEPINT_NAK) == USB_OTG_DOEPINT_NAK)
1195 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_NAK);
1203 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_IEPINT))
1210 while (ep_intr != 0U)
1212 if ((ep_intr & 0x1U) != 0U)
1216 if ((epint & USB_OTG_DIEPINT_XFRC) == USB_OTG_DIEPINT_XFRC)
1218 fifoemptymsk = (uint32_t)(0x1UL << (epnum & EP_ADDR_MSK));
1219 USBx_DEVICE->DIEPEMPMSK &= ~fifoemptymsk;
1221 CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_XFRC);
1223 if (hpcd->Init.dma_enable == 1U)
1225 hpcd->IN_ep[epnum].xfer_buff += hpcd->IN_ep[epnum].maxpacket;
1228 if ((epnum == 0U) && (hpcd->IN_ep[epnum].xfer_len == 0U))
1235 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1236 hpcd->DataInStageCallback(hpcd, (uint8_t)epnum);
1241 if ((epint & USB_OTG_DIEPINT_TOC) == USB_OTG_DIEPINT_TOC)
1243 CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_TOC);
1245 if ((epint & USB_OTG_DIEPINT_ITTXFE) == USB_OTG_DIEPINT_ITTXFE)
1247 CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_ITTXFE);
1249 if ((epint & USB_OTG_DIEPINT_INEPNE) == USB_OTG_DIEPINT_INEPNE)
1251 CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_INEPNE);
1253 if ((epint & USB_OTG_DIEPINT_EPDISD) == USB_OTG_DIEPINT_EPDISD)
1257 ep = &hpcd->IN_ep[epnum];
1263 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1264 hpcd->ISOINIncompleteCallback(hpcd, (uint8_t)epnum);
1270 CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_EPDISD);
1272 if ((epint & USB_OTG_DIEPINT_TXFE) == USB_OTG_DIEPINT_TXFE)
1274 (void)PCD_WriteEmptyTxFifo(hpcd, epnum);
1283 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_WKUINT))
1286 USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_RWUSIG;
1288 if (hpcd->LPM_State == LPM_L1)
1290 hpcd->LPM_State = LPM_L0;
1292 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1293 hpcd->LPMCallback(hpcd, PCD_LPM_L0_ACTIVE);
1300 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1301 hpcd->ResumeCallback(hpcd);
1307 __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_WKUINT);
1311 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_USBSUSP))
1313 if ((USBx_DEVICE->DSTS & USB_OTG_DSTS_SUSPSTS) == USB_OTG_DSTS_SUSPSTS)
1315 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1316 hpcd->SuspendCallback(hpcd);
1321 __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_USBSUSP);
1323 #if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) \
1324 || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) \
1325 || defined(STM32F423xx)
1327 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_LPMINT))
1329 __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_LPMINT);
1331 if (hpcd->LPM_State == LPM_L0)
1333 hpcd->LPM_State = LPM_L1;
1334 hpcd->BESL = (hpcd->Instance->GLPMCFG & USB_OTG_GLPMCFG_BESL) >> 2U;
1336 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1337 hpcd->LPMCallback(hpcd, PCD_LPM_L1_ACTIVE);
1344 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1345 hpcd->SuspendCallback(hpcd);
1355 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_USBRST))
1357 USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_RWUSIG;
1360 for (i = 0U; i < hpcd->Init.dev_endpoints; i++)
1362 USBx_INEP(i)->DIEPINT = 0xFB7FU;
1363 USBx_INEP(i)->DIEPCTL &= ~USB_OTG_DIEPCTL_STALL;
1364 USBx_OUTEP(i)->DOEPINT = 0xFB7FU;
1365 USBx_OUTEP(i)->DOEPCTL &= ~USB_OTG_DOEPCTL_STALL;
1366 USBx_OUTEP(i)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
1368 USBx_DEVICE->DAINTMSK |= 0x10001U;
1370 if (hpcd->Init.use_dedicated_ep1 != 0U)
1372 USBx_DEVICE->DOUTEP1MSK |= USB_OTG_DOEPMSK_STUPM |
1373 USB_OTG_DOEPMSK_XFRCM |
1374 USB_OTG_DOEPMSK_EPDM;
1376 USBx_DEVICE->DINEP1MSK |= USB_OTG_DIEPMSK_TOM |
1377 USB_OTG_DIEPMSK_XFRCM |
1378 USB_OTG_DIEPMSK_EPDM;
1382 USBx_DEVICE->DOEPMSK |= USB_OTG_DOEPMSK_STUPM |
1383 USB_OTG_DOEPMSK_XFRCM |
1384 USB_OTG_DOEPMSK_EPDM |
1385 USB_OTG_DOEPMSK_OTEPSPRM |
1386 USB_OTG_DOEPMSK_NAKM;
1388 USBx_DEVICE->DIEPMSK |= USB_OTG_DIEPMSK_TOM |
1389 USB_OTG_DIEPMSK_XFRCM |
1390 USB_OTG_DIEPMSK_EPDM;
1394 USBx_DEVICE->DCFG &= ~USB_OTG_DCFG_DAD;
1398 (uint8_t *)hpcd->Setup);
1400 __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_USBRST);
1404 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE))
1412 (uint8_t)hpcd->Init.speed);
1414 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1415 hpcd->ResetCallback(hpcd);
1420 __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE);
1424 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_SOF))
1426 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1427 hpcd->SOFCallback(hpcd);
1432 __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_SOF);
1436 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_BOUTNAKEFF))
1438 USBx->GINTMSK &= ~USB_OTG_GINTMSK_GONAKEFFM;
1440 for (epnum = 1U; epnum < hpcd->Init.dev_endpoints; epnum++)
1442 if (hpcd->OUT_ep[epnum].is_iso_incomplete == 1U)
1451 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR))
1453 for (epnum = 1U; epnum < hpcd->Init.dev_endpoints; epnum++)
1455 RegVal = USBx_INEP(epnum)->DIEPCTL;
1457 if ((hpcd->IN_ep[epnum].type == EP_TYPE_ISOC) &&
1458 ((RegVal & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA))
1460 hpcd->IN_ep[epnum].is_iso_incomplete = 1U;
1467 __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR);
1471 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT))
1473 for (epnum = 1U; epnum < hpcd->Init.dev_endpoints; epnum++)
1475 RegVal = USBx_OUTEP(epnum)->DOEPCTL;
1477 if ((hpcd->OUT_ep[epnum].type == EP_TYPE_ISOC) &&
1478 ((RegVal & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA) &&
1479 ((RegVal & (0x1U << 16)) == (hpcd->FrameNumber & 0x1U)))
1481 hpcd->OUT_ep[epnum].is_iso_incomplete = 1U;
1483 USBx->GINTMSK |= USB_OTG_GINTMSK_GONAKEFFM;
1485 if ((USBx->GINTSTS & USB_OTG_GINTSTS_BOUTNAKEFF) == 0U)
1487 USBx_DEVICE->DCTL |= USB_OTG_DCTL_SGONAK;
1493 __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT);
1497 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_SRQINT))
1499 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1500 hpcd->ConnectCallback(hpcd);
1505 __HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_SRQINT);
1509 if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_OTGINT))
1511 RegVal = hpcd->Instance->GOTGINT;
1513 if ((RegVal & USB_OTG_GOTGINT_SEDET) == USB_OTG_GOTGINT_SEDET)
1515 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
1516 hpcd->DisconnectCallback(hpcd);
1521 hpcd->Instance->GOTGINT |= RegVal;
1534 #if defined (USB_OTG_FS)
1535 USB_OTG_GlobalTypeDef *USBx;
1536 USBx = hpcd->Instance;
1538 if (USBx == USB_OTG_FS)
1541 __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG();
1547 __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG();
1751 USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
1755 if (((USBx->GUSBCFG & USB_OTG_GUSBCFG_PHYSEL) != 0U) &&
1756 (hpcd->Init.battery_charging_enable == 1U))
1759 USBx->GCCFG |= USB_OTG_GCCFG_PWRDWN;
1774 USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
1779 if (((USBx->GUSBCFG & USB_OTG_GUSBCFG_PHYSEL) != 0U) &&
1780 (hpcd->Init.battery_charging_enable == 1U))
1783 USBx->GCCFG &= ~(USB_OTG_GCCFG_PWRDWN);
1800 hpcd->USB_Address = address;
1815 uint16_t ep_mps, uint8_t ep_type)
1817 HAL_StatusTypeDef ret = HAL_OK;
1820 if ((ep_addr & 0x80U) == 0x80U)
1822 ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
1827 ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK];
1831 ep->
num = ep_addr & EP_ADDR_MSK;
1832 ep->
maxpacket = (uint32_t)ep_mps & 0x7FFU;
1835 if (ep->
is_in != 0U)
1842 if (ep_type == EP_TYPE_BULK)
1864 if ((ep_addr & 0x80U) == 0x80U)
1866 ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
1871 ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK];
1874 ep->
num = ep_addr & EP_ADDR_MSK;
1895 ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK];
1902 ep->
num = ep_addr & EP_ADDR_MSK;
1904 if (hpcd->Init.dma_enable == 1U)
1909 (void)
USB_EPStartXfer(hpcd->Instance, ep, (uint8_t)hpcd->Init.dma_enable);
1922 return hpcd->OUT_ep[ep_addr & EP_ADDR_MSK].xfer_count;
1936 ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
1943 ep->
num = ep_addr & EP_ADDR_MSK;
1945 if (hpcd->Init.dma_enable == 1U)
1950 (void)
USB_EPStartXfer(hpcd->Instance, ep, (uint8_t)hpcd->Init.dma_enable);
1965 if (((uint32_t)ep_addr & EP_ADDR_MSK) > hpcd->Init.dev_endpoints)
1970 if ((0x80U & ep_addr) == 0x80U)
1972 ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
1977 ep = &hpcd->OUT_ep[ep_addr];
1982 ep->
num = ep_addr & EP_ADDR_MSK;
1988 if ((ep_addr & EP_ADDR_MSK) == 0U)
1990 (void)
USB_EP0_OutStart(hpcd->Instance, (uint8_t)hpcd->Init.dma_enable, (uint8_t *)hpcd->Setup);
2008 if (((uint32_t)ep_addr & 0x0FU) > hpcd->Init.dev_endpoints)
2013 if ((0x80U & ep_addr) == 0x80U)
2015 ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
2020 ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK];
2025 ep->
num = ep_addr & EP_ADDR_MSK;
2042 HAL_StatusTypeDef ret;
2045 if ((0x80U & ep_addr) == 0x80U)
2047 ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
2051 ep = &hpcd->OUT_ep[ep_addr & EP_ADDR_MSK];
2070 if ((ep_addr & 0x80U) == 0x80U)
2072 (void)
USB_FlushTxFifo(hpcd->Instance, (uint32_t)ep_addr & EP_ADDR_MSK);
2133 #if defined (USB_OTG_FS) || defined (USB_OTG_HS)
2142 const USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
2143 uint32_t USBx_BASE = (uint32_t)USBx;
2152 USBx_DEVICE->DCTL |= (uint32_t)testmode << 4;
2174 #if defined (USB_OTG_FS) || defined (USB_OTG_HS)
2181 static HAL_StatusTypeDef PCD_WriteEmptyTxFifo(
PCD_HandleTypeDef *hpcd, uint32_t epnum)
2183 USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
2184 uint32_t USBx_BASE = (uint32_t)USBx;
2188 uint32_t fifoemptymsk;
2190 ep = &hpcd->IN_ep[epnum];
2204 len32b = (len + 3U) / 4U;
2206 while (((USBx_INEP(epnum)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) >= len32b) &&
2216 len32b = (len + 3U) / 4U;
2219 (uint8_t)hpcd->Init.dma_enable);
2227 fifoemptymsk = (uint32_t)(0x1UL << (epnum & EP_ADDR_MSK));
2228 USBx_DEVICE->DIEPEMPMSK &= ~fifoemptymsk;
2241 static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(
PCD_HandleTypeDef *hpcd, uint32_t epnum)
2244 const USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
2245 uint32_t USBx_BASE = (uint32_t)USBx;
2246 uint32_t gSNPSiD = *(__IO
const uint32_t *)(&USBx->CID + 0x1U);
2247 uint32_t DoepintReg = USBx_OUTEP(epnum)->DOEPINT;
2249 if (hpcd->Init.dma_enable == 1U)
2251 if ((DoepintReg & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP)
2254 if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
2255 ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
2257 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
2260 else if ((DoepintReg & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR)
2262 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR);
2264 else if ((DoepintReg & (USB_OTG_DOEPINT_STUP | USB_OTG_DOEPINT_OTEPSPR)) == 0U)
2267 if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
2268 ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
2270 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
2274 ep = &hpcd->OUT_ep[epnum];
2292 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
2293 hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
2306 if (gSNPSiD == USB_OTG_CORE_ID_310A)
2309 if ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX)
2311 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
2315 if ((DoepintReg & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR)
2317 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR);
2320 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
2321 hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
2329 if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U))
2335 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
2336 hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
2353 static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(
PCD_HandleTypeDef *hpcd, uint32_t epnum)
2355 const USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
2356 uint32_t USBx_BASE = (uint32_t)USBx;
2357 uint32_t gSNPSiD = *(__IO
const uint32_t *)(&USBx->CID + 0x1U);
2358 uint32_t DoepintReg = USBx_OUTEP(epnum)->DOEPINT;
2360 if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
2361 ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
2363 CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
2367 #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
2368 hpcd->SetupStageCallback(hpcd);
2373 if ((gSNPSiD > USB_OTG_CORE_ID_300A) && (hpcd->Init.dma_enable == 1U))
HAL_PCD_CallbackIDTypeDef
@ HAL_PCD_SETUPSTAGE_CB_ID
@ HAL_PCD_MSPDEINIT_CB_ID
@ HAL_PCD_DISCONNECT_CB_ID
void(* pPCD_DataInStageCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum)
void(* pPCD_BcdCallbackTypeDef)(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg)
void(* pPCD_IsoOutIncpltCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum)
void(* pPCD_IsoInIncpltCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum)
void(* pPCD_DataOutStageCallbackTypeDef)(PCD_HandleTypeDef *hpcd, uint8_t epnum)
void(* pPCD_CallbackTypeDef)(PCD_HandleTypeDef *hpcd)
void(* pPCD_LpmCallbackTypeDef)(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
Send LPM message to user layer callback.
void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg)
Send BatteryCharging message to user layer callback.
HAL_StatusTypeDef HAL_PCDEx_ActivateLPM(PCD_HandleTypeDef *hpcd)
Activate LPM feature.
HAL_StatusTypeDef HAL_PCD_UnRegisterIsoOutIncpltCallback(PCD_HandleTypeDef *hpcd)
Unregister the USB PCD Iso OUT incomplete Callback USB PCD Iso OUT incomplete Callback is redirected ...
void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
Initializes the PCD MSP.
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...
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_RegisterDataOutStageCallback(PCD_HandleTypeDef *hpcd, pPCD_DataOutStageCallbackTypeDef pCallback)
Register USB PCD Data OUT Stage Callback To be used instead of the weak HAL_PCD_DataOutStageCallback(...
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...
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...
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_RegisterIsoInIncpltCallback(PCD_HandleTypeDef *hpcd, pPCD_IsoInIncpltCallbackTypeDef pCallback)
Register USB PCD Iso IN incomplete Callback To be used instead of the weak HAL_PCD_ISOINIncompleteCal...
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() ...
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...
void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd)
DeInitializes PCD MSP.
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...
HAL_StatusTypeDef HAL_PCD_UnRegisterCallback(PCD_HandleTypeDef *hpcd, HAL_PCD_CallbackIDTypeDef CallbackID)
Unregister an USB PCD Callback USB PCD callback is redirected to the weak predefined 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...
HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
Initializes the PCD according to the specified parameters in the PCD_InitTypeDef and initialize the a...
HAL_StatusTypeDef HAL_PCD_DeInit(PCD_HandleTypeDef *hpcd)
DeInitializes the PCD peripheral.
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.
void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
USB Start Of Frame callback.
void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
Setup stage callback.
void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
Incomplete ISO OUT callback.
void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
Suspend event callback.
void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
Handles PCD interrupt request.
void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
Data IN stage callback.
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
Incomplete ISO IN callback.
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
Disconnection event callback.
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
Connection event callback.
void HAL_PCD_WKUP_IRQHandler(PCD_HandleTypeDef *hpcd)
Handles PCD Wakeup interrupt request.
void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
Data OUT stage callback.
void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
USB Reset callback.
HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd)
Stop the USB device.
void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
Resume event callback.
HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd)
Start the USB device.
HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len)
Receive an amount of data.
HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len)
Send an amount of data.
HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
Deactivate an endpoint.
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_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address)
Set the USB Device address.
uint32_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef const *hpcd, uint8_t ep_addr)
Get Received Data Size.
HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd)
Connect the USB device.
HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd)
Disconnect 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_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd)
De-activate remote wakeup signalling.
HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd)
Activate remote wakeup signalling.
HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
Set a STALL condition over an endpoint.
HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
Flush an endpoint.
HAL_StatusTypeDef HAL_PCD_EP_Abort(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
Abort an USB EP transaction.
PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef const *hpcd)
Return the PCD handle state.
HAL_StatusTypeDef HAL_PCD_SetTestMode(const PCD_HandleTypeDef *hpcd, uint8_t testmode)
Set the USB Device high speed test mode.
PCD_StateTypeDef
PCD State structure definition.
struct __PCD_HandleTypeDef else typedef struct endif PCD_HandleTypeDef
PCD Handle Structure definition.
uint32_t HAL_RCC_GetHCLKFreq(void)
Returns the HCLK frequency.
uint32_t USB_GetMode(const USB_OTG_GlobalTypeDef *USBx)
Returns USB core mode.
HAL_StatusTypeDef USB_WritePacket(const USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uint8_t ch_ep_num, uint16_t len, uint8_t dma)
USB_WritePacket : Writes a packet into the Tx FIFO associated with the EP/channel.
uint32_t USB_ReadDevOutEPInterrupt(const USB_OTG_GlobalTypeDef *USBx, uint8_t epnum)
Returns Device OUT EP Interrupt register.
void * USB_ReadPacket(const USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len)
USB_ReadPacket : read a packet from the RX FIFO.
HAL_StatusTypeDef USB_ActivateEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep)
Activate and configure an endpoint.
uint8_t USB_GetDevSpeed(const USB_OTG_GlobalTypeDef *USBx)
USB_GetDevSpeed Return the Dev Speed.
uint32_t USB_ReadDevAllInEpInterrupt(const USB_OTG_GlobalTypeDef *USBx)
USB_ReadDevAllInEpInterrupt: return the USB device IN endpoints interrupt status.
HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg)
Initializes the USB Core.
HAL_StatusTypeDef USB_ActivateSetup(const USB_OTG_GlobalTypeDef *USBx)
Activate EP0 for Setup transactions.
HAL_StatusTypeDef USB_SetCurrentMode(USB_OTG_GlobalTypeDef *USBx, USB_OTG_ModeTypeDef mode)
USB_SetCurrentMode Set functional mode.
HAL_StatusTypeDef USB_DeactivateEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep)
De-activate and de-initialize an endpoint.
HAL_StatusTypeDef USB_EPClearStall(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep)
USB_EPClearStall : Clear a stall condition over an EP.
HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx, uint32_t hclk, uint8_t speed)
Set the USB turnaround time.
HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep, uint8_t dma)
USB_EPStartXfer : setup and starts a transfer over an EP.
uint32_t USB_ReadDevAllOutEpInterrupt(const USB_OTG_GlobalTypeDef *USBx)
USB_ReadDevAllOutEpInterrupt: return the USB device OUT endpoints interrupt status.
HAL_StatusTypeDef USB_EPSetStall(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep)
USB_EPSetStall : set a stall condition over an EP.
HAL_StatusTypeDef USB_StopDevice(USB_OTG_GlobalTypeDef *USBx)
USB_StopDevice : Stop the usb device mode.
uint32_t USB_ReadDevInEPInterrupt(const USB_OTG_GlobalTypeDef *USBx, uint8_t epnum)
Returns Device IN EP Interrupt register.
HAL_StatusTypeDef USB_FlushRxFifo(USB_OTG_GlobalTypeDef *USBx)
USB_FlushRxFifo Flush Rx FIFO.
HAL_StatusTypeDef USB_DevDisconnect(const USB_OTG_GlobalTypeDef *USBx)
USB_DevDisconnect : Disconnect the USB device by disabling Rpu.
HAL_StatusTypeDef USB_SetDevAddress(const USB_OTG_GlobalTypeDef *USBx, uint8_t address)
USB_SetDevAddress : Stop the usb device mode.
HAL_StatusTypeDef USB_FlushTxFifo(USB_OTG_GlobalTypeDef *USBx, uint32_t num)
USB_FlushTxFifo Flush a Tx FIFO.
HAL_StatusTypeDef USB_DevConnect(const USB_OTG_GlobalTypeDef *USBx)
USB_DevConnect : Connect the USB device by enabling Rpu.
HAL_StatusTypeDef USB_ActivateRemoteWakeup(const USB_OTG_GlobalTypeDef *USBx)
USB_ActivateRemoteWakeup active remote wakeup signalling.
HAL_StatusTypeDef USB_DeActivateRemoteWakeup(const USB_OTG_GlobalTypeDef *USBx)
USB_DeActivateRemoteWakeup de-active remote wakeup signalling.
HAL_StatusTypeDef USB_EPStopXfer(const USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep)
USB_EPStoptXfer Stop transfer on an EP.
HAL_StatusTypeDef USB_EP0_OutStart(const USB_OTG_GlobalTypeDef *USBx, uint8_t dma, const uint8_t *psetup)
Prepare the EP0 to start the first control setup.
HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg)
USB_DevInit Initializes the USB_OTG controller registers for device mode.
uint8_t is_iso_incomplete
This file contains all the functions prototypes for the HAL module driver.