hathach 7 лет назад
Родитель
Сommit
683bb574e7

+ 6 - 7
examples/device/nrf52840/src/tusb_config.h

@@ -78,13 +78,6 @@
 // #define CFG_TUD_DESC_VID          0xCAFE
 // #define CFG_TUD_DESC_PID          0x0001
 
-/* Use Boot Protocol for Keyboard, Mouse. Enable this will create separated HID interface
- * require more IN endpoints. If disabled, they they are all packed into a single
- * multiple report interface called "Generic".
- */
-#define CFG_TUD_DESC_BOOT_KEYBOARD   0
-#define CFG_TUD_DESC_BOOT_MOUSE      0
-
 //------------- CLASS -------------//
 #define CFG_TUD_CDC                 1
 #define CFG_TUD_MSC                 1
@@ -93,6 +86,12 @@
 #define CFG_TUD_HID_KEYBOARD        1
 #define CFG_TUD_HID_MOUSE           1
 
+/* Use Boot Protocol for Keyboard, Mouse. Enable this will create separated HID interface
+ * require more IN endpoints. If disabled, they they are all packed into a single
+ * multiple report interface called "Generic". */
+#define CFG_TUD_HID_KEYBOARD_BOOT   1
+#define CFG_TUD_HID_MOUSE_BOOT      1
+
 
 //--------------------------------------------------------------------
 // CDC

+ 12 - 4
src/class/hid/hid_device.h

@@ -48,14 +48,22 @@
 #endif
 
 //--------------------------------------------------------------------+
-// Class Driver Configuration
+// Class Driver Default Configure & Validation
 //--------------------------------------------------------------------+
-#if !CFG_TUD_HID_KEYBOARD && CFG_TUD_DESC_BOOT_KEYBOARD
+#ifndef CFG_TUD_HID_KEYBOARD_BOOT
+#define CFG_TUD_HID_KEYBOARD_BOOT 0
+#endif
+
+#ifndef CFG_TUD_HID_MOUSE_BOOT
+#define CFG_TUD_HID_MOUSE_BOOT 0
+#endif
+
+#if !CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT
 #error CFG_TUD_HID_KEYBOARD must be enabled
 #endif
 
-#if !CFG_TUD_HID_MOUSE && CFG_TUD_DESC_BOOT_MOUSE
-#error CFG_TUD_HID_MOUSE  must be enabled
+#if !CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
+#error CFG_TUD_HID_MOUSE must be enabled
 #endif
 
 

+ 2 - 1
src/common/tusb_error.h

@@ -92,7 +92,8 @@
     ENTRY(TUSB_ERROR_NOT_ENOUGH_MEMORY               )\
     ENTRY(TUSB_ERROR_FAILED                          )\
     \
-    ENTRY(ERR_TUD_INVALID_DESCRIPTOR)
+    ENTRY(ERR_TUD_INVALID_DESCRIPTOR) \
+    ENTRY(ERR_TUD_EDPT_OPEN_FAILED) \
 
 
 /// \brief Error Code returned

+ 4 - 2
src/device/usbd.c

@@ -318,12 +318,13 @@ static void usbd_reset(uint8_t rhport)
   tud_desc_set.device = (uint8_t const*) &_desc_auto_device;
   tud_desc_set.config = _desc_auto_config;
 
-  #if CFG_TUD_HID_KEYBOARD && CFG_TUD_DESC_BOOT_KEYBOARD
+#if CFG_TUD_HID
+  #if CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT
   extern uint8_t const _desc_auto_hid_boot_kbd_report[];
   tud_desc_set.hid_report.boot_keyboard = _desc_auto_hid_boot_kbd_report;
   #endif
 
-  #if CFG_TUD_HID_MOUSE && CFG_TUD_DESC_BOOT_MOUSE
+  #if CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
   extern uint8_t const _desc_auto_hid_boot_mse_report[];
   tud_desc_set.hid_report.boot_mouse = _desc_auto_hid_boot_mse_report;
   #endif
@@ -332,6 +333,7 @@ static void usbd_reset(uint8_t rhport)
   extern uint8_t const _desc_auto_hid_generic_report[];
   tud_desc_set.hid_report.generic = _desc_auto_hid_generic_report;
   #endif
+#endif // CFG_TUD_HID
 
 #endif // CFG_TUD_DESC_AUTO
 

+ 26 - 25
src/device/usbd_desc.c

@@ -45,6 +45,10 @@
 
 #if CFG_TUD_DESC_AUTO
 
+//--------------------------------------------------------------------+
+// Auto Description Default Configure & Validation
+//--------------------------------------------------------------------+
+
 /*------------- VID/PID -------------*/
 #ifndef CFG_TUD_DESC_VID
 #define CFG_TUD_DESC_VID       0xCAFE
@@ -63,17 +67,20 @@
                                _PID_MAP(HID_KEYBOARD, 2) | _PID_MAP(HID_MOUSE, 3) | (TUD_OPT_HID_GENERIC << 4) )
 #endif
 
+//--------------------------------------------------------------------+
+// Interface & Endpoint mapping
+//--------------------------------------------------------------------+
+
 /*------------- Interface Numbering -------------*/
-/* The order as follows: CDC, MSC, HID
- * If a interface is not enabled, the later will take its place
- */
+/* The order as follows: CDC, MSC, Boot Keyboard, Boot Mouse, HID Generic
+ * If an interface is not enabled, the later will take its place */
 
 #define ITF_NUM_CDC             0
 #define ITF_NUM_MSC             (ITF_NUM_CDC + 2*CFG_TUD_CDC)
 
 #define ITF_NUM_HID_BOOT_KBD    (ITF_NUM_MSC + CFG_TUD_MSC)
-#define ITF_NUM_HID_BOOT_MSE    (ITF_NUM_HID_BOOT_KBD + CFG_TUD_DESC_BOOT_KEYBOARD)
-#define ITF_NUM_HID_GEN         (ITF_NUM_HID_BOOT_MSE + CFG_TUD_DESC_BOOT_MOUSE)
+#define ITF_NUM_HID_BOOT_MSE    (ITF_NUM_HID_BOOT_KBD + CFG_TUD_HID_KEYBOARD_BOOT)
+#define ITF_NUM_HID_GEN         (ITF_NUM_HID_BOOT_MSE + CFG_TUD_HID_MOUSE_BOOT)
 
 #define ITF_TOTAL               (ITF_NUM_HID_GEN + TUD_OPT_HID_GENERIC)
 
@@ -112,8 +119,6 @@
 
 
 /*------------- Keyboard Descriptor -------------*/
-#if CFG_TUD_HID_KEYBOARD
-
 #define HID_REPORT_KEYBOARD(...) \
   HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP     )                    ,\
   HID_USAGE      ( HID_USAGE_DESKTOP_KEYBOARD )                    ,\
@@ -154,14 +159,7 @@
       HID_OUTPUT       ( HID_CONSTANT                            ) ,\
   HID_COLLECTION_END \
 
-#if CFG_TUD_DESC_BOOT_KEYBOARD
-uint8_t const _desc_auto_hid_boot_kbd_report[] = { HID_REPORT_KEYBOARD() };
-#endif
-
-#endif // hid keyboard
-
 /*------------- Mouse Descriptor -------------*/
-#if CFG_TUD_HID_MOUSE
 #define HID_REPORT_MOUSE(...) \
   HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP      )                    ,\
   HID_USAGE      ( HID_USAGE_DESKTOP_MOUSE     )                    ,\
@@ -201,23 +199,26 @@ uint8_t const _desc_auto_hid_boot_kbd_report[] = { HID_REPORT_KEYBOARD() };
     HID_COLLECTION_END                                              ,\
   HID_COLLECTION_END \
 
-#if CFG_TUD_DESC_BOOT_MOUSE
-uint8_t const _desc_auto_hid_boot_mse_report[] = { HID_REPORT_MOUSE() };
-#endif
-
-#endif // hid mouse
 
 /*------------- Generic (composite) Descriptor -------------*/
+#if CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT
+uint8_t const _desc_auto_hid_boot_kbd_report[] = { HID_REPORT_KEYBOARD() };
+#endif
+
+#if CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
+uint8_t const _desc_auto_hid_boot_mse_report[] = { HID_REPORT_MOUSE() };
+#endif
 
 #if TUD_OPT_HID_GENERIC
 
+// TODO report ID
 uint8_t const _desc_auto_hid_generic_report[] =
 {
-#if !CFG_TUD_DESC_BOOT_KEYBOARD
+#if CFG_TUD_HID_KEYBOARD && !CFG_TUD_HID_KEYBOARD_BOOT
     HID_REPORT_KEYBOARD( HID_REPORT_ID(1), ),
 #endif
 
-#if !CFG_TUD_DESC_BOOT_MOUSE
+#if CFG_TUD_HID_MOUSE && !CFG_TUD_HID_MOUSE_BOOT
     HID_REPORT_MOUSE( HID_REPORT_ID(2), )
 #endif
 
@@ -309,7 +310,7 @@ typedef struct ATTR_PACKED
 #endif
 
   //------------- HID -------------//
-#if CFG_TUD_HID_KEYBOARD && CFG_TUD_DESC_BOOT_KEYBOARD
+#if CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT
   struct ATTR_PACKED
   {
     tusb_desc_interface_t             itf;
@@ -318,7 +319,7 @@ typedef struct ATTR_PACKED
   } hid_kbd_boot;
 #endif
 
-#if CFG_TUD_HID_MOUSE && CFG_TUD_DESC_BOOT_MOUSE
+#if CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
   struct ATTR_PACKED
   {
     tusb_desc_interface_t             itf;
@@ -513,7 +514,7 @@ desc_auto_cfg_t const _desc_auto_config_struct =
     },
 #endif // msc
 
-#if CFG_TUD_HID_KEYBOARD && CFG_TUD_DESC_BOOT_KEYBOARD
+#if CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT
     .hid_kbd_boot =
     {
         .itf =
@@ -553,7 +554,7 @@ desc_auto_cfg_t const _desc_auto_config_struct =
 #endif // boot keyboard
 
   //------------- HID Mouse -------------//
-#if CFG_TUD_HID_MOUSE && CFG_TUD_DESC_BOOT_MOUSE
+#if CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
     .hid_mse_boot =
     {
         .itf =

+ 4 - 4
src/tusb_option.h

@@ -171,9 +171,9 @@
     #define CFG_TUD_MSC          0
   #endif
 
-  // Generic (multiple) Report : Keyboard + Mouse + Gamepad + Joystick
-  #define TUD_OPT_HID_GENERIC    (CFG_TUD_HID && ( (CFG_TUD_HID_KEYBOARD && !CFG_TUD_DESC_BOOT_KEYBOARD) || \
-                                                 (CFG_TUD_HID_MOUSE && !CFG_TUD_DESC_BOOT_MOUSE) ))
+  // IF HID Generic is required, it is multiple Report : Keyboard + Mouse + Gamepad + Joystick
+  #define TUD_OPT_HID_GENERIC    ( (CFG_TUD_HID_KEYBOARD && !CFG_TUD_HID_KEYBOARD_BOOT) || \
+                                   (CFG_TUD_HID_MOUSE && !CFG_TUD_HID_MOUSE_BOOT) )
 
 #endif // TUSB_OPT_DEVICE_ENABLED
 
@@ -206,7 +206,7 @@
 
 
 //------------------------------------------------------------------
-// Config Verification
+// Configuration Validation
 //------------------------------------------------------------------
 
 #if (CFG_TUSB_OS != OPT_OS_NONE) && !defined (CFG_TUD_TASK_PRIO)