Lines Matching refs:hhcd

80 static void HCD_HC_IN_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum);
81 static void HCD_HC_OUT_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum);
82 static void HCD_RXQLVL_IRQHandler(HCD_HandleTypeDef *hhcd);
83 static void HCD_Port_IRQHandler(HCD_HandleTypeDef *hhcd);
111 HAL_StatusTypeDef HAL_HCD_Init(HCD_HandleTypeDef *hhcd) in HAL_HCD_Init() argument
118 if (hhcd == NULL) in HAL_HCD_Init()
124 assert_param(IS_HCD_ALL_INSTANCE(hhcd->Instance)); in HAL_HCD_Init()
127 USBx = hhcd->Instance; in HAL_HCD_Init()
130 if (hhcd->State == HAL_HCD_STATE_RESET) in HAL_HCD_Init()
133 hhcd->Lock = HAL_UNLOCKED; in HAL_HCD_Init()
136 hhcd->SOFCallback = HAL_HCD_SOF_Callback; in HAL_HCD_Init()
137 hhcd->ConnectCallback = HAL_HCD_Connect_Callback; in HAL_HCD_Init()
138 hhcd->DisconnectCallback = HAL_HCD_Disconnect_Callback; in HAL_HCD_Init()
139 hhcd->PortEnabledCallback = HAL_HCD_PortEnabled_Callback; in HAL_HCD_Init()
140 hhcd->PortDisabledCallback = HAL_HCD_PortDisabled_Callback; in HAL_HCD_Init()
141 hhcd->HC_NotifyURBChangeCallback = HAL_HCD_HC_NotifyURBChange_Callback; in HAL_HCD_Init()
143 if (hhcd->MspInitCallback == NULL) in HAL_HCD_Init()
145 hhcd->MspInitCallback = HAL_HCD_MspInit; in HAL_HCD_Init()
149 hhcd->MspInitCallback(hhcd); in HAL_HCD_Init()
152 HAL_HCD_MspInit(hhcd); in HAL_HCD_Init()
156 hhcd->State = HAL_HCD_STATE_BUSY; in HAL_HCD_Init()
162 hhcd->Init.dma_enable = 0U; in HAL_HCD_Init()
167 __HAL_HCD_DISABLE(hhcd); in HAL_HCD_Init()
170 if (USB_CoreInit(hhcd->Instance, hhcd->Init) != HAL_OK) in HAL_HCD_Init()
172 hhcd->State = HAL_HCD_STATE_ERROR; in HAL_HCD_Init()
177 if (USB_SetCurrentMode(hhcd->Instance, USB_HOST_MODE) != HAL_OK) in HAL_HCD_Init()
179 hhcd->State = HAL_HCD_STATE_ERROR; in HAL_HCD_Init()
184 if (USB_HostInit(hhcd->Instance, hhcd->Init) != HAL_OK) in HAL_HCD_Init()
186 hhcd->State = HAL_HCD_STATE_ERROR; in HAL_HCD_Init()
190 hhcd->State = HAL_HCD_STATE_READY; in HAL_HCD_Init()
219 HAL_StatusTypeDef HAL_HCD_HC_Init(HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t epnum, in HAL_HCD_HC_Init() argument
226 __HAL_LOCK(hhcd); in HAL_HCD_HC_Init()
227 hhcd->hc[ch_num].do_ping = 0U; in HAL_HCD_HC_Init()
228 hhcd->hc[ch_num].dev_addr = dev_address; in HAL_HCD_HC_Init()
229 hhcd->hc[ch_num].ch_num = ch_num; in HAL_HCD_HC_Init()
230 hhcd->hc[ch_num].ep_type = ep_type; in HAL_HCD_HC_Init()
231 hhcd->hc[ch_num].ep_num = epnum & 0x7FU; in HAL_HCD_HC_Init()
233 (void)HAL_HCD_HC_ClearHubInfo(hhcd, ch_num); in HAL_HCD_HC_Init()
237 hhcd->hc[ch_num].ep_is_in = 1U; in HAL_HCD_HC_Init()
241 hhcd->hc[ch_num].ep_is_in = 0U; in HAL_HCD_HC_Init()
244 HostCoreSpeed = USB_GetHostSpeed(hhcd->Instance); in HAL_HCD_HC_Init()
259 hhcd->hc[ch_num].speed = speed; in HAL_HCD_HC_Init()
260 hhcd->hc[ch_num].max_packet = (uint16_t)HCcharMps; in HAL_HCD_HC_Init()
262 status = USB_HC_Init(hhcd->Instance, ch_num, epnum, in HAL_HCD_HC_Init()
265 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
277 HAL_StatusTypeDef HAL_HCD_HC_Halt(HCD_HandleTypeDef *hhcd, uint8_t ch_num) in HAL_HCD_HC_Halt() argument
281 __HAL_LOCK(hhcd); in HAL_HCD_HC_Halt()
282 (void)USB_HC_Halt(hhcd->Instance, ch_num); in HAL_HCD_HC_Halt()
283 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Halt()
293 HAL_StatusTypeDef HAL_HCD_DeInit(HCD_HandleTypeDef *hhcd) in HAL_HCD_DeInit() argument
296 if (hhcd == NULL) in HAL_HCD_DeInit()
301 hhcd->State = HAL_HCD_STATE_BUSY; in HAL_HCD_DeInit()
304 if (hhcd->MspDeInitCallback == NULL) in HAL_HCD_DeInit()
306 hhcd->MspDeInitCallback = HAL_HCD_MspDeInit; /* Legacy weak MspDeInit */ in HAL_HCD_DeInit()
310 hhcd->MspDeInitCallback(hhcd); in HAL_HCD_DeInit()
313 HAL_HCD_MspDeInit(hhcd); in HAL_HCD_DeInit()
316 __HAL_HCD_DISABLE(hhcd); in HAL_HCD_DeInit()
318 hhcd->State = HAL_HCD_STATE_RESET; in HAL_HCD_DeInit()
328 __weak void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd) in HAL_HCD_MspInit() argument
331 UNUSED(hhcd); in HAL_HCD_MspInit()
343 __weak void HAL_HCD_MspDeInit(HCD_HandleTypeDef *hhcd) in HAL_HCD_MspDeInit() argument
346 UNUSED(hhcd); in HAL_HCD_MspDeInit()
395 HAL_StatusTypeDef HAL_HCD_HC_SubmitRequest(HCD_HandleTypeDef *hhcd, in HAL_HCD_HC_SubmitRequest() argument
404 hhcd->hc[ch_num].ep_is_in = direction; in HAL_HCD_HC_SubmitRequest()
405 hhcd->hc[ch_num].ep_type = ep_type; in HAL_HCD_HC_SubmitRequest()
409 hhcd->hc[ch_num].data_pid = HC_PID_SETUP; in HAL_HCD_HC_SubmitRequest()
410 hhcd->hc[ch_num].do_ping = do_ping; in HAL_HCD_HC_SubmitRequest()
414 hhcd->hc[ch_num].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
428 hhcd->hc[ch_num].toggle_out = 1U; in HAL_HCD_HC_SubmitRequest()
432 if (hhcd->hc[ch_num].toggle_out == 0U) in HAL_HCD_HC_SubmitRequest()
435 hhcd->hc[ch_num].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
440 hhcd->hc[ch_num].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
445 if (hhcd->hc[ch_num].do_ssplit == 1U) in HAL_HCD_HC_SubmitRequest()
447 if (hhcd->hc[ch_num].toggle_in == 0U) in HAL_HCD_HC_SubmitRequest()
449 hhcd->hc[ch_num].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
453 hhcd->hc[ch_num].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
464 if (hhcd->hc[ch_num].toggle_out == 0U) in HAL_HCD_HC_SubmitRequest()
467 hhcd->hc[ch_num].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
472 hhcd->hc[ch_num].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
477 if (hhcd->hc[ch_num].toggle_in == 0U) in HAL_HCD_HC_SubmitRequest()
479 hhcd->hc[ch_num].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
483 hhcd->hc[ch_num].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
492 if (hhcd->hc[ch_num].toggle_out == 0U) in HAL_HCD_HC_SubmitRequest()
495 hhcd->hc[ch_num].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
500 hhcd->hc[ch_num].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
505 if (hhcd->hc[ch_num].toggle_in == 0U) in HAL_HCD_HC_SubmitRequest()
507 hhcd->hc[ch_num].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
511 hhcd->hc[ch_num].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
517 hhcd->hc[ch_num].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
524 hhcd->hc[ch_num].xfer_buff = pbuff; in HAL_HCD_HC_SubmitRequest()
525 hhcd->hc[ch_num].xfer_len = length; in HAL_HCD_HC_SubmitRequest()
526 hhcd->hc[ch_num].urb_state = URB_IDLE; in HAL_HCD_HC_SubmitRequest()
527 hhcd->hc[ch_num].xfer_count = 0U; in HAL_HCD_HC_SubmitRequest()
528 hhcd->hc[ch_num].ch_num = ch_num; in HAL_HCD_HC_SubmitRequest()
529 hhcd->hc[ch_num].state = HC_IDLE; in HAL_HCD_HC_SubmitRequest()
531 return USB_HC_StartXfer(hhcd->Instance, &hhcd->hc[ch_num], (uint8_t)hhcd->Init.dma_enable); in HAL_HCD_HC_SubmitRequest()
539 void HAL_HCD_IRQHandler(HCD_HandleTypeDef *hhcd) in HAL_HCD_IRQHandler() argument
541 USB_OTG_GlobalTypeDef *USBx = hhcd->Instance; in HAL_HCD_IRQHandler()
547 if (USB_GetMode(hhcd->Instance) == USB_OTG_MODE_HOST) in HAL_HCD_IRQHandler()
550 if (__HAL_HCD_IS_INVALID_INTERRUPT(hhcd)) in HAL_HCD_IRQHandler()
555 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT)) in HAL_HCD_IRQHandler()
558 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT); in HAL_HCD_IRQHandler()
561 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_IISOIXFR)) in HAL_HCD_IRQHandler()
564 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_IISOIXFR); in HAL_HCD_IRQHandler()
567 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_PTXFE)) in HAL_HCD_IRQHandler()
570 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_PTXFE); in HAL_HCD_IRQHandler()
573 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_MMIS)) in HAL_HCD_IRQHandler()
576 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_MMIS); in HAL_HCD_IRQHandler()
580 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_DISCINT)) in HAL_HCD_IRQHandler()
582 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_DISCINT); in HAL_HCD_IRQHandler()
590 if (hhcd->Init.phy_itface == USB_OTG_EMBEDDED_PHY) in HAL_HCD_IRQHandler()
593 (void)USB_InitFSLSPClkSel(hhcd->Instance, HCFG_48_MHZ); in HAL_HCD_IRQHandler()
598 hhcd->DisconnectCallback(hhcd); in HAL_HCD_IRQHandler()
600 HAL_HCD_Disconnect_Callback(hhcd); in HAL_HCD_IRQHandler()
606 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_HPRTINT)) in HAL_HCD_IRQHandler()
608 HCD_Port_IRQHandler(hhcd); in HAL_HCD_IRQHandler()
612 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_SOF)) in HAL_HCD_IRQHandler()
615 hhcd->SOFCallback(hhcd); in HAL_HCD_IRQHandler()
617 HAL_HCD_SOF_Callback(hhcd); in HAL_HCD_IRQHandler()
620 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_SOF); in HAL_HCD_IRQHandler()
624 if (__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_HCINT)) in HAL_HCD_IRQHandler()
626 interrupt = USB_HC_ReadInterrupt(hhcd->Instance); in HAL_HCD_IRQHandler()
627 for (i = 0U; i < hhcd->Init.Host_channels; i++) in HAL_HCD_IRQHandler()
633 HCD_HC_IN_IRQHandler(hhcd, (uint8_t)i); in HAL_HCD_IRQHandler()
637 HCD_HC_OUT_IRQHandler(hhcd, (uint8_t)i); in HAL_HCD_IRQHandler()
641 __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_HCINT); in HAL_HCD_IRQHandler()
645 if ((__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_RXFLVL)) != 0U) in HAL_HCD_IRQHandler()
647 USB_MASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_RXFLVL); in HAL_HCD_IRQHandler()
649 HCD_RXQLVL_IRQHandler(hhcd); in HAL_HCD_IRQHandler()
651 USB_UNMASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_RXFLVL); in HAL_HCD_IRQHandler()
662 __weak void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_SOF_Callback() argument
665 UNUSED(hhcd); in HAL_HCD_SOF_Callback()
677 __weak void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_Connect_Callback() argument
680 UNUSED(hhcd); in HAL_HCD_Connect_Callback()
692 __weak void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_Disconnect_Callback() argument
695 UNUSED(hhcd); in HAL_HCD_Disconnect_Callback()
707 __weak void HAL_HCD_PortEnabled_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_PortEnabled_Callback() argument
710 UNUSED(hhcd); in HAL_HCD_PortEnabled_Callback()
722 __weak void HAL_HCD_PortDisabled_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_PortDisabled_Callback() argument
725 UNUSED(hhcd); in HAL_HCD_PortDisabled_Callback()
747 __weak void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, uint8_t chnum, HCD_URBStat… in HAL_HCD_HC_NotifyURBChange_Callback() argument
750 UNUSED(hhcd); in HAL_HCD_HC_NotifyURBChange_Callback()
776 HAL_StatusTypeDef HAL_HCD_RegisterCallback(HCD_HandleTypeDef *hhcd, in HAL_HCD_RegisterCallback() argument
785 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
789 __HAL_LOCK(hhcd); in HAL_HCD_RegisterCallback()
791 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_RegisterCallback()
796 hhcd->SOFCallback = pCallback; in HAL_HCD_RegisterCallback()
800 hhcd->ConnectCallback = pCallback; in HAL_HCD_RegisterCallback()
804 hhcd->DisconnectCallback = pCallback; in HAL_HCD_RegisterCallback()
808 hhcd->PortEnabledCallback = pCallback; in HAL_HCD_RegisterCallback()
812 hhcd->PortDisabledCallback = pCallback; in HAL_HCD_RegisterCallback()
816 hhcd->MspInitCallback = pCallback; in HAL_HCD_RegisterCallback()
820 hhcd->MspDeInitCallback = pCallback; in HAL_HCD_RegisterCallback()
825 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
831 else if (hhcd->State == HAL_HCD_STATE_RESET) in HAL_HCD_RegisterCallback()
836 hhcd->MspInitCallback = pCallback; in HAL_HCD_RegisterCallback()
840 hhcd->MspDeInitCallback = pCallback; in HAL_HCD_RegisterCallback()
845 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
854 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
860 __HAL_UNLOCK(hhcd); in HAL_HCD_RegisterCallback()
879 HAL_StatusTypeDef HAL_HCD_UnRegisterCallback(HCD_HandleTypeDef *hhcd, HAL_HCD_CallbackIDTypeDef Cal… in HAL_HCD_UnRegisterCallback() argument
884 __HAL_LOCK(hhcd); in HAL_HCD_UnRegisterCallback()
887 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_UnRegisterCallback()
892 hhcd->SOFCallback = HAL_HCD_SOF_Callback; in HAL_HCD_UnRegisterCallback()
896 hhcd->ConnectCallback = HAL_HCD_Connect_Callback; in HAL_HCD_UnRegisterCallback()
900 hhcd->DisconnectCallback = HAL_HCD_Disconnect_Callback; in HAL_HCD_UnRegisterCallback()
904 hhcd->PortEnabledCallback = HAL_HCD_PortEnabled_Callback; in HAL_HCD_UnRegisterCallback()
908 hhcd->PortDisabledCallback = HAL_HCD_PortDisabled_Callback; in HAL_HCD_UnRegisterCallback()
912 hhcd->MspInitCallback = HAL_HCD_MspInit; in HAL_HCD_UnRegisterCallback()
916 hhcd->MspDeInitCallback = HAL_HCD_MspDeInit; in HAL_HCD_UnRegisterCallback()
921 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterCallback()
928 else if (hhcd->State == HAL_HCD_STATE_RESET) in HAL_HCD_UnRegisterCallback()
933 hhcd->MspInitCallback = HAL_HCD_MspInit; in HAL_HCD_UnRegisterCallback()
937 hhcd->MspDeInitCallback = HAL_HCD_MspDeInit; in HAL_HCD_UnRegisterCallback()
942 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterCallback()
952 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterCallback()
959 __HAL_UNLOCK(hhcd); in HAL_HCD_UnRegisterCallback()
970 HAL_StatusTypeDef HAL_HCD_RegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd, in HAL_HCD_RegisterHC_NotifyURBChangeCallback() argument
978 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
984 __HAL_LOCK(hhcd); in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
986 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
988 hhcd->HC_NotifyURBChangeCallback = pCallback; in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
993 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
1000 __HAL_UNLOCK(hhcd); in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
1012 HAL_StatusTypeDef HAL_HCD_UnRegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd) in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback() argument
1017 __HAL_LOCK(hhcd); in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
1019 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
1021hhcd->HC_NotifyURBChangeCallback = HAL_HCD_HC_NotifyURBChange_Callback; /* Legacy weak DataOutStag… in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
1026 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
1033 __HAL_UNLOCK(hhcd); in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
1063 HAL_StatusTypeDef HAL_HCD_Start(HCD_HandleTypeDef *hhcd) in HAL_HCD_Start() argument
1065 __HAL_LOCK(hhcd); in HAL_HCD_Start()
1067 (void)USB_DriveVbus(hhcd->Instance, 1U); in HAL_HCD_Start()
1070 __HAL_HCD_ENABLE(hhcd); in HAL_HCD_Start()
1071 __HAL_UNLOCK(hhcd); in HAL_HCD_Start()
1082 HAL_StatusTypeDef HAL_HCD_Stop(HCD_HandleTypeDef *hhcd) in HAL_HCD_Stop() argument
1084 __HAL_LOCK(hhcd); in HAL_HCD_Stop()
1085 (void)USB_StopHost(hhcd->Instance); in HAL_HCD_Stop()
1086 __HAL_UNLOCK(hhcd); in HAL_HCD_Stop()
1096 HAL_StatusTypeDef HAL_HCD_ResetPort(HCD_HandleTypeDef *hhcd) in HAL_HCD_ResetPort() argument
1098 return (USB_ResetPort(hhcd->Instance)); in HAL_HCD_ResetPort()
1125 HCD_StateTypeDef HAL_HCD_GetState(HCD_HandleTypeDef const *hhcd) in HAL_HCD_GetState() argument
1127 return hhcd->State; in HAL_HCD_GetState()
1144 HCD_URBStateTypeDef HAL_HCD_HC_GetURBState(HCD_HandleTypeDef const *hhcd, uint8_t chnum) in HAL_HCD_HC_GetURBState() argument
1146 return hhcd->hc[chnum].urb_state; in HAL_HCD_HC_GetURBState()
1157 uint32_t HAL_HCD_HC_GetXferCount(HCD_HandleTypeDef const *hhcd, uint8_t chnum) in HAL_HCD_HC_GetXferCount() argument
1159 return hhcd->hc[chnum].xfer_count; in HAL_HCD_HC_GetXferCount()
1179 HCD_HCStateTypeDef HAL_HCD_HC_GetState(HCD_HandleTypeDef const *hhcd, uint8_t chnum) in HAL_HCD_HC_GetState() argument
1181 return hhcd->hc[chnum].state; in HAL_HCD_HC_GetState()
1189 uint32_t HAL_HCD_GetCurrentFrame(HCD_HandleTypeDef *hhcd) in HAL_HCD_GetCurrentFrame() argument
1191 return (USB_GetCurrentFrame(hhcd->Instance)); in HAL_HCD_GetCurrentFrame()
1199 uint32_t HAL_HCD_GetCurrentSpeed(HCD_HandleTypeDef *hhcd) in HAL_HCD_GetCurrentSpeed() argument
1201 return (USB_GetHostSpeed(hhcd->Instance)); in HAL_HCD_GetCurrentSpeed()
1213 HAL_StatusTypeDef HAL_HCD_HC_SetHubInfo(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HAL_HCD_HC_SetHubInfo() argument
1216 uint32_t HostCoreSpeed = USB_GetHostSpeed(hhcd->Instance); in HAL_HCD_HC_SetHubInfo()
1219 …if ((hhcd->hc[ch_num].speed != HCD_DEVICE_SPEED_HIGH) && (HostCoreSpeed == HPRT0_PRTSPD_HIGH_SPEED… in HAL_HCD_HC_SetHubInfo()
1221 hhcd->hc[ch_num].do_ssplit = 1U; in HAL_HCD_HC_SetHubInfo()
1223 if ((hhcd->hc[ch_num].ep_type == EP_TYPE_CTRL) && (hhcd->hc[ch_num].ep_is_in != 0U)) in HAL_HCD_HC_SetHubInfo()
1225 hhcd->hc[ch_num].toggle_in = 1U; in HAL_HCD_HC_SetHubInfo()
1229 hhcd->hc[ch_num].hub_addr = addr; in HAL_HCD_HC_SetHubInfo()
1230 hhcd->hc[ch_num].hub_port_nbr = PortNbr; in HAL_HCD_HC_SetHubInfo()
1243 HAL_StatusTypeDef HAL_HCD_HC_ClearHubInfo(HCD_HandleTypeDef *hhcd, uint8_t ch_num) in HAL_HCD_HC_ClearHubInfo() argument
1245 hhcd->hc[ch_num].do_ssplit = 0U; in HAL_HCD_HC_ClearHubInfo()
1246 hhcd->hc[ch_num].do_csplit = 0U; in HAL_HCD_HC_ClearHubInfo()
1247 hhcd->hc[ch_num].hub_addr = 0U; in HAL_HCD_HC_ClearHubInfo()
1248 hhcd->hc[ch_num].hub_port_nbr = 0U; in HAL_HCD_HC_ClearHubInfo()
1270 static void HCD_HC_IN_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum) in HCD_HC_IN_IRQHandler() argument
1272 const USB_OTG_GlobalTypeDef *USBx = hhcd->Instance; in HCD_HC_IN_IRQHandler()
1276 if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_AHBERR)) in HCD_HC_IN_IRQHandler()
1279 hhcd->hc[chnum].state = HC_XACTERR; in HCD_HC_IN_IRQHandler()
1280 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_IN_IRQHandler()
1282 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_BBERR)) in HCD_HC_IN_IRQHandler()
1285 hhcd->hc[chnum].state = HC_BBLERR; in HCD_HC_IN_IRQHandler()
1286 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_IN_IRQHandler()
1288 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_STALL)) in HCD_HC_IN_IRQHandler()
1291 hhcd->hc[chnum].state = HC_STALL; in HCD_HC_IN_IRQHandler()
1292 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_IN_IRQHandler()
1294 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_DTERR)) in HCD_HC_IN_IRQHandler()
1297 hhcd->hc[chnum].state = HC_DATATGLERR; in HCD_HC_IN_IRQHandler()
1298 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_IN_IRQHandler()
1300 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_TXERR)) in HCD_HC_IN_IRQHandler()
1303 hhcd->hc[chnum].state = HC_XACTERR; in HCD_HC_IN_IRQHandler()
1304 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_IN_IRQHandler()
1311 if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_FRMOR)) in HCD_HC_IN_IRQHandler()
1313 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_IN_IRQHandler()
1316 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_XFRC)) in HCD_HC_IN_IRQHandler()
1321 if (hhcd->hc[chnum].do_csplit == 1U) in HCD_HC_IN_IRQHandler()
1323 hhcd->hc[chnum].do_csplit = 0U; in HCD_HC_IN_IRQHandler()
1327 if (hhcd->Init.dma_enable != 0U) in HCD_HC_IN_IRQHandler()
1329hhcd->hc[chnum].xfer_count = hhcd->hc[chnum].XferSize - (USBx_HC(chnum)->HCTSIZ & USB_OTG_HCTSIZ_X… in HCD_HC_IN_IRQHandler()
1332 hhcd->hc[chnum].state = HC_XFRC; in HCD_HC_IN_IRQHandler()
1333 hhcd->hc[chnum].ErrCnt = 0U; in HCD_HC_IN_IRQHandler()
1336 if ((hhcd->hc[chnum].ep_type == EP_TYPE_CTRL) || in HCD_HC_IN_IRQHandler()
1337 (hhcd->hc[chnum].ep_type == EP_TYPE_BULK)) in HCD_HC_IN_IRQHandler()
1339 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_IN_IRQHandler()
1342 else if ((hhcd->hc[chnum].ep_type == EP_TYPE_INTR) || in HCD_HC_IN_IRQHandler()
1343 (hhcd->hc[chnum].ep_type == EP_TYPE_ISOC)) in HCD_HC_IN_IRQHandler()
1346 hhcd->hc[chnum].urb_state = URB_DONE; in HCD_HC_IN_IRQHandler()
1349 hhcd->HC_NotifyURBChangeCallback(hhcd, chnum, hhcd->hc[chnum].urb_state); in HCD_HC_IN_IRQHandler()
1351 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state); in HCD_HC_IN_IRQHandler()
1359 if (hhcd->Init.dma_enable == 1U) in HCD_HC_IN_IRQHandler()
1361 …if ((((hhcd->hc[chnum].xfer_count + hhcd->hc[chnum].max_packet - 1U) / hhcd->hc[chnum].max_packet)… in HCD_HC_IN_IRQHandler()
1363 hhcd->hc[chnum].toggle_in ^= 1U; in HCD_HC_IN_IRQHandler()
1368 hhcd->hc[chnum].toggle_in ^= 1U; in HCD_HC_IN_IRQHandler()
1371 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_ACK)) in HCD_HC_IN_IRQHandler()
1375 if (hhcd->hc[chnum].do_ssplit == 1U) in HCD_HC_IN_IRQHandler()
1377 hhcd->hc[chnum].do_csplit = 1U; in HCD_HC_IN_IRQHandler()
1378 hhcd->hc[chnum].state = HC_ACK; in HCD_HC_IN_IRQHandler()
1380 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_IN_IRQHandler()
1383 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_CHH)) in HCD_HC_IN_IRQHandler()
1387 if (hhcd->hc[chnum].state == HC_XFRC) in HCD_HC_IN_IRQHandler()
1389 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_IN_IRQHandler()
1390 hhcd->hc[chnum].urb_state = URB_DONE; in HCD_HC_IN_IRQHandler()
1392 else if (hhcd->hc[chnum].state == HC_STALL) in HCD_HC_IN_IRQHandler()
1394 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_IN_IRQHandler()
1395 hhcd->hc[chnum].urb_state = URB_STALL; in HCD_HC_IN_IRQHandler()
1397 else if ((hhcd->hc[chnum].state == HC_XACTERR) || in HCD_HC_IN_IRQHandler()
1398 (hhcd->hc[chnum].state == HC_DATATGLERR)) in HCD_HC_IN_IRQHandler()
1400 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_IN_IRQHandler()
1401 hhcd->hc[chnum].ErrCnt++; in HCD_HC_IN_IRQHandler()
1402 if (hhcd->hc[chnum].ErrCnt > 2U) in HCD_HC_IN_IRQHandler()
1404 hhcd->hc[chnum].ErrCnt = 0U; in HCD_HC_IN_IRQHandler()
1406 if (hhcd->hc[chnum].do_ssplit == 1U) in HCD_HC_IN_IRQHandler()
1408 hhcd->hc[chnum].do_csplit = 0U; in HCD_HC_IN_IRQHandler()
1409 hhcd->hc[chnum].ep_ss_schedule = 0U; in HCD_HC_IN_IRQHandler()
1413 hhcd->hc[chnum].urb_state = URB_ERROR; in HCD_HC_IN_IRQHandler()
1417 hhcd->hc[chnum].urb_state = URB_NOTREADY; in HCD_HC_IN_IRQHandler()
1419 if ((hhcd->hc[chnum].ep_type == EP_TYPE_CTRL) || in HCD_HC_IN_IRQHandler()
1420 (hhcd->hc[chnum].ep_type == EP_TYPE_BULK)) in HCD_HC_IN_IRQHandler()
1430 else if (hhcd->hc[chnum].state == HC_NYET) in HCD_HC_IN_IRQHandler()
1432 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_IN_IRQHandler()
1434 if (hhcd->hc[chnum].do_csplit == 1U) in HCD_HC_IN_IRQHandler()
1436 if (hhcd->hc[chnum].ep_type == EP_TYPE_INTR) in HCD_HC_IN_IRQHandler()
1438 hhcd->hc[chnum].NyetErrCnt++; in HCD_HC_IN_IRQHandler()
1439 if (hhcd->hc[chnum].NyetErrCnt > 2U) in HCD_HC_IN_IRQHandler()
1441 hhcd->hc[chnum].NyetErrCnt = 0U; in HCD_HC_IN_IRQHandler()
1442 hhcd->hc[chnum].do_csplit = 0U; in HCD_HC_IN_IRQHandler()
1444 if (hhcd->hc[chnum].ErrCnt < 3U) in HCD_HC_IN_IRQHandler()
1446 hhcd->hc[chnum].ep_ss_schedule = 1U; in HCD_HC_IN_IRQHandler()
1449 hhcd->hc[chnum].urb_state = URB_ERROR; in HCD_HC_IN_IRQHandler()
1453 hhcd->hc[chnum].urb_state = URB_NOTREADY; in HCD_HC_IN_IRQHandler()
1458 hhcd->hc[chnum].urb_state = URB_NOTREADY; in HCD_HC_IN_IRQHandler()
1461 if ((hhcd->hc[chnum].ep_type == EP_TYPE_CTRL) || in HCD_HC_IN_IRQHandler()
1462 (hhcd->hc[chnum].ep_type == EP_TYPE_BULK)) in HCD_HC_IN_IRQHandler()
1472 else if (hhcd->hc[chnum].state == HC_ACK) in HCD_HC_IN_IRQHandler()
1474 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_IN_IRQHandler()
1476 if (hhcd->hc[chnum].do_csplit == 1U) in HCD_HC_IN_IRQHandler()
1478 hhcd->hc[chnum].urb_state = URB_NOTREADY; in HCD_HC_IN_IRQHandler()
1485 if ((hhcd->hc[chnum].ep_type == EP_TYPE_CTRL) || in HCD_HC_IN_IRQHandler()
1486 (hhcd->hc[chnum].ep_type == EP_TYPE_BULK)) in HCD_HC_IN_IRQHandler()
1496 else if (hhcd->hc[chnum].state == HC_NAK) in HCD_HC_IN_IRQHandler()
1498 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_IN_IRQHandler()
1499 hhcd->hc[chnum].urb_state = URB_NOTREADY; in HCD_HC_IN_IRQHandler()
1501 if ((hhcd->hc[chnum].ep_type == EP_TYPE_CTRL) || in HCD_HC_IN_IRQHandler()
1502 (hhcd->hc[chnum].ep_type == EP_TYPE_BULK)) in HCD_HC_IN_IRQHandler()
1511 else if (hhcd->hc[chnum].state == HC_BBLERR) in HCD_HC_IN_IRQHandler()
1513 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_IN_IRQHandler()
1514 hhcd->hc[chnum].ErrCnt++; in HCD_HC_IN_IRQHandler()
1515 hhcd->hc[chnum].urb_state = URB_ERROR; in HCD_HC_IN_IRQHandler()
1519 if (hhcd->hc[chnum].state == HC_HALTED) in HCD_HC_IN_IRQHandler()
1526 hhcd->HC_NotifyURBChangeCallback(hhcd, chnum, hhcd->hc[chnum].urb_state); in HCD_HC_IN_IRQHandler()
1528 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state); in HCD_HC_IN_IRQHandler()
1531 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_NYET)) in HCD_HC_IN_IRQHandler()
1534 hhcd->hc[chnum].state = HC_NYET; in HCD_HC_IN_IRQHandler()
1536 if (hhcd->hc[chnum].do_ssplit == 0U) in HCD_HC_IN_IRQHandler()
1538 hhcd->hc[chnum].ErrCnt = 0U; in HCD_HC_IN_IRQHandler()
1541 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_IN_IRQHandler()
1543 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_NAK)) in HCD_HC_IN_IRQHandler()
1545 if (hhcd->hc[chnum].ep_type == EP_TYPE_INTR) in HCD_HC_IN_IRQHandler()
1547 hhcd->hc[chnum].ErrCnt = 0U; in HCD_HC_IN_IRQHandler()
1548 hhcd->hc[chnum].state = HC_NAK; in HCD_HC_IN_IRQHandler()
1549 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_IN_IRQHandler()
1551 else if ((hhcd->hc[chnum].ep_type == EP_TYPE_CTRL) || in HCD_HC_IN_IRQHandler()
1552 (hhcd->hc[chnum].ep_type == EP_TYPE_BULK)) in HCD_HC_IN_IRQHandler()
1554 hhcd->hc[chnum].ErrCnt = 0U; in HCD_HC_IN_IRQHandler()
1556 if ((hhcd->Init.dma_enable == 0U) || (hhcd->hc[chnum].do_csplit == 1U)) in HCD_HC_IN_IRQHandler()
1558 hhcd->hc[chnum].state = HC_NAK; in HCD_HC_IN_IRQHandler()
1559 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_IN_IRQHandler()
1567 if (hhcd->hc[chnum].do_csplit == 1U) in HCD_HC_IN_IRQHandler()
1569 hhcd->hc[chnum].do_csplit = 0U; in HCD_HC_IN_IRQHandler()
1589 static void HCD_HC_OUT_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum) in HCD_HC_OUT_IRQHandler() argument
1591 const USB_OTG_GlobalTypeDef *USBx = hhcd->Instance; in HCD_HC_OUT_IRQHandler()
1596 if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_AHBERR)) in HCD_HC_OUT_IRQHandler()
1599 hhcd->hc[chnum].state = HC_XACTERR; in HCD_HC_OUT_IRQHandler()
1600 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_OUT_IRQHandler()
1602 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_ACK)) in HCD_HC_OUT_IRQHandler()
1606 if (hhcd->hc[chnum].do_ping == 1U) in HCD_HC_OUT_IRQHandler()
1608 hhcd->hc[chnum].do_ping = 0U; in HCD_HC_OUT_IRQHandler()
1609 hhcd->hc[chnum].urb_state = URB_NOTREADY; in HCD_HC_OUT_IRQHandler()
1610 hhcd->hc[chnum].state = HC_ACK; in HCD_HC_OUT_IRQHandler()
1611 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_OUT_IRQHandler()
1614 if ((hhcd->hc[chnum].do_ssplit == 1U) && (hhcd->hc[chnum].do_csplit == 0U)) in HCD_HC_OUT_IRQHandler()
1616 if (hhcd->hc[chnum].ep_type != EP_TYPE_ISOC) in HCD_HC_OUT_IRQHandler()
1618 hhcd->hc[chnum].do_csplit = 1U; in HCD_HC_OUT_IRQHandler()
1621 hhcd->hc[chnum].state = HC_ACK; in HCD_HC_OUT_IRQHandler()
1622 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_OUT_IRQHandler()
1625 hhcd->hc[chnum].ErrCnt = 0U; in HCD_HC_OUT_IRQHandler()
1628 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_FRMOR)) in HCD_HC_OUT_IRQHandler()
1631 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_OUT_IRQHandler()
1633 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_XFRC)) in HCD_HC_OUT_IRQHandler()
1635 hhcd->hc[chnum].ErrCnt = 0U; in HCD_HC_OUT_IRQHandler()
1638 if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_NYET)) in HCD_HC_OUT_IRQHandler()
1640 hhcd->hc[chnum].do_ping = 1U; in HCD_HC_OUT_IRQHandler()
1644 if (hhcd->hc[chnum].do_csplit != 0U) in HCD_HC_OUT_IRQHandler()
1646 hhcd->hc[chnum].do_csplit = 0U; in HCD_HC_OUT_IRQHandler()
1651 hhcd->hc[chnum].state = HC_XFRC; in HCD_HC_OUT_IRQHandler()
1652 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_OUT_IRQHandler()
1654 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_NYET)) in HCD_HC_OUT_IRQHandler()
1656 hhcd->hc[chnum].state = HC_NYET; in HCD_HC_OUT_IRQHandler()
1658 if (hhcd->hc[chnum].do_ssplit == 0U) in HCD_HC_OUT_IRQHandler()
1660 hhcd->hc[chnum].do_ping = 1U; in HCD_HC_OUT_IRQHandler()
1663 hhcd->hc[chnum].ErrCnt = 0U; in HCD_HC_OUT_IRQHandler()
1664 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_OUT_IRQHandler()
1667 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_STALL)) in HCD_HC_OUT_IRQHandler()
1670 hhcd->hc[chnum].state = HC_STALL; in HCD_HC_OUT_IRQHandler()
1671 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_OUT_IRQHandler()
1673 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_NAK)) in HCD_HC_OUT_IRQHandler()
1675 hhcd->hc[chnum].ErrCnt = 0U; in HCD_HC_OUT_IRQHandler()
1676 hhcd->hc[chnum].state = HC_NAK; in HCD_HC_OUT_IRQHandler()
1678 if (hhcd->hc[chnum].do_ping == 0U) in HCD_HC_OUT_IRQHandler()
1680 if (hhcd->hc[chnum].speed == HCD_DEVICE_SPEED_HIGH) in HCD_HC_OUT_IRQHandler()
1682 hhcd->hc[chnum].do_ping = 1U; in HCD_HC_OUT_IRQHandler()
1686 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_OUT_IRQHandler()
1689 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_TXERR)) in HCD_HC_OUT_IRQHandler()
1691 if (hhcd->Init.dma_enable == 0U) in HCD_HC_OUT_IRQHandler()
1693 hhcd->hc[chnum].state = HC_XACTERR; in HCD_HC_OUT_IRQHandler()
1694 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_OUT_IRQHandler()
1698 hhcd->hc[chnum].ErrCnt++; in HCD_HC_OUT_IRQHandler()
1699 if (hhcd->hc[chnum].ErrCnt > 2U) in HCD_HC_OUT_IRQHandler()
1701 hhcd->hc[chnum].ErrCnt = 0U; in HCD_HC_OUT_IRQHandler()
1702 hhcd->hc[chnum].urb_state = URB_ERROR; in HCD_HC_OUT_IRQHandler()
1705 hhcd->HC_NotifyURBChangeCallback(hhcd, chnum, hhcd->hc[chnum].urb_state); in HCD_HC_OUT_IRQHandler()
1707 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state); in HCD_HC_OUT_IRQHandler()
1712 hhcd->hc[chnum].urb_state = URB_NOTREADY; in HCD_HC_OUT_IRQHandler()
1723 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_DTERR)) in HCD_HC_OUT_IRQHandler()
1725 hhcd->hc[chnum].state = HC_DATATGLERR; in HCD_HC_OUT_IRQHandler()
1726 (void)USB_HC_Halt(hhcd->Instance, chnum); in HCD_HC_OUT_IRQHandler()
1729 else if (__HAL_HCD_GET_CH_FLAG(hhcd, chnum, USB_OTG_HCINT_CHH)) in HCD_HC_OUT_IRQHandler()
1733 if (hhcd->hc[chnum].state == HC_XFRC) in HCD_HC_OUT_IRQHandler()
1735 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_OUT_IRQHandler()
1736 hhcd->hc[chnum].urb_state = URB_DONE; in HCD_HC_OUT_IRQHandler()
1738 if ((hhcd->hc[chnum].ep_type == EP_TYPE_BULK) || in HCD_HC_OUT_IRQHandler()
1739 (hhcd->hc[chnum].ep_type == EP_TYPE_INTR)) in HCD_HC_OUT_IRQHandler()
1741 if (hhcd->Init.dma_enable == 0U) in HCD_HC_OUT_IRQHandler()
1743 hhcd->hc[chnum].toggle_out ^= 1U; in HCD_HC_OUT_IRQHandler()
1746 if ((hhcd->Init.dma_enable == 1U) && (hhcd->hc[chnum].xfer_len > 0U)) in HCD_HC_OUT_IRQHandler()
1748 …num_packets = (hhcd->hc[chnum].xfer_len + hhcd->hc[chnum].max_packet - 1U) / hhcd->hc[chnum].max_p… in HCD_HC_OUT_IRQHandler()
1752 hhcd->hc[chnum].toggle_out ^= 1U; in HCD_HC_OUT_IRQHandler()
1757 else if (hhcd->hc[chnum].state == HC_ACK) in HCD_HC_OUT_IRQHandler()
1759 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_OUT_IRQHandler()
1761 if (hhcd->hc[chnum].do_csplit == 1U) in HCD_HC_OUT_IRQHandler()
1763 hhcd->hc[chnum].urb_state = URB_NOTREADY; in HCD_HC_OUT_IRQHandler()
1766 else if (hhcd->hc[chnum].state == HC_NAK) in HCD_HC_OUT_IRQHandler()
1768 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_OUT_IRQHandler()
1769 hhcd->hc[chnum].urb_state = URB_NOTREADY; in HCD_HC_OUT_IRQHandler()
1771 if (hhcd->hc[chnum].do_csplit == 1U) in HCD_HC_OUT_IRQHandler()
1773 hhcd->hc[chnum].do_csplit = 0U; in HCD_HC_OUT_IRQHandler()
1777 else if (hhcd->hc[chnum].state == HC_NYET) in HCD_HC_OUT_IRQHandler()
1779 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_OUT_IRQHandler()
1780 hhcd->hc[chnum].urb_state = URB_NOTREADY; in HCD_HC_OUT_IRQHandler()
1782 else if (hhcd->hc[chnum].state == HC_STALL) in HCD_HC_OUT_IRQHandler()
1784 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_OUT_IRQHandler()
1785 hhcd->hc[chnum].urb_state = URB_STALL; in HCD_HC_OUT_IRQHandler()
1787 else if ((hhcd->hc[chnum].state == HC_XACTERR) || in HCD_HC_OUT_IRQHandler()
1788 (hhcd->hc[chnum].state == HC_DATATGLERR)) in HCD_HC_OUT_IRQHandler()
1790 hhcd->hc[chnum].state = HC_HALTED; in HCD_HC_OUT_IRQHandler()
1791 hhcd->hc[chnum].ErrCnt++; in HCD_HC_OUT_IRQHandler()
1792 if (hhcd->hc[chnum].ErrCnt > 2U) in HCD_HC_OUT_IRQHandler()
1794 hhcd->hc[chnum].ErrCnt = 0U; in HCD_HC_OUT_IRQHandler()
1795 hhcd->hc[chnum].urb_state = URB_ERROR; in HCD_HC_OUT_IRQHandler()
1799 hhcd->hc[chnum].urb_state = URB_NOTREADY; in HCD_HC_OUT_IRQHandler()
1814 hhcd->HC_NotifyURBChangeCallback(hhcd, chnum, hhcd->hc[chnum].urb_state); in HCD_HC_OUT_IRQHandler()
1816 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state); in HCD_HC_OUT_IRQHandler()
1830 static void HCD_RXQLVL_IRQHandler(HCD_HandleTypeDef *hhcd) in HCD_RXQLVL_IRQHandler() argument
1832 const USB_OTG_GlobalTypeDef *USBx = hhcd->Instance; in HCD_RXQLVL_IRQHandler()
1841 GrxstspReg = hhcd->Instance->GRXSTSP; in HCD_RXQLVL_IRQHandler()
1850 if ((pktcnt > 0U) && (hhcd->hc[chnum].xfer_buff != (void *)0)) in HCD_RXQLVL_IRQHandler()
1852 if ((hhcd->hc[chnum].xfer_count + pktcnt) <= hhcd->hc[chnum].xfer_len) in HCD_RXQLVL_IRQHandler()
1854 (void)USB_ReadPacket(hhcd->Instance, in HCD_RXQLVL_IRQHandler()
1855 hhcd->hc[chnum].xfer_buff, (uint16_t)pktcnt); in HCD_RXQLVL_IRQHandler()
1858 hhcd->hc[chnum].xfer_buff += pktcnt; in HCD_RXQLVL_IRQHandler()
1859 hhcd->hc[chnum].xfer_count += pktcnt; in HCD_RXQLVL_IRQHandler()
1864 if ((hhcd->hc[chnum].max_packet == pktcnt) && (xferSizePktCnt > 0U)) in HCD_RXQLVL_IRQHandler()
1871 hhcd->hc[chnum].toggle_in ^= 1U; in HCD_RXQLVL_IRQHandler()
1876 hhcd->hc[chnum].urb_state = URB_ERROR; in HCD_RXQLVL_IRQHandler()
1896 static void HCD_Port_IRQHandler(HCD_HandleTypeDef *hhcd) in HCD_Port_IRQHandler() argument
1898 const USB_OTG_GlobalTypeDef *USBx = hhcd->Instance; in HCD_Port_IRQHandler()
1916 hhcd->ConnectCallback(hhcd); in HCD_Port_IRQHandler()
1918 HAL_HCD_Connect_Callback(hhcd); in HCD_Port_IRQHandler()
1931 if (hhcd->Init.phy_itface == USB_OTG_EMBEDDED_PHY) in HCD_Port_IRQHandler()
1935 (void)USB_InitFSLSPClkSel(hhcd->Instance, HCFG_6_MHZ); in HCD_Port_IRQHandler()
1939 (void)USB_InitFSLSPClkSel(hhcd->Instance, HCFG_48_MHZ); in HCD_Port_IRQHandler()
1944 if (hhcd->Init.speed == HCD_SPEED_FULL) in HCD_Port_IRQHandler()
1950 hhcd->PortEnabledCallback(hhcd); in HCD_Port_IRQHandler()
1952 HAL_HCD_PortEnabled_Callback(hhcd); in HCD_Port_IRQHandler()
1959 hhcd->PortDisabledCallback(hhcd); in HCD_Port_IRQHandler()
1961 HAL_HCD_PortDisabled_Callback(hhcd); in HCD_Port_IRQHandler()
2000 static void HCD_HC_IN_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum);
2001 static void HCD_HC_OUT_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum);
2002 static void HCD_Port_IRQHandler(HCD_HandleTypeDef *hhcd);
2003 static void HAL_HCD_ClearPhyChannel(HCD_HandleTypeDef *hhcd);
2004 static uint8_t HAL_HCD_GetLogical_Channel(HCD_HandleTypeDef const *hhcd, uint8_t phy_chnum, uint8_t…
2005 static uint8_t HAL_HCD_Check_usedChannel(HCD_HandleTypeDef const *hhcd, uint8_t ch_num);
2006 static uint8_t HAL_HCD_Get_FreePhyChannel(HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t epnum, u…
2009 static void HCD_HC_IN_BulkDb(HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t phy_chnum, uint32_t r…
2010 static void HCD_HC_OUT_BulkDb(HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t phy_chnum, uint32_t …
2013 static uint16_t HAL_HCD_GetFreePMA(HCD_HandleTypeDef *hhcd, uint16_t mps);
2014 static HAL_StatusTypeDef HAL_HCD_PMAFree(HCD_HandleTypeDef *hhcd, uint32_t pma_base, uint16_t mps);
2015 static void inline HCD_HC_IN_ISO(HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t phy_chnum, uint32…
2043 HAL_StatusTypeDef HAL_HCD_Init(HCD_HandleTypeDef *hhcd) in HAL_HCD_Init() argument
2046 if (hhcd == NULL) in HAL_HCD_Init()
2052 assert_param(IS_HCD_ALL_INSTANCE(hhcd->Instance)); in HAL_HCD_Init()
2054 if (hhcd->State == HAL_HCD_STATE_RESET) in HAL_HCD_Init()
2057 hhcd->Lock = HAL_UNLOCKED; in HAL_HCD_Init()
2060 hhcd->SOFCallback = HAL_HCD_SOF_Callback; in HAL_HCD_Init()
2061 hhcd->ConnectCallback = HAL_HCD_Connect_Callback; in HAL_HCD_Init()
2062 hhcd->DisconnectCallback = HAL_HCD_Disconnect_Callback; in HAL_HCD_Init()
2063 hhcd->PortEnabledCallback = HAL_HCD_PortEnabled_Callback; in HAL_HCD_Init()
2064 hhcd->PortDisabledCallback = HAL_HCD_PortDisabled_Callback; in HAL_HCD_Init()
2065 hhcd->HC_NotifyURBChangeCallback = HAL_HCD_HC_NotifyURBChange_Callback; in HAL_HCD_Init()
2067 if (hhcd->MspInitCallback == NULL) in HAL_HCD_Init()
2069 hhcd->MspInitCallback = HAL_HCD_MspInit; in HAL_HCD_Init()
2073 hhcd->MspInitCallback(hhcd); in HAL_HCD_Init()
2076 HAL_HCD_MspInit(hhcd); in HAL_HCD_Init()
2079 hhcd->State = HAL_HCD_STATE_BUSY; in HAL_HCD_Init()
2082 (void)__HAL_HCD_DISABLE(hhcd); in HAL_HCD_Init()
2085 hhcd->Init.dma_enable = 0U; in HAL_HCD_Init()
2088 (void)USB_CoreInit(hhcd->Instance, hhcd->Init); in HAL_HCD_Init()
2091 (void)USB_SetCurrentMode(hhcd->Instance, USB_HOST_MODE); in HAL_HCD_Init()
2094 (void)USB_HostInit(hhcd->Instance, hhcd->Init); in HAL_HCD_Init()
2096 hhcd->State = HAL_HCD_STATE_READY; in HAL_HCD_Init()
2099 hhcd->HostState = HCD_HCD_STATE_DISCONNECTED; in HAL_HCD_Init()
2102 (void)HAL_HCD_PMAReset(hhcd); in HAL_HCD_Init()
2104 hhcd->State = HAL_HCD_STATE_READY; in HAL_HCD_Init()
2133 HAL_StatusTypeDef HAL_HCD_HC_Init(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HAL_HCD_HC_Init() argument
2141 __HAL_LOCK(hhcd); in HAL_HCD_HC_Init()
2145 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
2149 if (((epnum & 0xFU) == 0U) && ((hhcd->ep0_PmaAllocState & 0xF000U) != 0U)) in HAL_HCD_HC_Init()
2151 hhcd->hc[ch_num & 0xFU].pmaadress = hhcd->hc[0U].pmaadress; in HAL_HCD_HC_Init()
2152 hhcd->hc[ch_num & 0xFU].pmaaddr0 = hhcd->hc[0U].pmaaddr0; in HAL_HCD_HC_Init()
2153 hhcd->hc[ch_num & 0xFU].pmaaddr1 = hhcd->hc[0U].pmaaddr1; in HAL_HCD_HC_Init()
2155 hhcd->phy_chin_state[0U] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_HC_Init()
2159 hhcd->phy_chout_state[0U] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_HC_Init()
2165 used_channel = HAL_HCD_Check_usedChannel(hhcd, ch_num); in HAL_HCD_HC_Init()
2171 hhcd->hc[ch_num & 0xFU].phy_ch_num = HAL_HCD_Get_FreePhyChannel(hhcd, ch_num, epnum, ep_type); in HAL_HCD_HC_Init()
2174 if (hhcd->hc[ch_num & 0xFU].phy_ch_num == HCD_FREE_CH_NOT_FOUND) in HAL_HCD_HC_Init()
2176 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
2184 hhcd->hc[ch_num & 0xFU].phy_ch_num = (used_channel & 0xF0U) >> 4U; in HAL_HCD_HC_Init()
2189 hhcd->hc[ch_num & 0xFU].ch_dir = CH_IN_DIR; in HAL_HCD_HC_Init()
2193 hhcd->hc[ch_num & 0xFU].ch_dir = CH_OUT_DIR; in HAL_HCD_HC_Init()
2196 hhcd->hc[ch_num & 0xFU].dev_addr = dev_address; in HAL_HCD_HC_Init()
2197 hhcd->hc[ch_num & 0xFU].max_packet = mps; in HAL_HCD_HC_Init()
2198 hhcd->hc[ch_num & 0xFU].ep_type = ep_type; in HAL_HCD_HC_Init()
2199 hhcd->hc[ch_num & 0xFU].ep_num = epnum & 0x7FU; in HAL_HCD_HC_Init()
2200 hhcd->hc[ch_num & 0xFU].speed = speed; in HAL_HCD_HC_Init()
2205 if (((ep_type == EP_TYPE_ISOC) && (hhcd->Init.iso_singlebuffer_enable == 0U)) || in HAL_HCD_HC_Init()
2206 ((ep_type == EP_TYPE_BULK) && (hhcd->Init.bulk_doublebuffer_enable == 1U))) in HAL_HCD_HC_Init()
2209 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_DBL_BUF, mps); in HAL_HCD_HC_Init()
2213 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
2218 HCD_CLEAR_TX_DTOG(hhcd->Instance, hhcd->hc[ch_num & 0xFU].phy_ch_num); in HAL_HCD_HC_Init()
2221 HCD_CLEAR_RX_DTOG(hhcd->Instance, hhcd->hc[ch_num & 0xFU].phy_ch_num); in HAL_HCD_HC_Init()
2226 if (hhcd->hc[ch_num & 0xFU].ep_num != 0U) in HAL_HCD_HC_Init()
2228 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_SNG_BUF, mps); in HAL_HCD_HC_Init()
2232 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
2240 ep0_virtual_channel = (uint8_t)(hhcd->ep0_PmaAllocState & 0xFU); in HAL_HCD_HC_Init()
2242 … if ((ep0_virtual_channel != 0U) && (((hhcd->ep0_PmaAllocState & 0xF0U) >> 4) == CH_IN_DIR)) in HAL_HCD_HC_Init()
2244 if (hhcd->hc[ch_num & 0xFU].ch_dir == CH_OUT_DIR) in HAL_HCD_HC_Init()
2246 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_SNG_BUF, 64U); in HAL_HCD_HC_Init()
2250 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
2256 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
2263 hhcd->ep0_PmaAllocState |= (0x1U << 12); in HAL_HCD_HC_Init()
2266 hhcd->hc[ch_num & 0xFU].ch_dir = CH_OUT_DIR; in HAL_HCD_HC_Init()
2267 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_SNG_BUF, 64U); in HAL_HCD_HC_Init()
2271 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
2276 hhcd->hc[ch_num & 0xFU].ch_dir = CH_IN_DIR; in HAL_HCD_HC_Init()
2277 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_SNG_BUF, 64U); in HAL_HCD_HC_Init()
2281 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
2288 if (((hhcd->ep0_PmaAllocState & 0xF00U) >> 8) == 1U) in HAL_HCD_HC_Init()
2290 ep0_virtual_channel = (uint8_t)(hhcd->ep0_PmaAllocState & 0xFU); in HAL_HCD_HC_Init()
2292 if (((hhcd->ep0_PmaAllocState & 0xF0U) >> 4) == CH_IN_DIR) in HAL_HCD_HC_Init()
2294 hhcd->hc[ch_num & 0xFU].pmaaddr1 = hhcd->hc[ep0_virtual_channel & 0xFU].pmaaddr1; in HAL_HCD_HC_Init()
2298 hhcd->hc[ch_num & 0xFU].pmaaddr0 = hhcd->hc[ep0_virtual_channel & 0xFU].pmaaddr0; in HAL_HCD_HC_Init()
2303 status = HAL_HCD_PMAlloc(hhcd, ch_num, HCD_SNG_BUF, 64U); in HAL_HCD_HC_Init()
2307 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
2318 hhcd->hc[ch_num & 0xFU].ch_dir = CH_IN_DIR; in HAL_HCD_HC_Init()
2320 if (hhcd->hc[ch_num & 0xFU].ep_num == 0U) in HAL_HCD_HC_Init()
2322 hhcd->hc[ch_num & 0xFU].pmaadress = hhcd->hc[ch_num & 0xFU].pmaaddr1; in HAL_HCD_HC_Init()
2327 hhcd->hc[ch_num & 0xFU].ch_dir = CH_OUT_DIR; in HAL_HCD_HC_Init()
2329 if (hhcd->hc[ch_num & 0xFU].ep_num == 0U) in HAL_HCD_HC_Init()
2331 hhcd->hc[ch_num & 0xFU].pmaadress = hhcd->hc[ch_num & 0xFU].pmaaddr0; in HAL_HCD_HC_Init()
2336 status = USB_HC_Init(hhcd->Instance, hhcd->hc[ch_num & 0xFU].phy_ch_num, in HAL_HCD_HC_Init()
2342 if (hhcd->Init.iso_singlebuffer_enable == 1U) in HAL_HCD_HC_Init()
2344 (void)USB_HC_DoubleBuffer(hhcd->Instance, hhcd->hc[ch_num & 0xFU].phy_ch_num, in HAL_HCD_HC_Init()
2352 if (hhcd->Init.bulk_doublebuffer_enable == 1U) in HAL_HCD_HC_Init()
2354 (void)USB_HC_DoubleBuffer(hhcd->Instance, hhcd->hc[ch_num & 0xFU].phy_ch_num, in HAL_HCD_HC_Init()
2359 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Init()
2371 HAL_StatusTypeDef HAL_HCD_HC_Close(HCD_HandleTypeDef *hhcd, uint8_t ch_num) in HAL_HCD_HC_Close() argument
2374 (void) HAL_HCD_HC_Halt(hhcd, ch_num); in HAL_HCD_HC_Close()
2378 if (hhcd->hc[ch_num & 0xFU].ch_dir == CH_IN_DIR) in HAL_HCD_HC_Close()
2381 hhcd->phy_chin_state[hhcd->hc[ch_num & 0xFU].phy_ch_num] = 0U; in HAL_HCD_HC_Close()
2386 hhcd->phy_chout_state[hhcd->hc[ch_num & 0xFU].phy_ch_num] = 0U; in HAL_HCD_HC_Close()
2390 (void)HAL_HCD_PMADeAlloc(hhcd, ch_num); in HAL_HCD_HC_Close()
2402 HAL_StatusTypeDef HAL_HCD_HC_Halt(HCD_HandleTypeDef *hhcd, uint8_t ch_num) in HAL_HCD_HC_Halt() argument
2406 __HAL_LOCK(hhcd); in HAL_HCD_HC_Halt()
2407 if (hhcd->hc[ch_num & 0xFU].ch_dir == CH_IN_DIR) in HAL_HCD_HC_Halt()
2409 (void)USB_HC_IN_Halt(hhcd->Instance, (uint8_t) hhcd->hc[ch_num & 0xFU].phy_ch_num); in HAL_HCD_HC_Halt()
2413 (void)USB_HC_OUT_Halt(hhcd->Instance, (uint8_t) hhcd->hc[ch_num & 0xFU].phy_ch_num); in HAL_HCD_HC_Halt()
2415 __HAL_UNLOCK(hhcd); in HAL_HCD_HC_Halt()
2425 HAL_StatusTypeDef HAL_HCD_DeInit(HCD_HandleTypeDef *hhcd) in HAL_HCD_DeInit() argument
2430 if (hhcd == NULL) in HAL_HCD_DeInit()
2436 hhcd->HostState = HCD_HCD_STATE_DISCONNECTED; in HAL_HCD_DeInit()
2439 (void)HAL_HCD_PMAReset(hhcd); in HAL_HCD_DeInit()
2441 for (idx = 0U; idx < hhcd->Init.Host_channels; idx++) in HAL_HCD_DeInit()
2443 hhcd->phy_chin_state[idx] = 0U; in HAL_HCD_DeInit()
2444 hhcd->phy_chout_state[idx] = 0U; in HAL_HCD_DeInit()
2448 hhcd->ep0_PmaAllocState = 0U; in HAL_HCD_DeInit()
2450 hhcd->State = HAL_HCD_STATE_BUSY; in HAL_HCD_DeInit()
2453 if (hhcd->MspDeInitCallback == NULL) in HAL_HCD_DeInit()
2455 hhcd->MspDeInitCallback = HAL_HCD_MspDeInit; /* Legacy weak MspDeInit */ in HAL_HCD_DeInit()
2459 hhcd->MspDeInitCallback(hhcd); in HAL_HCD_DeInit()
2462 HAL_HCD_MspDeInit(hhcd); in HAL_HCD_DeInit()
2465 hhcd->State = HAL_HCD_STATE_RESET; in HAL_HCD_DeInit()
2475 __weak void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd) in HAL_HCD_MspInit() argument
2478 UNUSED(hhcd); in HAL_HCD_MspInit()
2490 __weak void HAL_HCD_MspDeInit(HCD_HandleTypeDef *hhcd) in HAL_HCD_MspDeInit() argument
2493 UNUSED(hhcd); in HAL_HCD_MspDeInit()
2500 __weak void HAL_HCD_SuspendCallback(HCD_HandleTypeDef *hhcd) in HAL_HCD_SuspendCallback() argument
2503 UNUSED(hhcd); in HAL_HCD_SuspendCallback()
2511 __weak void HAL_HCD_ResumeCallback(HCD_HandleTypeDef *hhcd) in HAL_HCD_ResumeCallback() argument
2514 UNUSED(hhcd); in HAL_HCD_ResumeCallback()
2563 HAL_StatusTypeDef HAL_HCD_HC_SubmitRequest(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HAL_HCD_HC_SubmitRequest() argument
2572 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_SETUP; in HAL_HCD_HC_SubmitRequest()
2576 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
2588 hhcd->hc[ch_num & 0xFU].toggle_out = 1U; in HAL_HCD_HC_SubmitRequest()
2592 if (hhcd->hc[ch_num & 0xFU].toggle_out == 0U) in HAL_HCD_HC_SubmitRequest()
2595 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
2600 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
2609 if (hhcd->hc[ch_num & 0xFU].toggle_out == 0U) in HAL_HCD_HC_SubmitRequest()
2612 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
2617 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
2622 if (hhcd->hc[ch_num & 0xFU].toggle_in == 0U) in HAL_HCD_HC_SubmitRequest()
2624 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
2628 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
2637 if (hhcd->hc[ch_num & 0xFU].toggle_out == 0U) in HAL_HCD_HC_SubmitRequest()
2640 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
2645 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
2650 if (hhcd->hc[ch_num & 0xFU].toggle_in == 0U) in HAL_HCD_HC_SubmitRequest()
2652 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
2656 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA1; in HAL_HCD_HC_SubmitRequest()
2662 hhcd->hc[ch_num & 0xFU].data_pid = HC_PID_DATA0; in HAL_HCD_HC_SubmitRequest()
2669 hhcd->hc[ch_num & 0xFU].xfer_buff = pbuff; in HAL_HCD_HC_SubmitRequest()
2670 hhcd->hc[ch_num & 0xFU].xfer_len = length; in HAL_HCD_HC_SubmitRequest()
2671 hhcd->hc[ch_num & 0xFU].xfer_len_db = length; in HAL_HCD_HC_SubmitRequest()
2672 hhcd->hc[ch_num & 0xFU].urb_state = URB_IDLE; in HAL_HCD_HC_SubmitRequest()
2673 hhcd->hc[ch_num & 0xFU].xfer_count = 0U; in HAL_HCD_HC_SubmitRequest()
2674 hhcd->hc[ch_num & 0xFU].state = HC_IDLE; in HAL_HCD_HC_SubmitRequest()
2676 return USB_HC_StartXfer(hhcd->Instance, &hhcd->hc[ch_num & 0xFU]); in HAL_HCD_HC_SubmitRequest()
2683 void HAL_HCD_IRQHandler(HCD_HandleTypeDef *hhcd) in HAL_HCD_IRQHandler() argument
2687 uint32_t wIstr = USB_ReadInterrupts(hhcd->Instance); in HAL_HCD_IRQHandler()
2693 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_DCON); in HAL_HCD_IRQHandler()
2696 HCD_Port_IRQHandler(hhcd); in HAL_HCD_IRQHandler()
2705 phy_chnum = (uint8_t)__HAL_HCD_GET_CHNUM(hhcd); in HAL_HCD_IRQHandler()
2708 ch_dir = (uint8_t)__HAL_HCD_GET_CHDIR(hhcd); in HAL_HCD_IRQHandler()
2713 HCD_HC_OUT_IRQHandler(hhcd, phy_chnum); in HAL_HCD_IRQHandler()
2718 HCD_HC_IN_IRQHandler(hhcd, phy_chnum); in HAL_HCD_IRQHandler()
2727 if (hhcd->HostState == HCD_HCD_STATE_SUSPEND) in HAL_HCD_IRQHandler()
2730 hhcd->Instance->CNTR |= USB_CNTR_L2RES; in HAL_HCD_IRQHandler()
2733 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_WKUP); in HAL_HCD_IRQHandler()
2736 HAL_HCD_ResumeCallback(hhcd); in HAL_HCD_IRQHandler()
2737 hhcd->HostState = HCD_HCD_STATE_RESUME; in HAL_HCD_IRQHandler()
2742 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_WKUP); in HAL_HCD_IRQHandler()
2751 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_ERR); in HAL_HCD_IRQHandler()
2759 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_PMAOVR); in HAL_HCD_IRQHandler()
2768 hhcd->HostState = HCD_HCD_STATE_SUSPEND; in HAL_HCD_IRQHandler()
2771 hhcd->Instance->CNTR |= USB_CNTR_SUSPEN; in HAL_HCD_IRQHandler()
2774 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_SUSP); in HAL_HCD_IRQHandler()
2777 HAL_HCD_SuspendCallback(hhcd); in HAL_HCD_IRQHandler()
2786 hhcd->SOFCallback(hhcd); in HAL_HCD_IRQHandler()
2788 HAL_HCD_SOF_Callback(hhcd); in HAL_HCD_IRQHandler()
2791 __HAL_HCD_CLEAR_FLAG(hhcd, USB_ISTR_SOF); in HAL_HCD_IRQHandler()
2794 if (hhcd->HostState == HCD_HCD_STATE_RESETED) in HAL_HCD_IRQHandler()
2797 hhcd->HostState = HCD_HCD_STATE_RUN; in HAL_HCD_IRQHandler()
2800 hhcd->PortEnabledCallback(hhcd); in HAL_HCD_IRQHandler()
2802 HAL_HCD_PortEnabled_Callback(hhcd); in HAL_HCD_IRQHandler()
2815 __weak void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_SOF_Callback() argument
2818 UNUSED(hhcd); in HAL_HCD_SOF_Callback()
2830 __weak void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_Connect_Callback() argument
2833 UNUSED(hhcd); in HAL_HCD_Connect_Callback()
2845 __weak void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_Disconnect_Callback() argument
2848 UNUSED(hhcd); in HAL_HCD_Disconnect_Callback()
2859 __weak void HAL_HCD_PortEnabled_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_PortEnabled_Callback() argument
2862 UNUSED(hhcd); in HAL_HCD_PortEnabled_Callback()
2873 __weak void HAL_HCD_PortDisabled_Callback(HCD_HandleTypeDef *hhcd) in HAL_HCD_PortDisabled_Callback() argument
2876 UNUSED(hhcd); in HAL_HCD_PortDisabled_Callback()
2898 __weak void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, in HAL_HCD_HC_NotifyURBChange_Callback() argument
2902 UNUSED(hhcd); in HAL_HCD_HC_NotifyURBChange_Callback()
2927 HAL_StatusTypeDef HAL_HCD_RegisterCallback(HCD_HandleTypeDef *hhcd, in HAL_HCD_RegisterCallback() argument
2936 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
2940 __HAL_LOCK(hhcd); in HAL_HCD_RegisterCallback()
2942 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_RegisterCallback()
2947 hhcd->SOFCallback = pCallback; in HAL_HCD_RegisterCallback()
2951 hhcd->ConnectCallback = pCallback; in HAL_HCD_RegisterCallback()
2955 hhcd->DisconnectCallback = pCallback; in HAL_HCD_RegisterCallback()
2959 hhcd->PortEnabledCallback = pCallback; in HAL_HCD_RegisterCallback()
2963 hhcd->PortDisabledCallback = pCallback; in HAL_HCD_RegisterCallback()
2967 hhcd->MspInitCallback = pCallback; in HAL_HCD_RegisterCallback()
2971 hhcd->MspDeInitCallback = pCallback; in HAL_HCD_RegisterCallback()
2976 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
2982 else if (hhcd->State == HAL_HCD_STATE_RESET) in HAL_HCD_RegisterCallback()
2987 hhcd->MspInitCallback = pCallback; in HAL_HCD_RegisterCallback()
2991 hhcd->MspDeInitCallback = pCallback; in HAL_HCD_RegisterCallback()
2996 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
3005 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterCallback()
3011 __HAL_UNLOCK(hhcd); in HAL_HCD_RegisterCallback()
3030 HAL_StatusTypeDef HAL_HCD_UnRegisterCallback(HCD_HandleTypeDef *hhcd, in HAL_HCD_UnRegisterCallback() argument
3036 __HAL_LOCK(hhcd); in HAL_HCD_UnRegisterCallback()
3039 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_UnRegisterCallback()
3044 hhcd->SOFCallback = HAL_HCD_SOF_Callback; in HAL_HCD_UnRegisterCallback()
3048 hhcd->ConnectCallback = HAL_HCD_Connect_Callback; in HAL_HCD_UnRegisterCallback()
3052 hhcd->DisconnectCallback = HAL_HCD_Disconnect_Callback; in HAL_HCD_UnRegisterCallback()
3056 hhcd->PortEnabledCallback = HAL_HCD_PortEnabled_Callback; in HAL_HCD_UnRegisterCallback()
3060 hhcd->PortDisabledCallback = HAL_HCD_PortDisabled_Callback; in HAL_HCD_UnRegisterCallback()
3064 hhcd->MspInitCallback = HAL_HCD_MspInit; in HAL_HCD_UnRegisterCallback()
3068 hhcd->MspDeInitCallback = HAL_HCD_MspDeInit; in HAL_HCD_UnRegisterCallback()
3073 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterCallback()
3080 else if (hhcd->State == HAL_HCD_STATE_RESET) in HAL_HCD_UnRegisterCallback()
3085 hhcd->MspInitCallback = HAL_HCD_MspInit; in HAL_HCD_UnRegisterCallback()
3089 hhcd->MspDeInitCallback = HAL_HCD_MspDeInit; in HAL_HCD_UnRegisterCallback()
3094 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterCallback()
3104 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterCallback()
3111 __HAL_UNLOCK(hhcd); in HAL_HCD_UnRegisterCallback()
3122 HAL_StatusTypeDef HAL_HCD_RegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd, in HAL_HCD_RegisterHC_NotifyURBChangeCallback() argument
3130 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
3136 __HAL_LOCK(hhcd); in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
3138 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
3140 hhcd->HC_NotifyURBChangeCallback = pCallback; in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
3145 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
3152 __HAL_UNLOCK(hhcd); in HAL_HCD_RegisterHC_NotifyURBChangeCallback()
3164 HAL_StatusTypeDef HAL_HCD_UnRegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd) in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback() argument
3169 __HAL_LOCK(hhcd); in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
3171 if (hhcd->State == HAL_HCD_STATE_READY) in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
3173hhcd->HC_NotifyURBChangeCallback = HAL_HCD_HC_NotifyURBChange_Callback; /* Legacy weak DataOutStag… in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
3178 hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK; in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
3185 __HAL_UNLOCK(hhcd); in HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()
3216 HAL_StatusTypeDef HAL_HCD_Start(HCD_HandleTypeDef *hhcd) in HAL_HCD_Start() argument
3220 __HAL_LOCK(hhcd); in HAL_HCD_Start()
3223 hhcd->Instance->CNTR &= ~USB_CNTR_PDWN; in HAL_HCD_Start()
3232 hhcd->Instance->CNTR &= ~USB_CNTR_USBRST; in HAL_HCD_Start()
3234 __HAL_UNLOCK(hhcd); in HAL_HCD_Start()
3244 HAL_StatusTypeDef HAL_HCD_Stop(HCD_HandleTypeDef *hhcd) in HAL_HCD_Stop() argument
3246 __HAL_LOCK(hhcd); in HAL_HCD_Stop()
3248 (void)USB_StopHost(hhcd->Instance); in HAL_HCD_Stop()
3251 HAL_HCD_ClearPhyChannel(hhcd); in HAL_HCD_Stop()
3254 (void)HAL_HCD_PMAReset(hhcd); in HAL_HCD_Stop()
3257 hhcd->ep0_PmaAllocState = 0U; in HAL_HCD_Stop()
3259 __HAL_UNLOCK(hhcd); in HAL_HCD_Stop()
3268 HAL_StatusTypeDef HAL_HCD_Suspend(HCD_HandleTypeDef *hhcd) in HAL_HCD_Suspend() argument
3273 hhcd->Instance->CNTR |= USB_CNTR_SUSPEN; in HAL_HCD_Suspend()
3276 while ((hhcd->Instance->CNTR & USB_CNTR_SUSPRDY) == 0U) in HAL_HCD_Suspend()
3292 HAL_StatusTypeDef HAL_HCD_Resume(HCD_HandleTypeDef *hhcd) in HAL_HCD_Resume() argument
3295 hhcd->Instance->CNTR |= USB_CNTR_L2RES; in HAL_HCD_Resume()
3305 HAL_StatusTypeDef HAL_HCD_ResetPort(HCD_HandleTypeDef *hhcd) in HAL_HCD_ResetPort() argument
3307 __HAL_LOCK(hhcd); in HAL_HCD_ResetPort()
3310 (void)USB_ResetPort(hhcd->Instance); in HAL_HCD_ResetPort()
3312 if (hhcd->HostState == HCD_HCD_STATE_CONNECTED) in HAL_HCD_ResetPort()
3314 hhcd->HostState = HCD_HCD_STATE_RESETED; in HAL_HCD_ResetPort()
3316 __HAL_UNLOCK(hhcd); in HAL_HCD_ResetPort()
3326 HAL_StatusTypeDef HAL_HCD_ResumePort(HCD_HandleTypeDef *hhcd) in HAL_HCD_ResumePort() argument
3329 hhcd->Instance->CNTR |= USB_CNTR_L2RES; in HAL_HCD_ResumePort()
3333 hhcd->Instance->CNTR &= ~USB_CNTR_L2RES; in HAL_HCD_ResumePort()
3363 HCD_StateTypeDef HAL_HCD_GetState(HCD_HandleTypeDef const *hhcd) in HAL_HCD_GetState() argument
3365 return hhcd->State; in HAL_HCD_GetState()
3382 HCD_URBStateTypeDef HAL_HCD_HC_GetURBState(HCD_HandleTypeDef const *hhcd, uint8_t chnum) in HAL_HCD_HC_GetURBState() argument
3384 return hhcd->hc[chnum].urb_state; in HAL_HCD_HC_GetURBState()
3395 uint32_t HAL_HCD_HC_GetXferCount(HCD_HandleTypeDef const *hhcd, uint8_t chnum) in HAL_HCD_HC_GetXferCount() argument
3397 return hhcd->hc[chnum].xfer_count; in HAL_HCD_HC_GetXferCount()
3417 HCD_HCStateTypeDef HAL_HCD_HC_GetState(HCD_HandleTypeDef const *hhcd, uint8_t chnum) in HAL_HCD_HC_GetState() argument
3419 return hhcd->hc[chnum].state; in HAL_HCD_HC_GetState()
3427 uint32_t HAL_HCD_GetCurrentFrame(HCD_HandleTypeDef *hhcd) in HAL_HCD_GetCurrentFrame() argument
3429 return (USB_GetCurrentFrame(hhcd->Instance)); in HAL_HCD_GetCurrentFrame()
3441 uint32_t HAL_HCD_GetCurrentSpeed(HCD_HandleTypeDef *hhcd) in HAL_HCD_GetCurrentSpeed() argument
3443 return (USB_GetHostSpeed(hhcd->Instance)); in HAL_HCD_GetCurrentSpeed()
3455 HAL_StatusTypeDef HAL_HCD_HC_SetHubInfo(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HAL_HCD_HC_SetHubInfo() argument
3458 hhcd->hc[ch_num].hub_addr = addr; in HAL_HCD_HC_SetHubInfo()
3459 hhcd->hc[ch_num].hub_port_nbr = PortNbr; in HAL_HCD_HC_SetHubInfo()
3472 HAL_StatusTypeDef HAL_HCD_HC_ClearHubInfo(HCD_HandleTypeDef *hhcd, uint8_t ch_num) in HAL_HCD_HC_ClearHubInfo() argument
3474 hhcd->hc[ch_num].hub_addr = 0U; in HAL_HCD_HC_ClearHubInfo()
3475 hhcd->hc[ch_num].hub_port_nbr = 0U; in HAL_HCD_HC_ClearHubInfo()
3489 static void HCD_HC_OUT_BulkDb(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HCD_HC_OUT_BulkDb() argument
3500 if (hhcd->hc[ch_num & 0xFU].xfer_len >= data_xfr) in HCD_HC_OUT_BulkDb()
3502 hhcd->hc[ch_num & 0xFU].xfer_len -= data_xfr; in HCD_HC_OUT_BulkDb()
3506 hhcd->hc[ch_num & 0xFU].xfer_len = 0U; in HCD_HC_OUT_BulkDb()
3510 if (hhcd->hc[ch_num & 0xFU].xfer_len != 0U) in HCD_HC_OUT_BulkDb()
3513 hhcd->hc[ch_num & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_BulkDb()
3519 HCD_CLEAR_TX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
3520 HCD_CLEAR_RX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
3521 HCD_TX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
3525 if (hhcd->hc[ch_num & 0xFU].xfer_len_db > 0U) /* Still data to fill in the buffer */ in HCD_HC_OUT_BulkDb()
3527 hhcd->hc[ch_num & 0xFU].xfer_buff += data_xfr; in HCD_HC_OUT_BulkDb()
3530 if (hhcd->hc[ch_num & 0xFU].xfer_len_db > hhcd->hc[ch_num & 0xFU].max_packet) in HCD_HC_OUT_BulkDb()
3532 len = (uint16_t)hhcd->hc[ch_num & 0xFU].max_packet; in HCD_HC_OUT_BulkDb()
3533 hhcd->hc[ch_num & 0xFU].xfer_len_db -= len; in HCD_HC_OUT_BulkDb()
3537 len = (uint16_t)hhcd->hc[ch_num & 0xFU].xfer_len_db; in HCD_HC_OUT_BulkDb()
3538 hhcd->hc[ch_num & 0xFU].xfer_len_db = 0U; /* end of fill buffer */ in HCD_HC_OUT_BulkDb()
3542 HCD_SET_CH_DBUF0_CNT(hhcd->Instance, phy_chnum, 1U, (uint16_t)len); in HCD_HC_OUT_BulkDb()
3543 USB_WritePMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_OUT_BulkDb()
3544 hhcd->hc[ch_num & 0xFU].pmaaddr0, (uint16_t)len); in HCD_HC_OUT_BulkDb()
3547 HCD_SET_CH_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_VALID); in HCD_HC_OUT_BulkDb()
3552 hhcd->hc[ch_num & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_BulkDb()
3553 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_OUT_BulkDb()
3554 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_OUT_BulkDb()
3555 hhcd->hc[ch_num & 0xFU].toggle_out ^= 1U; in HCD_HC_OUT_BulkDb()
3557 HCD_SET_CH_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_DIS); in HCD_HC_OUT_BulkDb()
3565 if (hhcd->hc[ch_num & 0xFU].xfer_len >= data_xfr) /* updated */ in HCD_HC_OUT_BulkDb()
3567 hhcd->hc[ch_num & 0xFU].xfer_len -= data_xfr; in HCD_HC_OUT_BulkDb()
3571 if (hhcd->hc[ch_num & 0xFU].xfer_len != 0U) in HCD_HC_OUT_BulkDb()
3574 hhcd->hc[ch_num & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_BulkDb()
3580 HCD_CLEAR_TX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
3581 HCD_CLEAR_RX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
3582 HCD_RX_DTOG(hhcd->Instance, phy_chnum); in HCD_HC_OUT_BulkDb()
3586 if (hhcd->hc[ch_num & 0xFU].xfer_len_db > 0U) /* Still data to fill in the buffer */ in HCD_HC_OUT_BulkDb()
3588 hhcd->hc[ch_num & 0xFU].xfer_buff += data_xfr; in HCD_HC_OUT_BulkDb()
3591 if (hhcd->hc[ch_num & 0xFU].xfer_len_db > hhcd->hc[ch_num & 0xFU].max_packet) in HCD_HC_OUT_BulkDb()
3593 len = hhcd->hc[ch_num & 0xFU].max_packet; in HCD_HC_OUT_BulkDb()
3594 hhcd->hc[ch_num & 0xFU].xfer_len_db -= len; in HCD_HC_OUT_BulkDb()
3598 len = (uint16_t)hhcd->hc[ch_num & 0xFU].xfer_len_db; in HCD_HC_OUT_BulkDb()
3599 hhcd->hc[ch_num & 0xFU].xfer_len_db = 0U; /* end of fill buffer */ in HCD_HC_OUT_BulkDb()
3603 HCD_SET_CH_DBUF1_CNT(hhcd->Instance, phy_chnum, 1U, (uint16_t)len); in HCD_HC_OUT_BulkDb()
3605 USB_WritePMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_OUT_BulkDb()
3606 hhcd->hc[ch_num & 0xFU].pmaaddr1, (uint16_t)len); in HCD_HC_OUT_BulkDb()
3610 HCD_SET_CH_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_VALID); in HCD_HC_OUT_BulkDb()
3615 hhcd->hc[ch_num & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_BulkDb()
3616 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_OUT_BulkDb()
3617 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_OUT_BulkDb()
3618 hhcd->hc[ch_num & 0xFU].toggle_out ^= 1U; in HCD_HC_OUT_BulkDb()
3621 HCD_SET_CH_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_DIS); in HCD_HC_OUT_BulkDb()
3635 static void HCD_HC_IN_BulkDb(HCD_HandleTypeDef *hhcd, in HCD_HC_IN_BulkDb() argument
3643 received_bytes = (uint16_t)HCD_GET_CH_DBUF0_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_BulkDb()
3645 if (hhcd->hc[ch_num & 0xFU].xfer_len <= received_bytes) in HCD_HC_IN_BulkDb()
3647 hhcd->hc[ch_num & 0xFU].xfer_len = 0U; in HCD_HC_IN_BulkDb()
3651 hhcd->hc[ch_num & 0xFU].xfer_len -= received_bytes; in HCD_HC_IN_BulkDb()
3655 if ((hhcd->hc[ch_num & 0xFU].xfer_len != 0U) && ((regvalue & USB_CH_DTOG_TX) != 0U)) in HCD_HC_IN_BulkDb()
3658 HCD_FREE_USER_BUFFER(hhcd->Instance, phy_chnum, 0U); in HCD_HC_IN_BulkDb()
3662 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_BulkDb()
3663 hhcd->hc[ch_num & 0xFU].pmaaddr0, (uint16_t)received_bytes); in HCD_HC_IN_BulkDb()
3668 received_bytes = (uint16_t) HCD_GET_CH_DBUF1_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_BulkDb()
3670 if (hhcd->hc[ch_num & 0xFU].xfer_len <= received_bytes) in HCD_HC_IN_BulkDb()
3672 hhcd->hc[ch_num & 0xFU].xfer_len = 0U; in HCD_HC_IN_BulkDb()
3676 hhcd->hc[ch_num & 0xFU].xfer_len -= received_bytes; in HCD_HC_IN_BulkDb()
3680 if ((hhcd->hc[ch_num & 0xFU].xfer_len != 0U) && ((regvalue & USB_CH_DTOG_TX) == 0U)) in HCD_HC_IN_BulkDb()
3683 HCD_FREE_USER_BUFFER(hhcd->Instance, phy_chnum, 0U); in HCD_HC_IN_BulkDb()
3687 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_BulkDb()
3688 hhcd->hc[ch_num & 0xFU].pmaaddr1, (uint16_t)received_bytes); in HCD_HC_IN_BulkDb()
3692 hhcd->hc[ch_num & 0xFU].xfer_count += received_bytes; in HCD_HC_IN_BulkDb()
3695 hhcd->hc[ch_num & 0xFU].state = HC_ACK; in HCD_HC_IN_BulkDb()
3696 hhcd->hc[ch_num & 0xFU].ErrCnt = 0U; in HCD_HC_IN_BulkDb()
3698 if ((hhcd->hc[ch_num & 0xFU].xfer_len == 0U) || in HCD_HC_IN_BulkDb()
3699 ((received_bytes < hhcd->hc[ch_num & 0xFU].max_packet))) in HCD_HC_IN_BulkDb()
3701 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_IN_BulkDb()
3702 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_IN_BulkDb()
3705 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_DIS); in HCD_HC_IN_BulkDb()
3709 hhcd->hc[ch_num & 0xFU].xfer_buff += received_bytes; in HCD_HC_IN_BulkDb()
3712 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_STRX); in HCD_HC_IN_BulkDb()
3725 static void inline HCD_HC_IN_ISO(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HCD_HC_IN_ISO() argument
3732 hhcd->hc[ch_num & 0xFU].xfer_count = HCD_GET_CH_RX_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_ISO()
3733 if (hhcd->hc[ch_num & 0xFU].xfer_count != 0U) in HCD_HC_IN_ISO()
3735 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_ISO()
3736 hhcd->hc[ch_num & 0xFU].pmaadress, in HCD_HC_IN_ISO()
3737 (uint16_t)hhcd->hc[ch_num & 0xFU].xfer_count); in HCD_HC_IN_ISO()
3739 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_IN_ISO()
3749 hhcd->hc[ch_num & 0xFU].xfer_count = HCD_GET_CH_DBUF0_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_ISO()
3751 if (hhcd->hc[ch_num & 0xFU].xfer_count != 0U) in HCD_HC_IN_ISO()
3754 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_ISO()
3755 hhcd->hc[ch_num & 0xFU].pmaaddr0, in HCD_HC_IN_ISO()
3756 (uint16_t)hhcd->hc[ch_num & 0xFU].xfer_count); in HCD_HC_IN_ISO()
3758 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_IN_ISO()
3764 hhcd->hc[ch_num & 0xFU].xfer_count = HCD_GET_CH_DBUF1_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_ISO()
3766 if (hhcd->hc[ch_num & 0xFU].xfer_count != 0U) in HCD_HC_IN_ISO()
3769 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_ISO()
3770 hhcd->hc[ch_num & 0xFU].pmaaddr1, in HCD_HC_IN_ISO()
3771 (uint16_t)hhcd->hc[ch_num & 0xFU].xfer_count); in HCD_HC_IN_ISO()
3773 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_IN_ISO()
3780 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_IN_ISO()
3783 HCD_CLEAR_RX_CH_CTR(hhcd->Instance, phy_chnum); in HCD_HC_IN_ISO()
3793 static void HCD_HC_IN_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum) in HCD_HC_IN_IRQHandler() argument
3797 uint8_t ch_num = HAL_HCD_GetLogical_Channel(hhcd, phy_chnum, 1U); in HCD_HC_IN_IRQHandler()
3800 uint32_t ch_reg = HCD_GET_CHANNEL(hhcd->Instance, phy_chnum); in HCD_HC_IN_IRQHandler()
3808 HCD_HC_IN_ISO(hhcd, ch_num, phy_chnum, ch_reg); in HCD_HC_IN_IRQHandler()
3816 received_bytes = (uint16_t)HCD_GET_CH_RX_CNT(hhcd->Instance, phy_chnum); in HCD_HC_IN_IRQHandler()
3819 USB_ReadPMA(hhcd->Instance, hhcd->hc[ch_num & 0xFU].xfer_buff, in HCD_HC_IN_IRQHandler()
3820 hhcd->hc[ch_num & 0xFU].pmaadress, (uint16_t)received_bytes); in HCD_HC_IN_IRQHandler()
3823 hhcd->hc[ch_num & 0xFU].xfer_count += received_bytes; in HCD_HC_IN_IRQHandler()
3826 hhcd->hc[ch_num & 0xFU].state = HC_ACK; in HCD_HC_IN_IRQHandler()
3827 hhcd->hc[ch_num & 0xFU].ErrCnt = 0U; in HCD_HC_IN_IRQHandler()
3829 if (hhcd->hc[ch_num & 0xFU].xfer_len <= received_bytes) in HCD_HC_IN_IRQHandler()
3831 hhcd->hc[ch_num & 0xFU].xfer_len = 0U; in HCD_HC_IN_IRQHandler()
3835 hhcd->hc[ch_num & 0xFU].xfer_len -= received_bytes; in HCD_HC_IN_IRQHandler()
3838 if ((hhcd->hc[ch_num & 0xFU].xfer_len == 0U) || in HCD_HC_IN_IRQHandler()
3839 ((received_bytes < hhcd->hc[ch_num & 0xFU].max_packet))) in HCD_HC_IN_IRQHandler()
3841 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_IN_IRQHandler()
3842 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_IN_IRQHandler()
3846 hhcd->hc[ch_num & 0xFU].xfer_buff += received_bytes; in HCD_HC_IN_IRQHandler()
3849 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_STRX); in HCD_HC_IN_IRQHandler()
3852 if ((hhcd->hc[ch_num & 0xFU].ep_type == EP_TYPE_BULK) || in HCD_HC_IN_IRQHandler()
3853 (hhcd->hc[ch_num & 0xFU].ep_type == EP_TYPE_INTR)) in HCD_HC_IN_IRQHandler()
3855 hhcd->hc[ch_num & 0xFU].toggle_in ^= 1U; in HCD_HC_IN_IRQHandler()
3860 && (hhcd->hc[ch_num & 0xFU].urb_state != URB_DONE)) in HCD_HC_IN_IRQHandler()
3862 hhcd->hc[ch_num & 0xFU].urb_state = URB_NOTREADY; in HCD_HC_IN_IRQHandler()
3863 hhcd->hc[ch_num & 0xFU].ErrCnt = 0U; in HCD_HC_IN_IRQHandler()
3864 hhcd->hc[ch_num & 0xFU].state = HC_NAK; in HCD_HC_IN_IRQHandler()
3866 if (hhcd->hc[ch_num & 0xFU].ep_type == EP_TYPE_INTR) in HCD_HC_IN_IRQHandler()
3869 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_DIS); in HCD_HC_IN_IRQHandler()
3875 (void)HAL_HCD_HC_Halt(hhcd, ch_num); in HCD_HC_IN_IRQHandler()
3876 hhcd->hc[ch_num & 0xFU].state = HC_STALL; in HCD_HC_IN_IRQHandler()
3877 hhcd->hc[ch_num & 0xFU].urb_state = URB_STALL; in HCD_HC_IN_IRQHandler()
3880 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_DIS); in HCD_HC_IN_IRQHandler()
3888 HCD_HC_IN_BulkDb(hhcd, ch_num, phy_chnum, ch_reg); in HCD_HC_IN_IRQHandler()
3898 hhcd->HC_NotifyURBChangeCallback(hhcd, ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_IN_IRQHandler()
3900 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_IN_IRQHandler()
3904 HCD_CLEAR_RX_CH_CTR(hhcd->Instance, phy_chnum); in HCD_HC_IN_IRQHandler()
3910 hhcd->hc[ch_num & 0xFU].urb_state = URB_NOTREADY; in HCD_HC_IN_IRQHandler()
3911 hhcd->hc[ch_num & 0xFU].ErrCnt++; in HCD_HC_IN_IRQHandler()
3912 hhcd->hc[ch_num & 0xFU].state = HC_XACTERR; in HCD_HC_IN_IRQHandler()
3915 HCD_CLEAR_RX_CH_ERR(hhcd->Instance, phy_chnum); in HCD_HC_IN_IRQHandler()
3918 if (hhcd->hc[ch_num & 0xFU].ErrCnt > 3U) in HCD_HC_IN_IRQHandler()
3920 hhcd->hc[ch_num & 0xFU].urb_state = URB_ERROR; in HCD_HC_IN_IRQHandler()
3921 HCD_SET_CH_RX_STATUS(hhcd->Instance, phy_chnum, USB_CH_RX_DIS); in HCD_HC_IN_IRQHandler()
3924 HCD_CLEAR_RX_CH_ERR(hhcd->Instance, phy_chnum); in HCD_HC_IN_IRQHandler()
3928 hhcd->HC_NotifyURBChangeCallback(hhcd, ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_IN_IRQHandler()
3930 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_IN_IRQHandler()
3943 static void HCD_HC_OUT_IRQHandler(HCD_HandleTypeDef *hhcd, uint8_t chnum) in HCD_HC_OUT_IRQHandler() argument
3950 uint8_t ch_num = HAL_HCD_GetLogical_Channel(hhcd, phy_chnum, 0U); in HCD_HC_OUT_IRQHandler()
3953 uint32_t ch_reg = *(__IO uint32_t *)(&(hhcd->Instance->CHEP0R) + phy_chnum); in HCD_HC_OUT_IRQHandler()
3962 if ((hhcd->Instance->ISTR & USB_ISTR_ERR) == 0U) in HCD_HC_OUT_IRQHandler()
3967 HCD_SET_CH_TX_CNT(hhcd->Instance, phy_chnum, 0U); in HCD_HC_OUT_IRQHandler()
3975 HCD_SET_CH_TX_CNT(hhcd->Instance, phy_chnum, 0U); in HCD_HC_OUT_IRQHandler()
3980 HCD_SET_CH_RX_CNT(hhcd->Instance, phy_chnum, 0U); in HCD_HC_OUT_IRQHandler()
3983 USB_DRD_SET_CHEP_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_DIS); in HCD_HC_OUT_IRQHandler()
3988 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_OUT_IRQHandler()
3989 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_OUT_IRQHandler()
3993 HCD_CLEAR_TX_CH_CTR(hhcd->Instance, phy_chnum); in HCD_HC_OUT_IRQHandler()
3997 hhcd->HC_NotifyURBChangeCallback(hhcd, (uint8_t)ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
3999 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, (uint8_t)ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
4010 if (hhcd->hc[ch_num & 0xFU].xfer_len >= data_xfr) in HCD_HC_OUT_IRQHandler()
4012 hhcd->hc[ch_num & 0xFU].xfer_len -= data_xfr; in HCD_HC_OUT_IRQHandler()
4016 hhcd->hc[ch_num & 0xFU].xfer_len = 0U; in HCD_HC_OUT_IRQHandler()
4019 if ((hhcd->hc[ch_num & 0xFU].ep_type == EP_TYPE_BULK) || in HCD_HC_OUT_IRQHandler()
4020 (hhcd->hc[ch_num & 0xFU].ep_type == EP_TYPE_INTR)) in HCD_HC_OUT_IRQHandler()
4022 hhcd->hc[ch_num & 0xFU].toggle_out ^= 1U; in HCD_HC_OUT_IRQHandler()
4026 if (hhcd->hc[ch_num & 0xFU].xfer_len != 0U) in HCD_HC_OUT_IRQHandler()
4029 hhcd->hc[ch_num & 0xFU].xfer_buff += data_xfr; in HCD_HC_OUT_IRQHandler()
4030 hhcd->hc[ch_num & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_IRQHandler()
4033 (void) USB_HC_StartXfer(hhcd->Instance, &hhcd->hc[ch_num & 0xFU]); in HCD_HC_OUT_IRQHandler()
4038 hhcd->hc[ch_num & 0xFU].xfer_count += data_xfr; in HCD_HC_OUT_IRQHandler()
4039 hhcd->hc[ch_num & 0xFU].state = HC_XFRC; in HCD_HC_OUT_IRQHandler()
4040 hhcd->hc[ch_num & 0xFU].urb_state = URB_DONE; in HCD_HC_OUT_IRQHandler()
4048 hhcd->hc[ch_num & 0xFU].state = HC_NAK; in HCD_HC_OUT_IRQHandler()
4049 hhcd->hc[ch_num & 0xFU].urb_state = URB_NOTREADY; in HCD_HC_OUT_IRQHandler()
4050 hhcd->hc[ch_num & 0xFU].ErrCnt = 0U; in HCD_HC_OUT_IRQHandler()
4053 WregCh = *(__IO uint32_t *)(&(hhcd->Instance->CHEP0R) + phy_chnum); in HCD_HC_OUT_IRQHandler()
4059 HCD_SET_CHANNEL(hhcd->Instance, phy_chnum, WregCh); in HCD_HC_OUT_IRQHandler()
4061 if (hhcd->hc[ch_num & 0xFU].doublebuffer == 0U) in HCD_HC_OUT_IRQHandler()
4064hhcd->HC_NotifyURBChangeCallback(hhcd, (uint8_t)ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
4066 … HAL_HCD_HC_NotifyURBChange_Callback(hhcd, (uint8_t)ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
4073 (void) HAL_HCD_HC_Halt(hhcd, (uint8_t)ch_num); in HCD_HC_OUT_IRQHandler()
4074 hhcd->hc[ch_num & 0xFU].state = HC_STALL; in HCD_HC_OUT_IRQHandler()
4075 hhcd->hc[ch_num & 0xFU].urb_state = URB_STALL; in HCD_HC_OUT_IRQHandler()
4082 (void) HCD_HC_OUT_BulkDb(hhcd, ch_num, (uint8_t)phy_chnum, ch_reg); in HCD_HC_OUT_IRQHandler()
4093 hhcd->HC_NotifyURBChangeCallback(hhcd, (uint8_t)ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
4095 … HAL_HCD_HC_NotifyURBChange_Callback(hhcd, (uint8_t)ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
4099 HCD_CLEAR_TX_CH_CTR(hhcd->Instance, phy_chnum); in HCD_HC_OUT_IRQHandler()
4105 hhcd->hc[ch_num & 0xFU].ErrCnt++; in HCD_HC_OUT_IRQHandler()
4106 if (hhcd->hc[ch_num & 0xFU].ErrCnt > 3U) in HCD_HC_OUT_IRQHandler()
4108 HCD_SET_CH_TX_STATUS(hhcd->Instance, phy_chnum, USB_CH_TX_DIS); in HCD_HC_OUT_IRQHandler()
4109 hhcd->hc[ch_num & 0xFU].urb_state = URB_ERROR; in HCD_HC_OUT_IRQHandler()
4113 hhcd->hc[ch_num & 0xFU].urb_state = URB_NOTREADY; in HCD_HC_OUT_IRQHandler()
4116 hhcd->hc[ch_num & 0xFU].state = HC_XACTERR; in HCD_HC_OUT_IRQHandler()
4119 HCD_CLEAR_TX_CH_ERR(hhcd->Instance, phy_chnum); in HCD_HC_OUT_IRQHandler()
4122 hhcd->HC_NotifyURBChangeCallback(hhcd, (uint8_t)ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
4124 HAL_HCD_HC_NotifyURBChange_Callback(hhcd, (uint8_t)ch_num, hhcd->hc[ch_num & 0xFU].urb_state); in HCD_HC_OUT_IRQHandler()
4135 static void HCD_Port_IRQHandler(HCD_HandleTypeDef *hhcd) in HCD_Port_IRQHandler() argument
4137 uint32_t FnrReg = hhcd->Instance->FNR; in HCD_Port_IRQHandler()
4138 uint32_t IstrReg = hhcd->Instance->ISTR; in HCD_Port_IRQHandler()
4144 hhcd->HostState = HCD_HCD_STATE_DISCONNECTED; in HCD_Port_IRQHandler()
4147 HAL_HCD_ClearPhyChannel(hhcd); in HCD_Port_IRQHandler()
4150 (void)HAL_HCD_PMAReset(hhcd); in HCD_Port_IRQHandler()
4153 hhcd->ep0_PmaAllocState = 0U; in HCD_Port_IRQHandler()
4157 hhcd->DisconnectCallback(hhcd); in HCD_Port_IRQHandler()
4159 HAL_HCD_Disconnect_Callback(hhcd); in HCD_Port_IRQHandler()
4165 if ((hhcd->HostState == HCD_HCD_STATE_DISCONNECTED) != 0U) in HCD_Port_IRQHandler()
4170 hhcd->HostState = HCD_HCD_STATE_CONNECTED; in HCD_Port_IRQHandler()
4173 hhcd->ConnectCallback(hhcd); in HCD_Port_IRQHandler()
4175 HAL_HCD_Connect_Callback(hhcd); in HCD_Port_IRQHandler()
4185 hhcd->HostState = HCD_HCD_STATE_DISCONNECTED; in HCD_Port_IRQHandler()
4188 HAL_HCD_ClearPhyChannel(hhcd); in HCD_Port_IRQHandler()
4191 (void)HAL_HCD_PMAReset(hhcd); in HCD_Port_IRQHandler()
4194 hhcd->ep0_PmaAllocState = 0U; in HCD_Port_IRQHandler()
4198 hhcd->DisconnectCallback(hhcd); in HCD_Port_IRQHandler()
4200 HAL_HCD_Disconnect_Callback(hhcd); in HCD_Port_IRQHandler()
4214 static uint8_t HAL_HCD_Check_usedChannel(HCD_HandleTypeDef const *hhcd, uint8_t ch_num) in HAL_HCD_Check_usedChannel() argument
4219 for (idx = 0U; idx < hhcd->Init.Host_channels; idx++) in HAL_HCD_Check_usedChannel()
4221 if ((((hhcd->phy_chin_state[idx] & 0xF0U) >> 4U) == ((uint16_t)ch_num + 1U)) && in HAL_HCD_Check_usedChannel()
4222 (hhcd->phy_chin_state[idx] != 0U)) in HAL_HCD_Check_usedChannel()
4227 if ((((hhcd->phy_chout_state[idx] & 0xF0U) >> 4U) == ((uint16_t)ch_num + 1U)) && in HAL_HCD_Check_usedChannel()
4228 (hhcd->phy_chout_state[idx] != 0U)) in HAL_HCD_Check_usedChannel()
4248 static uint8_t HAL_HCD_GetLogical_Channel(HCD_HandleTypeDef const *hhcd, in HAL_HCD_GetLogical_Channel() argument
4254 if (((hhcd->phy_chout_state[phy_chnum & 0x7U] & 0x00F0U) >> 4U) != 0U) in HAL_HCD_GetLogical_Channel()
4256 return ((uint8_t)((hhcd->phy_chout_state[phy_chnum & 0x7U] & 0x00F0U) >> 4U) - 1U); in HAL_HCD_GetLogical_Channel()
4267 if (((hhcd->phy_chin_state[phy_chnum & 0x7U] & 0x00F0U) >> 4U) != 0U) in HAL_HCD_GetLogical_Channel()
4269 return ((uint8_t)((hhcd->phy_chin_state[phy_chnum & 0x7U] & 0x00F0U) >> 4U) - 1U); in HAL_HCD_GetLogical_Channel()
4296 static uint8_t HAL_HCD_Get_FreePhyChannel(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HAL_HCD_Get_FreePhyChannel() argument
4307 if (hhcd->phy_chin_state[idx] == 0U) in HAL_HCD_Get_FreePhyChannel()
4311 hhcd->phy_chin_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
4316 if (hhcd->phy_chout_state[idx] == 0U) in HAL_HCD_Get_FreePhyChannel()
4320 hhcd->phy_chout_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
4329 if (((hhcd->phy_chin_state[idx] & 0xF0U) >> 4U) != ((uint16_t)ch_num + 1U)) in HAL_HCD_Get_FreePhyChannel()
4333 hhcd->phy_chin_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
4340 if (((hhcd->phy_chout_state[idx] & 0xF0U) >> 4U) != ((uint16_t)ch_num + 1U)) in HAL_HCD_Get_FreePhyChannel()
4344 hhcd->phy_chout_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
4357 for (idx = 1U; idx < hhcd->Init.Host_channels; idx++) in HAL_HCD_Get_FreePhyChannel()
4360 if ((hhcd->phy_chin_state[idx] == 0U) && in HAL_HCD_Get_FreePhyChannel()
4361 ((((hhcd->phy_chout_state[idx] & 0x000FU) == ((uint16_t)ep_type + 1U)) && in HAL_HCD_Get_FreePhyChannel()
4362 (((hhcd->phy_chout_state[idx] & 0x0F00U) == ((uint16_t)epnum & 0x0FU)))) || in HAL_HCD_Get_FreePhyChannel()
4363 (hhcd->phy_chout_state[idx] == 0U))) in HAL_HCD_Get_FreePhyChannel()
4367 hhcd->phy_chin_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
4378 for (idx = 1U; idx < hhcd->Init.Host_channels; idx++) in HAL_HCD_Get_FreePhyChannel()
4381 if ((hhcd->phy_chout_state[idx] == 0U) && in HAL_HCD_Get_FreePhyChannel()
4382 ((((hhcd->phy_chin_state[idx] & 0x0FU) == ((uint16_t)ep_type + 1U)) && in HAL_HCD_Get_FreePhyChannel()
4383 ((hhcd->phy_chin_state[idx] & 0x0F00U) == ((uint16_t)epnum & 0x0FU))) || in HAL_HCD_Get_FreePhyChannel()
4384 (hhcd->phy_chin_state[idx] == 0U))) in HAL_HCD_Get_FreePhyChannel()
4388 hhcd->phy_chout_state[idx] = (((uint16_t)ch_num + 1U) << 4U) | in HAL_HCD_Get_FreePhyChannel()
4406 static void HAL_HCD_ClearPhyChannel(HCD_HandleTypeDef *hhcd) in HAL_HCD_ClearPhyChannel() argument
4410 for (idx = 0U; idx < hhcd->Init.Host_channels; idx++) in HAL_HCD_ClearPhyChannel()
4413 hhcd->phy_chout_state[idx] = 0U; in HAL_HCD_ClearPhyChannel()
4414 hhcd->phy_chin_state[idx] = 0U; in HAL_HCD_ClearPhyChannel()
4439 static uint16_t HAL_HCD_GetFreePMA(HCD_HandleTypeDef *hhcd, uint16_t mps) in HAL_HCD_GetFreePMA() argument
4470 Entry = hhcd->PMALookupTable[i]; in HAL_HCD_GetFreePMA()
4518 hhcd->PMALookupTable[i] |= ((uint32_t)1U << j); in HAL_HCD_GetFreePMA()
4546 HAL_StatusTypeDef HAL_HCD_PMAlloc(HCD_HandleTypeDef *hhcd, uint8_t ch_num, in HAL_HCD_PMAlloc() argument
4555 HCD_HCTypeDef *hc = &(hhcd->hc[ch_num]); in HAL_HCD_PMAlloc()
4558 pma_addr0 = HAL_HCD_GetFreePMA(hhcd, mps); in HAL_HCD_PMAlloc()
4575 hhcd->ep0_PmaAllocState &= 0xFFF0U; in HAL_HCD_PMAlloc()
4576 hhcd->ep0_PmaAllocState |= ch_num; in HAL_HCD_PMAlloc()
4577 hhcd->ep0_PmaAllocState |= (1U << 8); in HAL_HCD_PMAlloc()
4588 hhcd->ep0_PmaAllocState |= (CH_IN_DIR << 4); in HAL_HCD_PMAlloc()
4607 pma_addr1 = HAL_HCD_GetFreePMA(hhcd, mps); in HAL_HCD_PMAlloc()
4612 (void)HAL_HCD_PMAFree(hhcd, pma_addr0, mps); in HAL_HCD_PMAlloc()
4650 HAL_StatusTypeDef HAL_HCD_PMADeAlloc(HCD_HandleTypeDef *hhcd, uint8_t ch_num) in HAL_HCD_PMADeAlloc() argument
4659 HCD_HCTypeDef *hc = &(hhcd->hc[ch_num]); in HAL_HCD_PMADeAlloc()
4664 status = HAL_HCD_PMAFree(hhcd, hc->pmaadress, hc->max_packet); in HAL_HCD_PMADeAlloc()
4669 status = HAL_HCD_PMAFree(hhcd, hc->pmaaddr0, hc->max_packet); in HAL_HCD_PMADeAlloc()
4675 status = HAL_HCD_PMAFree(hhcd, hc->pmaaddr1, hc->max_packet); in HAL_HCD_PMADeAlloc()
4699 HAL_StatusTypeDef HAL_HCD_PMAReset(HCD_HandleTypeDef *hhcd) in HAL_HCD_PMAReset() argument
4704 hhcd->PMALookupTable[i] = 0U; in HAL_HCD_PMAReset()
4708 for (uint8_t i = 0U; i < hhcd->Init.Host_channels; i++) in HAL_HCD_PMAReset()
4710 hhcd->PMALookupTable[0] |= ((uint32_t)1U << i); in HAL_HCD_PMAReset()
4723 static HAL_StatusTypeDef HAL_HCD_PMAFree(HCD_HandleTypeDef *hhcd, uint32_t pma_base, uint16_t mps) in HAL_HCD_PMAFree() argument
4772 if ((hhcd->PMALookupTable[i] & ((uint32_t)1U << j)) == 0U) in HAL_HCD_PMAFree()
4777 hhcd->PMALookupTable[i] &= ~(1U << j); in HAL_HCD_PMAFree()