summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Boichat <drinkcat@chromium.org>2020-12-08 18:00:01 +0800
committerCommit Bot <commit-bot@chromium.org>2020-12-24 05:12:13 +0000
commit725b94faf91e17855d23bf393a5ed9a818b8ab0a (patch)
tree6b2086419694be96fda6fc8a8926f1cc62fb726f
parenta063982f08517771437b5bb40979bf84c7671d67 (diff)
downloadchrome-ec-725b94faf91e17855d23bf393a5ed9a818b8ab0a.tar.gz
chip/stm32/usb_hid_keyboard: Implement HID GET_REPORT
Implement HID GET_REPORT with INPUT type. BRANCH=nocturne,kukui BUG=b:174539061 TEST=With associated kernel CL: cd /sys/bus/usb/drivers/usbhid echo 1-1.1:1.0 > unbind; echo 1-1.1:1.0 > bind Change-Id: If62c92e55fa5454116816681c2ab46d5e796c4b5 Signed-off-by: Nicolas Boichat <drinkcat@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2578620 Reviewed-by: Ting Shen <phoenixshen@chromium.org> (cherry picked from commit a3113149a50a82c38316d4813b41e5068ad17362) [kukui branch backport: No Vivaldi feature on kukui branch: resolve conflicts and add macros in usb_hid.h.] Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2600812
-rw-r--r--chip/stm32/usb_hid_keyboard.c13
-rw-r--r--include/usb_hid.h5
2 files changed, 18 insertions, 0 deletions
diff --git a/chip/stm32/usb_hid_keyboard.c b/chip/stm32/usb_hid_keyboard.c
index 7ca9aeb164..e55e8a432b 100644
--- a/chip/stm32/usb_hid_keyboard.c
+++ b/chip/stm32/usb_hid_keyboard.c
@@ -425,10 +425,23 @@ USB_DECLARE_EP(USB_EP_HID_KEYBOARD, hid_keyboard_tx,
#endif
hid_keyboard_event);
+static int hid_keyboard_get_report(uint8_t report_id, uint8_t report_type,
+ const uint8_t **buffer_ptr, int *buffer_size)
+{
+ if (report_type == REPORT_TYPE_INPUT) {
+ *buffer_ptr = (uint8_t *)&report;
+ *buffer_size = sizeof(report);
+ return 0;
+ }
+
+ return -1;
+}
+
static struct usb_hid_config_t hid_config_kb = {
.report_desc = report_desc,
.report_size = sizeof(report_desc),
.hid_desc = &hid_desc_kb,
+ .get_report = &hid_keyboard_get_report,
};
static int hid_keyboard_iface_request(usb_uint *ep0_buf_rx,
diff --git a/include/usb_hid.h b/include/usb_hid.h
index d8626b4dba..e7b1cfe74b 100644
--- a/include/usb_hid.h
+++ b/include/usb_hid.h
@@ -25,6 +25,11 @@
#define USB_HID_DT_REPORT (USB_TYPE_CLASS | 0x02)
#define USB_HID_DT_PHYSICAL (USB_TYPE_CLASS | 0x03)
+/* Pre-defined report types */
+#define REPORT_TYPE_INPUT 0x01
+#define REPORT_TYPE_OUTPUT 0x02
+#define REPORT_TYPE_FEATURE 0x03
+
struct usb_hid_class_descriptor {
uint8_t bDescriptorType;
uint16_t wDescriptorLength;