Ignore events that happen when an endpoint is stalled/halted

pull/10689/head
George Beckstein 2019-02-21 21:36:42 -05:00 committed by aglass0fmilk
parent 54b72d2eb3
commit 9e61bbc4e3
1 changed files with 31 additions and 28 deletions

View File

@ -450,41 +450,44 @@ void USBPhyHw::process() {
case NRF_DRV_USBD_EVT_EPTRANSFER:
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();
// Check for pending virtual status transfer
if(virtual_status_xfer_event)
if((usb_event.data.eptransfer.ep & 0x7F) == 0)
{
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();
// 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;