diff options
| author | hathach <[email protected]> | 2018-07-13 18:01:16 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2018-07-13 18:01:16 +0700 |
| commit | 7a1f40593f984d37d602cdf6457d0f8c6f7c01d7 (patch) | |
| tree | 4ed7d9c4f0cc2775985794ccab0f2543f9288468 /src | |
| parent | 1efb552bfd097a23651bbb5ad29b6d8eb3bc9ccd (diff) | |
only call class xfer callback associated with endpoint address
Diffstat (limited to 'src')
| -rw-r--r-- | src/class/cdc/cdc_device.c | 3 | ||||
| -rw-r--r-- | src/class/msc/msc_device.c | 2 | ||||
| -rw-r--r-- | src/device/usbd.c | 13 |
3 files changed, 9 insertions, 9 deletions
diff --git a/src/class/cdc/cdc_device.c b/src/class/cdc/cdc_device.c index 76526d40b..f8aa6824c 100644 --- a/src/class/cdc/cdc_device.c +++ b/src/class/cdc/cdc_device.c @@ -297,6 +297,7 @@ tusb_error_t cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, tusb_event_t event, u uint8_t const itf = 0;
cdcd_interface_t const * p_cdc = &_cdcd_itf[itf];
+ // receive new data
if ( ep_addr == p_cdc->ep_out )
{
tu_fifo_write_n(&_rx_ff[itf], _tmp_rx_buf, xferred_bytes);
@@ -308,6 +309,8 @@ tusb_error_t cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, tusb_event_t event, u if (tud_cdc_rx_cb) tud_cdc_rx_cb(itf);
}
+ // nothing to do with in and notif endpoint
+
return TUSB_ERROR_NONE;
}
diff --git a/src/class/msc/msc_device.c b/src/class/msc/msc_device.c index 71987addf..5ad8aa929 100644 --- a/src/class/msc/msc_device.c +++ b/src/class/msc/msc_device.c @@ -208,8 +208,6 @@ tusb_error_t mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, tusb_event_t event, u msc_cbw_t const * p_cbw = &p_msc->cbw;
msc_csw_t * p_csw = &p_msc->csw;
- VERIFY( (ep_addr == p_msc->ep_out) || (ep_addr == p_msc->ep_in), TUSB_ERROR_INVALID_PARA);
-
switch (p_msc->stage)
{
case MSC_STAGE_CMD:
diff --git a/src/device/usbd.c b/src/device/usbd.c index d795e4f9a..e2ef5e7bb 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -269,14 +269,13 @@ static tusb_error_t usbd_main_st(void) }
else if (USBD_EVT_XFER_DONE == event.event_id)
{
- // TODO only call respective interface callback
- // Call class handling function. Those does not own the endpoint should check and return
- for (uint8_t i = 0; i < USBD_CLASS_DRIVER_COUNT; i++)
+ // Invoke the class callback associated with the endpoint address
+ uint8_t const ep_addr = event.xfer_done.ep_addr;
+ uint8_t const drv_id = _usbd_dev.ep2drv[ edpt_dir(ep_addr) ][ edpt_number(ep_addr) ];
+
+ if (drv_id < USBD_CLASS_DRIVER_COUNT)
{
- if ( usbd_class_drivers[i].xfer_cb )
- {
- usbd_class_drivers[i].xfer_cb( event.rhport, event.xfer_done.ep_addr, (tusb_event_t) event.xfer_done.result, event.xfer_done.xferred_byte);
- }
+ usbd_class_drivers[drv_id].xfer_cb( event.rhport, ep_addr, (tusb_event_t) event.xfer_done.result, event.xfer_done.xferred_byte);
}
}
else if (USBD_EVT_SOF == event.event_id)
|
