clean up and comment out tud_sof_isr_set

This commit is contained in:
hathach 2022-03-29 16:53:45 +07:00
parent 5cd67baf15
commit 65b6b79e99
No known key found for this signature in database
GPG Key ID: 2FA891220FBFD581
4 changed files with 30 additions and 37 deletions

View File

@ -98,7 +98,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.open = cdcd_open,
.control_xfer_cb = cdcd_control_xfer_cb,
.xfer_cb = cdcd_xfer_cb,
.sof = NULL
.sof_isr = NULL
},
#endif
@ -110,7 +110,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.open = mscd_open,
.control_xfer_cb = mscd_control_xfer_cb,
.xfer_cb = mscd_xfer_cb,
.sof = NULL
.sof_isr = NULL
},
#endif
@ -122,7 +122,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.open = hidd_open,
.control_xfer_cb = hidd_control_xfer_cb,
.xfer_cb = hidd_xfer_cb,
.sof = NULL
.sof_isr = NULL
},
#endif
@ -134,7 +134,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.open = audiod_open,
.control_xfer_cb = audiod_control_xfer_cb,
.xfer_cb = audiod_xfer_cb,
.sof = audiod_sof
.sof_isr = audiod_sof
},
#endif
@ -146,7 +146,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.open = videod_open,
.control_xfer_cb = videod_control_xfer_cb,
.xfer_cb = videod_xfer_cb,
.sof = NULL
.sof_isr = NULL
},
#endif
@ -158,7 +158,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.reset = midid_reset,
.control_xfer_cb = midid_control_xfer_cb,
.xfer_cb = midid_xfer_cb,
.sof = NULL
.sof_isr = NULL
},
#endif
@ -170,7 +170,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.open = vendord_open,
.control_xfer_cb = tud_vendor_control_xfer_cb,
.xfer_cb = vendord_xfer_cb,
.sof = NULL
.sof_isr = NULL
},
#endif
@ -182,7 +182,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.open = usbtmcd_open_cb,
.control_xfer_cb = usbtmcd_control_xfer_cb,
.xfer_cb = usbtmcd_xfer_cb,
.sof = NULL
.sof_isr = NULL
},
#endif
@ -194,7 +194,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.open = dfu_rtd_open,
.control_xfer_cb = dfu_rtd_control_xfer_cb,
.xfer_cb = NULL,
.sof = NULL
.sof_isr = NULL
},
#endif
@ -206,7 +206,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.open = dfu_moded_open,
.control_xfer_cb = dfu_moded_control_xfer_cb,
.xfer_cb = NULL,
.sof = NULL
.sof_isr = NULL
},
#endif
@ -218,7 +218,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.open = netd_open,
.control_xfer_cb = netd_control_xfer_cb,
.xfer_cb = netd_xfer_cb,
.sof = NULL,
.sof_isr = NULL,
},
#endif
@ -230,7 +230,7 @@ static usbd_class_driver_t const _usbd_driver[] =
.open = btd_open,
.control_xfer_cb = btd_control_xfer_cb,
.xfer_cb = btd_xfer_cb,
.sof = NULL
.sof_isr = NULL
},
#endif
};
@ -264,7 +264,7 @@ static inline usbd_class_driver_t const * get_driver(uint8_t drvid)
// DCD Event
//--------------------------------------------------------------------+
static tud_sof_isr_t _sof_isr = NULL;
//static tud_sof_isr_t _sof_isr = NULL;
enum { RHPORT_INVALID = 0xFFu };
static uint8_t _usbd_rhport = RHPORT_INVALID;
@ -373,11 +373,11 @@ bool tud_connect(void)
return true;
}
void tud_sof_isr_set(tud_sof_isr_t sof_isr)
{
_sof_isr = sof_isr;
dcd_sof_enable(_usbd_rhport, _sof_isr != NULL);
}
//void tud_sof_isr_set(tud_sof_isr_t sof_isr)
//{
// _sof_isr = sof_isr;
// dcd_sof_enable(_usbd_rhport, _sof_isr != NULL);
//}
//--------------------------------------------------------------------+
// USBD Task
@ -422,7 +422,7 @@ bool tud_init (uint8_t rhport)
}
_usbd_rhport = rhport;
_sof_isr = NULL;
//_sof_isr = NULL;
// Init device controller driver
dcd_init(rhport);
@ -585,21 +585,12 @@ void tud_task (void)
}
break;
case DCD_EVENT_SOF:
TU_LOG2("\r\n");
// TODO: Should this really be done here in the queue? How to distinguish the calls here from those SOF events which should be handled directly in the ISR routine? If we do it like this, the SOF routines get called two time right now, once in the ISR context and once again here
// for ( uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++ )
// {
// usbd_class_driver_t const * driver = get_driver(i);
// if ( driver->sof ) driver->sof(event.rhport, event.sof.frame_count);
// }
break;
case USBD_EVENT_FUNC_CALL:
TU_LOG2("\r\n");
if ( event.func_call.func ) event.func_call.func(event.func_call.param);
break;
case DCD_EVENT_SOF:
default:
TU_BREAKPOINT();
break;
@ -1114,15 +1105,14 @@ void dcd_event_handler(dcd_event_t const * event, bool in_isr)
for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++)
{
usbd_class_driver_t const * driver = get_driver(i);
if (driver->sof)
if (driver->sof_isr)
{
driver->sof(event->rhport, event->sof.frame_count);
// TU_LOG2("%s sof\r\n", driver->name); // too demanding
driver->sof_isr(event->rhport, event->sof.frame_count);
}
}
// SOF user handler in ISR context
if (_sof_isr) _sof_isr(event->sof.frame_count);
// if (_sof_isr) _sof_isr(event->sof.frame_count);
// Some MCUs after running dcd_remote_wakeup() does not have way to detect the end of remote wakeup
// which last 1-15 ms. DCD can use SOF as a clear indicator that bus is back to operational
@ -1133,6 +1123,8 @@ void dcd_event_handler(dcd_event_t const * event, bool in_isr)
dcd_event_t const event_resume = { .rhport = event->rhport, .event_id = DCD_EVENT_RESUME };
osal_queue_send(_usbd_q, &event_resume, in_isr);
}
// skip osal queue for SOF in usbd task
break;
default:
@ -1411,7 +1403,8 @@ void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr)
void usbd_sof_enable(uint8_t rhport, bool en)
{
// TODO: Check needed if all drivers including the user sof_cb does not need an active SOF ISR any more. Only if all drivers switched off SOF calls the SOF interrupt may be disabled
// TODO: Check needed if all drivers including the user sof_cb does not need an active SOF ISR any more.
// Only if all drivers switched off SOF calls the SOF interrupt may be disabled
dcd_sof_enable(rhport, en);
}

View File

@ -88,7 +88,7 @@ bool tud_connect(void);
// Set Start-of-frame (1ms interval) IRQ handler
// NULL means disabled, frame_count may not be supported on mcus
void tud_sof_isr_set(tud_sof_isr_t sof_isr);
// void tud_sof_isr_set(tud_sof_isr_t sof_isr);
// Carry out Data and Status stage of control transfer
// - If len = 0, it is equivalent to sending status only

View File

@ -48,7 +48,7 @@ typedef struct
uint16_t (* open ) (uint8_t rhport, tusb_desc_interface_t const * desc_intf, uint16_t max_len);
bool (* control_xfer_cb ) (uint8_t rhport, uint8_t stage, tusb_control_request_t const * request);
bool (* xfer_cb ) (uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes);
void (* sof ) (uint8_t rhport, uint32_t frame_count); /* optional */
void (* sof_isr ) (uint8_t rhport, uint32_t frame_count); // optional
} usbd_class_driver_t;
// Invoked when initializing device stack to get additional class drivers.

View File

@ -297,7 +297,7 @@
#endif
#ifndef CFG_TUD_INTERFACE_MAX
#define CFG_TUD_INTERFACE_MAX 8
#define CFG_TUD_INTERFACE_MAX 16
#endif
#ifndef CFG_TUD_CDC