summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Vincent <jesse@fsck.com>2018-07-02 17:29:47 -0700
committerGitHub <noreply@github.com>2018-07-02 17:29:47 -0700
commit11676727a1e994724b0ca3d90c3e5643626497fb (patch)
tree00af88bfa8f7bbedd099eadddee077e50b005b9d
parentbcd694f40469e820e6876b421f9e009ba06ef5a6 (diff)
parentd9c5d7022f04d1362939de615910df8f9e18c2a8 (diff)
downloadmodel01-firmware-11676727a1e994724b0ca3d90c3e5643626497fb.tar.gz
model01-firmware-11676727a1e994724b0ca3d90c3e5643626497fb.tar.bz2
model01-firmware-11676727a1e994724b0ca3d90c3e5643626497fb.zip
Merge pull request #55 from keyboardio/f/usb-quirks
Add a way to toggle between Boot and NKRO mode manually
-rw-r--r--Model01-Firmware.ino47
1 files changed, 46 insertions, 1 deletions
diff --git a/Model01-Firmware.ino b/Model01-Firmware.ino
index eeef307..bc45ee3 100644
--- a/Model01-Firmware.ino
+++ b/Model01-Firmware.ino
@@ -59,6 +59,11 @@
// Support for host power management (suspend & wakeup)
#include "Kaleidoscope-HostPowerManagement.h"
+// Support for magic combos (key chrods that trigger an action)
+#include "Kaleidoscope-MagicCombo.h"
+
+// Support for USB quirks, like changing the key state report protocol
+#include "Kaleidoscope-USB-Quirks.h"
/** This 'enum' is a list of all the macros used by the Model 01's firmware
* The names aren't particularly important. What is important is that each
@@ -279,6 +284,35 @@ void hostPowerManagementEventHandler(kaleidoscope::HostPowerManagement::Event ev
toggleLedsOnSuspendResume(event);
}
+/** This 'enum' is a list of all the magic combos used by the Model 01's
+ * firmware The names aren't particularly important. What is important is that
+ * each is unique.
+ *
+ * These are the names of your magic combos. They will be used by the
+ * `USE_MAGIC_COMBOS` call below.
+ */
+enum {
+ // Toggle between Boot (6-key rollover; for BIOSes and early boot) and NKRO
+ // mode.
+ COMBO_TOGGLE_NKRO_MODE
+};
+
+/** A tiny wrapper, to be used by MagicCombo.
+ * This simply toggles the keyboard protocol via USBQuirks, and wraps it within
+ * a function with an unused argument, to match what MagicCombo expects.
+ */
+static void toggleKeyboardProtocol(uint8_t combo_index) {
+ USBQuirks.toggleKeyboardProtocol();
+}
+
+/** Magic combo list, a list of key combo and action pairs the firmware should
+ * recognise.
+ */
+USE_MAGIC_COMBOS({.action = toggleKeyboardProtocol,
+ // Left Fn + Esc + Shift
+ .keys = { R3C6, R2C6, R3C7 }
+ });
+
// First, tell Kaleidoscope which plugins you want to use.
// The order can be important. For example, LED effects are
// added in the order they're listed here.
@@ -332,7 +366,18 @@ KALEIDOSCOPE_INIT_PLUGINS(
// The HostPowerManagement plugin allows us to turn LEDs off when then host
// goes to sleep, and resume them when it wakes up.
- HostPowerManagement
+ HostPowerManagement,
+
+ // The MagicCombo plugin lets you use key combinations to trigger custom
+ // actions - a bit like Macros, but triggered by pressing multiple keys at the
+ // same time.
+ MagicCombo,
+
+ // The USBQuirks plugin lets you do some things with USB that we aren't
+ // comfortable - or able - to do automatically, but can be useful
+ // nevertheless. Such as toggling the key report protocol between Boot (used
+ // by BIOSes) and Report (NKRO).
+ USBQuirks
);
/** The 'setup' function is one of the two standard Arduino sketch functions.