Skip to content

Commit a33ecbf

Browse files
AGlass0fMilkArto Kinnunen
authored andcommitted
Ignore events that happen when an endpoint is stalled/halted
1 parent fd0a1d1 commit a33ecbf

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

usb/device/targets/TARGET_NORDIC/TARGET_MCU_NRF52840/USBPhy_Nordic.cpp

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -450,41 +450,44 @@ void USBPhyHw::process() {
450450
case NRF_DRV_USBD_EVT_EPTRANSFER:
451451
if(usb_event.data.eptransfer.status == NRF_USBD_EP_OK)
452452
{
453-
if(IS_IN_EP(usb_event.data.eptransfer.ep))
453+
if(!nrf_drv_usbd_ep_stall_check(usb_event.data.eptransfer.ep))
454454
{
455-
if((usb_event.data.eptransfer.ep & 0x7F) == 0)
455+
if(IS_IN_EP(usb_event.data.eptransfer.ep))
456456
{
457-
events->ep0_in();
458-
// Check for pending virtual status transfer
459-
if(virtual_status_xfer_event)
457+
if((usb_event.data.eptransfer.ep & 0x7F) == 0)
460458
{
461-
// Notify the upper stack that the status transfer is done
462-
// as well at this point
463-
virtual_status_xfer_event = false;
464-
events->ep0_out();
465-
459+
events->ep0_in();
460+
// Check for pending virtual status transfer
461+
if(virtual_status_xfer_event)
462+
{
463+
// Notify the upper stack that the status transfer is done
464+
// as well at this point
465+
virtual_status_xfer_event = false;
466+
events->ep0_out();
467+
468+
}
466469
}
470+
else
471+
events->in((usb_ep_t) usb_event.data.eptransfer.ep);
467472
}
468473
else
469-
events->in((usb_ep_t) usb_event.data.eptransfer.ep);
470-
}
471-
else
472-
{
473-
if((usb_event.data.eptransfer.ep & 0x7F) == 0)
474474
{
475-
events->ep0_out();
476-
477-
// Check for pending virtual status transfer
478-
if(virtual_status_xfer_event)
475+
if((usb_event.data.eptransfer.ep & 0x7F) == 0)
479476
{
480-
// Notify the upper stack that the status transfer is done
481-
// as well at this point
482-
virtual_status_xfer_event = false;
483-
events->ep0_in();
477+
events->ep0_out();
478+
479+
// Check for pending virtual status transfer
480+
if(virtual_status_xfer_event)
481+
{
482+
// Notify the upper stack that the status transfer is done
483+
// as well at this point
484+
virtual_status_xfer_event = false;
485+
events->ep0_in();
486+
}
484487
}
488+
else
489+
events->out((usb_ep_t) usb_event.data.eptransfer.ep);
485490
}
486-
else
487-
events->out((usb_ep_t) usb_event.data.eptransfer.ep);
488491
}
489492
}
490493
break;

0 commit comments

Comments
 (0)