diff --git a/src/device/usbd.c b/src/device/usbd.c index f9c52d841..4db6cd671 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -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; } }