summaryrefslogtreecommitdiff
path: root/users/narze/superduper.c
diff options
context:
space:
mode:
authorManassarn Manoonchai <manassarn@gmail.com>2019-09-07 22:06:30 +0700
committerDrashna Jaelre <drashna@live.com>2019-09-07 08:06:30 -0700
commitc21281c593d2eb9ef87053ef1d04d0b7d41be726 (patch)
tree22e7d04bd9f27e4bc481cf89791a0cf0ee4ef175 /users/narze/superduper.c
parent6ca29f2b9b02763aa3de607e8d08f14d5284918f (diff)
downloadqmk_firmware-c21281c593d2eb9ef87053ef1d04d0b7d41be726.tar.gz
qmk_firmware-c21281c593d2eb9ef87053ef1d04d0b7d41be726.zip
[Keymap] Add narze userspace (#6652)
* Refactor & reimplement mod tap macros * Reduce tapping term * Update readme * Add narze userspace * Make use of narze userspace * Extract Superduper mode * Refactor Superduper mode * (Ergodox Infinity) Prevent stuck modifiers * Update ergodox_infinity/narze likewise * Add warning for building Infinity with docker * Fix include eeprom.h in superduper * Try enabling superduper mode with combo for ergodox infinity * Apply suggestions on #4546 * Convert to 4 spaces * Map backlight step key * Replace PLAY_NOTE_ARRAY * Fix superduper toggle * Re enable audio in planck rev4 * Use perform_space_cadet * Remove superduper mod tap triggers * Add readme for planck light firmware flashing command * Remove unused layers * Remove unused keycodes * Add backlight toggle * Remove unused songs & use DEFAULT_LAYER_SONGS * Update readme * Move includes to header file
Diffstat (limited to 'users/narze/superduper.c')
-rw-r--r--users/narze/superduper.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/users/narze/superduper.c b/users/narze/superduper.c
new file mode 100644
index 0000000000..b497ce2e68
--- /dev/null
+++ b/users/narze/superduper.c
@@ -0,0 +1,66 @@
+#include "superduper.h"
+#include "eeconfig.h"
+#include "eeprom.h"
+#include "keymap_colemak.h"
+
+// SuperDuper
+
+#define SUPERDUPER_COMBO_COUNT 3
+#define EECONFIG_SUPERDUPER_INDEX (uint8_t *) 19
+
+enum process_combo_event {
+ CB_SUPERDUPER,
+};
+
+enum supported_layers {
+ _QWERTY,
+ _COLEMAK,
+ _QWOC
+};
+
+const uint16_t PROGMEM superduper_combos[SUPERDUPER_COMBO_COUNT][3] = {
+ [_QWERTY] = {KC_S, KC_D, COMBO_END},
+ [_COLEMAK] = {KC_R, KC_S, COMBO_END},
+ [_QWOC] = {CM_S, CM_D, COMBO_END},
+};
+
+combo_t key_combos[COMBO_COUNT] = {
+ [CB_SUPERDUPER] = COMBO_ACTION(superduper_combos[_QWERTY]),
+};
+
+volatile bool superduper_enabled = true;
+
+const uint16_t PROGMEM empty_combo[] = {COMBO_END};
+
+bool toggle_superduper_mode(void) {
+ superduper_enabled = !superduper_enabled;
+
+ if (superduper_enabled) {
+ set_superduper_key_combos();
+ } else {
+ clear_superduper_key_combos();
+ }
+
+ return superduper_enabled;
+}
+
+void set_superduper_key_combo_layer(uint16_t layer) {
+ key_combos[CB_SUPERDUPER].keys = superduper_combos[layer];
+ eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, layer);
+}
+
+void set_superduper_key_combos(void) {
+ uint8_t layer = eeprom_read_byte(EECONFIG_SUPERDUPER_INDEX);
+
+ switch (layer) {
+ case _QWERTY:
+ case _COLEMAK:
+ case _QWOC:
+ key_combos[CB_SUPERDUPER].keys = superduper_combos[layer];
+ break;
+ }
+}
+
+void clear_superduper_key_combos(void) {
+ key_combos[CB_SUPERDUPER].keys = empty_combo;
+}