mirror of https://github.com/ARMmbed/mbed-os.git
STM32L4 USB: move HAL_PCD_EP_Abort function
This function is for USB_OTG_FS devices only. Move it in the correct place (in "#ifdef USB_OTG_FS" area).pull/9768/head
parent
82498cf3f8
commit
aa2b76a995
|
@ -741,6 +741,86 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MBED PATCH
|
||||||
|
/**
|
||||||
|
* @brief Abort a transaction.
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @param ep_addr: endpoint address
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef HAL_PCD_EP_Abort(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
|
||||||
|
{
|
||||||
|
USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
|
||||||
|
HAL_StatusTypeDef ret = HAL_OK;
|
||||||
|
USB_OTG_EPTypeDef *ep;
|
||||||
|
|
||||||
|
if ((0x80 & ep_addr) == 0x80)
|
||||||
|
{
|
||||||
|
ep = &hpcd->IN_ep[ep_addr & 0x7F];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ep = &hpcd->OUT_ep[ep_addr];
|
||||||
|
}
|
||||||
|
|
||||||
|
__HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]);
|
||||||
|
|
||||||
|
ep->num = ep_addr & 0x7F;
|
||||||
|
ep->is_in = ((ep_addr & 0x80) == 0x80);
|
||||||
|
|
||||||
|
USB_EPSetNak(hpcd->Instance, ep);
|
||||||
|
|
||||||
|
if ((0x80 & ep_addr) == 0x80)
|
||||||
|
{
|
||||||
|
ret = USB_EPStopXfer(hpcd->Instance , ep);
|
||||||
|
if (ret == HAL_OK)
|
||||||
|
{
|
||||||
|
ret = USB_FlushTxFifo(hpcd->Instance, ep_addr & 0x7F);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Set global NAK */
|
||||||
|
USBx_DEVICE->DCTL |= USB_OTG_DCTL_SGONAK;
|
||||||
|
|
||||||
|
/* Read all entries from the fifo so global NAK takes effect */
|
||||||
|
while (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
|
||||||
|
{
|
||||||
|
PCD_ReadRxFifo(hpcd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Stop the transfer */
|
||||||
|
ret = USB_EPStopXfer(hpcd->Instance , ep);
|
||||||
|
if (ret == HAL_BUSY)
|
||||||
|
{
|
||||||
|
/* If USB_EPStopXfer returns HAL_BUSY then a setup packet
|
||||||
|
* arrived after the rx fifo was processed but before USB_EPStopXfer
|
||||||
|
* was called. Process the rx fifo one more time to read the
|
||||||
|
* setup packet.
|
||||||
|
*
|
||||||
|
* Note - after the setup packet has been received no further
|
||||||
|
* packets will be received over USB. This is because the next
|
||||||
|
* phase (data or status) of the control transfer started by
|
||||||
|
* the setup packet will be naked until global nak is cleared.
|
||||||
|
*/
|
||||||
|
while (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
|
||||||
|
{
|
||||||
|
PCD_ReadRxFifo(hpcd);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = USB_EPStopXfer(hpcd->Instance , ep);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear global nak */
|
||||||
|
USBx_DEVICE->DCTL |= USB_OTG_DCTL_CGONAK;
|
||||||
|
}
|
||||||
|
|
||||||
|
__HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
// MBED PATCH
|
||||||
|
|
||||||
#endif /* USB_OTG_FS */
|
#endif /* USB_OTG_FS */
|
||||||
|
|
||||||
#if defined (USB)
|
#if defined (USB)
|
||||||
|
@ -1246,86 +1326,6 @@ HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr,
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
// MBED PATCH
|
|
||||||
/**
|
|
||||||
* @brief Abort a transaction.
|
|
||||||
* @param hpcd: PCD handle
|
|
||||||
* @param ep_addr: endpoint address
|
|
||||||
* @retval HAL status
|
|
||||||
*/
|
|
||||||
HAL_StatusTypeDef HAL_PCD_EP_Abort(PCD_HandleTypeDef *hpcd, uint8_t ep_addr)
|
|
||||||
{
|
|
||||||
USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
|
|
||||||
HAL_StatusTypeDef ret = HAL_OK;
|
|
||||||
USB_OTG_EPTypeDef *ep;
|
|
||||||
|
|
||||||
if ((0x80 & ep_addr) == 0x80)
|
|
||||||
{
|
|
||||||
ep = &hpcd->IN_ep[ep_addr & 0x7F];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ep = &hpcd->OUT_ep[ep_addr];
|
|
||||||
}
|
|
||||||
|
|
||||||
__HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]);
|
|
||||||
|
|
||||||
ep->num = ep_addr & 0x7F;
|
|
||||||
ep->is_in = ((ep_addr & 0x80) == 0x80);
|
|
||||||
|
|
||||||
USB_EPSetNak(hpcd->Instance, ep);
|
|
||||||
|
|
||||||
if ((0x80 & ep_addr) == 0x80)
|
|
||||||
{
|
|
||||||
ret = USB_EPStopXfer(hpcd->Instance , ep);
|
|
||||||
if (ret == HAL_OK)
|
|
||||||
{
|
|
||||||
ret = USB_FlushTxFifo(hpcd->Instance, ep_addr & 0x7F);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Set global NAK */
|
|
||||||
USBx_DEVICE->DCTL |= USB_OTG_DCTL_SGONAK;
|
|
||||||
|
|
||||||
/* Read all entries from the fifo so global NAK takes effect */
|
|
||||||
while (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
|
|
||||||
{
|
|
||||||
PCD_ReadRxFifo(hpcd);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Stop the transfer */
|
|
||||||
ret = USB_EPStopXfer(hpcd->Instance , ep);
|
|
||||||
if (ret == HAL_BUSY)
|
|
||||||
{
|
|
||||||
/* If USB_EPStopXfer returns HAL_BUSY then a setup packet
|
|
||||||
* arrived after the rx fifo was processed but before USB_EPStopXfer
|
|
||||||
* was called. Process the rx fifo one more time to read the
|
|
||||||
* setup packet.
|
|
||||||
*
|
|
||||||
* Note - after the setup packet has been received no further
|
|
||||||
* packets will be received over USB. This is because the next
|
|
||||||
* phase (data or status) of the control transfer started by
|
|
||||||
* the setup packet will be naked until global nak is cleared.
|
|
||||||
*/
|
|
||||||
while (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
|
|
||||||
{
|
|
||||||
PCD_ReadRxFifo(hpcd);
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = USB_EPStopXfer(hpcd->Instance , ep);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Clear global nak */
|
|
||||||
USBx_DEVICE->DCTL |= USB_OTG_DCTL_CGONAK;
|
|
||||||
}
|
|
||||||
|
|
||||||
__HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
// MBED PATCH
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set a STALL condition over an endpoint.
|
* @brief Set a STALL condition over an endpoint.
|
||||||
* @param hpcd: PCD handle
|
* @param hpcd: PCD handle
|
||||||
|
|
Loading…
Reference in New Issue