summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2021-02-11 12:36:19 +0700
committerGitHub <[email protected]>2021-02-11 12:36:19 +0700
commitd4281291e5d11fd80345811d88437ee2766da48d (patch)
tree6e2e6e92b66361d72a69c5e2316ab6e04f8369d6 /src
parent89fcaf1efd6d345e821ab9ea5dbd73b2f239f05d (diff)
parent9812cfc6c6ab98e600a1dd812d62e465ea3b99b4 (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.c35
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);