remove class_code/subclass/protocol from driver structure, add name for logging

This commit is contained in:
hathach 2020-04-15 11:06:35 +07:00
parent f1a6f92fab
commit c74f7e708e
No known key found for this signature in database
GPG Key ID: 2FA891220FBFD581
1 changed files with 40 additions and 89 deletions

View File

@ -73,17 +73,17 @@ enum { DRVID_INVALID = 0xFFu };
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// Class Driver // Class Driver
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
#if CFG_TUSB_DEBUG >= 2
#define DRIVER_NAME(_name) .name = _name,
#else
#define DRIVER_NAME(_name)
#endif
typedef struct typedef struct
{ {
uint8_t class_code; #if CFG_TUSB_DEBUG >= 2
uint8_t subclass; char const* name;
uint8_t protocol; #endif
struct TU_ATTR_PACKED
{
uint8_t all_subclass : 1;
uint8_t all_protocol : 1;
};
void (* init ) (void); void (* init ) (void);
void (* reset ) (uint8_t rhport); void (* reset ) (uint8_t rhport);
@ -98,12 +98,7 @@ static usbd_class_driver_t const _usbd_driver[] =
{ {
#if CFG_TUD_CDC #if CFG_TUD_CDC
{ {
.class_code = TUSB_CLASS_CDC, DRIVER_NAME("CDC")
.subclass = CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL,
.protocol = 0x00,
.all_subclass = 0,
.all_protocol = 1,
.init = cdcd_init, .init = cdcd_init,
.reset = cdcd_reset, .reset = cdcd_reset,
.open = cdcd_open, .open = cdcd_open,
@ -116,12 +111,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_MSC #if CFG_TUD_MSC
{ {
.class_code = TUSB_CLASS_MSC, DRIVER_NAME("MSC")
.subclass = MSC_SUBCLASS_SCSI,
.protocol = MSC_PROTOCOL_BOT,
.all_subclass = 0,
.all_protocol = 0,
.init = mscd_init, .init = mscd_init,
.reset = mscd_reset, .reset = mscd_reset,
.open = mscd_open, .open = mscd_open,
@ -134,12 +124,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_HID #if CFG_TUD_HID
{ {
.class_code = TUSB_CLASS_HID, DRIVER_NAME("HID")
.subclass = 0x00,
.protocol = 0x00,
.all_subclass = 1,
.all_protocol = 1,
.init = hidd_init, .init = hidd_init,
.reset = hidd_reset, .reset = hidd_reset,
.open = hidd_open, .open = hidd_open,
@ -152,12 +137,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_MIDI #if CFG_TUD_MIDI
{ {
.class_code = TUSB_CLASS_AUDIO, DRIVER_NAME("MIDI")
.subclass = AUDIO_SUBCLASS_CONTROL,
.protocol = AUDIO_PROTOCOL_V1,
.all_subclass = 0,
.all_protocol = 0,
.init = midid_init, .init = midid_init,
.open = midid_open, .open = midid_open,
.reset = midid_reset, .reset = midid_reset,
@ -170,12 +150,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_VENDOR #if CFG_TUD_VENDOR
{ {
.class_code = TUSB_CLASS_VENDOR_SPECIFIC, DRIVER_NAME("VENDOR")
.subclass = 0x00,
.protocol = 0x00,
.all_subclass = 1,
.all_protocol = 1,
.init = vendord_init, .init = vendord_init,
.reset = vendord_reset, .reset = vendord_reset,
.open = vendord_open, .open = vendord_open,
@ -188,12 +163,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_USBTMC #if CFG_TUD_USBTMC
{ {
.class_code = TUSB_CLASS_APPLICATION_SPECIFIC, DRIVER_NAME("TMC")
.subclass = APP_SUBCLASS_USBTMC,
.protocol = 0x00,
.all_subclass = 0,
.all_protocol = 1,
.init = usbtmcd_init_cb, .init = usbtmcd_init_cb,
.reset = usbtmcd_reset_cb, .reset = usbtmcd_reset_cb,
.open = usbtmcd_open_cb, .open = usbtmcd_open_cb,
@ -206,12 +176,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_DFU_RT #if CFG_TUD_DFU_RT
{ {
.class_code = TUSB_CLASS_APPLICATION_SPECIFIC, DRIVER_NAME("DFU-RT")
.subclass = APP_SUBCLASS_DFU_RUNTIME,
.protocol = DFU_PROTOCOL_RT,
.all_subclass = 0,
.all_protocol = 0,
.init = dfu_rtd_init, .init = dfu_rtd_init,
.reset = dfu_rtd_reset, .reset = dfu_rtd_reset,
.open = dfu_rtd_open, .open = dfu_rtd_open,
@ -225,7 +190,12 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_NET #if CFG_TUD_NET
/* RNDIS management interface */ /* RNDIS management interface */
{ {
.class_code = TUD_RNDIS_ITF_CLASS, // .class_code = TUD_RNDIS_ITF_CLASS,
// .subclass = TUD_RNDIS_ITF_SUBCLASS,
// .protocol = TUD_RNDIS_ITF_PROTOCOL,
// .all_subclass = 0,
// .all_protocol = 0,
DRIVER_NAME("RNDIS")
.init = netd_init, .init = netd_init,
.reset = netd_reset, .reset = netd_reset,
.open = netd_open, .open = netd_open,
@ -236,7 +206,13 @@ static usbd_class_driver_t const _usbd_driver[] =
}, },
/* CDC-ECM management interface */ /* CDC-ECM management interface */
{ {
.class_code = TUSB_CLASS_CDC, // .class_code = TUSB_CLASS_CDC,
// .subclass = CDC_COMM_SUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL,
// .protocol = 0x00,
// .all_subclass = 0,
// .all_protocol = 0,
DRIVER_NAME("CDC-ECM")
.init = netd_init, .init = netd_init,
.reset = netd_reset, .reset = netd_reset,
.open = netd_open, .open = netd_open,
@ -247,7 +223,12 @@ static usbd_class_driver_t const _usbd_driver[] =
}, },
/* RNDIS/CDC-ECM data interface */ /* RNDIS/CDC-ECM data interface */
{ {
.class_code = TUSB_CLASS_CDC_DATA, // .class_code = TUSB_CLASS_CDC_DATA,
// .subclass = 0x00,
// .protocol = 0x00,
// .all_subclass = 0,
// .all_protocol = 0,
DRIVER_NAME("CDC-DATA")
.init = netd_init_data, .init = netd_init_data,
.reset = NULL, .reset = NULL,
.open = netd_open_data, .open = netd_open_data,
@ -303,35 +284,6 @@ static char const* const _usbd_event_str[DCD_EVENT_COUNT] =
"FUNC_CALL" "FUNC_CALL"
}; };
// must be same driver order as usbd_class_drivers[]
static char const* const _usbd_driver_str[USBD_CLASS_DRIVER_COUNT] =
{
#if CFG_TUD_CDC
"CDC",
#endif
#if CFG_TUD_MSC
"MSC",
#endif
#if CFG_TUD_HID
"HID",
#endif
#if CFG_TUD_MIDI
"MIDI",
#endif
#if CFG_TUD_VENDOR
"Vendor",
#endif
#if CFG_TUD_DFU_RT
"DFU Runtime",
#endif
#if CFG_TUD_USBTMC
"USBTMC"
#endif
#if CFG_TUD_NET
"NET"
#endif
};
static char const* const _tusb_std_request_str[] = static char const* const _tusb_std_request_str[] =
{ {
"Get Status" , "Get Status" ,
@ -388,7 +340,7 @@ bool tud_init (void)
// Init class drivers // Init class drivers
for (uint8_t i = 0; i < USBD_CLASS_DRIVER_COUNT; i++) for (uint8_t i = 0; i < USBD_CLASS_DRIVER_COUNT; i++)
{ {
TU_LOG2("%s init\r\n", _usbd_driver_str[i]); TU_LOG2("%s init\r\n", _usbd_driver[i].name);
_usbd_driver[i].init(); _usbd_driver[i].init();
} }
@ -497,7 +449,7 @@ void tud_task (void)
uint8_t const drv_id = _usbd_dev.ep2drv[epnum][ep_dir]; uint8_t const drv_id = _usbd_dev.ep2drv[epnum][ep_dir];
TU_ASSERT(drv_id < USBD_CLASS_DRIVER_COUNT,); TU_ASSERT(drv_id < USBD_CLASS_DRIVER_COUNT,);
TU_LOG2(" %s xfer callback\r\n", _usbd_driver_str[drv_id]); TU_LOG2(" %s xfer callback\r\n", _usbd_driver[drv_id].name);
_usbd_driver[drv_id].xfer_cb(event.rhport, ep_addr, event.xfer_complete.result, event.xfer_complete.len); _usbd_driver[drv_id].xfer_cb(event.rhport, ep_addr, event.xfer_complete.result, event.xfer_complete.len);
} }
} }
@ -542,7 +494,7 @@ static bool invoke_class_control(uint8_t rhport, uint8_t drvid, tusb_control_req
TU_ASSERT(_usbd_driver[drvid].control_request); TU_ASSERT(_usbd_driver[drvid].control_request);
usbd_control_set_complete_callback(_usbd_driver[drvid].control_complete); usbd_control_set_complete_callback(_usbd_driver[drvid].control_complete);
TU_LOG2(" %s control request\r\n", _usbd_driver_str[drvid]); TU_LOG2(" %s control request\r\n", _usbd_driver[drvid].name);
return _usbd_driver[drvid].control_request(rhport, request); return _usbd_driver[drvid].control_request(rhport, request);
} }
@ -811,7 +763,7 @@ static bool process_set_config(uint8_t rhport, uint8_t cfg_num)
_usbd_dev.itf2drv[desc_itf->bInterfaceNumber] = drv_id; _usbd_dev.itf2drv[desc_itf->bInterfaceNumber] = drv_id;
uint16_t itf_len=0; uint16_t itf_len=0;
TU_LOG2(" %s open\r\n", _usbd_driver_str[drv_id]); TU_LOG2(" %s open\r\n", _usbd_driver[drv_id].name);
TU_ASSERT( _usbd_driver[drv_id].open(rhport, desc_itf, &itf_len) ); TU_ASSERT( _usbd_driver[drv_id].open(rhport, desc_itf, &itf_len) );
TU_ASSERT( itf_len >= sizeof(tusb_desc_interface_t) ); TU_ASSERT( itf_len >= sizeof(tusb_desc_interface_t) );
#else #else
@ -827,9 +779,8 @@ static bool process_set_config(uint8_t rhport, uint8_t cfg_num)
{ {
// Interface number must not be used already TODO alternate interface // Interface number must not be used already TODO alternate interface
TU_ASSERT( DRVID_INVALID == _usbd_dev.itf2drv[desc_itf->bInterfaceNumber] ); TU_ASSERT( DRVID_INVALID == _usbd_dev.itf2drv[desc_itf->bInterfaceNumber] );
TU_LOG2(" %s open\r\n", _usbd_driver[drv_id].name);
_usbd_dev.itf2drv[desc_itf->bInterfaceNumber] = drv_id; _usbd_dev.itf2drv[desc_itf->bInterfaceNumber] = drv_id;
TU_LOG2(" itf_len = %d \r\n", itf_len);
break; break;
} }
} }