From ee2a83ed4003ccb6165eaff1098f397dc084486c Mon Sep 17 00:00:00 2001 From: Pete <41942933+PJ789@users.noreply.github.com> Date: Sun, 26 Dec 2021 15:14:45 +0100 Subject: [PATCH 1/6] Update HID.cpp --- libraries/HID/src/HID.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/libraries/HID/src/HID.cpp b/libraries/HID/src/HID.cpp index 3dd85fc10..66d36a99a 100644 --- a/libraries/HID/src/HID.cpp +++ b/libraries/HID/src/HID.cpp @@ -133,13 +133,21 @@ bool HID_::setup(USBSetup& setup) } if (request == HID_SET_REPORT) { - //uint8_t reportID = setup.wValueL; - //uint16_t length = setup.wLength; - //uint8_t data[length]; + uint8_t reportID = setup.wValueL; + uint16_t length = setup.wLength; + uint8_t data[length]; // Make sure to not read more data than USB_EP_SIZE. // You can read multiple times through a loop. // The first byte (may!) contain the reportID on a multreport. //USB_RecvControl(data, length); + if ((reportID == 2) && (length == 2)) + { + if (2 == USB_RecvControl(data, length)) + { + _keyboardLedsStatus = data[1]; + return true; + } + } } } From e192b6e0dbfd9efd843b93f3d1e26caf48f48752 Mon Sep 17 00:00:00 2001 From: Pete <41942933+PJ789@users.noreply.github.com> Date: Sun, 26 Dec 2021 15:16:29 +0100 Subject: [PATCH 2/6] Update HID.cpp --- libraries/HID/src/HID.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libraries/HID/src/HID.cpp b/libraries/HID/src/HID.cpp index 66d36a99a..ae9a926cb 100644 --- a/libraries/HID/src/HID.cpp +++ b/libraries/HID/src/HID.cpp @@ -154,6 +154,11 @@ bool HID_::setup(USBSetup& setup) return false; } +uint8_t HID_::getKeyboardLedsStatus(void) +{ + return _keyboardLedsStatus; +} + HID_::HID_(void) : PluggableUSBModule(1, 1, epType), rootNode(NULL), descriptorSize(0), protocol(HID_REPORT_PROTOCOL), idle(1) From dcdb012f25d311d90c2a967ba60449ee8b42e4a1 Mon Sep 17 00:00:00 2001 From: Pete <41942933+PJ789@users.noreply.github.com> Date: Sun, 26 Dec 2021 15:21:23 +0100 Subject: [PATCH 3/6] Update HID.h --- libraries/HID/src/HID.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/HID/src/HID.h b/libraries/HID/src/HID.h index 93c4bd5b4..e48e718db 100644 --- a/libraries/HID/src/HID.h +++ b/libraries/HID/src/HID.h @@ -95,6 +95,7 @@ class HID_ : public PluggableUSBModule int begin(void); int SendReport(uint8_t id, const void* data, int len); void AppendDescriptor(HIDSubDescriptor* node); + uint8_t getKeyboardLedsStatus(void); protected: // Implementation of the PluggableUSBModule @@ -111,6 +112,7 @@ class HID_ : public PluggableUSBModule uint8_t protocol; uint8_t idle; + uint8_t _keyboardLedsStatus; }; // Replacement for global singleton. From 26a9808eb1c22b7e3f5700504e890fd73027577b Mon Sep 17 00:00:00 2001 From: Pete <41942933+PJ789@users.noreply.github.com> Date: Mon, 27 Dec 2021 11:22:26 +0100 Subject: [PATCH 4/6] Added keybboard led status report callback Callback function avoids the need to poll for status changes. --- libraries/HID/src/HID.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libraries/HID/src/HID.cpp b/libraries/HID/src/HID.cpp index ae9a926cb..e7d77935f 100644 --- a/libraries/HID/src/HID.cpp +++ b/libraries/HID/src/HID.cpp @@ -145,6 +145,10 @@ bool HID_::setup(USBSetup& setup) if (2 == USB_RecvControl(data, length)) { _keyboardLedsStatus = data[1]; + if (keyboardLedsStatusReportCallback != 0) + { + keyboardLedsStatusReportCallback(); + } return true; } } @@ -159,12 +163,18 @@ uint8_t HID_::getKeyboardLedsStatus(void) return _keyboardLedsStatus; } +void HID_::setKeyboardLedsStatusReportCallback(void (*callback) (void) ) +{ + keyboardLedsStatusReportCallback = callback; +} + HID_::HID_(void) : PluggableUSBModule(1, 1, epType), rootNode(NULL), descriptorSize(0), protocol(HID_REPORT_PROTOCOL), idle(1) { epType[0] = EP_TYPE_INTERRUPT_IN; PluggableUSB().plug(this); + setKeyboardLedsStatusReportCallback( 0 ); } int HID_::begin(void) From 61ea246115b49f4c9050badcfd98ce79dc120347 Mon Sep 17 00:00:00 2001 From: Pete <41942933+PJ789@users.noreply.github.com> Date: Mon, 27 Dec 2021 11:24:14 +0100 Subject: [PATCH 5/6] Added keyboard led status report callback Avoids the need to continuously poll for changes to caps lock scroll lock num lock --- libraries/HID/src/HID.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/HID/src/HID.h b/libraries/HID/src/HID.h index e48e718db..b33e64625 100644 --- a/libraries/HID/src/HID.h +++ b/libraries/HID/src/HID.h @@ -96,7 +96,8 @@ class HID_ : public PluggableUSBModule int SendReport(uint8_t id, const void* data, int len); void AppendDescriptor(HIDSubDescriptor* node); uint8_t getKeyboardLedsStatus(void); - + void setKeyboardLedsStatusReportCallback(void (*callback) (void) ); + protected: // Implementation of the PluggableUSBModule int getInterface(uint8_t* interfaceCount); @@ -113,6 +114,7 @@ class HID_ : public PluggableUSBModule uint8_t protocol; uint8_t idle; uint8_t _keyboardLedsStatus; + void (*keyboardLedsStatusReportCallback) (void); }; // Replacement for global singleton. From fd8d12da0690c941e6b9640c29bee49a9658a5f4 Mon Sep 17 00:00:00 2001 From: Pete <41942933+PJ789@users.noreply.github.com> Date: Thu, 13 Jan 2022 13:31:44 +0100 Subject: [PATCH 6/6] Update HID.cpp --- libraries/HID/src/HID.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/HID/src/HID.cpp b/libraries/HID/src/HID.cpp index e7d77935f..b1bd1e8d8 100644 --- a/libraries/HID/src/HID.cpp +++ b/libraries/HID/src/HID.cpp @@ -174,7 +174,7 @@ HID_::HID_(void) : PluggableUSBModule(1, 1, epType), { epType[0] = EP_TYPE_INTERRUPT_IN; PluggableUSB().plug(this); - setKeyboardLedsStatusReportCallback( 0 ); + setKeyboardLedsStatusReportCallback( NULL ); } int HID_::begin(void)