From 8b17c5460950c425e17a055940e3a02cf6b29962 Mon Sep 17 00:00:00 2001 From: hathach Date: Sat, 28 Jul 2018 20:15:20 +0700 Subject: fix hid generic various error --- src/class/hid/hid.h | 4 ++-- src/class/hid/hid_device.c | 13 ++++++++----- src/class/hid/hid_device.h | 11 +++++++++++ 3 files changed, 21 insertions(+), 7 deletions(-) (limited to 'src/class') diff --git a/src/class/hid/hid.h b/src/class/hid/hid.h index 9872172a9..d2803177b 100644 --- a/src/class/hid/hid.h +++ b/src/class/hid/hid.h @@ -354,8 +354,8 @@ typedef enum #define RI_TYPE_LOCAL 2 //------------- MAIN ITEMS 6.2.2.4 -------------// -#define HID_INPUT(x) HID_REPORT_ITEM(x, 8, RI_TYPE_MAIN, 1) -#define HID_OUTPUT(x) HID_REPORT_ITEM(x, 9, RI_TYPE_MAIN, 1) +#define HID_INPUT(x) HID_REPORT_ITEM(x, 8, RI_TYPE_MAIN, 1) +#define HID_OUTPUT(x) HID_REPORT_ITEM(x, 9, RI_TYPE_MAIN, 1) #define HID_COLLECTION(x) HID_REPORT_ITEM(x, 10, RI_TYPE_MAIN, 1) #define HID_FEATURE(x) HID_REPORT_ITEM(x, 11, RI_TYPE_MAIN, 1) #define HID_COLLECTION_END HID_REPORT_ITEM(x, 12, RI_TYPE_MAIN, 0) diff --git a/src/class/hid/hid_device.c b/src/class/hid/hid_device.c index e0ed2e719..bf2cc75af 100644 --- a/src/class/hid/hid_device.c +++ b/src/class/hid/hid_device.c @@ -87,8 +87,9 @@ CFG_TUSB_ATTR_USBRAM static hidd_interface_t _hidd_itf; static inline hidd_interface_t* get_interface_by_itfnum(uint8_t itf_num) { - return ( itf_num == _kbd_itf.itf_num ) ? &_kbd_itf : - ( itf_num == _mse_itf.itf_num ) ? &_mse_itf : NULL; + return ( itf_num == _kbd_itf.itf_num ) ? &_kbd_itf : + ( itf_num == _mse_itf.itf_num ) ? &_mse_itf : + ( itf_num == _hidd_itf.itf_num ) ? &_hidd_itf : NULL; } @@ -333,17 +334,19 @@ tusb_error_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, u // TODO HID generic hidd_interface_t * p_hid = &_hidd_itf; + TU_ASSERT( dcd_edpt_open(rhport, desc_edpt), TUSB_ERROR_DCD_FAILED ); + p_hid->itf_num = desc_itf->bInterfaceNumber; p_hid->ep_in = desc_edpt->bEndpointAddress; // TODO parse report ID for keyboard, mouse p_hid->report_id = 0; - p_hid->report_len = 0; - p_hid->report_desc = NULL; + p_hid->report_len = desc_hid->wReportLength; + p_hid->report_desc = tud_desc_set.hid_report.generic; p_hid->get_report_cb = tud_hid_generic_get_report_cb; p_hid->set_report_cb = tud_hid_generic_set_report_cb; - return ERR_TUD_INVALID_DESCRIPTOR; + *p_len = sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + sizeof(tusb_desc_endpoint_t); } return TUSB_ERROR_NONE; diff --git a/src/class/hid/hid_device.h b/src/class/hid/hid_device.h index c78f56bb1..31d4a0c2f 100644 --- a/src/class/hid/hid_device.h +++ b/src/class/hid/hid_device.h @@ -47,6 +47,17 @@ extern "C" { #endif +//--------------------------------------------------------------------+ +// Class Driver Configuration +//--------------------------------------------------------------------+ +#if !CFG_TUD_HID_KEYBOARD && CFG_TUD_DESC_BOOT_KEYBOARD +#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 +#endif + //--------------------------------------------------------------------+ // HID GENERIC API -- cgit v1.3.1