diff options
-rw-r--r-- | keyboards/iris/keymaps/drashna/config.h | 59 | ||||
-rw-r--r-- | keyboards/iris/keymaps/drashna/keymap.c | 141 | ||||
-rw-r--r-- | keyboards/iris/keymaps/drashna/rules.mk | 11 | ||||
-rw-r--r-- | keyboards/orthodox/keymaps/drashna/README.md | 4 | ||||
-rw-r--r-- | keyboards/orthodox/keymaps/drashna/config.h | 9 | ||||
-rw-r--r-- | keyboards/orthodox/keymaps/drashna/keymap.c | 71 | ||||
-rw-r--r-- | keyboards/viterbi/keymaps/drashna/keymap.c | 2 | ||||
-rw-r--r-- | keyboards/viterbi/keymaps/drashna/rules.mk | 9 | ||||
-rw-r--r-- | layouts/community/ergodox/drashna/keymap.c | 30 | ||||
-rw-r--r-- | layouts/community/ergodox/drashna/rules.mk | 2 | ||||
-rw-r--r-- | quantum/process_keycode/process_clicky.c | 1 | ||||
-rw-r--r-- | users/drashna/config.h | 8 | ||||
-rw-r--r-- | users/drashna/drashna.c | 318 | ||||
-rw-r--r-- | users/drashna/drashna.h | 125 | ||||
-rw-r--r-- | users/drashna/drashna_unicode.h | 71 | ||||
-rw-r--r-- | users/drashna/readme.md | 28 |
16 files changed, 622 insertions, 267 deletions
diff --git a/keyboards/iris/keymaps/drashna/config.h b/keyboards/iris/keymaps/drashna/config.h new file mode 100644 index 000000000..2a451e7c7 --- /dev/null +++ b/keyboards/iris/keymaps/drashna/config.h | |||
@@ -0,0 +1,59 @@ | |||
1 | /* | ||
2 | Copyright 2017 Danny Nguyen <danny@keeb.io> | ||
3 | |||
4 | This program is free software: you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation, either version 2 of the License, or | ||
7 | (at your option) any later version. | ||
8 | |||
9 | This program is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
16 | */ | ||
17 | |||
18 | #ifndef CONFIG_USER_H | ||
19 | #define CONFIG_USER_H | ||
20 | |||
21 | #include "config_common.h" | ||
22 | |||
23 | /* Use I2C or Serial, not both */ | ||
24 | |||
25 | #define USE_SERIAL | ||
26 | #undef USE_I2C | ||
27 | |||
28 | /* Select hand configuration */ | ||
29 | |||
30 | // #define MASTER_LEFT | ||
31 | // #define MASTER_RIGHT | ||
32 | #define EE_HANDS | ||
33 | |||
34 | #ifdef RGBLIGHT_ENABLE | ||
35 | #undef RGBLED_NUM | ||
36 | #define RGBLED_NUM 16 // Number of LEDs | ||
37 | #define RGBLIGHT_ANIMATIONS | ||
38 | #define RGBLIGHT_HUE_STEP 12 | ||
39 | #define RGBLIGHT_SAT_STEP 12 | ||
40 | #define RGBLIGHT_VAL_STEP 12 | ||
41 | #define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 | ||
42 | #define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 | ||
43 | #define RGBLIGHT_EFFECT_BREATHE_CENTER 1 | ||
44 | #endif // RGBLIGHT_ENABLE | ||
45 | |||
46 | #ifdef AUDIO_ENABLE | ||
47 | #define C6_AUDIO | ||
48 | #ifdef RGBLIGHT_ENABLE | ||
49 | #define NO_MUSIC_MODE | ||
50 | #endif //RGBLIGHT_ENABLE | ||
51 | #endif //AUDIO_ENABLE | ||
52 | |||
53 | |||
54 | #undef PRODUCT | ||
55 | #ifdef KEYBOARD_iris_rev2 | ||
56 | #define PRODUCT Drashna Hacked Iris Rev.2 | ||
57 | #endif | ||
58 | |||
59 | #endif | ||
diff --git a/keyboards/iris/keymaps/drashna/keymap.c b/keyboards/iris/keymaps/drashna/keymap.c new file mode 100644 index 000000000..64d074fc9 --- /dev/null +++ b/keyboards/iris/keymaps/drashna/keymap.c | |||
@@ -0,0 +1,141 @@ | |||
1 | |||
2 | #include QMK_KEYBOARD_H | ||
3 | #include "drashna.h" | ||
4 | |||
5 | |||
6 | #define KC_ALAP ALT_T(KC_APP) | ||
7 | |||
8 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
9 | |||
10 | [_QWERTY] = LAYOUT_wrapper( | ||
11 | KC_GESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, | ||
12 | KC_TAB , _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSLS, | ||
13 | KC_C1R3, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, | ||
14 | KC_MLSF, _________________QWERTY_L3_________________, KC_ALAP, KC_LGUI, _________________QWERTY_R3_________________, KC_MRSF, | ||
15 | LOWER, KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE | ||
16 | ), | ||
17 | [_COLEMAK] = LAYOUT_wrapper( | ||
18 | KC_GESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, | ||
19 | KC_TAB , _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSLS, | ||
20 | KC_C1R3, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT, | ||
21 | KC_MLSF, _________________COLEMAK_L3________________, KC_ALAP, KC_LGUI, _________________COLEMAK_R3________________, KC_MRSF, | ||
22 | LOWER, KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE | ||
23 | ), | ||
24 | [_DVORAK] = LAYOUT_wrapper( | ||
25 | KC_GESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, | ||
26 | KC_TAB , _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSLS, | ||
27 | KC_C1R3, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_QUOT, | ||
28 | KC_MLSF, _________________DVORAK_L3_________________, KC_ALAP, KC_LGUI, _________________DVORAK_R3_________________, KC_MRSF, | ||
29 | LOWER, KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE | ||
30 | ), | ||
31 | [_WORKMAN] = LAYOUT_wrapper( | ||
32 | KC_GESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, | ||
33 | KC_TAB , _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, KC_BSLS, | ||
34 | KC_C1R3, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, | ||
35 | KC_MLSF, _________________WORKMAN_L3________________, KC_ALAP, KC_LGUI, _________________WORKMAN_R3________________, KC_MRSF, | ||
36 | LOWER, KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE | ||
37 | ), | ||
38 | |||
39 | [_MODS] = LAYOUT( | ||
40 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | ||
41 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | ||
42 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | ||
43 | KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | ||
44 | _______, _______, _______, _______, _______, _______ | ||
45 | ), | ||
46 | |||
47 | |||
48 | [_LOWER] = LAYOUT( | ||
49 | KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, | ||
50 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | ||
51 | KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_RBRC, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, | ||
52 | KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_LPRN, KC_RPRN, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, | ||
53 | _______, _______, KC_DEL, _______, _______, _______ | ||
54 | ), | ||
55 | |||
56 | [_RAISE] = LAYOUT( | ||
57 | KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, | ||
58 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | ||
59 | _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_UNDS, KC_EQL , KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, | ||
60 | _______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS, KC_END, _______, _______, _______, _______, | ||
61 | _______, _______, _______, _______, _______, _______ | ||
62 | ), | ||
63 | |||
64 | [_ADJUST] = LAYOUT( | ||
65 | KC_MAKE, KC_RST, EPRM, _______, _______, _______, _______, _______, _______, _______, _______, _______, | ||
66 | RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, | ||
67 | RGB_SMOD,RGB_HUI, CK_TOGG, AU_ON, AU_OFF, AG_NORM, AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS), | ||
68 | KC_RGB_T,RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, | ||
69 | _______, _______, _______, _______, _______, _______ | ||
70 | ) | ||
71 | |||
72 | }; | ||
73 | |||
74 | |||
75 | |||
76 | #ifdef INDICATOR_LIGHT | ||
77 | uint32_t layer_state_set_keymap (uint32_t state) { | ||
78 | uint8_t modifiders = get_mods(); | ||
79 | uint8_t led_usb_state = host_keyboard_leds(); | ||
80 | uint8_t one_shot = get_oneshot_mods(); | ||
81 | |||
82 | |||
83 | if (modifiders & MODS_SHIFT_MASK || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MODS_SHIFT_MASK) { | ||
84 | rgblight_sethsv_at(0, 255, 255, 5); | ||
85 | rgblight_sethsv_at(0, 255, 255, 10); | ||
86 | } | ||
87 | if (modifiders & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) { | ||
88 | rgblight_sethsv_at(51, 255, 255, 6); | ||
89 | rgblight_sethsv_at(51, 255, 255, 9); | ||
90 | } | ||
91 | if (modifiders & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) { | ||
92 | rgblight_sethsv_at(120, 255, 255, 7); | ||
93 | rgblight_sethsv_at(120, 255, 255, 8); | ||
94 | } | ||
95 | |||
96 | return state; | ||
97 | } | ||
98 | |||
99 | |||
100 | void matrix_scan_keymap (void) { | ||
101 | static uint8_t current_mods; | ||
102 | static uint8_t current_host_leds; | ||
103 | static uint8_t current_oneshot_mods; | ||
104 | static bool has_status_changed = true; | ||
105 | |||
106 | if ( current_mods != get_mods() || current_host_leds != host_keyboard_leds() || current_oneshot_mods != get_oneshot_mods()) { | ||
107 | has_status_changed = true; | ||
108 | current_mods = get_mods(); | ||
109 | current_host_leds = host_keyboard_leds(); | ||
110 | current_oneshot_mods = get_oneshot_mods(); | ||
111 | } | ||
112 | if (has_status_changed) { | ||
113 | has_status_changed = false; | ||
114 | |||
115 | if (current_mods & MODS_SHIFT_MASK || current_host_leds & (1<<USB_LED_CAPS_LOCK) || current_oneshot_mods & MODS_SHIFT_MASK) { | ||
116 | rgblight_sethsv_at(0, 255, 255, 5); | ||
117 | rgblight_sethsv_at(0, 255, 255, 10); | ||
118 | } else { | ||
119 | rgblight_sethsv_default_helper(5); | ||
120 | rgblight_sethsv_default_helper(10); | ||
121 | } | ||
122 | if (current_mods & MODS_CTRL_MASK || current_oneshot_mods & MODS_CTRL_MASK) { | ||
123 | rgblight_sethsv_at(51, 255, 255, 6); | ||
124 | rgblight_sethsv_at(51, 255, 255, 9); | ||
125 | } else { | ||
126 | rgblight_sethsv_default_helper(6); | ||
127 | rgblight_sethsv_default_helper(9); | ||
128 | } | ||
129 | if (current_mods & MODS_GUI_MASK || current_oneshot_mods & MODS_GUI_MASK) { | ||
130 | rgblight_sethsv_at(120, 255, 255, 7); | ||
131 | rgblight_sethsv_at(120, 255, 255, 8); | ||
132 | } else { | ||
133 | rgblight_sethsv_default_helper(7); | ||
134 | rgblight_sethsv_default_helper(8); | ||
135 | |||
136 | } | ||
137 | } | ||
138 | } | ||
139 | #endif | ||
140 | |||
141 | |||
diff --git a/keyboards/iris/keymaps/drashna/rules.mk b/keyboards/iris/keymaps/drashna/rules.mk new file mode 100644 index 000000000..0e49adf4a --- /dev/null +++ b/keyboards/iris/keymaps/drashna/rules.mk | |||
@@ -0,0 +1,11 @@ | |||
1 | BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) | ||
2 | MOUSEKEY_ENABLE = no # Mouse keys(+4700) | ||
3 | EXTRAKEY_ENABLE = yes # Audio control and System control(+450) | ||
4 | CONSOLE_ENABLE = no # Console for debug(+400) | ||
5 | COMMAND_ENABLE = no # Commands for debug and configuration | ||
6 | TAP_DANCE_ENABLE = no | ||
7 | RGBLIGHT_ENABLE = yes | ||
8 | AUDIO_ENABLE = yes | ||
9 | NKRO_ENABLE = yes | ||
10 | BACKLIGHT_ENABLE = no | ||
11 | |||
diff --git a/keyboards/orthodox/keymaps/drashna/README.md b/keyboards/orthodox/keymaps/drashna/README.md index c61161774..6c208d2c8 100644 --- a/keyboards/orthodox/keymaps/drashna/README.md +++ b/keyboards/orthodox/keymaps/drashna/README.md | |||
@@ -21,6 +21,4 @@ All layers have RGB specific indicators, so you can see what layer you're on by | |||
21 | Orthodox Specific Code | 21 | Orthodox Specific Code |
22 | ---------------------- | 22 | ---------------------- |
23 | 23 | ||
24 | Left side is designed to have RGB underglow and Faux Clicking enabled, while the right has Audio enabled. | 24 | Shift, Control and Alt all light up a specific RGB LED for a certain color, based on it's status, adding a visual indicator of OSMs or regular mods are held down. |
25 | |||
26 | The make commend ensures that the correct settings are retained. | ||
diff --git a/keyboards/orthodox/keymaps/drashna/config.h b/keyboards/orthodox/keymaps/drashna/config.h index f8a850394..1c3620616 100644 --- a/keyboards/orthodox/keymaps/drashna/config.h +++ b/keyboards/orthodox/keymaps/drashna/config.h | |||
@@ -59,8 +59,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
59 | 59 | ||
60 | #ifdef AUDIO_ENABLE | 60 | #ifdef AUDIO_ENABLE |
61 | #define C6_AUDIO | 61 | #define C6_AUDIO |
62 | #ifdef RGBLIGHT_ENABLE | ||
62 | #define NO_MUSIC_MODE | 63 | #define NO_MUSIC_MODE |
63 | #endif | 64 | #endif //RGBLIGHT_ENABLE |
65 | #endif //AUDIO_ENABLE | ||
64 | 66 | ||
65 | #undef PRODUCT | 67 | #undef PRODUCT |
66 | #ifdef KEYBOARD_orthodox_rev1 | 68 | #ifdef KEYBOARD_orthodox_rev1 |
@@ -69,4 +71,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
69 | #define PRODUCT Drashna Hacked Orthodox Rev.3 | 71 | #define PRODUCT Drashna Hacked Orthodox Rev.3 |
70 | #endif | 72 | #endif |
71 | 73 | ||
74 | #define QMK_ESC_OUTPUT D7 // usually COL | ||
75 | #define QMK_ESC_INPUT D4 // usually ROW | ||
76 | #define QMK_LED B0 | ||
77 | #define QMK_SPEAKER C6 | ||
78 | |||
72 | #endif | 79 | #endif |
diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c index ed5f32b98..fd10faa5e 100644 --- a/keyboards/orthodox/keymaps/drashna/keymap.c +++ b/keyboards/orthodox/keymaps/drashna/keymap.c | |||
@@ -32,7 +32,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
32 | #define _______ KC_TRNS | 32 | #define _______ KC_TRNS |
33 | #define XXXXXXX KC_NO | 33 | #define XXXXXXX KC_NO |
34 | 34 | ||
35 | #define MG_NKRO MAGIC_TOGGLE_NKRO | ||
36 | 35 | ||
37 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 36 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
38 | 37 | ||
@@ -67,21 +66,85 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
67 | [_LOWER] = LAYOUT(\ | 66 | [_LOWER] = LAYOUT(\ |
68 | KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, | 67 | KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, |
69 | KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_PGUP, KC_PGDN, KC_HOME, KC_END, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, | 68 | KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_PGUP, KC_PGDN, KC_HOME, KC_END, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, |
70 | KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, _______ | 69 | KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, _______ |
71 | ), | 70 | ), |
72 | 71 | ||
73 | [_RAISE] = LAYOUT(\ | 72 | [_RAISE] = LAYOUT(\ |
74 | KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, | 73 | KC_GRV, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_BSPC, |
75 | _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, | 74 | _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, |
76 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, _______ | 75 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, _______ |
77 | ), | 76 | ), |
78 | 77 | ||
79 | [_ADJUST] = LAYOUT(\ | 78 | [_ADJUST] = LAYOUT(\ |
80 | KC_MAKE,KC_RESET, EPRM, _______, _______, _______, _______, _______, _______, _______, _______, _______, | 79 | KC_MAKE,KC_RESET, EPRM, _______, _______, _______, _______, _______, _______, _______, _______, _______, |
81 | RGB_SMOD,RGB_HUI, CK_TOGG, AUD_ON, AUD_OFF, AG_NORM, _______, _______, _______, _______, AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS), | 80 | RGB_SMOD,RGB_HUI, CK_TOGG, AU_ON, AU_OFF, AG_NORM, _______, _______, _______, _______, AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS), |
82 | KC_RGB_T,RGB_HUD, MU_ON, MU_OFF, MU_TOG, MU_MOD, _______, _______, _______, _______, _______, _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY | 81 | KC_RGB_T,RGB_HUD, MU_ON, MU_OFF, MU_TOG, MU_MOD, _______, _______, _______, _______, _______, _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY |
83 | ) | 82 | ) |
84 | 83 | ||
85 | 84 | ||
86 | }; | 85 | }; |
87 | 86 | ||
87 | #ifdef RGBLIGHT_ENABLE | ||
88 | uint32_t layer_state_set_keymap (uint32_t state) { | ||
89 | uint8_t modifiders = get_mods(); | ||
90 | uint8_t led_usb_state = host_keyboard_leds(); | ||
91 | uint8_t one_shot = get_oneshot_mods(); | ||
92 | |||
93 | |||
94 | if (modifiders & MODS_SHIFT_MASK || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MODS_SHIFT_MASK) { | ||
95 | rgblight_sethsv_at(0, 255, 255, 5); | ||
96 | rgblight_sethsv_at(0, 255, 255, 10); | ||
97 | } | ||
98 | if (modifiders & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) { | ||
99 | rgblight_sethsv_at(51, 255, 255, 6); | ||
100 | rgblight_sethsv_at(51, 255, 255, 9); | ||
101 | } | ||
102 | if (modifiders & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) { | ||
103 | rgblight_sethsv_at(120, 255, 255, 7); | ||
104 | rgblight_sethsv_at(120, 255, 255, 8); | ||
105 | } | ||
106 | |||
107 | return state; | ||
108 | } | ||
109 | |||
110 | |||
111 | void matrix_scan_keymap (void) { | ||
112 | static uint8_t current_mods; | ||
113 | static uint8_t current_host_leds; | ||
114 | static uint8_t current_oneshot_mods; | ||
115 | static bool has_status_changed = true; | ||
116 | |||
117 | if ( current_mods != get_mods() || current_host_leds != host_keyboard_leds() || current_oneshot_mods != get_oneshot_mods()) { | ||
118 | has_status_changed = true; | ||
119 | current_mods = get_mods(); | ||
120 | current_host_leds = host_keyboard_leds(); | ||
121 | current_oneshot_mods = get_oneshot_mods(); | ||
122 | } | ||
123 | if (has_status_changed) { | ||
124 | has_status_changed = false; | ||
125 | |||
126 | if (current_mods & MODS_SHIFT_MASK || current_host_leds & (1<<USB_LED_CAPS_LOCK) || current_oneshot_mods & MODS_SHIFT_MASK) { | ||
127 | rgblight_sethsv_at(0, 255, 255, 5); | ||
128 | rgblight_sethsv_at(0, 255, 255, 10); | ||
129 | } else { | ||
130 | rgblight_sethsv_default_helper(5); | ||
131 | rgblight_sethsv_default_helper(10); | ||
132 | } | ||
133 | if (current_mods & MODS_CTRL_MASK || current_oneshot_mods & MODS_CTRL_MASK) { | ||
134 | rgblight_sethsv_at(51, 255, 255, 6); | ||
135 | rgblight_sethsv_at(51, 255, 255, 9); | ||
136 | } else { | ||
137 | rgblight_sethsv_default_helper(6); | ||
138 | rgblight_sethsv_default_helper(9); | ||
139 | } | ||
140 | if (current_mods & MODS_GUI_MASK || current_oneshot_mods & MODS_GUI_MASK) { | ||
141 | rgblight_sethsv_at(120, 255, 255, 7); | ||
142 | rgblight_sethsv_at(120, 255, 255, 8); | ||
143 | } else { | ||
144 | rgblight_sethsv_default_helper(7); | ||
145 | rgblight_sethsv_default_helper(8); | ||
146 | |||
147 | } | ||
148 | } | ||
149 | } | ||
150 | #endif | ||
diff --git a/keyboards/viterbi/keymaps/drashna/keymap.c b/keyboards/viterbi/keymaps/drashna/keymap.c index 78c60d1a6..09e8bc599 100644 --- a/keyboards/viterbi/keymaps/drashna/keymap.c +++ b/keyboards/viterbi/keymaps/drashna/keymap.c | |||
@@ -67,7 +67,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
67 | ), | 67 | ), |
68 | 68 | ||
69 | [_MEDIA] = LAYOUT_ortho_5x7( | 69 | [_MEDIA] = LAYOUT_ortho_5x7( |
70 | KC_MAKE, KC_RESET,MU_TOG, AUD_ON, AUD_OFF, CK_TOGG, RGB_SAD, | 70 | KC_MAKE, KC_RESET,MU_TOG, AU_ON, AU_OFF, CK_TOGG, RGB_SAD, |
71 | MEDIA, EPRM, KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI, | 71 | MEDIA, EPRM, KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI, |
72 | RGB_TOG, RGB_MOD, RGB_RMOD,RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_HUD, | 72 | RGB_TOG, RGB_MOD, RGB_RMOD,RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_HUD, |
73 | KC_MPLY, KC_MPRV, KC_MNXT, RGB_M_X, RGB_M_G, RGB_M_P, RGB_HUI, | 73 | KC_MPLY, KC_MPRV, KC_MNXT, RGB_M_X, RGB_M_G, RGB_M_P, RGB_HUI, |
diff --git a/keyboards/viterbi/keymaps/drashna/rules.mk b/keyboards/viterbi/keymaps/drashna/rules.mk index 4dc6bbdac..4b5596a53 100644 --- a/keyboards/viterbi/keymaps/drashna/rules.mk +++ b/keyboards/viterbi/keymaps/drashna/rules.mk | |||
@@ -8,5 +8,12 @@ RGBLIGHT_ENABLE = yes | |||
8 | AUDIO_ENABLE = yes | 8 | AUDIO_ENABLE = yes |
9 | NKRO_ENABLE = yes | 9 | NKRO_ENABLE = yes |
10 | 10 | ||
11 | CUSTOM_MATRIX = no | 11 | CUSTOM_LAYOUT = no |
12 | LAYOUTS = ortho_5x7 | 12 | LAYOUTS = ortho_5x7 |
13 | |||
14 | # SRC := $(filter-out serial.c matrix.c i2c.c split_util.c,$(SRC)) | ||
15 | # SRC := $(filter-out serial.c,$(SRC)) | ||
16 | # SRC := $(filter-out matrix.c,$(SRC)) | ||
17 | # SRC := $(filter-out i2c.c,$(SRC)) | ||
18 | # SRC := $(filter-out split_util.c,$(SRC)) | ||
19 | # SRC += quantum/matrix.c | ||
diff --git a/layouts/community/ergodox/drashna/keymap.c b/layouts/community/ergodox/drashna/keymap.c index 7ff103ed6..03fa67a7d 100644 --- a/layouts/community/ergodox/drashna/keymap.c +++ b/layouts/community/ergodox/drashna/keymap.c | |||
@@ -17,18 +17,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
17 | #include QMK_KEYBOARD_H | 17 | #include QMK_KEYBOARD_H |
18 | #include "drashna.h" | 18 | #include "drashna.h" |
19 | 19 | ||
20 | #ifdef UNICODEMAP_ENABLE | ||
21 | #include "drashna_unicode.h" | ||
22 | #endif // UNICODEMAP_ENABLE | ||
23 | |||
20 | 24 | ||
21 | 25 | ||
22 | //enum more_custom_keycodes { | 26 | //enum more_custom_keycodes { |
23 | // KC_P00 = NEW_SAFE_RANGE | 27 | // KC_P00 = NEW_SAFE_RANGE |
24 | //}; | 28 | //}; |
25 | 29 | ||
26 | |||
27 | //define layer change stuff for underglow indicator | 30 | //define layer change stuff for underglow indicator |
28 | bool skip_leds = false; | 31 | bool skip_leds = false; |
29 | 32 | ||
30 | 33 | ||
31 | #ifdef KEYBOARD_ergodox_ez | 34 | |
32 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 35 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
33 | /* Keymap 0: QWERTY Layer | 36 | /* Keymap 0: QWERTY Layer |
34 | * | 37 | * |
@@ -54,9 +57,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
54 | */ | 57 | */ |
55 | [_QWERTY] = LAYOUT_ergodox_pretty_wrapper( | 58 | [_QWERTY] = LAYOUT_ergodox_pretty_wrapper( |
56 | // left hand // right hand | 59 | // left hand // right hand |
57 | KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, | 60 | KC_EQL, ________________NUMBER_LEFT________________, OSL(_MOUS), OSL(_MOUS), ________________NUMBER_RIGHT_______________, KC_MINS, |
58 | KC_TAB, _________________QWERTY_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________QWERTY_R1_________________, KC_BSLS, | 61 | KC_TAB, _________________QWERTY_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________QWERTY_R1_________________, KC_BSLS, |
59 | SH_TT, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, | 62 | KC_C1R3, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, |
60 | KC_MLSF, _________________QWERTY_L3_________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________QWERTY_R3_________________, KC_MRSF, | 63 | KC_MLSF, _________________QWERTY_L3_________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________QWERTY_R3_________________, KC_MRSF, |
61 | LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), | 64 | LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), |
62 | __________________ERGODOX_THUMB_CLUSTER_____________________ | 65 | __________________ERGODOX_THUMB_CLUSTER_____________________ |
@@ -88,7 +91,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
88 | // left hand // right hand | 91 | // left hand // right hand |
89 | KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, | 92 | KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, |
90 | KC_TAB, _________________COLEMAK_L1________________, TG(_DIABLO), TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS, | 93 | KC_TAB, _________________COLEMAK_L1________________, TG(_DIABLO), TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS, |
91 | SH_TT, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT, | 94 | KC_C1R3, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT, |
92 | KC_MLSF, _________________COLEMAK_L3________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________COLEMAK_R3________________, KC_MRSF, | 95 | KC_MLSF, _________________COLEMAK_L3________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________COLEMAK_R3________________, KC_MRSF, |
93 | LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), | 96 | LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), |
94 | __________________ERGODOX_THUMB_CLUSTER_____________________ | 97 | __________________ERGODOX_THUMB_CLUSTER_____________________ |
@@ -120,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
120 | // left hand // right hand | 123 | // left hand // right hand |
121 | KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, | 124 | KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, |
122 | KC_TAB, _________________DVORAK_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH, | 125 | KC_TAB, _________________DVORAK_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH, |
123 | SH_TT, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_MINS, | 126 | KC_C1R3, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_MINS, |
124 | KC_MLSF, _________________DVORAK_L3_________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________DVORAK_R3_________________, KC_MRSF, | 127 | KC_MLSF, _________________DVORAK_L3_________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________DVORAK_R3_________________, KC_MRSF, |
125 | LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), | 128 | LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), |
126 | __________________ERGODOX_THUMB_CLUSTER_____________________ | 129 | __________________ERGODOX_THUMB_CLUSTER_____________________ |
@@ -152,7 +155,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
152 | // left hand | 155 | // left hand |
153 | KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, | 156 | KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, |
154 | KC_TAB, _________________WORKMAN_L1________________, TG(_DIABLO), TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS, | 157 | KC_TAB, _________________WORKMAN_L1________________, TG(_DIABLO), TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS, |
155 | SH_TT, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, | 158 | KC_C1R3, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, |
156 | KC_MLSF, _________________WORKMAN_L3________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________WORKMAN_R3________________, KC_MRSF, | 159 | KC_MLSF, _________________WORKMAN_L3________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________WORKMAN_R3________________, KC_MRSF, |
157 | LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), | 160 | LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), |
158 | __________________ERGODOX_THUMB_CLUSTER_____________________ | 161 | __________________ERGODOX_THUMB_CLUSTER_____________________ |
@@ -299,19 +302,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
299 | ), | 302 | ), |
300 | 303 | ||
301 | }; | 304 | }; |
302 | #else // KEYBOARD_ergodox_ez | ||
303 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
304 | [_QWERTY] = LAYOUT_ergodox_wrapper(KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), KC_TAB, _________________QWERTY_L1_________________, TG(_DIABLO), KC_BSPC, _________________QWERTY_L2_________________, KC_MLSF, _________________QWERTY_L3_________________, TG(_GAMEPAD), LT(_SYMB, KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ALT_T(KC_APP), KC_LGUI, KC_HOME, KC_SPACE, KC_BSPC, KC_END, OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(_DIABLO), _________________QWERTY_R1_________________, KC_BSLS, _________________QWERTY_R2_________________, GUI_T(KC_QUOT), TG(_GAMEPAD), _________________QWERTY_R3_________________, KC_MRSF, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), KC_RGUI, CTL_T(KC_ESCAPE), KC_PGUP, KC_PGDOWN, KC_DELETE, KC_ENTER), | ||
305 | [_COLEMAK] = LAYOUT_ergodox_wrapper(KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), KC_TAB, _________________COLEMAK_L1________________, TG(_DIABLO), KC_BSPC, _________________COLEMAK_L2________________, KC_MLSF, _________________COLEMAK_L3________________, TG(_GAMEPAD), LT(_SYMB, KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ALT_T(KC_APP), KC_LGUI, KC_HOME, KC_SPACE, KC_BSPC, KC_END, OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS, _________________COLEMAK_R2________________, GUI_T(KC_QUOT), TG(_GAMEPAD), _________________COLEMAK_R3________________, KC_MRSF, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), KC_RGUI, CTL_T(KC_ESCAPE), KC_PGUP, KC_PGDOWN, KC_DELETE, KC_ENTER), | ||
306 | [_DVORAK] = LAYOUT_ergodox_wrapper(KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), KC_TAB, _________________DVORAK_L1_________________, TG(_DIABLO), KC_BSPC, _________________DVORAK_L2_________________, KC_MLSF, _________________DVORAK_L3_________________, TG(_GAMEPAD), LT(_SYMB, KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ALT_T(KC_APP), KC_LGUI, KC_HOME, KC_SPACE, KC_BSPC, KC_END, OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH, _________________DVORAK_R2_________________, GUI_T(KC_MINS), TG(_GAMEPAD), _________________DVORAK_R3_________________, KC_MRSF, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), KC_RGUI, CTL_T(KC_ESCAPE), KC_PGUP, KC_PGDOWN, KC_DELETE, KC_ENTER), | ||
307 | [_WORKMAN] = LAYOUT_ergodox_wrapper(KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), KC_TAB, _________________WORKMAN_L1________________, TG(_DIABLO), KC_BSPC, _________________WORKMAN_L2________________, KC_MLSF, _________________WORKMAN_L3________________, TG(_GAMEPAD), LT(_SYMB, KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ALT_T(KC_APP), KC_LGUI, KC_HOME, KC_SPACE, KC_BSPC, KC_END, OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS, _________________WORKMAN_R2________________, GUI_T(KC_QUOT), TG(_GAMEPAD), _________________WORKMAN_R3________________, KC_MRSF, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), KC_RGUI, CTL_T(KC_ESCAPE), KC_PGUP, KC_PGDOWN, KC_DELETE, KC_ENTER), | ||
308 | [_MODS] = LAYOUT_ergodox(KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||
309 | [_SYMB] = LAYOUT_ergodox(EPRM, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, TG(_MODS), KC_RESET, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_WORKMAN, KC_MAKE, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE, VRSN, KC_PERC, KC_CIRC, KC_LBRACKET, KC_RBRACKET, KC_TILD, KC_COLEMAK, KC_TRNS, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON, RGB_SMOD, KC_RGB_T, RGB_HUI, RGB_M_R, RGB_M_SW, RGB_HUD, KC_QWERTY, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_DVORAK, KC_KP_PLUS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_ASTERISK, KC_F12, KC_KP_MINUS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH, KC_PSCREEN, KC_COLEMAK, KC_NUMLOCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, KC_PAUSE, KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_DOT, KC_KP_0, KC_KP_ENTER), | ||
310 | [_GAMEPAD] = LAYOUT_ergodox(KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, HYPR(KC_D), HYPR(KC_Q), HYPR(KC_GRV), KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, KC_I, KC_O, KC_NO, KC_NO, KC_NO, KC_NO, KC_LCTL, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_TRNS, TG(_GAMEPAD), KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO, KC_GRV, KC_U, KC_I, KC_Y, KC_T, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_O, KC_P, KC_HYPR, MAGIC_TOGGLE_NKRO, KC_LGUI, KC_NO, KC_V, KC_SPC, KC_H, KC_PGDN, KC_DEL, KC_ENTER), | ||
311 | [_DIABLO] = LAYOUT_ergodox(KC_ESC, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_TAB, KC_S, KC_I, KC_F, KC_M, KC_T, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z, KC_NO, KC_NO, KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_L, KC_J, KC_NO, KC_NO, KC_F, KC_NO, SFT_T(KC_SPACE), ALT_T(KC_Q), KC_DIABLO_CLEAR, KC_PGDN, KC_DEL, KC_ENT), | ||
312 | [_MOUS] = LAYOUT_ergodox(KC_NO, KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO, KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_NO, KC_NO, KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_U, KC_NO, KC_BTN1, KC_BTN2, KC_WH_D, KC_BTN3, KC_BTN4, KC_BTN5), | ||
313 | }; | ||
314 | #endif // KEYBOARD_ergodox_ez | ||
315 | 305 | ||
316 | bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | 306 | bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { |
317 | 307 | ||
diff --git a/layouts/community/ergodox/drashna/rules.mk b/layouts/community/ergodox/drashna/rules.mk index 536d5308a..e5bf2d4b3 100644 --- a/layouts/community/ergodox/drashna/rules.mk +++ b/layouts/community/ergodox/drashna/rules.mk | |||
@@ -7,3 +7,5 @@ endif | |||
7 | CONSOLE_ENABLE = no | 7 | CONSOLE_ENABLE = no |
8 | BOOTMAGIC_ENABLE = yes | 8 | BOOTMAGIC_ENABLE = yes |
9 | 9 | ||
10 | UNICODE_ENABLE = no | ||
11 | UNICDOEMAP_ENABLE = yes | ||
diff --git a/quantum/process_keycode/process_clicky.c b/quantum/process_keycode/process_clicky.c index f445751e0..1e950d111 100644 --- a/quantum/process_keycode/process_clicky.c +++ b/quantum/process_keycode/process_clicky.c | |||
@@ -62,7 +62,6 @@ bool process_clicky(uint16_t keycode, keyrecord_t *record) { | |||
62 | 62 | ||
63 | if ( clicky_enable ) { | 63 | if ( clicky_enable ) { |
64 | if (record->event.pressed) { | 64 | if (record->event.pressed) { |
65 | stop_all_notes(); | ||
66 | clicky_play();; | 65 | clicky_play();; |
67 | } | 66 | } |
68 | } | 67 | } |
diff --git a/users/drashna/config.h b/users/drashna/config.h index e48f72355..0a59ad026 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h | |||
@@ -58,10 +58,16 @@ | |||
58 | 58 | ||
59 | // Disable action_get_macro and fn_actions, since we don't use these | 59 | // Disable action_get_macro and fn_actions, since we don't use these |
60 | // and it saves on space in the firmware. | 60 | // and it saves on space in the firmware. |
61 | #ifndef NO_DEBUG | ||
62 | #define NO_DEBUG | ||
63 | #endif // !NO_DEBUG | ||
64 | #ifndef NO_PRINT | ||
65 | #define NO_PRINT | ||
66 | #endif // !NO_PRINT | ||
61 | #define NO_ACTION_MACRO | 67 | #define NO_ACTION_MACRO |
62 | #define NO_ACTION_FUNCTION | 68 | #define NO_ACTION_FUNCTION |
63 | 69 | ||
64 | 70 | #define DISABLE_LEADER | |
65 | 71 | ||
66 | #endif // !USERSPACE_CONFIG_H | 72 | #endif // !USERSPACE_CONFIG_H |
67 | 73 | ||
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index d9d412b08..86c16b826 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c | |||
@@ -33,35 +33,52 @@ PROGMEM const char secret[][64] = { | |||
33 | #endif | 33 | #endif |
34 | 34 | ||
35 | 35 | ||
36 | #ifdef FAUXCLICKY_ENABLE | ||
37 | float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_A6, 2); // (_D4, 0.25); | ||
38 | float fauxclicky_released_note[2] = MUSICAL_NOTE(_A6, 2); // (_C4, 0.125); | ||
39 | #else // FAUXCLICKY_ENABLE | ||
40 | float fauxclicky_pressed[][2] = SONG(S__NOTE(_A6)); // change to your tastes | ||
41 | float fauxclicky_released[][2] = SONG(S__NOTE(_A6)); // change to your tastes | ||
42 | #endif // FAUXCLICKY_ENABLE | ||
43 | |||
44 | float tone_copy[][2] = SONG(SCROLL_LOCK_ON_SOUND); | 36 | float tone_copy[][2] = SONG(SCROLL_LOCK_ON_SOUND); |
45 | float tone_paste[][2] = SONG(SCROLL_LOCK_OFF_SOUND); | 37 | float tone_paste[][2] = SONG(SCROLL_LOCK_OFF_SOUND); |
46 | 38 | ||
47 | 39 | ||
48 | bool faux_click_enabled = false; | ||
49 | bool is_overwatch = false; | ||
50 | static uint16_t copy_paste_timer; | 40 | static uint16_t copy_paste_timer; |
51 | #ifdef RGBLIGHT_ENABLE | 41 | #ifdef RGBLIGHT_ENABLE |
52 | bool rgb_layer_change = true; | 42 | bool rgb_layer_change = true; |
53 | #endif | 43 | #endif |
54 | 44 | ||
45 | userspace_config_t userspace_config; | ||
46 | |||
47 | // Helper Functions | ||
48 | void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); }; | ||
49 | |||
50 | #ifdef RGBLIGHT_ENABLE | ||
51 | void rgblight_sethsv_default_helper(uint8_t index) { | ||
52 | uint8_t default_layer = eeconfig_read_default_layer(); | ||
53 | if (default_layer & (1UL << _COLEMAK)) { | ||
54 | rgblight_sethsv_at(300, 255, 255, index); | ||
55 | rgblight_sethsv_at(300, 255, 255, index); | ||
56 | } | ||
57 | else if (default_layer & (1UL << _DVORAK)) { | ||
58 | rgblight_sethsv_at(120, 255, 255, index); | ||
59 | rgblight_sethsv_at(120, 255, 255, index); | ||
60 | } | ||
61 | else if (default_layer & (1UL << _WORKMAN)) { | ||
62 | rgblight_sethsv_at(43, 255, 255, index); | ||
63 | rgblight_sethsv_at(43, 255, 255, index); | ||
64 | } | ||
65 | else { | ||
66 | rgblight_sethsv_at(180, 255, 255, index); | ||
67 | rgblight_sethsv_at(180, 255, 255, index); | ||
68 | } | ||
69 | } | ||
70 | #endif // RGBLIGHT_ENABLE | ||
71 | |||
72 | |||
73 | // ========================================= TAP DANCE ========================================= | ||
55 | #ifdef TAP_DANCE_ENABLE | 74 | #ifdef TAP_DANCE_ENABLE |
56 | //define diablo macro timer variables | 75 | //define diablo macro timer variables |
57 | static uint16_t diablo_timer[4]; | 76 | static uint16_t diablo_timer[4]; |
58 | static uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 }; | 77 | static uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 }; |
59 | static uint8_t diablo_key_time[4]; | 78 | static uint8_t diablo_key_time[4]; |
60 | 79 | ||
61 | bool check_dtimer(uint8_t dtimer) { | 80 | // has the correct number of seconds elapsed (as defined by diablo_times) |
62 | // has the correct number of seconds elapsed (as defined by diablo_times) | 81 | bool check_dtimer(uint8_t dtimer) { return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; }; |
63 | return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; | ||
64 | }; | ||
65 | 82 | ||
66 | // Cycle through the times for the macro, starting at 0, for disabled. | 83 | // Cycle through the times for the macro, starting at 0, for disabled. |
67 | // Max of six values, so don't exceed | 84 | // Max of six values, so don't exceed |
@@ -69,25 +86,16 @@ void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_ | |||
69 | if (state->count >= 7) { | 86 | if (state->count >= 7) { |
70 | diablo_key_time[diablo_key] = diablo_times[0]; | 87 | diablo_key_time[diablo_key] = diablo_times[0]; |
71 | reset_tap_dance(state); | 88 | reset_tap_dance(state); |
72 | } | 89 | } else { |
73 | else { | ||
74 | diablo_key_time[diablo_key] = diablo_times[state->count - 1]; | 90 | diablo_key_time[diablo_key] = diablo_times[state->count - 1]; |
75 | } | 91 | } |
76 | } | 92 | } |
77 | 93 | ||
78 | // Would rather have one function for all of this, but no idea how to do that... | 94 | // Would rather have one function for all of this, but no idea how to do that... |
79 | void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { | 95 | void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 0); } |
80 | diablo_tapdance_master(state, user_data, 0); | 96 | void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 1); } |
81 | } | 97 | void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 2); } |
82 | void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { | 98 | void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 3); } |
83 | diablo_tapdance_master(state, user_data, 1); | ||
84 | } | ||
85 | void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { | ||
86 | diablo_tapdance_master(state, user_data, 2); | ||
87 | } | ||
88 | void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { | ||
89 | diablo_tapdance_master(state, user_data, 3); | ||
90 | } | ||
91 | 99 | ||
92 | //Tap Dance Definitions | 100 | //Tap Dance Definitions |
93 | qk_tap_dance_action_t tap_dance_actions[] = { | 101 | qk_tap_dance_action_t tap_dance_actions[] = { |
@@ -96,7 +104,6 @@ qk_tap_dance_action_t tap_dance_actions[] = { | |||
96 | [TD_D3_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2), | 104 | [TD_D3_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2), |
97 | [TD_D3_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3), | 105 | [TD_D3_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3), |
98 | [TD_D3_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4), | 106 | [TD_D3_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4), |
99 | |||
100 | }; | 107 | }; |
101 | 108 | ||
102 | // Sends the key press to system, but only if on the Diablo layer | 109 | // Sends the key press to system, but only if on the Diablo layer |
@@ -104,17 +111,13 @@ void send_diablo_keystroke(uint8_t diablo_key) { | |||
104 | if (biton32(layer_state) == _DIABLO) { | 111 | if (biton32(layer_state) == _DIABLO) { |
105 | switch (diablo_key) { | 112 | switch (diablo_key) { |
106 | case 0: | 113 | case 0: |
107 | SEND_STRING("1"); | 114 | tap(KC_1); break; |
108 | break; | ||
109 | case 1: | 115 | case 1: |
110 | SEND_STRING("2"); | 116 | tap(KC_2); break; |
111 | break; | ||
112 | case 2: | 117 | case 2: |
113 | SEND_STRING("3"); | 118 | tap(KC_3); break; |
114 | break; | ||
115 | case 3: | 119 | case 3: |
116 | SEND_STRING("4"); | 120 | tap(KC_4); break; |
117 | break; | ||
118 | } | 121 | } |
119 | } | 122 | } |
120 | } | 123 | } |
@@ -123,7 +126,6 @@ void send_diablo_keystroke(uint8_t diablo_key) { | |||
123 | // Runs the "send string" command if enough time has passed, and resets the timer. | 126 | // Runs the "send string" command if enough time has passed, and resets the timer. |
124 | void run_diablo_macro_check(void) { | 127 | void run_diablo_macro_check(void) { |
125 | uint8_t dtime; | 128 | uint8_t dtime; |
126 | |||
127 | for (dtime = 0; dtime < 4; dtime++) { | 129 | for (dtime = 0; dtime < 4; dtime++) { |
128 | if (check_dtimer(dtime) && diablo_key_time[dtime]) { | 130 | if (check_dtimer(dtime) && diablo_key_time[dtime]) { |
129 | diablo_timer[dtime] = timer_read(); | 131 | diablo_timer[dtime] = timer_read(); |
@@ -131,7 +133,6 @@ void run_diablo_macro_check(void) { | |||
131 | } | 133 | } |
132 | } | 134 | } |
133 | } | 135 | } |
134 | |||
135 | #endif // TAP_DANCE_ENABLE | 136 | #endif // TAP_DANCE_ENABLE |
136 | 137 | ||
137 | 138 | ||
@@ -162,31 +163,32 @@ void led_set_keymap(uint8_t usb_led) {} | |||
162 | // Call user matrix init, set default RGB colors and then | 163 | // Call user matrix init, set default RGB colors and then |
163 | // call the keymap's init function | 164 | // call the keymap's init function |
164 | void matrix_init_user(void) { | 165 | void matrix_init_user(void) { |
165 | #ifdef RGBLIGHT_ENABLE | ||
166 | uint8_t default_layer = eeconfig_read_default_layer(); | 166 | uint8_t default_layer = eeconfig_read_default_layer(); |
167 | 167 | ||
168 | #ifdef RGBLIGHT_ENABLE | ||
168 | rgblight_enable(); | 169 | rgblight_enable(); |
170 | #endif // RGBLIGHT_ENABLE | ||
169 | 171 | ||
170 | if (true) { | 172 | if (default_layer & (1UL << _COLEMAK)) { |
171 | if (default_layer & (1UL << _COLEMAK)) { | 173 | #ifdef RGBLIGHT_ENABLE |
172 | rgblight_sethsv_magenta(); | 174 | rgblight_sethsv_magenta(); |
173 | } | ||
174 | else if (default_layer & (1UL << _DVORAK)) { | ||
175 | rgblight_sethsv_green(); | ||
176 | } | ||
177 | else if (default_layer & (1UL << _WORKMAN)) { | ||
178 | rgblight_sethsv_goldenrod(); | ||
179 | } | ||
180 | else { | ||
181 | rgblight_sethsv_teal(); | ||
182 | } | ||
183 | } | ||
184 | else | ||
185 | { | ||
186 | rgblight_setrgb_red(); | ||
187 | rgblight_mode(5); | ||
188 | } | ||
189 | #endif // RGBLIGHT_ENABLE | 175 | #endif // RGBLIGHT_ENABLE |
176 | } else if (default_layer & (1UL << _DVORAK)) { | ||
177 | #ifdef RGBLIGHT_ENABLE | ||
178 | rgblight_sethsv_green(); | ||
179 | #endif // RGBLIGHT_ENABLE | ||
180 | } else if (default_layer & (1UL << _WORKMAN)) { | ||
181 | #ifdef RGBLIGHT_ENABLE | ||
182 | rgblight_sethsv_goldenrod(); | ||
183 | #endif // RGBLIGHT_ENABLE | ||
184 | } else { | ||
185 | #ifdef RGBLIGHT_ENABLE | ||
186 | rgblight_sethsv_teal(); | ||
187 | #endif // RGBLIGHT_ENABLE | ||
188 | } | ||
189 | |||
190 | userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE); | ||
191 | clicky_enable = userspace_config.clicky_enable; | ||
190 | 192 | ||
191 | #if ( defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE) ) | 193 | #if ( defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE) ) |
192 | set_unicode_input_mode(UC_WINC); | 194 | set_unicode_input_mode(UC_WINC); |
@@ -197,23 +199,21 @@ void matrix_init_user(void) { | |||
197 | // No global matrix scan code, so just run keymap's matrix | 199 | // No global matrix scan code, so just run keymap's matrix |
198 | // scan function | 200 | // scan function |
199 | void matrix_scan_user(void) { | 201 | void matrix_scan_user(void) { |
202 | |||
200 | #ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code. | 203 | #ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code. |
201 | run_diablo_macro_check(); | 204 | run_diablo_macro_check(); |
202 | #endif // TAP_DANCE_ENABLE | 205 | #endif // TAP_DANCE_ENABLE |
206 | |||
203 | matrix_scan_keymap(); | 207 | matrix_scan_keymap(); |
204 | } | 208 | } |
205 | 209 | ||
206 | void tap(uint16_t keycode){ | ||
207 | register_code(keycode); | ||
208 | unregister_code(keycode); | ||
209 | }; | ||
210 | 210 | ||
211 | // This block is for all of the gaming macros, as they were all doing | 211 | // This block is for all of the gaming macros, as they were all doing |
212 | // the same thing, but with differring text sent. | 212 | // the same thing, but with differring text sent. |
213 | bool send_game_macro(const char *str, keyrecord_t *record, bool override) { | 213 | bool send_game_macro(const char *str, keyrecord_t *record, bool override) { |
214 | if (!record->event.pressed || override) { | 214 | if (!record->event.pressed || override) { |
215 | clear_keyboard(); | 215 | clear_keyboard(); |
216 | tap(is_overwatch ? KC_BSPC : KC_ENTER); | 216 | tap(userspace_config.is_overwatch ? KC_BSPC : KC_ENTER); |
217 | wait_ms(50); | 217 | wait_ms(50); |
218 | send_string(str); | 218 | send_string(str); |
219 | wait_ms(50); | 219 | wait_ms(50); |
@@ -261,39 +261,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
261 | break; | 261 | break; |
262 | 262 | ||
263 | 263 | ||
264 | case LOWER: | ||
265 | if (record->event.pressed) { | ||
266 | layer_on(_LOWER); | ||
267 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||
268 | } | ||
269 | else { | ||
270 | layer_off(_LOWER); | ||
271 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||
272 | } | ||
273 | return false; | ||
274 | break; | ||
275 | case RAISE: | ||
276 | if (record->event.pressed) { | ||
277 | layer_on(_RAISE); | ||
278 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||
279 | } | ||
280 | else { | ||
281 | layer_off(_RAISE); | ||
282 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||
283 | } | ||
284 | return false; | ||
285 | break; | ||
286 | case ADJUST: | ||
287 | if (record->event.pressed) { | ||
288 | layer_on(_ADJUST); | ||
289 | } | ||
290 | else { | ||
291 | layer_off(_ADJUST); | ||
292 | } | ||
293 | return false; | ||
294 | break; | ||
295 | |||
296 | |||
297 | case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader | 264 | case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader |
298 | if (!record->event.pressed) { | 265 | if (!record->event.pressed) { |
299 | SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP | 266 | SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP |
@@ -349,11 +316,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
349 | // These are a serious of gaming macros. | 316 | // These are a serious of gaming macros. |
350 | // Only enables for the viterbi, basically, | 317 | // Only enables for the viterbi, basically, |
351 | // to save on firmware space, since it's limited. | 318 | // to save on firmware space, since it's limited. |
352 | #if !(defined(KEYBOARD_orthodox_rev1) || defined(KEYBOARD_orthodox_rev3) || defined(KEYBOARD_ergodox_ez)) | 319 | #if !(defined(KEYBOARD_orthodox_rev1) || defined(KEYBOARD_orthodox_rev3) || defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_iris_rev2)) |
353 | case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros | 320 | case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros |
354 | if (record->event.pressed) { is_overwatch = !is_overwatch; } | 321 | if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); } |
355 | #ifdef RGBLIGHT_ENABLE | 322 | #ifdef RGBLIGHT_ENABLE |
356 | is_overwatch ? rgblight_mode(17) : rgblight_mode(18); | 323 | userspace_config.is_overwatch ? rgblight_mode(17) : rgblight_mode(18); |
357 | #endif //RGBLIGHT_ENABLE | 324 | #endif //RGBLIGHT_ENABLE |
358 | return false; break; | 325 | return false; break; |
359 | case KC_SALT: | 326 | case KC_SALT: |
@@ -435,7 +402,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
435 | } | 402 | } |
436 | return false; | 403 | return false; |
437 | break; | 404 | break; |
438 | 405 | case CLICKY_TOGGLE: | |
406 | userspace_config.clicky_enable = clicky_enable; | ||
407 | eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); | ||
408 | break; | ||
439 | #ifdef UNICODE_ENABLE | 409 | #ifdef UNICODE_ENABLE |
440 | case UC_FLIP: // (╯°□°)╯ ︵ ┻━┻ | 410 | case UC_FLIP: // (╯°□°)╯ ︵ ┻━┻ |
441 | if (record->event.pressed) { | 411 | if (record->event.pressed) { |
@@ -466,81 +436,135 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
466 | } | 436 | } |
467 | 437 | ||
468 | 438 | ||
439 | |||
469 | // Runs state check and changes underglow color and animation | 440 | // Runs state check and changes underglow color and animation |
470 | // on layer change, no matter where the change was initiated | 441 | // on layer change, no matter where the change was initiated |
471 | // Then runs keymap's layer change check | 442 | // Then runs keymap's layer change check |
472 | uint32_t layer_state_set_user(uint32_t state) { | 443 | uint32_t layer_state_set_user(uint32_t state) { |
473 | #ifdef RGBLIGHT_ENABLE | ||
474 | uint8_t default_layer = eeconfig_read_default_layer(); | 444 | uint8_t default_layer = eeconfig_read_default_layer(); |
445 | state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST); | ||
475 | 446 | ||
476 | if (rgb_layer_change) { | 447 | switch (biton32(state)) { |
477 | switch (biton32(state)) { | 448 | case _NAV: |
478 | case _NAV: | 449 | #ifdef RGBLIGHT_ENABLE |
450 | if (rgb_layer_change) { | ||
479 | rgblight_sethsv_blue(); | 451 | rgblight_sethsv_blue(); |
480 | rgblight_mode(1); | 452 | rgblight_mode(1); |
481 | break; | 453 | } |
482 | case _SYMB: | 454 | #endif // RGBLIGHT_ENABLE |
455 | break; | ||
456 | case _SYMB: | ||
457 | #ifdef RGBLIGHT_ENABLE | ||
458 | if (rgb_layer_change) { | ||
483 | rgblight_sethsv_blue(); | 459 | rgblight_sethsv_blue(); |
484 | rgblight_mode(2); | 460 | rgblight_mode(2); |
485 | break; | 461 | } |
486 | case _MOUS: | 462 | #endif // RGBLIGHT_ENABLE |
463 | break; | ||
464 | case _MOUS: | ||
465 | #ifdef RGBLIGHT_ENABLE | ||
466 | if (rgb_layer_change) { | ||
487 | rgblight_sethsv_yellow(); | 467 | rgblight_sethsv_yellow(); |
488 | rgblight_mode(1); | 468 | rgblight_mode(1); |
489 | break; | 469 | } |
490 | case _MACROS: | 470 | #endif // RGBLIGHT_ENABLE |
471 | break; | ||
472 | case _MACROS: | ||
473 | #ifdef RGBLIGHT_ENABLE | ||
474 | if (rgb_layer_change) { | ||
491 | rgblight_sethsv_orange(); | 475 | rgblight_sethsv_orange(); |
492 | is_overwatch ? rgblight_mode(17) : rgblight_mode(18); | 476 | userspace_config.is_overwatch ? rgblight_mode(17) : rgblight_mode(18); |
493 | break; | 477 | } |
494 | case _MEDIA: | 478 | #endif // RGBLIGHT_ENABLE |
479 | break; | ||
480 | case _MEDIA: | ||
481 | #ifdef RGBLIGHT_ENABLE | ||
482 | if (rgb_layer_change) { | ||
495 | rgblight_sethsv_chartreuse(); | 483 | rgblight_sethsv_chartreuse(); |
496 | rgblight_mode(22); | 484 | rgblight_mode(22); |
497 | break; | 485 | } |
498 | case _GAMEPAD: | 486 | #endif // RGBLIGHT_ENABLE |
487 | break; | ||
488 | case _GAMEPAD: | ||
489 | #ifdef RGBLIGHT_ENABLE | ||
490 | if (rgb_layer_change) { | ||
499 | rgblight_sethsv_orange(); | 491 | rgblight_sethsv_orange(); |
500 | rgblight_mode(17); | 492 | rgblight_mode(17); |
501 | break; | 493 | } |
502 | case _DIABLO: | 494 | #endif // RGBLIGHT_ENABLE |
495 | break; | ||
496 | case _DIABLO: | ||
497 | #ifdef RGBLIGHT_ENABLE | ||
498 | if (rgb_layer_change) { | ||
503 | rgblight_sethsv_red(); | 499 | rgblight_sethsv_red(); |
504 | rgblight_mode(5); | 500 | rgblight_mode(5); |
505 | break; | 501 | } |
506 | case _RAISE: | 502 | #endif // RGBLIGHT_ENABLE |
503 | break; | ||
504 | case _RAISE: | ||
505 | #ifdef RGBLIGHT_ENABLE | ||
506 | if (rgb_layer_change) { | ||
507 | rgblight_sethsv_yellow(); | 507 | rgblight_sethsv_yellow(); |
508 | rgblight_mode(5); | 508 | rgblight_mode(5); |
509 | break; | 509 | } |
510 | case _LOWER: | 510 | #endif // RGBLIGHT_ENABLE |
511 | break; | ||
512 | case _LOWER: | ||
513 | #ifdef RGBLIGHT_ENABLE | ||
514 | if (rgb_layer_change) { | ||
511 | rgblight_sethsv_orange(); | 515 | rgblight_sethsv_orange(); |
512 | rgblight_mode(5); | 516 | rgblight_mode(5); |
513 | break; | 517 | } |
514 | case _ADJUST: | 518 | #endif // RGBLIGHT_ENABLE |
519 | break; | ||
520 | case _ADJUST: | ||
521 | #ifdef RGBLIGHT_ENABLE | ||
522 | if (rgb_layer_change) { | ||
515 | rgblight_sethsv_red(); | 523 | rgblight_sethsv_red(); |
516 | rgblight_mode(23); | 524 | rgblight_mode(23); |
517 | break; | 525 | } |
518 | case _COVECUBE: | 526 | #endif // RGBLIGHT_ENABLE |
527 | break; | ||
528 | case _COVECUBE: | ||
529 | #ifdef RGBLIGHT_ENABLE | ||
530 | if (rgb_layer_change) { | ||
519 | rgblight_sethsv_green(); | 531 | rgblight_sethsv_green(); |
520 | rgblight_mode(2); | 532 | rgblight_mode(2); |
521 | break; | ||
522 | default: // for any other layers, or the default layer | ||
523 | if (default_layer & (1UL << _COLEMAK)) { | ||
524 | rgblight_sethsv_magenta(); | ||
525 | } | ||
526 | else if (default_layer & (1UL << _DVORAK)) { | ||
527 | rgblight_sethsv_green(); | ||
528 | } | ||
529 | else if (default_layer & (1UL << _WORKMAN)) { | ||
530 | rgblight_sethsv_goldenrod(); | ||
531 | } | ||
532 | else { | ||
533 | rgblight_sethsv_teal(); | ||
534 | } | ||
535 | if (biton32(state) == _MODS) { // If the non-OSM layer is enabled, then breathe | ||
536 | rgblight_mode(2); | ||
537 | } else { // otherwise, stay solid | ||
538 | rgblight_mode(1); | ||
539 | } | ||
540 | break; | ||
541 | } | 533 | } |
542 | } | ||
543 | #endif // RGBLIGHT_ENABLE | 534 | #endif // RGBLIGHT_ENABLE |
535 | break; | ||
536 | default: // for any other layers, or the default layer | ||
537 | if (default_layer & (1UL << _COLEMAK)) { | ||
538 | #ifdef RGBLIGHT_ENABLE | ||
539 | if (rgb_layer_change) { rgblight_sethsv_magenta(); } | ||
540 | #endif // RGBLIGHT_ENABLE | ||
541 | } | ||
542 | else if (default_layer & (1UL << _DVORAK)) { | ||
543 | #ifdef RGBLIGHT_ENABLE | ||
544 | if (rgb_layer_change) { rgblight_sethsv_green(); } | ||
545 | #endif // RGBLIGHT_ENABLE | ||
546 | } | ||
547 | else if (default_layer & (1UL << _WORKMAN)) { | ||
548 | #ifdef RGBLIGHT_ENABLE | ||
549 | if (rgb_layer_change) { rgblight_sethsv_goldenrod(); } | ||
550 | #endif // RGBLIGHT_ENABLE | ||
551 | } | ||
552 | else { | ||
553 | #ifdef RGBLIGHT_ENABLE | ||
554 | if (rgb_layer_change) { rgblight_sethsv_teal(); } | ||
555 | #endif // RGBLIGHT_ENABLE | ||
556 | } | ||
557 | if (biton32(state) == _MODS) { // If the non-OSM layer is enabled, then breathe | ||
558 | #ifdef RGBLIGHT_ENABLE | ||
559 | if (rgb_layer_change) { rgblight_mode(2); } | ||
560 | #endif // RGBLIGHT_ENABLE | ||
561 | } else { // otherwise, stay solid | ||
562 | #ifdef RGBLIGHT_ENABLE | ||
563 | if (rgb_layer_change) { rgblight_mode(1); } | ||
564 | #endif // RGBLIGHT_ENABLE | ||
565 | } | ||
566 | break; | ||
567 | } | ||
544 | return layer_state_set_keymap (state); | 568 | return layer_state_set_keymap (state); |
545 | } | 569 | } |
546 | 570 | ||
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index 746c7e20a..5ef25333b 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h | |||
@@ -49,8 +49,22 @@ enum userspace_layers { | |||
49 | // RGB color codes are no longer located here anymore. Instead, you will want to | 49 | // RGB color codes are no longer located here anymore. Instead, you will want to |
50 | // head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h | 50 | // head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h |
51 | 51 | ||
52 | extern bool is_overwatch; | ||
53 | extern bool rgb_layer_change; | 52 | extern bool rgb_layer_change; |
53 | extern bool clicky_enable; | ||
54 | |||
55 | #ifdef RGBLIGHT_ENABLE | ||
56 | void rgblight_sethsv_default_helper(uint8_t index); | ||
57 | #endif // RGBLIGHT_ENABLE | ||
58 | |||
59 | #define EECONFIG_USERSPACE (uint8_t *)20 | ||
60 | |||
61 | typedef union { | ||
62 | uint32_t raw; | ||
63 | struct { | ||
64 | bool clicky_enable :1; | ||
65 | bool is_overwatch :1; | ||
66 | }; | ||
67 | } userspace_config_t; | ||
54 | 68 | ||
55 | enum userspace_custom_keycodes { | 69 | enum userspace_custom_keycodes { |
56 | EPRM = SAFE_RANGE, // can always be here | 70 | EPRM = SAFE_RANGE, // can always be here |
@@ -59,9 +73,6 @@ enum userspace_custom_keycodes { | |||
59 | KC_COLEMAK, | 73 | KC_COLEMAK, |
60 | KC_DVORAK, | 74 | KC_DVORAK, |
61 | KC_WORKMAN, | 75 | KC_WORKMAN, |
62 | LOWER, | ||
63 | RAISE, | ||
64 | ADJUST, | ||
65 | KC_DIABLO_CLEAR, | 76 | KC_DIABLO_CLEAR, |
66 | KC_OVERWATCH, | 77 | KC_OVERWATCH, |
67 | KC_SALT, | 78 | KC_SALT, |
@@ -90,6 +101,11 @@ enum userspace_custom_keycodes { | |||
90 | NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes | 101 | NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes |
91 | }; | 102 | }; |
92 | 103 | ||
104 | #define LOWER MO(_LOWER) | ||
105 | #define RAISE MO(_RAISE) | ||
106 | #define ADJUST MO(_ADJUST) | ||
107 | |||
108 | |||
93 | #define KC_SEC1 KC_SECRET_1 | 109 | #define KC_SEC1 KC_SECRET_1 |
94 | #define KC_SEC2 KC_SECRET_2 | 110 | #define KC_SEC2 KC_SECRET_2 |
95 | #define KC_SEC3 KC_SECRET_3 | 111 | #define KC_SEC3 KC_SECRET_3 |
@@ -102,6 +118,20 @@ enum userspace_custom_keycodes { | |||
102 | #define WORKMAN KC_WORKMAN | 118 | #define WORKMAN KC_WORKMAN |
103 | #define KC_RST KC_RESET | 119 | #define KC_RST KC_RESET |
104 | 120 | ||
121 | |||
122 | #ifdef SWAP_HANDS_ENABLE | ||
123 | #define KC_C1R3 SH_TT | ||
124 | #else // SWAP_HANDS_ENABLE | ||
125 | #define KC_C1R3 KC_BSPC | ||
126 | #endif // SWAP_HANDS_ENABLE | ||
127 | |||
128 | // OSM keycodes, to keep things clean and easy to change | ||
129 | #define KC_MLSF OSM(MOD_LSFT) | ||
130 | #define KC_MRSF OSM(MOD_RSFT) | ||
131 | |||
132 | #define MG_NKRO MAGIC_TOGGLE_NKRO | ||
133 | |||
134 | |||
105 | #ifdef TAP_DANCE_ENABLE | 135 | #ifdef TAP_DANCE_ENABLE |
106 | enum { | 136 | enum { |
107 | TD_D3_1 = 0, | 137 | TD_D3_1 = 0, |
@@ -111,72 +141,6 @@ enum { | |||
111 | }; | 141 | }; |
112 | #endif // TAP_DANCE_ENABLE | 142 | #endif // TAP_DANCE_ENABLE |
113 | 143 | ||
114 | #ifdef UNICODEMAP_ENABLE | ||
115 | |||
116 | /* use X(n) to call the */ | ||
117 | |||
118 | |||
119 | enum unicode_name { | ||
120 | THINK, // thinking face 🤔 | ||
121 | GRIN, // grinning face 😊 | ||
122 | SMRK, // smirk 😏 | ||
123 | WEARY, // good shit 😩 | ||
124 | UNAMU, // unamused 😒 | ||
125 | |||
126 | SNEK, // snke 🐍 | ||
127 | PENGUIN, // 🐧 | ||
128 | DRAGON, // 🐉 | ||
129 | MONKEY, // 🐒 | ||
130 | CHICK, // 🐥 | ||
131 | |||
132 | OKOK, // 👌 | ||
133 | EFFU, // 🖕 | ||
134 | INUP, // 👆 | ||
135 | THUP, // 👍 | ||
136 | THDN, // 👎 | ||
137 | |||
138 | BBB, // dat B 🅱 | ||
139 | POO, // poop 💩 | ||
140 | HUNDR, // 100 💯 | ||
141 | EGGPL, // EGGPLANT 🍆 | ||
142 | WATER, // wet 💦 | ||
143 | TUMBLER, // 🥃 | ||
144 | |||
145 | LIT, // fire 🔥 | ||
146 | IRONY, // ‽ | ||
147 | DEGREE, // ° | ||
148 | }; | ||
149 | |||
150 | |||
151 | const uint32_t PROGMEM unicode_map[] = { | ||
152 | [THINK] = 0x1F914, | ||
153 | [GRIN] = 0x1F600, | ||
154 | [BBB] = 0x1F171, | ||
155 | [POO] = 0x1F4A9, | ||
156 | [HUNDR] = 0x1F4AF, | ||
157 | [SMRK] = 0x1F60F, | ||
158 | [WEARY] = 0x1F629, | ||
159 | [EGGPL] = 0x1F346, | ||
160 | [WATER] = 0x1F4A6, | ||
161 | [LIT] = 0x1F525, | ||
162 | [UNAMU] = 0x1F612, | ||
163 | [SNEK] = 0x1F40D, | ||
164 | [PENGUIN] = 0x1F427, | ||
165 | [BOAR] = 0x1F417, | ||
166 | [MONKEY] = 0x1F412, | ||
167 | [CHICK] = 0x1F425, | ||
168 | [DRAGON] = 0x1F409, | ||
169 | [OKOK] = 0x1F44C, | ||
170 | [EFFU] = 0x1F595, | ||
171 | [INUP] = 0x1F446, | ||
172 | [THDN] = 0x1F44E, | ||
173 | [THUP] = 0x1F44D, | ||
174 | [TUMBLER] = 0x1F943, | ||
175 | [IRONY] = 0x0203D, | ||
176 | [DEGREE] = 0x000B0, | ||
177 | }; | ||
178 | |||
179 | #endif //UNICODEMAP_ENABLE | ||
180 | 144 | ||
181 | // Custom Keycodes for Diablo 3 layer | 145 | // Custom Keycodes for Diablo 3 layer |
182 | // But since TD() doesn't work when tap dance is disabled | 146 | // But since TD() doesn't work when tap dance is disabled |
@@ -193,22 +157,6 @@ const uint32_t PROGMEM unicode_map[] = { | |||
193 | #define KC_D3_4 KC_4 | 157 | #define KC_D3_4 KC_4 |
194 | #endif // TAP_DANCE_ENABLE | 158 | #endif // TAP_DANCE_ENABLE |
195 | 159 | ||
196 | // OSM keycodes, to keep things clean and easy to change | ||
197 | #define KC_MLSF OSM(MOD_LSFT) | ||
198 | #define KC_MRSF OSM(MOD_RSFT) | ||
199 | |||
200 | |||
201 | |||
202 | // If we're still using the official Faux Clicky feature, substitute codes | ||
203 | // so that we don't have any unused/blank keys. | ||
204 | #ifdef FAUXCLICKY_ENABLE | ||
205 | #define AUD_ON FC_ON | ||
206 | #define AUD_OFF FC_OFF | ||
207 | #else // FAUXCLICKY_ENABLE | ||
208 | #define AUD_ON AU_ON | ||
209 | #define AUD_OFF AU_OFF | ||
210 | #endif // FAUXCLICKY_ENABLE | ||
211 | |||
212 | 160 | ||
213 | 161 | ||
214 | // Since our quirky block definitions are basically a list of comma separated | 162 | // Since our quirky block definitions are basically a list of comma separated |
@@ -286,7 +234,8 @@ const uint32_t PROGMEM unicode_map[] = { | |||
286 | #define _________________NORMAN_R2_________________ KC_J, KC_N, KC_I, KC_O, KC_U | 234 | #define _________________NORMAN_R2_________________ KC_J, KC_N, KC_I, KC_O, KC_U |
287 | #define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH) | 235 | #define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH) |
288 | 236 | ||
289 | 237 | #define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5 | |
238 | #define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0 | ||
290 | 239 | ||
291 | // Since we have 4 default layouts (QWERTY, DVORAK, COLEMAK and WORKMAN), | 240 | // Since we have 4 default layouts (QWERTY, DVORAK, COLEMAK and WORKMAN), |
292 | // this allows us to quickly modify the bottom row for all of the layouts | 241 | // this allows us to quickly modify the bottom row for all of the layouts |
@@ -301,4 +250,4 @@ const uint32_t PROGMEM unicode_map[] = { | |||
301 | KC_SPACE,KC_BSPC, KC_END, KC_PGDN, KC_DEL, KC_ENTER | 250 | KC_SPACE,KC_BSPC, KC_END, KC_PGDN, KC_DEL, KC_ENTER |
302 | 251 | ||
303 | 252 | ||
304 | #endif | 253 | #endif // !USERSPACE |
diff --git a/users/drashna/drashna_unicode.h b/users/drashna/drashna_unicode.h new file mode 100644 index 000000000..3d1bc03f9 --- /dev/null +++ b/users/drashna/drashna_unicode.h | |||
@@ -0,0 +1,71 @@ | |||
1 | #ifndef UNICODE_USERSPACE_H | ||
2 | #define UNICODE_USERSPACE_H | ||
3 | |||
4 | |||
5 | |||
6 | /* use X(n) to call the */ | ||
7 | |||
8 | enum unicode_name { | ||
9 | THINK, // thinking face 🤔 | ||
10 | GRIN, // grinning face 😊 | ||
11 | SMRK, // smirk 😏 | ||
12 | WEARY, // good shit 😩 | ||
13 | UNAMU, // unamused 😒 | ||
14 | |||
15 | SNEK, // snke 🐍 | ||
16 | PENGUIN, // 🐧 | ||
17 | DRAGON, // 🐉 | ||
18 | MONKEY, // 🐒 | ||
19 | CHICK, // 🐥 | ||
20 | BOAR, // 🐗 | ||
21 | |||
22 | OKOK, // 👌 | ||
23 | EFFU, // 🖕 | ||
24 | INUP, // 👆 | ||
25 | THUP, // 👍 | ||
26 | THDN, // 👎 | ||
27 | |||
28 | BBB, // dat B 🅱 | ||
29 | POO, // poop 💩 | ||
30 | HUNDR, // 100 💯 | ||
31 | EGGPL, // EGGPLANT 🍆 | ||
32 | WATER, // wet 💦 | ||
33 | TUMBLER, // 🥃 | ||
34 | |||
35 | LIT, // fire 🔥 | ||
36 | BANG, // ‽ | ||
37 | IRONY, // ⸮ | ||
38 | DEGREE // ° | ||
39 | }; | ||
40 | |||
41 | |||
42 | const uint32_t PROGMEM unicode_map[] = { | ||
43 | [THINK] = 0x1F914, | ||
44 | [GRIN] = 0x1F600, | ||
45 | [BBB] = 0x1F171, | ||
46 | [POO] = 0x1F4A9, | ||
47 | [HUNDR] = 0x1F4AF, | ||
48 | [SMRK] = 0x1F60F, | ||
49 | [WEARY] = 0x1F629, | ||
50 | [EGGPL] = 0x1F346, | ||
51 | [WATER] = 0x1F4A6, | ||
52 | [LIT] = 0x1F525, | ||
53 | [UNAMU] = 0x1F612, | ||
54 | [SNEK] = 0x1F40D, | ||
55 | [PENGUIN] = 0x1F427, | ||
56 | [BOAR] = 0x1F417, | ||
57 | [MONKEY] = 0x1F412, | ||
58 | [CHICK] = 0x1F425, | ||
59 | [DRAGON] = 0x1F409, | ||
60 | [OKOK] = 0x1F44C, | ||
61 | [EFFU] = 0x1F595, | ||
62 | [INUP] = 0x1F446, | ||
63 | [THDN] = 0x1F44E, | ||
64 | [THUP] = 0x1F44D, | ||
65 | [TUMBLER] = 0x1F943, | ||
66 | [BANG] = 0x0203D, | ||
67 | [IRONY] = 0x02E2E, | ||
68 | [DEGREE] = 0x000B0 | ||
69 | }; | ||
70 | |||
71 | #endif | ||
diff --git a/users/drashna/readme.md b/users/drashna/readme.md index c4e305e15..79758e7e5 100644 --- a/users/drashna/readme.md +++ b/users/drashna/readme.md | |||
@@ -146,3 +146,31 @@ endif | |||
146 | ``` | 146 | ``` |
147 | 147 | ||
148 | Then, if you run `make keyboard:name NO_SECRETS=yes`, it will default to the test strings in your `<name>.c` file, rather than reading from your file. | 148 | Then, if you run `make keyboard:name NO_SECRETS=yes`, it will default to the test strings in your `<name>.c` file, rather than reading from your file. |
149 | |||
150 | |||
151 | Userspace EEPROM config | ||
152 | ----------------------- | ||
153 | |||
154 | This adds EEPROM support fo the userspace, so that certain values are configurable in such a way that persists when power is lost. Namely, just the clicky feature and the Overwatch macro option ("is_overwatch"). This is done by reading and saving the structure from EEPROM. | ||
155 | |||
156 | To implement this, first you need to specify the location: | ||
157 | |||
158 | ```c | ||
159 | #define EECONFIG_USERSPACE (uint8_t *)20 | ||
160 | ``` | ||
161 | This tells us where in the EEPROM that the data structure is located, and this specifies that it's a byte (8 bits). However, to maximize it's usage, we want to specify a data structure here, so that we can use multiple settings. To do that: | ||
162 | |||
163 | ```c | ||
164 | typedef union { | ||
165 | uint32_t raw; | ||
166 | struct { | ||
167 | bool clicky_enable :1; | ||
168 | bool is_overwatch :1; | ||
169 | }; | ||
170 | } userspace_config_t; | ||
171 | ``` | ||
172 | Then, in your C file, you want to add: `userspace_config_t userspace_config;`, and in your `matrix_init_*` function, you want to add `userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE);` | ||
173 | |||
174 | From there, you'd want to use the data structure (such as `userspace_config.is_overwatch`) when you want to check this value. | ||
175 | |||
176 | And if you want to update it, update directly and then use `eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw);` to write the value back to the EEPROM. | ||