mirror of https://github.com/ARMmbed/mbed-os.git
Ignore events that happen when an endpoint is stalled/halted
parent
54b72d2eb3
commit
9e61bbc4e3
|
@ -450,41 +450,44 @@ void USBPhyHw::process() {
|
||||||
case NRF_DRV_USBD_EVT_EPTRANSFER:
|
case NRF_DRV_USBD_EVT_EPTRANSFER:
|
||||||
if(usb_event.data.eptransfer.status == NRF_USBD_EP_OK)
|
if(usb_event.data.eptransfer.status == NRF_USBD_EP_OK)
|
||||||
{
|
{
|
||||||
if(IS_IN_EP(usb_event.data.eptransfer.ep))
|
if(!nrf_drv_usbd_ep_stall_check(usb_event.data.eptransfer.ep))
|
||||||
{
|
{
|
||||||
if((usb_event.data.eptransfer.ep & 0x7F) == 0)
|
if(IS_IN_EP(usb_event.data.eptransfer.ep))
|
||||||
{
|
{
|
||||||
events->ep0_in();
|
if((usb_event.data.eptransfer.ep & 0x7F) == 0)
|
||||||
// Check for pending virtual status transfer
|
{
|
||||||
if(virtual_status_xfer_event)
|
events->ep0_in();
|
||||||
|
// Check for pending virtual status transfer
|
||||||
|
if(virtual_status_xfer_event)
|
||||||
|
{
|
||||||
|
// Notify the upper stack that the status transfer is done
|
||||||
|
// as well at this point
|
||||||
|
virtual_status_xfer_event = false;
|
||||||
|
events->ep0_out();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
events->in((usb_ep_t) usb_event.data.eptransfer.ep);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if((usb_event.data.eptransfer.ep & 0x7F) == 0)
|
||||||
{
|
{
|
||||||
// Notify the upper stack that the status transfer is done
|
|
||||||
// as well at this point
|
|
||||||
virtual_status_xfer_event = false;
|
|
||||||
events->ep0_out();
|
events->ep0_out();
|
||||||
|
|
||||||
|
// Check for pending virtual status transfer
|
||||||
|
if(virtual_status_xfer_event)
|
||||||
|
{
|
||||||
|
// Notify the upper stack that the status transfer is done
|
||||||
|
// as well at this point
|
||||||
|
virtual_status_xfer_event = false;
|
||||||
|
events->ep0_in();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
events->out((usb_ep_t) usb_event.data.eptransfer.ep);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
events->in((usb_ep_t) usb_event.data.eptransfer.ep);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if((usb_event.data.eptransfer.ep & 0x7F) == 0)
|
|
||||||
{
|
|
||||||
events->ep0_out();
|
|
||||||
|
|
||||||
// Check for pending virtual status transfer
|
|
||||||
if(virtual_status_xfer_event)
|
|
||||||
{
|
|
||||||
// Notify the upper stack that the status transfer is done
|
|
||||||
// as well at this point
|
|
||||||
virtual_status_xfer_event = false;
|
|
||||||
events->ep0_in();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
events->out((usb_ep_t) usb_event.data.eptransfer.ep);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue