diff options
| author | Drashna Jaelre <drashna@live.com> | 2021-12-29 20:17:34 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-29 20:17:34 -0800 |
| commit | c4551d7ef1ed2c1069f23cc8499b7c7fc30f3ecf (patch) | |
| tree | 67dc381a45d59626132c4c59b71c4b36fa971f8b /users/drashna/drashna.c | |
| parent | 1a8a842cfb3e87a82afb57ba29ca59c5fa6fe97b (diff) | |
| download | qmk_firmware-c4551d7ef1ed2c1069f23cc8499b7c7fc30f3ecf.tar.gz qmk_firmware-c4551d7ef1ed2c1069f23cc8499b7c7fc30f3ecf.zip | |
[Keymap] Reorganization, cleanup and readmes for drashna code (#15617)
Diffstat (limited to 'users/drashna/drashna.c')
| -rw-r--r-- | users/drashna/drashna.c | 291 |
1 files changed, 8 insertions, 283 deletions
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index 9c1233ed9..9128a89bc 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c | |||
| @@ -1,18 +1,5 @@ | |||
| 1 | /* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com> | 1 | // Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com> |
| 2 | * | 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | * This program is free software: you can redistribute it and/or modify | ||
| 4 | * it under the terms of the GNU General Public License as published by | ||
| 5 | * the Free Software Foundation, either version 2 of the License, or | ||
| 6 | * (at your option) any later version. | ||
| 7 | * | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | * | ||
| 13 | * You should have received a copy of the GNU General Public License | ||
| 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 15 | */ | ||
| 16 | 3 | ||
| 17 | #include "drashna.h" | 4 | #include "drashna.h" |
| 18 | 5 | ||
| @@ -49,182 +36,6 @@ bool mod_key_press(uint16_t code, uint16_t mod_code, bool pressed, uint16_t this | |||
| 49 | return false; | 36 | return false; |
| 50 | } | 37 | } |
| 51 | 38 | ||
| 52 | __attribute__((weak)) void keyboard_pre_init_keymap(void) {} | ||
| 53 | void keyboard_pre_init_user(void) { | ||
| 54 | userspace_config.raw = eeconfig_read_user(); | ||
| 55 | keyboard_pre_init_keymap(); | ||
| 56 | } | ||
| 57 | // Add reconfigurable functions here, for keymap customization | ||
| 58 | // This allows for a global, userspace functions, and continued | ||
| 59 | // customization of the keymap. Use _keymap instead of _user | ||
| 60 | // functions in the keymaps | ||
| 61 | // Call user matrix init, set default RGB colors and then | ||
| 62 | // call the keymap's init function | ||
| 63 | __attribute__((weak)) void matrix_init_keymap(void) {} | ||
| 64 | __attribute__((weak)) void matrix_init_secret(void) {} | ||
| 65 | void matrix_init_user(void) { | ||
| 66 | #if defined(BOOTLOADER_CATERINA) && defined(__AVR__) | ||
| 67 | DDRD &= ~(1 << 5); | ||
| 68 | PORTD &= ~(1 << 5); | ||
| 69 | |||
| 70 | DDRB &= ~(1 << 0); | ||
| 71 | PORTB &= ~(1 << 0); | ||
| 72 | #endif | ||
| 73 | #ifdef CUSTOM_UNICODE_ENABLE | ||
| 74 | matrix_init_unicode(); | ||
| 75 | #endif | ||
| 76 | matrix_init_secret(); | ||
| 77 | matrix_init_keymap(); | ||
| 78 | } | ||
| 79 | |||
| 80 | __attribute__((weak)) void keyboard_post_init_keymap(void) {} | ||
| 81 | void keyboard_post_init_user(void) { | ||
| 82 | #if defined(RGBLIGHT_ENABLE) | ||
| 83 | keyboard_post_init_rgb_light(); | ||
| 84 | #endif | ||
| 85 | #if defined(RGB_MATRIX_ENABLE) | ||
| 86 | keyboard_post_init_rgb_matrix(); | ||
| 87 | #endif | ||
| 88 | #if defined(SPLIT_KEYBOARD) && defined(SPLIT_TRANSACTION_IDS_USER) | ||
| 89 | keyboard_post_init_transport_sync(); | ||
| 90 | #endif | ||
| 91 | keyboard_post_init_keymap(); | ||
| 92 | } | ||
| 93 | |||
| 94 | #ifdef RGB_MATRIX_ENABLE | ||
| 95 | void rgb_matrix_update_pwm_buffers(void); | ||
| 96 | #endif | ||
| 97 | |||
| 98 | __attribute__((weak)) void shutdown_keymap(void) {} | ||
| 99 | void shutdown_user(void) { | ||
| 100 | #ifdef RGBLIGHT_ENABLE | ||
| 101 | rgblight_enable_noeeprom(); | ||
| 102 | rgblight_mode_noeeprom(1); | ||
| 103 | rgblight_setrgb_red(); | ||
| 104 | #endif // RGBLIGHT_ENABLE | ||
| 105 | #ifdef RGB_MATRIX_ENABLE | ||
| 106 | rgb_matrix_set_color_all(0xFF, 0x00, 0x00); | ||
| 107 | rgb_matrix_update_pwm_buffers(); | ||
| 108 | #endif // RGB_MATRIX_ENABLE | ||
| 109 | #ifdef OLED_ENABLE | ||
| 110 | oled_off(); | ||
| 111 | #endif | ||
| 112 | |||
| 113 | shutdown_keymap(); | ||
| 114 | } | ||
| 115 | |||
| 116 | __attribute__((weak)) void suspend_power_down_keymap(void) {} | ||
| 117 | |||
| 118 | void suspend_power_down_user(void) { | ||
| 119 | #ifdef OLED_ENABLE | ||
| 120 | oled_off(); | ||
| 121 | #endif | ||
| 122 | suspend_power_down_keymap(); | ||
| 123 | } | ||
| 124 | |||
| 125 | __attribute__((weak)) void suspend_wakeup_init_keymap(void) {} | ||
| 126 | void suspend_wakeup_init_user(void) { | ||
| 127 | if (layer_state_is(_GAMEPAD)) { | ||
| 128 | layer_off(_GAMEPAD); | ||
| 129 | } | ||
| 130 | if (layer_state_is(_DIABLO)) { | ||
| 131 | layer_off(_DIABLO); | ||
| 132 | } | ||
| 133 | suspend_wakeup_init_keymap(); | ||
| 134 | } | ||
| 135 | |||
| 136 | // No global matrix scan code, so just run keymap's matrix | ||
| 137 | // scan function | ||
| 138 | __attribute__((weak)) void matrix_scan_keymap(void) {} | ||
| 139 | __attribute__((weak)) void matrix_scan_secret(void) {} | ||
| 140 | void matrix_scan_user(void) { | ||
| 141 | static bool has_ran_yet; | ||
| 142 | if (!has_ran_yet) { | ||
| 143 | has_ran_yet = true; | ||
| 144 | startup_user(); | ||
| 145 | } | ||
| 146 | |||
| 147 | #ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code. | ||
| 148 | run_diablo_macro_check(); | ||
| 149 | #endif // TAP_DANCE_ENABLE | ||
| 150 | |||
| 151 | #if defined(RGBLIGHT_ENABLE) | ||
| 152 | matrix_scan_rgb_light(); | ||
| 153 | #endif // RGBLIGHT_ENABLE | ||
| 154 | #if defined(RGB_MATRIX_ENABLE) | ||
| 155 | matrix_scan_rgb_matrix(); | ||
| 156 | #endif | ||
| 157 | #if defined(POINTING_DEVICE_ENABLE) | ||
| 158 | matrix_scan_pointing(); | ||
| 159 | #endif | ||
| 160 | |||
| 161 | matrix_scan_secret(); | ||
| 162 | |||
| 163 | matrix_scan_keymap(); | ||
| 164 | } | ||
| 165 | |||
| 166 | #ifdef AUDIO_ENABLE | ||
| 167 | float doom_song[][2] = SONG(E1M1_DOOM); | ||
| 168 | #endif | ||
| 169 | |||
| 170 | // on layer change, no matter where the change was initiated | ||
| 171 | // Then runs keymap's layer change check | ||
| 172 | __attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state) { return state; } | ||
| 173 | layer_state_t layer_state_set_user(layer_state_t state) { | ||
| 174 | if (!is_keyboard_master()) { | ||
| 175 | return state; | ||
| 176 | } | ||
| 177 | |||
| 178 | state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST); | ||
| 179 | #if defined(POINTING_DEVICE_ENABLE) | ||
| 180 | state = layer_state_set_pointing(state); | ||
| 181 | #endif | ||
| 182 | #if defined(RGBLIGHT_ENABLE) | ||
| 183 | state = layer_state_set_rgb_light(state); | ||
| 184 | #endif // RGBLIGHT_ENABLE | ||
| 185 | #if defined(AUDIO_ENABLE) && !defined(__arm__) | ||
| 186 | static bool is_gamepad_on = false; | ||
| 187 | if (layer_state_cmp(state, _GAMEPAD) != is_gamepad_on) { | ||
| 188 | is_gamepad_on = layer_state_cmp(state, _GAMEPAD); | ||
| 189 | if (is_gamepad_on) { | ||
| 190 | PLAY_LOOP(doom_song); | ||
| 191 | } else { | ||
| 192 | stop_all_notes(); | ||
| 193 | } | ||
| 194 | } | ||
| 195 | #endif | ||
| 196 | state = layer_state_set_keymap(state); | ||
| 197 | return state; | ||
| 198 | } | ||
| 199 | |||
| 200 | // Runs state check and changes underglow color and animation | ||
| 201 | __attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t state) { return state; } | ||
| 202 | layer_state_t default_layer_state_set_user(layer_state_t state) { | ||
| 203 | if (!is_keyboard_master()) { | ||
| 204 | return state; | ||
| 205 | } | ||
| 206 | |||
| 207 | state = default_layer_state_set_keymap(state); | ||
| 208 | #if 0 | ||
| 209 | # if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | ||
| 210 | state = default_layer_state_set_rgb(state); | ||
| 211 | # endif // RGBLIGHT_ENABLE | ||
| 212 | #endif | ||
| 213 | return state; | ||
| 214 | } | ||
| 215 | |||
| 216 | __attribute__((weak)) void led_set_keymap(uint8_t usb_led) {} | ||
| 217 | void led_set_user(uint8_t usb_led) { led_set_keymap(usb_led); } | ||
| 218 | |||
| 219 | __attribute__((weak)) void eeconfig_init_keymap(void) {} | ||
| 220 | void eeconfig_init_user(void) { | ||
| 221 | userspace_config.raw = 0; | ||
| 222 | userspace_config.rgb_layer_change = true; | ||
| 223 | eeconfig_update_user(userspace_config.raw); | ||
| 224 | eeconfig_init_keymap(); | ||
| 225 | keyboard_init(); | ||
| 226 | } | ||
| 227 | |||
| 228 | bool hasAllBitsInMask(uint8_t value, uint8_t mask) { | 39 | bool hasAllBitsInMask(uint8_t value, uint8_t mask) { |
| 229 | value &= 0xF; | 40 | value &= 0xF; |
| 230 | mask &= 0xF; | 41 | mask &= 0xF; |
| @@ -232,96 +43,10 @@ bool hasAllBitsInMask(uint8_t value, uint8_t mask) { | |||
| 232 | return (value & mask) == mask; | 43 | return (value & mask) == mask; |
| 233 | } | 44 | } |
| 234 | 45 | ||
| 235 | #ifdef SPLIT_KEYBOARD | 46 | void tap_code16_nomods(uint8_t kc) { |
| 236 | __attribute__((weak)) void matrix_slave_scan_keymap(void) {} | 47 | uint8_t temp_mod = get_mods(); |
| 237 | void matrix_slave_scan_user(void) { | 48 | clear_mods(); |
| 238 | # if defined(AUDIO_ENABLE) | 49 | clear_oneshot_mods(); |
| 239 | # if !defined(NO_MUSIC_MODE) | 50 | tap_code16(kc); |
| 240 | music_task(); | 51 | set_mods(temp_mod); |
| 241 | # endif | ||
| 242 | # ifdef AUDIO_INIT_DELAY | ||
| 243 | if (!is_keyboard_master()) { | ||
| 244 | static bool delayed_tasks_run = false; | ||
| 245 | static uint16_t delayed_task_timer = 0; | ||
| 246 | if (!delayed_tasks_run) { | ||
| 247 | if (!delayed_task_timer) { | ||
| 248 | delayed_task_timer = timer_read(); | ||
| 249 | } else if (timer_elapsed(delayed_task_timer) > 300) { | ||
| 250 | audio_startup(); | ||
| 251 | delayed_tasks_run = true; | ||
| 252 | } | ||
| 253 | } | ||
| 254 | } | ||
| 255 | # endif | ||
| 256 | # endif | ||
| 257 | # ifdef SEQUENCER_ENABLE | ||
| 258 | sequencer_task(); | ||
| 259 | # endif | ||
| 260 | # ifdef LED_MATRIX_ENABLE | ||
| 261 | led_matrix_task(); | ||
| 262 | # endif | ||
| 263 | # ifdef HAPTIC_ENABLE | ||
| 264 | haptic_task(); | ||
| 265 | # endif | ||
| 266 | |||
| 267 | matrix_slave_scan_keymap(); | ||
| 268 | } | ||
| 269 | #endif | ||
| 270 | |||
| 271 | __attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { | ||
| 272 | switch (keycode) { | ||
| 273 | default: | ||
| 274 | return TAPPING_TERM; | ||
| 275 | } | ||
| 276 | } | ||
| 277 | |||
| 278 | __attribute__((weak)) bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) { | ||
| 279 | // Immediately select the hold action when another key is tapped: | ||
| 280 | // return true; | ||
| 281 | // Do not select the hold action when another key is tapped. | ||
| 282 | // return false; | ||
| 283 | switch (keycode) { | ||
| 284 | default: | ||
| 285 | return false; | ||
| 286 | } | ||
| 287 | } | ||
| 288 | |||
| 289 | __attribute__((weak)) bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) { | ||
| 290 | // Immediately select the hold action when another key is pressed. | ||
| 291 | // return true; | ||
| 292 | // Do not select the hold action when another key is pressed. | ||
| 293 | // return false; | ||
| 294 | switch (keycode) { | ||
| 295 | case QK_LAYER_TAP ... QK_LAYER_TAP_MAX: | ||
| 296 | return true; | ||
| 297 | default: | ||
| 298 | return false; | ||
| 299 | } | ||
| 300 | } | ||
| 301 | |||
| 302 | __attribute__((weak)) bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) { | ||
| 303 | // Do not force the mod-tap key press to be handled as a modifier | ||
| 304 | // if any other key was pressed while the mod-tap key is held down. | ||
| 305 | // return true; | ||
| 306 | // Force the mod-tap key press to be handled as a modifier if any | ||
| 307 | // other key was pressed while the mod-tap key is held down. | ||
| 308 | // return false; | ||
| 309 | switch (keycode) { | ||
| 310 | default: | ||
| 311 | return true; | ||
| 312 | } | ||
| 313 | } | ||
| 314 | |||
| 315 | __attribute__((weak)) bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) { | ||
| 316 | switch (keycode) { | ||
| 317 | default: | ||
| 318 | return false; | ||
| 319 | } | ||
| 320 | } | ||
| 321 | |||
| 322 | __attribute__((weak)) bool get_retro_tapping(uint16_t keycode, keyrecord_t *record) { | ||
| 323 | switch (keycode) { | ||
| 324 | default: | ||
| 325 | return false; | ||
| 326 | } | ||
| 327 | } | 52 | } |
