diff --git a/examples/device/nrf52840/src/main.c b/examples/device/nrf52840/src/main.c index ec574738e..00937d7d2 100644 --- a/examples/device/nrf52840/src/main.c +++ b/examples/device/nrf52840/src/main.c @@ -146,8 +146,8 @@ void print_greeting(void) printf("This DEVICE demo is configured to support:"); printf(" - RTOS = %s\n", rtos_name[CFG_TUSB_OS]); - if (CFG_TUD_HID_MOUSE ) puts(" - HID Mouse"); - if (CFG_TUD_HID_KEYBOARD ) puts(" - HID Keyboard"); - if (CFG_TUD_MSC ) puts(" - Mass Storage"); if (CFG_TUD_CDC ) puts(" - Communication Device Class"); + if (CFG_TUD_MSC ) puts(" - Mass Storage"); + if (CFG_TUD_HID_KEYBOARD ) puts(" - HID Keyboard"); + if (CFG_TUD_HID_MOUSE ) puts(" - HID Mouse"); } diff --git a/examples/device/nrf52840/src/tusb_descriptors.c b/examples/device/nrf52840/src/tusb_descriptors.c index c088fec7f..b9d4332ee 100644 --- a/examples/device/nrf52840/src/tusb_descriptors.c +++ b/examples/device/nrf52840/src/tusb_descriptors.c @@ -66,6 +66,17 @@ uint16_t const * const string_desc_arr [] = // 5: MSC Interface TUD_DESC_STRCONV('t','u','s','b',' ','m','s','c'), #endif + +#if CFG_TUD_HID_KEYBOARD + // 6: Keyboard + TUD_DESC_STRCONV('t','u','s','b',' ','k','e','y','b','o','a','r','d'), +#endif + +#if CFG_TUD_HID_MOUSE + // 7: Mouse + TUD_DESC_STRCONV('t','u','s','b',' ','m', 'o','u','s','e'), +#endif + }; // tud_desc_set is required by tinyusb stack diff --git a/src/device/usbd.c b/src/device/usbd.c index 2aabd1892..0319ec8fd 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -310,6 +310,36 @@ static void usbd_reset(uint8_t rhport) { if ( usbd_class_drivers[i].reset ) usbd_class_drivers[i].reset( rhport ); } + +#if CFG_TUD_DESC_AUTO + extern tusb_desc_device_t const _desc_auto_device; + extern uint8_t const * const _desc_auto_config; + + tud_desc_set.device = &_desc_auto_device; + tud_desc_set.config = _desc_auto_config; + +#if CFG_TUD_HID_BOOT_PROTOCOL + + #if CFG_TUD_HID_KEYBOARD + extern uint8_t const _desc_auto_hid_kbd_report[]; + tud_desc_set.hid_report.boot_keyboard = _desc_auto_hid_kbd_report; + #endif + + #if CFG_TUD_HID_MOUSE && CFG_TUD_HID_BOOT_PROTOCOL + extern uint8_t const _desc_auto_hid_mse_report[]; + tud_desc_set.hid_report.boot_mouse = _desc_auto_hid_kbd_report; + #endif + +#else + + #if CFG_TUD_HID_KEYBOARD + CFG_TUD_HID_MOUSE + tud_desc_set.hid_report.composite = ; + #endif + +#endif + +#endif // CFG_TUD_DESC_AUTO + } //--------------------------------------------------------------------+ @@ -410,16 +440,9 @@ static tusb_error_t proc_set_config_req(uint8_t rhport, uint8_t config_number) _usbd_dev.config_num = config_number; //------------- parse configuration & open drivers -------------// -#if CFG_TUD_DESC_AUTO - extern uint8_t const * const _desc_auto_config; - uint8_t const * desc_cfg = _desc_auto_config; -#else uint8_t const * desc_cfg = tud_desc_set.config; TU_ASSERT(desc_cfg != NULL, TUSB_ERROR_DESCRIPTOR_CORRUPTED); -#endif - uint8_t const * p_desc = desc_cfg + sizeof(tusb_desc_configuration_t); - uint16_t const cfg_len = ((tusb_desc_configuration_t*)desc_cfg)->wTotalLength; while( p_desc < desc_cfg + cfg_len ) @@ -473,25 +496,15 @@ static uint16_t get_descriptor(uint8_t rhport, tusb_control_request_t const * co uint8_t const * desc_data = NULL ; uint16_t len = 0; - tud_desc_set_t descs = tud_desc_set; - -#if CFG_TUD_DESC_AUTO - extern tusb_desc_device_t const _desc_auto_device; - extern uint8_t const * const _desc_auto_config; - - descs.device = (uint8_t const*) &_desc_auto_device; - descs.config = _desc_auto_config; -#endif - switch(desc_type) { case TUSB_DESC_DEVICE: - desc_data = descs.device; + desc_data = tud_desc_set.device; len = sizeof(tusb_desc_device_t); break; case TUSB_DESC_CONFIGURATION: - desc_data = descs.config; + desc_data = tud_desc_set.config; len = ((tusb_desc_configuration_t const*) desc_data)->wTotalLength; break; @@ -499,7 +512,7 @@ static uint16_t get_descriptor(uint8_t rhport, tusb_control_request_t const * co // windows sometimes ask for string at index 238 !!! if ( !(desc_index < 100) ) return 0; - desc_data = descs.string_arr[desc_index]; + desc_data = tud_desc_set.string_arr[desc_index]; VERIFY( desc_data != NULL, 0 ); len = desc_data[0]; // first byte of descriptor is its size diff --git a/src/device/usbd_desc.c b/src/device/usbd_desc.c index c2674d11a..452a6674e 100644 --- a/src/device/usbd_desc.c +++ b/src/device/usbd_desc.c @@ -511,7 +511,7 @@ desc_auto_cfg_t const _desc_auto_config_struct = .bDescriptorType = TUSB_DESC_INTERFACE, .bInterfaceNumber = ITF_NUM_HID_KBD, .bAlternateSetting = 0x00, - .bNumEndpoints = 2, + .bNumEndpoints = 1, .bInterfaceClass = TUSB_CLASS_HID, .bInterfaceSubClass = HID_SUBCLASS_BOOT, .bInterfaceProtocol = HID_PROTOCOL_KEYBOARD, @@ -629,9 +629,6 @@ desc_auto_cfg_t const _desc_auto_config_struct = uint8_t const * const _desc_auto_config = (uint8_t const*) &_desc_auto_config_struct; - - - #endif /*------------------------------------------------------------------*/