Merge pull request #12269 from bergzand/pr/nrfusb/fix_control_write
nrfusb: Fix data stage handling of control writes
This commit is contained in:
commit
57edabce96
@ -498,18 +498,13 @@ static int _ep0_ready(usbdev_ep_t *ep, size_t len)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* USB_EP_DIR_OUT */
|
/* USB_EP_DIR_OUT */
|
||||||
if (len == 0) {
|
|
||||||
if (usbdev->sstate == NRFUSB_SETUP_READ) {
|
if (usbdev->sstate == NRFUSB_SETUP_READ) {
|
||||||
usbdev->device->TASKS_EP0STATUS = 1;
|
usbdev->device->TASKS_EP0STATUS = 1;
|
||||||
usbdev->sstate = NRFUSB_SETUP_ACKOUT;
|
usbdev->sstate = NRFUSB_SETUP_ACKOUT;
|
||||||
usbdev->usbdev.epcb(_get_ep_out(usbdev, 0), USBDEV_EVENT_ESR);
|
usbdev->usbdev.epcb(_get_ep_out(usbdev, 0), USBDEV_EVENT_ESR);
|
||||||
}
|
}
|
||||||
else if (usbdev->sstate == NRFUSB_SETUP_READY) {
|
else if (usbdev->sstate == NRFUSB_SETUP_WRITE) {
|
||||||
return 0;
|
usbdev->device->TASKS_EP0RCVOUT = 1;
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
usbdev->device->TASKS_STARTEPOUT[ep->num] = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
@ -577,6 +572,11 @@ static signed _ep0_esr(usbdev_ep_t *ep)
|
|||||||
event = 0;
|
event = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (usbdev->device->EVENTS_EP0DATADONE) {
|
||||||
|
usbdev->device->EVENTS_EP0DATADONE = 0;
|
||||||
|
_ep_dma_out(ep);
|
||||||
|
event = USBDEV_EVENT_TR_COMPLETE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (usbdev->sstate == NRFUSB_SETUP_ACKIN) {
|
if (usbdev->sstate == NRFUSB_SETUP_ACKIN) {
|
||||||
@ -649,9 +649,15 @@ void isr_usbd(void)
|
|||||||
}
|
}
|
||||||
if (usbdev->device->EVENTS_EP0DATADONE &&
|
if (usbdev->device->EVENTS_EP0DATADONE &&
|
||||||
(usbdev->device->INTEN & USBD_INTEN_EP0DATADONE_Msk)) {
|
(usbdev->device->INTEN & USBD_INTEN_EP0DATADONE_Msk)) {
|
||||||
|
if (usbdev->sstate == NRFUSB_SETUP_READ) {
|
||||||
usbdev->usbdev.epcb(_get_ep_in(usbdev, 0), USBDEV_EVENT_ESR);
|
usbdev->usbdev.epcb(_get_ep_in(usbdev, 0), USBDEV_EVENT_ESR);
|
||||||
_ep_disable_irq(_get_ep_in(usbdev, 0));
|
_ep_disable_irq(_get_ep_in(usbdev, 0));
|
||||||
}
|
}
|
||||||
|
if (usbdev->sstate == NRFUSB_SETUP_WRITE) {
|
||||||
|
usbdev->usbdev.epcb(_get_ep_out(usbdev, 0), USBDEV_EVENT_ESR);
|
||||||
|
_ep_disable_irq(_get_ep_in(usbdev, 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
if (usbdev->device->EVENTS_EPDATA && usbdev->device->EPDATASTATUS) {
|
if (usbdev->device->EVENTS_EPDATA && usbdev->device->EPDATASTATUS) {
|
||||||
usbdev->device->EVENTS_EPDATA = 0;
|
usbdev->device->EVENTS_EPDATA = 0;
|
||||||
uint32_t epdatastatus = usbdev->device->EPDATASTATUS;
|
uint32_t epdatastatus = usbdev->device->EPDATASTATUS;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user