diff options
| author | Ha Thach <[email protected]> | 2021-02-11 12:36:19 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-02-11 12:36:19 +0700 |
| commit | d4281291e5d11fd80345811d88437ee2766da48d (patch) | |
| tree | 6e2e6e92b66361d72a69c5e2316ab6e04f8369d6 /src | |
| parent | 89fcaf1efd6d345e821ab9ea5dbd73b2f239f05d (diff) | |
| parent | 9812cfc6c6ab98e600a1dd812d62e465ea3b99b4 (diff) | |
Merge pull request #647 from hathach/correct-fs-bulk-epsize
more epsize checking per type
Diffstat (limited to 'src')
| -rw-r--r-- | src/device/usbd.c | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c index d871a53d4..252e4f709 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -1112,22 +1112,35 @@ bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * desc_ep) { TU_LOG2(" Open EP %02X with Size = %u\r\n", desc_ep->bEndpointAddress, desc_ep->wMaxPacketSize.size); - if (TUSB_XFER_ISOCHRONOUS == desc_ep->bmAttributes.xfer) + switch (desc_ep->bmAttributes.xfer) { - TU_ASSERT(desc_ep->wMaxPacketSize.size <= (_usbd_dev.speed == TUSB_SPEED_HIGH ? 1024 : 1023)); - } - else - { - uint16_t const max_epsize = (_usbd_dev.speed == TUSB_SPEED_HIGH ? 512 : 64); - - if (TUSB_XFER_BULK == desc_ep->bmAttributes.xfer) + case TUSB_XFER_ISOCHRONOUS: { - // Bulk must be EXACTLY 512/64 bytes - TU_ASSERT(desc_ep->wMaxPacketSize.size == max_epsize); - }else + uint16_t const max_epsize = (_usbd_dev.speed == TUSB_SPEED_HIGH ? 1024 : 1023); + TU_ASSERT(desc_ep->wMaxPacketSize.size <= max_epsize); + } + break; + + case TUSB_XFER_BULK: + if (_usbd_dev.speed == TUSB_SPEED_HIGH) + { + // Bulk highspeed must be EXACTLY 512 + TU_ASSERT(desc_ep->wMaxPacketSize.size == 512); + }else + { + // TODO Bulk fullspeed can only be 8, 16, 32, 64 + TU_ASSERT(desc_ep->wMaxPacketSize.size <= 64); + } + break; + + case TUSB_XFER_INTERRUPT: { + uint16_t const max_epsize = (_usbd_dev.speed == TUSB_SPEED_HIGH ? 1024 : 64); TU_ASSERT(desc_ep->wMaxPacketSize.size <= max_epsize); } + break; + + default: return false; } return dcd_edpt_open(rhport, desc_ep); |
