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: 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;