hid device enhance

This commit is contained in:
hathach 2018-07-29 14:03:48 +07:00
parent 8b17c54609
commit 683bb574e7
6 changed files with 54 additions and 43 deletions

View File

@ -78,13 +78,6 @@
// #define CFG_TUD_DESC_VID 0xCAFE // #define CFG_TUD_DESC_VID 0xCAFE
// #define CFG_TUD_DESC_PID 0x0001 // #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 -------------// //------------- CLASS -------------//
#define CFG_TUD_CDC 1 #define CFG_TUD_CDC 1
#define CFG_TUD_MSC 1 #define CFG_TUD_MSC 1
@ -93,6 +86,12 @@
#define CFG_TUD_HID_KEYBOARD 1 #define CFG_TUD_HID_KEYBOARD 1
#define CFG_TUD_HID_MOUSE 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 // CDC

View File

@ -48,14 +48,22 @@
#endif #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 #error CFG_TUD_HID_KEYBOARD must be enabled
#endif #endif
#if !CFG_TUD_HID_MOUSE && CFG_TUD_DESC_BOOT_MOUSE #if !CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
#error CFG_TUD_HID_MOUSE must be enabled #error CFG_TUD_HID_MOUSE must be enabled
#endif #endif

View File

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

View File

@ -318,12 +318,13 @@ static void usbd_reset(uint8_t rhport)
tud_desc_set.device = (uint8_t const*) &_desc_auto_device; tud_desc_set.device = (uint8_t const*) &_desc_auto_device;
tud_desc_set.config = _desc_auto_config; 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[]; extern uint8_t const _desc_auto_hid_boot_kbd_report[];
tud_desc_set.hid_report.boot_keyboard = _desc_auto_hid_boot_kbd_report; tud_desc_set.hid_report.boot_keyboard = _desc_auto_hid_boot_kbd_report;
#endif #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[]; extern uint8_t const _desc_auto_hid_boot_mse_report[];
tud_desc_set.hid_report.boot_mouse = _desc_auto_hid_boot_mse_report; tud_desc_set.hid_report.boot_mouse = _desc_auto_hid_boot_mse_report;
#endif #endif
@ -332,6 +333,7 @@ static void usbd_reset(uint8_t rhport)
extern uint8_t const _desc_auto_hid_generic_report[]; extern uint8_t const _desc_auto_hid_generic_report[];
tud_desc_set.hid_report.generic = _desc_auto_hid_generic_report; tud_desc_set.hid_report.generic = _desc_auto_hid_generic_report;
#endif #endif
#endif // CFG_TUD_HID
#endif // CFG_TUD_DESC_AUTO #endif // CFG_TUD_DESC_AUTO

View File

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

View File

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