diff --git a/examples/device/nrf52840/src/tusb_config.h b/examples/device/nrf52840/src/tusb_config.h index 3b5ec360..9e6b0161 100644 --- a/examples/device/nrf52840/src/tusb_config.h +++ b/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 diff --git a/src/class/hid/hid_device.h b/src/class/hid/hid_device.h index 31d4a0c2..5f21878e 100644 --- a/src/class/hid/hid_device.h +++ b/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 diff --git a/src/common/tusb_error.h b/src/common/tusb_error.h index e7c7f69f..677fc44e 100644 --- a/src/common/tusb_error.h +++ b/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 diff --git a/src/device/usbd.c b/src/device/usbd.c index 7c302cc7..5f83728e 100644 --- a/src/device/usbd.c +++ b/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 diff --git a/src/device/usbd_desc.c b/src/device/usbd_desc.c index 8d309550..8f147aa6 100644 --- a/src/device/usbd_desc.c +++ b/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 + +/*------------- 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 -#endif // hid mouse - -/*------------- Generic (composite) Descriptor -------------*/ - #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 = diff --git a/src/tusb_option.h b/src/tusb_option.h index 4af327a5..f4f1389d 100644 --- a/src/tusb_option.h +++ b/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)