fixed EP0 control handling
This commit is contained in:
@@ -828,6 +828,10 @@ static void handle_xfer_done(uint8_t rhport, bool in_isr) {
|
|||||||
// putchar('0' + ep->ep_num);
|
// putchar('0' + ep->ep_num);
|
||||||
// putchar('0' + ep->xfer_attemp);
|
// putchar('0' + ep->xfer_attemp);
|
||||||
#endif
|
#endif
|
||||||
|
if (ep_num == 0) {
|
||||||
|
// NAK on control, retry immediately
|
||||||
|
hxfr_write(rhport, _hcd_data.hxfr, in_isr);
|
||||||
|
} else {
|
||||||
#if NAK_RETRY_HANDLING
|
#if NAK_RETRY_HANDLING
|
||||||
ep->retry_pending = 1;
|
ep->retry_pending = 1;
|
||||||
ep->xfer_pending = 0;
|
ep->xfer_pending = 0;
|
||||||
@@ -840,10 +844,6 @@ static void handle_xfer_done(uint8_t rhport, bool in_isr) {
|
|||||||
atomic_flag_clear(&_hcd_data.busy);
|
atomic_flag_clear(&_hcd_data.busy);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (ep_num == 0) {
|
|
||||||
// NAK on control, retry immediately
|
|
||||||
hxfr_write(rhport, _hcd_data.hxfr, in_isr);
|
|
||||||
}else {
|
|
||||||
// NAK on non-control, find next pending to switch
|
// NAK on non-control, find next pending to switch
|
||||||
max3421_ep_t *next_ep = find_next_pending_ep(ep);
|
max3421_ep_t *next_ep = find_next_pending_ep(ep);
|
||||||
|
|
||||||
@@ -856,8 +856,8 @@ static void handle_xfer_done(uint8_t rhport, bool in_isr) {
|
|||||||
} else {
|
} else {
|
||||||
TU_ASSERT(false,);
|
TU_ASSERT(false,);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case HRSL_BAD_REQ:
|
case HRSL_BAD_REQ:
|
||||||
|
|||||||
Reference in New Issue
Block a user