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
//--------------------------------------------------------------------+
#if CFG_TUSB_DEBUG >= 2
#define DRIVER_NAME(_name) .name = _name,
#else
#define DRIVER_NAME(_name)
#endif
typedef struct
{
uint8_t class_code;
uint8_t subclass;
uint8_t protocol;
struct TU_ATTR_PACKED
{
uint8_t all_subclass : 1;
uint8_t all_protocol : 1;
};
#if CFG_TUSB_DEBUG >= 2
char const* name;
#endif
void (* init ) (void);
void (* reset ) (uint8_t rhport);
@ -98,12 +98,7 @@ static usbd_class_driver_t const _usbd_driver[] =
{
#if CFG_TUD_CDC
{
.class_code = TUSB_CLASS_CDC,
.subclass = CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL,
.protocol = 0x00,
.all_subclass = 0,
.all_protocol = 1,
DRIVER_NAME("CDC")
.init = cdcd_init,
.reset = cdcd_reset,
.open = cdcd_open,
@ -116,12 +111,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_MSC
{
.class_code = TUSB_CLASS_MSC,
.subclass = MSC_SUBCLASS_SCSI,
.protocol = MSC_PROTOCOL_BOT,
.all_subclass = 0,
.all_protocol = 0,
DRIVER_NAME("MSC")
.init = mscd_init,
.reset = mscd_reset,
.open = mscd_open,
@ -134,12 +124,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_HID
{
.class_code = TUSB_CLASS_HID,
.subclass = 0x00,
.protocol = 0x00,
.all_subclass = 1,
.all_protocol = 1,
DRIVER_NAME("HID")
.init = hidd_init,
.reset = hidd_reset,
.open = hidd_open,
@ -152,12 +137,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_MIDI
{
.class_code = TUSB_CLASS_AUDIO,
.subclass = AUDIO_SUBCLASS_CONTROL,
.protocol = AUDIO_PROTOCOL_V1,
.all_subclass = 0,
.all_protocol = 0,
DRIVER_NAME("MIDI")
.init = midid_init,
.open = midid_open,
.reset = midid_reset,
@ -170,12 +150,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_VENDOR
{
.class_code = TUSB_CLASS_VENDOR_SPECIFIC,
.subclass = 0x00,
.protocol = 0x00,
.all_subclass = 1,
.all_protocol = 1,
DRIVER_NAME("VENDOR")
.init = vendord_init,
.reset = vendord_reset,
.open = vendord_open,
@ -188,12 +163,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_USBTMC
{
.class_code = TUSB_CLASS_APPLICATION_SPECIFIC,
.subclass = APP_SUBCLASS_USBTMC,
.protocol = 0x00,
.all_subclass = 0,
.all_protocol = 1,
DRIVER_NAME("TMC")
.init = usbtmcd_init_cb,
.reset = usbtmcd_reset_cb,
.open = usbtmcd_open_cb,
@ -206,12 +176,7 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_DFU_RT
{
.class_code = TUSB_CLASS_APPLICATION_SPECIFIC,
.subclass = APP_SUBCLASS_DFU_RUNTIME,
.protocol = DFU_PROTOCOL_RT,
.all_subclass = 0,
.all_protocol = 0,
DRIVER_NAME("DFU-RT")
.init = dfu_rtd_init,
.reset = dfu_rtd_reset,
.open = dfu_rtd_open,
@ -225,7 +190,12 @@ static usbd_class_driver_t const _usbd_driver[] =
#if CFG_TUD_NET
/* 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,
.reset = netd_reset,
.open = netd_open,
@ -236,7 +206,13 @@ static usbd_class_driver_t const _usbd_driver[] =
},
/* 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,
.reset = netd_reset,
.open = netd_open,
@ -247,7 +223,12 @@ static usbd_class_driver_t const _usbd_driver[] =
},
/* 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,
.reset = NULL,
.open = netd_open_data,
@ -303,35 +284,6 @@ static char const* const _usbd_event_str[DCD_EVENT_COUNT] =
"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[] =
{
"Get Status" ,
@ -388,7 +340,7 @@ bool tud_init (void)
// Init class drivers
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();
}
@ -497,7 +449,7 @@ void tud_task (void)
uint8_t const drv_id = _usbd_dev.ep2drv[epnum][ep_dir];
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);
}
}
@ -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);
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);
}
@ -811,7 +763,7 @@ static bool process_set_config(uint8_t rhport, uint8_t cfg_num)
_usbd_dev.itf2drv[desc_itf->bInterfaceNumber] = drv_id;
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( itf_len >= sizeof(tusb_desc_interface_t) );
#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
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;
TU_LOG2(" itf_len = %d \r\n", itf_len);
break;
}
}