Przeglądaj źródła

fix descriptor minor issue

hathach 7 lat temu
rodzic
commit
2bff2a7d97

+ 3 - 3
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");
 }

+ 11 - 0
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

+ 33 - 20
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

+ 1 - 4
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
 
 /*------------------------------------------------------------------*/