From d60784e6cf7c5e3051c20cb7243a77ad4eb82be0 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sun, 17 Oct 2021 18:34:44 +0200 Subject: [PATCH] wip Signed-off-by: Gergely Nagy --- src/kaleidoscope/driver/hid/RCMComposite.cpp | 2 + src/kaleidoscope/driver/hid/RCMComposite.h | 16 +++- .../driver/hid/rcmcomposite/Keyboard.h | 78 ++++++++++++++++++- 3 files changed, 92 insertions(+), 4 deletions(-) diff --git a/src/kaleidoscope/driver/hid/RCMComposite.cpp b/src/kaleidoscope/driver/hid/RCMComposite.cpp index 7990b639..22302761 100644 --- a/src/kaleidoscope/driver/hid/RCMComposite.cpp +++ b/src/kaleidoscope/driver/hid/RCMComposite.cpp @@ -23,7 +23,9 @@ namespace hid { namespace rcmcomposite { USBHID RCMHID; +HIDKeyboard RCMBootKeyboard(RCMHID, 0); HIDKeyboard RCMKeyboard(RCMHID); +HIDConsumer RCMConsumer(RCMHID); USBCompositeSerial CompositeSerial; } // namespace rcmcomposite diff --git a/src/kaleidoscope/driver/hid/RCMComposite.h b/src/kaleidoscope/driver/hid/RCMComposite.h index 4653792a..2b601d34 100644 --- a/src/kaleidoscope/driver/hid/RCMComposite.h +++ b/src/kaleidoscope/driver/hid/RCMComposite.h @@ -31,8 +31,16 @@ namespace hid { namespace rcmcomposite { extern USBHID RCMHID; -extern HIDKeyboard RCMKeyboard; +extern HIDKeyboard RCMBootKeyboard; +extern HIDConsumer RCMConsumer; extern USBCompositeSerial CompositeSerial; + +const uint8_t report_description_[] = { + HID_BOOT_KEYBOARD_REPORT_DESCRIPTOR(), + HID_KEYBOARD_REPORT_DESCRIPTOR(2), + HID_CONSUMER_REPORT_DESCRIPTOR(3) +}; + } struct RCMCompositeProps: public BaseProps { @@ -46,8 +54,12 @@ template class RCMComposite: public Base<_Props> { public: void setup() { - rcmcomposite::RCMHID.begin(rcmcomposite::CompositeSerial, HID_KEYBOARD); + rcmcomposite::RCMHID.begin(rcmcomposite::CompositeSerial, + rcmcomposite::report_description_, + sizeof(rcmcomposite::report_description_)); while(!USBComposite); + + rcmcomposite::RCMBootKeyboard.begin(); } }; diff --git a/src/kaleidoscope/driver/hid/rcmcomposite/Keyboard.h b/src/kaleidoscope/driver/hid/rcmcomposite/Keyboard.h index 17d82e2d..9d16602c 100644 --- a/src/kaleidoscope/driver/hid/rcmcomposite/Keyboard.h +++ b/src/kaleidoscope/driver/hid/rcmcomposite/Keyboard.h @@ -27,8 +27,9 @@ namespace driver { namespace hid { namespace rcmcomposite { -extern USBHID RCMHID; +extern HIDKeyboard RCMBootKeyboard; extern HIDKeyboard RCMKeyboard; +extern HIDConsumer RCMConsumer; class BootKeyboardWrapper { public: @@ -42,6 +43,56 @@ class BootKeyboardWrapper { void setProtocol(uint8_t protocol) {} void setDefaultProtocol(uint8_t protocol) {} + void sendReport() { + RCMBootKeyboard.sendReport(); + } + + void press(uint8_t code) { + RCMBootKeyboard.press(code); + } + void release(uint8_t code) { + RCMBootKeyboard.release(code); + } + void releaseAll() { + RCMBootKeyboard.releaseAll(); + } + + bool isKeyPressed(uint8_t code) { + return RCMBootKeyboard.isKeyPressed(code); + } + bool wasKeyPressed(uint8_t code) { + return RCMBootKeyboard.wasKeyPressed(code); + } + bool isModifierActive(uint8_t code) { + return RCMBootKeyboard.isModifierActive(code); + } + bool wasModifierActive(uint8_t code) { + return RCMBootKeyboard.wasModifierActive(code); + } + bool isAnyModifierActive() { + return RCMBootKeyboard.isAnyModifierActive(); + } + bool wasAnyModifierActive() { + return RCMBootKeyboard.wasAnyModifierActive(); + } + + uint8_t getLeds() { + return RCMBootKeyboard.getLEDs(); + } +}; + +class SixKROKeyboardWrapper { + public: + SixKROKeyboardWrapper() {} + + void begin() {} + + uint8_t getProtocol() { + return 1; + } + void setProtocol(uint8_t protocol) {} + void setDefaultProtocol(uint8_t protocol) {} + void sendReport() { RCMKeyboard.sendReport(); } @@ -73,7 +124,6 @@ class BootKeyboardWrapper { } bool wasAnyModifierActive() { return RCMKeyboard.wasAnyModifierActive(); - return 0; } uint8_t getLeds() { @@ -81,8 +131,32 @@ class BootKeyboardWrapper { } }; +class ConsumerControlWrapper { + public: + ConsumerControlWrapper() {} + + void begin() { + RCMConsumer.begin(); + } + + void sendReport() { + } + void releaseAll() { + RCMConsumer.release(); + } + + void press(uint16_t code) { + RCMConsumer.press(code); + } + void release(uint16_t code) { + RCMConsumer.release(); + } +}; + struct KeyboardProps: public base::KeyboardProps { typedef BootKeyboardWrapper BootKeyboard; + typedef SixKROKeyboardWrapper NKROKeyboard; + typedef ConsumerControlWrapper ConsumerControl; }; template