]> git.donarmstrong.com Git - qmk_firmware.git/blob - users/narze/superduper.c
[GitHub] Update issue templates (#7303)
[qmk_firmware.git] / users / narze / superduper.c
1 #include "superduper.h"
2 #include "eeconfig.h"
3 #include "eeprom.h"
4 #include "keymap_colemak.h"
5
6 // SuperDuper
7
8 #define SUPERDUPER_COMBO_COUNT 3
9 #define EECONFIG_SUPERDUPER_INDEX (uint8_t *) 19
10
11 enum process_combo_event {
12     CB_SUPERDUPER,
13 };
14
15 enum supported_layers {
16     _QWERTY,
17     _COLEMAK,
18     _QWOC
19 };
20
21 const uint16_t PROGMEM superduper_combos[SUPERDUPER_COMBO_COUNT][3] = {
22     [_QWERTY] = {KC_S, KC_D, COMBO_END},
23     [_COLEMAK] = {KC_R, KC_S, COMBO_END},
24     [_QWOC] = {CM_S, CM_D, COMBO_END},
25 };
26
27 combo_t key_combos[COMBO_COUNT] = {
28     [CB_SUPERDUPER] = COMBO_ACTION(superduper_combos[_QWERTY]),
29 };
30
31 volatile bool superduper_enabled = true;
32
33 const uint16_t PROGMEM empty_combo[] = {COMBO_END};
34
35 bool toggle_superduper_mode(void) {
36     superduper_enabled = !superduper_enabled;
37
38     if (superduper_enabled) {
39         set_superduper_key_combos();
40     } else {
41         clear_superduper_key_combos();
42     }
43
44     return superduper_enabled;
45 }
46
47 void set_superduper_key_combo_layer(uint16_t layer) {
48     key_combos[CB_SUPERDUPER].keys = superduper_combos[layer];
49     eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, layer);
50 }
51
52 void set_superduper_key_combos(void) {
53     uint8_t layer = eeprom_read_byte(EECONFIG_SUPERDUPER_INDEX);
54
55     switch (layer) {
56         case _QWERTY:
57         case _COLEMAK:
58         case _QWOC:
59             key_combos[CB_SUPERDUPER].keys = superduper_combos[layer];
60             break;
61     }
62 }
63
64 void clear_superduper_key_combos(void) {
65     key_combos[CB_SUPERDUPER].keys = empty_combo;
66 }