diff --git a/src/BootKeyboard/BootKeyboard.cpp b/src/BootKeyboard/BootKeyboard.cpp index 3a2cd59b..ed307414 100644 --- a/src/BootKeyboard/BootKeyboard.cpp +++ b/src/BootKeyboard/BootKeyboard.cpp @@ -153,6 +153,11 @@ bool BootKeyboard_::setup(USBSetup& setup) { if (request == HID_GET_PROTOCOL) { // TODO improve #ifdef __AVR__ + // This is where the `protocol` variable is used to set...something, but I don't + // know what. With the change that I've made to use `boot_protocol_` instead, this + // would always be set to `HID_REPORT_PROTOCOL`, even when sending boot protocol + // reports (successfully). It doesn't seem correct, but it works on macOS and Linux + // (or at least, my old Ubuntu machine). UEDATX = protocol; #endif #ifdef ARDUINO_ARCH_SAM @@ -237,15 +242,29 @@ uint8_t BootKeyboard_::getLeds() { } uint8_t BootKeyboard_::getProtocol() { - return protocol; + if (boot_protocol_) { + return HID_BOOT_PROTOCOL; + } else { + return HID_REPORT_PROTOCOL; + } } void BootKeyboard_::setProtocol(uint8_t protocol) { - this->protocol = protocol; + if (protocol == HID_BOOT_PROTOCOL) { + boot_protocol_ = true; + } else { + boot_protocol_ = false; + } } int BootKeyboard_::sendReport() { if (memcmp(&last_report_, &report_, sizeof(report_))) { + Serial.print(F("sending boot report: ")); + for (byte i{0}; i < 8; ++i) { + Serial.print(F(" ")); + Serial.print(report_.bytes[i], HEX); + } + Serial.println(); // if the two reports are different, send a report int returnCode = USB_Send(pluggedEndpoint | TRANSFER_RELEASE, &report_, sizeof(report_)); HIDReportObserver::observeReport(HID_REPORTID_KEYBOARD, &report_, sizeof(report_), returnCode); diff --git a/src/BootKeyboard/BootKeyboard.h b/src/BootKeyboard/BootKeyboard.h index d7cfeadb..a81aff0b 100644 --- a/src/BootKeyboard/BootKeyboard.h +++ b/src/BootKeyboard/BootKeyboard.h @@ -76,6 +76,7 @@ class BootKeyboard_ : public PluggableUSBModule { EPTYPE_DESCRIPTOR_SIZE epType[1]; uint8_t protocol; + bool boot_protocol_{false}; uint8_t idle; uint8_t leds; diff --git a/src/MultiReport/Keyboard.cpp b/src/MultiReport/Keyboard.cpp index b776bc8a..5e63c7b1 100644 --- a/src/MultiReport/Keyboard.cpp +++ b/src/MultiReport/Keyboard.cpp @@ -95,6 +95,12 @@ void Keyboard_::end() { } int Keyboard_::sendReportUnchecked() { + Serial.print(F("sending nkro report:")); + for (byte i{0}; i < 29; ++i) { + Serial.print(F(" ")); + Serial.print(report_.allkeys[i], HEX); + } + Serial.println(); return HID().SendReport(HID_REPORTID_NKRO_KEYBOARD, &last_report_, sizeof(last_report_)); }