From 84f81f6b213305207fa6d4d01ce6911f5ad3cf66 Mon Sep 17 00:00:00 2001 From: hathach Date: Wed, 1 May 2019 17:05:25 +0700 Subject: [PATCH] simplify hid keyboard & mouse report to one API each --- examples/device/cdc_msc_hid/src/main.c | 6 ++-- .../device/cdc_msc_hid_freertos/src/main.c | 6 ++-- src/class/hid/hid_device.c | 32 ++----------------- src/class/hid/hid_device.h | 32 ++++--------------- 4 files changed, 18 insertions(+), 58 deletions(-) diff --git a/examples/device/cdc_msc_hid/src/main.c b/examples/device/cdc_msc_hid/src/main.c index 8087adbb9..1a954f21a 100644 --- a/examples/device/cdc_msc_hid/src/main.c +++ b/examples/device/cdc_msc_hid/src/main.c @@ -196,7 +196,9 @@ void hid_task(void) if ( btn ) { int8_t const delta = 5; - tud_hid_mouse_move(REPORT_ID_MOUSE, delta, delta); // right + down + + // no button, right + down, no scroll pan + tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, delta, delta, 0, 0); // delay a bit before attempt to send keyboard report board_delay(2); @@ -220,7 +222,7 @@ void hid_task(void) }else { // send empty key report if previously has key pressed - if (has_key) tud_hid_keyboard_key_release(REPORT_ID_KEYBOARD); + if (has_key) tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL); has_key = false; } } diff --git a/examples/device/cdc_msc_hid_freertos/src/main.c b/examples/device/cdc_msc_hid_freertos/src/main.c index 2cd34dddc..e4471242f 100644 --- a/examples/device/cdc_msc_hid_freertos/src/main.c +++ b/examples/device/cdc_msc_hid_freertos/src/main.c @@ -226,7 +226,9 @@ void hid_task(void* params) if ( btn ) { int8_t const delta = 5; - tud_hid_mouse_move(REPORT_ID_MOUSE, delta, delta); // right + down + + // no button, right + down, no scroll pan + tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, delta, delta, 0, 0); // delay a bit before attempt to send keyboard report vTaskDelay(pdMS_TO_TICKS(2)); @@ -250,7 +252,7 @@ void hid_task(void* params) }else { // send empty key report if previously has key pressed - if (has_key) tud_hid_keyboard_key_release(REPORT_ID_KEYBOARD); + if (has_key) tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL); has_key = false; } } diff --git a/src/class/hid/hid_device.c b/src/class/hid/hid_device.c index 688aa7dea..46e26bd10 100644 --- a/src/class/hid/hid_device.c +++ b/src/class/hid/hid_device.c @@ -47,16 +47,11 @@ typedef struct { uint8_t itf_num; uint8_t ep_in; - uint8_t ep_out; // optional - - + uint8_t ep_out; // optional uint8_t boot_protocol; // Boot mouse or keyboard - bool boot_mode; - + bool boot_mode; // default = false (Report) + uint8_t idle_rate; // up to application to handle idle rate uint16_t reprot_desc_len; - uint8_t idle_rate; // Idle Rate = 0 : only send report if there is changes, i.e skip duplication - // Idle Rate > 0 : skip duplication, but send at least 1 report every idle rate (in unit of 4 ms). - uint8_t mouse_button; // caching button for using with tud_hid_mouse_ API CFG_TUSB_MEM_ALIGN uint8_t report_buf[CFG_TUD_HID_BUFSIZE]; }hidd_interface_t; @@ -101,7 +96,6 @@ bool tud_hid_report(uint8_t report_id, void const* report, uint8_t len) memcpy(p_hid->report_buf, report, len); } - // TODO skip duplication ? and or idle rate return dcd_edpt_xfer(TUD_OPT_RHPORT, p_hid->ep_in, p_hid->report_buf, len + (report_id ? 1 : 0) ); } @@ -128,7 +122,6 @@ bool tud_hid_keyboard_report(uint8_t report_id, uint8_t modifier, uint8_t keycod tu_memclr(report.keycode, 6); } - // TODO skip duplication ? and or idle rate return tud_hid_report(report_id, &report, sizeof(report)); } @@ -146,28 +139,9 @@ bool tud_hid_mouse_report(uint8_t report_id, uint8_t buttons, int8_t x, int8_t y .pan = horizontal }; - uint8_t itf = 0; - _hidd_itf[itf].mouse_button = buttons; - return tud_hid_report(report_id, &report, sizeof(report)); } -bool tud_hid_mouse_move(uint8_t report_id, int8_t x, int8_t y) -{ - uint8_t itf = 0; - uint8_t const button = _hidd_itf[itf].mouse_button; - - return tud_hid_mouse_report(report_id, button, x, y, 0, 0); -} - -bool tud_hid_mouse_scroll(uint8_t report_id, int8_t vertical, int8_t horizontal) -{ - uint8_t itf = 0; - uint8_t const button = _hidd_itf[itf].mouse_button; - - return tud_hid_mouse_report(report_id, button, 0, 0, vertical, horizontal); -} - //--------------------------------------------------------------------+ // USBD-CLASS API //--------------------------------------------------------------------+ diff --git a/src/class/hid/hid_device.h b/src/class/hid/hid_device.h index 95ff9825c..c93055f06 100644 --- a/src/class/hid/hid_device.h +++ b/src/class/hid/hid_device.h @@ -65,42 +65,24 @@ void tud_hid_set_report_cb(uint8_t report_id, hid_report_type_t report_type, uin // Invoked when host switch mode Boot <-> Report via SET_PROTOCOL request ATTR_WEAK void tud_hid_boot_mode_cb(uint8_t boot_mode); -// Invoked when host send SET_IDLE request -// return false will stall the request +// Invoked when host send SET_IDLE request. return false will stall the request +// - Idle Rate = 0 : only send report if there is changes, i.e skip duplication +// - Idle Rate > 0 : skip duplication, but send at least 1 report every idle rate (in unit of 4 ms). ATTR_WEAK bool tud_hid_set_idle_cb(uint8_t idle_rate); //--------------------------------------------------------------------+ -// KEYBOARD API -// Convenient helper to send keyboard report if application use standard/boot -// layout report as defined by hid_keyboard_report_t +// KEYBOARD: convenient helper to send keyboard report if application +// use template layout report as defined by hid_keyboard_report_t //--------------------------------------------------------------------+ bool tud_hid_keyboard_report(uint8_t report_id, uint8_t modifier, uint8_t keycode[6]); -static inline bool tud_hid_keyboard_key_release(uint8_t report_id) -{ - return tud_hid_keyboard_report(report_id, 0, NULL); -} - //--------------------------------------------------------------------+ -// MOUSE API -// Convenient helper to send mouse report if application use standard/boot -// layout report as defined by hid_mouse_report_t +// MOUSE: convenient helper to send mouse report if application +// use template layout report as defined by hid_mouse_report_t //--------------------------------------------------------------------+ bool tud_hid_mouse_report(uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal); -bool tud_hid_mouse_move(uint8_t report_id, int8_t x, int8_t y); -bool tud_hid_mouse_scroll(uint8_t report_id, int8_t vertical, int8_t horizontal); - -static inline bool tud_hid_mouse_button_press(uint8_t report_id, uint8_t buttons) -{ - return tud_hid_mouse_report(report_id, buttons, 0, 0, 0, 0); -} - -static inline bool tud_hid_mouse_button_release(uint8_t report_id) -{ - return tud_hid_mouse_report(report_id, 0, 0, 0, 0, 0); -} /* --------------------------------------------------------------------+ * HID Report Descriptor Template