diff options
| author | Drashna Jaelre <drashna@live.com> | 2021-07-01 00:42:32 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-01 00:42:32 -0700 |
| commit | b7cf9a888a607dc024d74ee72c0ebbd8e0ddfdbe (patch) | |
| tree | 3510846d4d53682e5ec9b964d093ef97c0b33bc7 /users | |
| parent | bbe45185e30eb8d0e974f02b0ea809ed773221be (diff) | |
| download | qmk_firmware-b7cf9a888a607dc024d74ee72c0ebbd8e0ddfdbe.tar.gz qmk_firmware-b7cf9a888a607dc024d74ee72c0ebbd8e0ddfdbe.zip | |
Drashna's split updates (#13350)
Co-authored-by: Ryan <fauxpark@gmail.com>
Diffstat (limited to 'users')
| -rw-r--r-- | users/drashna/config.h | 167 | ||||
| -rw-r--r-- | users/drashna/drashna.c | 31 | ||||
| -rw-r--r-- | users/drashna/drashna.h | 9 | ||||
| -rw-r--r-- | users/drashna/drashna_font.h | 5 | ||||
| -rw-r--r-- | users/drashna/drashna_transport.c | 603 | ||||
| -rw-r--r-- | users/drashna/oled_stuff.c | 83 | ||||
| -rw-r--r-- | users/drashna/oled_stuff.h | 165 | ||||
| -rw-r--r-- | users/drashna/process_records.c | 62 | ||||
| -rw-r--r-- | users/drashna/process_records.h | 82 | ||||
| -rw-r--r-- | users/drashna/rgb_matrix_stuff.c | 54 | ||||
| -rw-r--r-- | users/drashna/rgb_stuff.c | 100 | ||||
| -rw-r--r-- | users/drashna/rules.mk | 43 | ||||
| -rw-r--r-- | users/drashna/tap_dances.c | 8 | ||||
| -rw-r--r-- | users/drashna/tap_dances.h | 2 | ||||
| -rw-r--r-- | users/drashna/template.c | 6 | ||||
| -rw-r--r-- | users/drashna/template.h | 4 | ||||
| -rw-r--r-- | users/drashna/transport_sync.c | 80 | ||||
| -rw-r--r-- | users/drashna/transport_sync.h | 22 |
18 files changed, 523 insertions, 1003 deletions
diff --git a/users/drashna/config.h b/users/drashna/config.h index 796485689..445e18082 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h | |||
| @@ -17,34 +17,49 @@ | |||
| 17 | #pragma once | 17 | #pragma once |
| 18 | 18 | ||
| 19 | // Use custom magic number so that when switching branches, EEPROM always gets reset | 19 | // Use custom magic number so that when switching branches, EEPROM always gets reset |
| 20 | #define EECONFIG_MAGIC_NUMBER (uint16_t)0x1339 | 20 | #define EECONFIG_MAGIC_NUMBER (uint16_t)0x1339 |
| 21 | 21 | ||
| 22 | /* Set Polling rate to 1000Hz */ | 22 | /* Set Polling rate to 1000Hz */ |
| 23 | #define USB_POLLING_INTERVAL_MS 1 | 23 | #define USB_POLLING_INTERVAL_MS 1 |
| 24 | 24 | ||
| 25 | #if defined(SPLIT_KEYBOARD) | 25 | #if defined(SPLIT_KEYBOARD) |
| 26 | # define SPLIT_MODS_ENABLE | 26 | # define SPLIT_MODS_ENABLE |
| 27 | # define SPLIT_TRANSPORT_MIRROR | 27 | # define SPLIT_LAYER_STATE_ENABLE |
| 28 | # define SPLIT_LED_STATE_ENABLE | ||
| 29 | |||
| 30 | // # define SPLIT_TRANSPORT_MIRROR | ||
| 28 | # define SERIAL_USE_MULTI_TRANSACTION | 31 | # define SERIAL_USE_MULTI_TRANSACTION |
| 29 | // # define SPLIT_NUM_TRANSACTIONS_KB 2 | 32 | # define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_STATE_SYNC |
| 30 | #endif | 33 | #endif |
| 31 | 34 | ||
| 32 | #ifdef AUDIO_ENABLE | 35 | #ifdef AUDIO_ENABLE |
| 33 | |||
| 34 | # define AUDIO_CLICKY | 36 | # define AUDIO_CLICKY |
| 35 | # define STARTUP_SONG SONG(RICK_ROLL) | ||
| 36 | # define GOODBYE_SONG SONG(SONIC_RING) | ||
| 37 | # define DEFAULT_LAYER_SONGS \ | ||
| 38 | { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND), SONG(OVERWATCH_THEME) } | ||
| 39 | |||
| 40 | # define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f | 37 | # define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f |
| 41 | 38 | ||
| 42 | # define UNICODE_SONG_MAC SONG(RICK_ROLL) | 39 | # ifdef USER_SONG_LIST |
| 43 | # define UNICODE_SONG_LNX SONG(RICK_ROLL) | 40 | # define STARTUP_SONG SONG(RICK_ROLL) |
| 44 | # define UNICODE_SONG_WIN SONG(RICK_ROLL) | 41 | # define GOODBYE_SONG SONG(SONIC_RING) |
| 45 | # define UNICODE_SONG_BSD SONG(RICK_ROLL) | 42 | # define DEFAULT_LAYER_SONGS \ |
| 46 | # define UNICODE_SONG_WINC SONG(RICK_ROLL) | 43 | { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND), SONG(OVERWATCH_THEME) } |
| 47 | #endif // !AUDIO_ENABLE | 44 | # define UNICODE_SONG_MAC SONG(MARIO_THEME) |
| 45 | # define UNICODE_SONG_LNX SONG(MARIO_POWERUP) | ||
| 46 | # define UNICODE_SONG_WIN SONG(MARIO_ONEUP) | ||
| 47 | # define UNICODE_SONG_BSD SONG(RICK_ROLL) | ||
| 48 | # define UNICODE_SONG_WINC SONG(RICK_ROLL) | ||
| 49 | # else | ||
| 50 | # define STARTUP_SONG SONG(STARTUP_SOUND) | ||
| 51 | # define GOODBYE_SONG SONG(GOODBYE_SOUND) | ||
| 52 | # define DEFAULT_LAYER_SONGS \ | ||
| 53 | { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND), SONG(WORKMAN_SOUND) } | ||
| 54 | # define UNICODE_SONG_MAC SONG(QWERTY_SOUND) | ||
| 55 | # define UNICODE_SONG_LNX SONG(COLEMAK_SOUND) | ||
| 56 | # define UNICODE_SONG_WIN SONG(DVORAK_SOUND) | ||
| 57 | # define UNICODE_SONG_BSD SONG(WORKMAN_SOUND) | ||
| 58 | # define UNICODE_SONG_WINC SONG(PLOVER_GOODBYE_SOUND) | ||
| 59 | # endif | ||
| 60 | #endif // !AUDIO_ENABLE | ||
| 61 | |||
| 62 | #define UNICODE_SELECTED_MODES UC_WIN, UC_MAC | ||
| 48 | 63 | ||
| 49 | #ifdef RGBLIGHT_ENABLE | 64 | #ifdef RGBLIGHT_ENABLE |
| 50 | # define RGBLIGHT_SLEEP | 65 | # define RGBLIGHT_SLEEP |
| @@ -56,18 +71,16 @@ | |||
| 56 | # else | 71 | # else |
| 57 | # define RGBLIGHT_ANIMATIONS | 72 | # define RGBLIGHT_ANIMATIONS |
| 58 | # endif | 73 | # endif |
| 59 | # define RGBLIGHT_EFFECT_TWINKLE_LIFE 250 | 74 | # define RGBLIGHT_EFFECT_TWINKLE_LIFE 250 |
| 60 | # define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1/24 | 75 | # define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1 / 24 |
| 61 | #endif // RGBLIGHT_ENABLE | 76 | #endif // RGBLIGHT_ENABLE |
| 62 | 77 | ||
| 63 | #ifdef RGB_MATRIX_ENABLE | 78 | #ifdef RGB_MATRIX_ENABLE |
| 64 | # define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot) | 79 | # define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot) |
| 65 | // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened) | 80 | // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened) |
| 66 | # define RGB_MATRIX_FRAMEBUFFER_EFFECTS | 81 | # define RGB_MATRIX_FRAMEBUFFER_EFFECTS |
| 67 | // # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects | 82 | // # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects |
| 68 | # define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended | 83 | // # define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended |
| 69 | // # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 | ||
| 70 | // # define EECONFIG_RGB_MATRIX (uint32_t *)16 | ||
| 71 | 84 | ||
| 72 | # if defined(__AVR__) && !defined(__AVR_AT90USB1286__) && !defined(KEYBOARD_launchpad) | 85 | # if defined(__AVR__) && !defined(__AVR_AT90USB1286__) && !defined(KEYBOARD_launchpad) |
| 73 | # define DISABLE_RGB_MATRIX_ALPHAS_MODS | 86 | # define DISABLE_RGB_MATRIX_ALPHAS_MODS |
| @@ -107,8 +120,8 @@ | |||
| 107 | # define DISABLE_RGB_MATRIX_MULTISPLASH | 120 | # define DISABLE_RGB_MATRIX_MULTISPLASH |
| 108 | # define DISABLE_RGB_MATRIX_SOLID_SPLASH | 121 | # define DISABLE_RGB_MATRIX_SOLID_SPLASH |
| 109 | # define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH | 122 | # define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH |
| 110 | # endif // AVR | 123 | # endif // AVR |
| 111 | #endif // RGB_MATRIX_ENABLE | 124 | #endif // RGB_MATRIX_ENABLE |
| 112 | 125 | ||
| 113 | #ifdef OLED_DRIVER_ENABLE | 126 | #ifdef OLED_DRIVER_ENABLE |
| 114 | # ifdef SPLIT_KEYBOARD | 127 | # ifdef SPLIT_KEYBOARD |
| @@ -120,7 +133,7 @@ | |||
| 120 | # ifdef OLED_FONT_H | 133 | # ifdef OLED_FONT_H |
| 121 | # undef OLED_FONT_H | 134 | # undef OLED_FONT_H |
| 122 | # endif | 135 | # endif |
| 123 | # define OLED_FONT_H "drashna_font.h" | 136 | # define OLED_FONT_H "drashna_font.h" |
| 124 | # define OLED_FONT_END 255 | 137 | # define OLED_FONT_END 255 |
| 125 | // # define OLED_FONT_5X5 | 138 | // # define OLED_FONT_5X5 |
| 126 | // # define OLED_FONT_AZTECH | 139 | // # define OLED_FONT_AZTECH |
| @@ -135,16 +148,16 @@ | |||
| 135 | 148 | ||
| 136 | #ifndef ONESHOT_TAP_TOGGLE | 149 | #ifndef ONESHOT_TAP_TOGGLE |
| 137 | # define ONESHOT_TAP_TOGGLE 2 | 150 | # define ONESHOT_TAP_TOGGLE 2 |
| 138 | #endif // !ONESHOT_TAP_TOGGLE | 151 | #endif // !ONESHOT_TAP_TOGGLE |
| 139 | 152 | ||
| 140 | #ifndef ONESHOT_TIMEOUT | 153 | #ifndef ONESHOT_TIMEOUT |
| 141 | # define ONESHOT_TIMEOUT 3000 | 154 | # define ONESHOT_TIMEOUT 3000 |
| 142 | #endif // !ONESHOT_TIMEOUT | 155 | #endif // !ONESHOT_TIMEOUT |
| 143 | 156 | ||
| 144 | #ifdef QMK_KEYS_PER_SCAN | 157 | #ifdef QMK_KEYS_PER_SCAN |
| 145 | # undef QMK_KEYS_PER_SCAN | 158 | # undef QMK_KEYS_PER_SCAN |
| 146 | # define QMK_KEYS_PER_SCAN 2 | 159 | # define QMK_KEYS_PER_SCAN 2 |
| 147 | #endif // !QMK_KEYS_PER_SCAN | 160 | #endif // !QMK_KEYS_PER_SCAN |
| 148 | 161 | ||
| 149 | // this makes it possible to do rolling combos (zx) with keys that | 162 | // this makes it possible to do rolling combos (zx) with keys that |
| 150 | // convert to other keys on hold (z becomes ctrl when you hold it, | 163 | // convert to other keys on hold (z becomes ctrl when you hold it, |
| @@ -152,8 +165,8 @@ | |||
| 152 | // actually sends Ctrl-x. That's bad.) | 165 | // actually sends Ctrl-x. That's bad.) |
| 153 | #define IGNORE_MOD_TAP_INTERRUPT | 166 | #define IGNORE_MOD_TAP_INTERRUPT |
| 154 | #undef PERMISSIVE_HOLD | 167 | #undef PERMISSIVE_HOLD |
| 155 | //#define TAPPING_FORCE_HOLD | 168 | //#define TAPPING_FORCE_HOLD_PER_KEY |
| 156 | //#define RETRO_TAPPING | 169 | //#define RETRO_TAPPING_PER_KEY |
| 157 | #ifndef KEYBOARD_kyria_rev1 | 170 | #ifndef KEYBOARD_kyria_rev1 |
| 158 | # define TAPPING_TERM_PER_KEY | 171 | # define TAPPING_TERM_PER_KEY |
| 159 | #endif | 172 | #endif |
| @@ -166,7 +179,7 @@ | |||
| 166 | 179 | ||
| 167 | #ifdef TAPPING_TERM | 180 | #ifdef TAPPING_TERM |
| 168 | # undef TAPPING_TERM | 181 | # undef TAPPING_TERM |
| 169 | #endif // TAPPING_TERM | 182 | #endif // TAPPING_TERM |
| 170 | #if defined(KEYBOARD_ergodox_ez) | 183 | #if defined(KEYBOARD_ergodox_ez) |
| 171 | # define TAPPING_TERM 185 | 184 | # define TAPPING_TERM 185 |
| 172 | #elif defined(KEYBOARD_crkbd) | 185 | #elif defined(KEYBOARD_crkbd) |
| @@ -185,14 +198,16 @@ | |||
| 185 | # undef LOCKING_RESYNC_ENABLE | 198 | # undef LOCKING_RESYNC_ENABLE |
| 186 | #endif | 199 | #endif |
| 187 | 200 | ||
| 201 | #define LAYER_STATE_16BIT | ||
| 202 | |||
| 188 | #ifdef CONVERT_TO_PROTON_C | 203 | #ifdef CONVERT_TO_PROTON_C |
| 189 | // pins that are available but not present on Pro Micro | 204 | // pins that are available but not present on Pro Micro |
| 190 | # define A3 PAL_LINE(GPIOA, 3) | 205 | # define A3 PAL_LINE(GPIOA, 3) |
| 191 | # define A4 PAL_LINE(GPIOA, 4) | 206 | # define A4 PAL_LINE(GPIOA, 4) |
| 192 | # define A5 PAL_LINE(GPIOA, 5) | 207 | # define A5 PAL_LINE(GPIOA, 5) |
| 193 | # define A6 PAL_LINE(GPIOA, 6) | 208 | # define A6 PAL_LINE(GPIOA, 6) |
| 194 | # define A7 PAL_LINE(GPIOA, 7) | 209 | # define A7 PAL_LINE(GPIOA, 7) |
| 195 | # define A8 PAL_LINE(GPIOA, 8) | 210 | # define A8 PAL_LINE(GPIOA, 8) |
| 196 | # define A13 PAL_LINE(GPIOA, 13) | 211 | # define A13 PAL_LINE(GPIOA, 13) |
| 197 | # define A14 PAL_LINE(GPIOA, 14) | 212 | # define A14 PAL_LINE(GPIOA, 14) |
| 198 | # define A15 PAL_LINE(GPIOA, 15) | 213 | # define A15 PAL_LINE(GPIOA, 15) |
| @@ -203,3 +218,79 @@ | |||
| 203 | # define C14 PAL_LINE(GPIOC, 14) | 218 | # define C14 PAL_LINE(GPIOC, 14) |
| 204 | # define C15 PAL_LINE(GPIOC, 15) | 219 | # define C15 PAL_LINE(GPIOC, 15) |
| 205 | #endif | 220 | #endif |
| 221 | |||
| 222 | #ifdef MOUSEKEY_ENABLE | ||
| 223 | // mouse movement config | ||
| 224 | # ifdef MK_3_SPEED | ||
| 225 | # undef MK_3_SPEED | ||
| 226 | # endif | ||
| 227 | # define MK_KINETIC_SPEED | ||
| 228 | # ifdef MK_KINETIC_SPEED | ||
| 229 | # ifndef MOUSEKEY_DELAY | ||
| 230 | # define MOUSEKEY_DELAY 8 | ||
| 231 | # endif | ||
| 232 | # ifndef MOUSEKEY_INTERVAL | ||
| 233 | # define MOUSEKEY_INTERVAL 20 | ||
| 234 | # endif | ||
| 235 | # ifdef MOUSEKEY_MOVE_DELTA | ||
| 236 | # define MOUSEKEY_MOVE_DELTA 25 | ||
| 237 | # endif | ||
| 238 | # else | ||
| 239 | # ifndef MOUSEKEY_DELAY | ||
| 240 | # define MOUSEKEY_DELAY 300 | ||
| 241 | # endif | ||
| 242 | # ifndef MOUSEKEY_INTERVAL | ||
| 243 | # define MOUSEKEY_INTERVAL 50 | ||
| 244 | # endif | ||
| 245 | # ifndef MOUSEKEY_MOVE_DELTA | ||
| 246 | # define MOUSEKEY_MOVE_DELTA 5 | ||
| 247 | # endif | ||
| 248 | # endif | ||
| 249 | # ifndef MOUSEKEY_MAX_SPEED | ||
| 250 | # define MOUSEKEY_MAX_SPEED 7 | ||
| 251 | # endif | ||
| 252 | # ifndef MOUSEKEY_TIME_TO_MAX | ||
| 253 | # define MOUSEKEY_TIME_TO_MAX 60 | ||
| 254 | # endif | ||
| 255 | # ifndef MOUSEKEY_INITIAL_SPEED | ||
| 256 | # define MOUSEKEY_INITIAL_SPEED 100 | ||
| 257 | # endif | ||
| 258 | # ifndef MOUSEKEY_BASE_SPEED | ||
| 259 | # define MOUSEKEY_BASE_SPEED 1000 | ||
| 260 | # endif | ||
| 261 | # ifndef MOUSEKEY_DECELERATED_SPEED | ||
| 262 | # define MOUSEKEY_DECELERATED_SPEED 400 | ||
| 263 | # endif | ||
| 264 | # ifndef MOUSEKEY_ACCELERATED_SPEED | ||
| 265 | # define MOUSEKEY_ACCELERATED_SPEED 3000 | ||
| 266 | # endif | ||
| 267 | // mouse scroll config | ||
| 268 | # ifndef MOUSEKEY_WHEEL_DELAY | ||
| 269 | # define MOUSEKEY_WHEEL_DELAY 15 | ||
| 270 | # endif | ||
| 271 | # ifndef MOUSEKEY_WHEEL_DELTA | ||
| 272 | # define MOUSEKEY_WHEEL_DELTA 1 | ||
| 273 | # endif | ||
| 274 | # ifndef MOUSEKEY_WHEEL_INTERVAL | ||
| 275 | # define MOUSEKEY_WHEEL_INTERVAL 50 | ||
| 276 | # endif | ||
| 277 | # ifndef MOUSEKEY_WHEEL_MAX_SPEED | ||
| 278 | # define MOUSEKEY_WHEEL_MAX_SPEED 8 | ||
| 279 | # endif | ||
| 280 | # ifndef MOUSEKEY_WHEEL_TIME_TO_MAX | ||
| 281 | # define MOUSEKEY_WHEEL_TIME_TO_MAX 80 | ||
| 282 | # endif | ||
| 283 | // mouse scroll kinetic config | ||
| 284 | # ifndef MOUSEKEY_WHEEL_INITIAL_MOVEMENTS | ||
| 285 | # define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 8 | ||
| 286 | # endif | ||
| 287 | # ifndef MOUSEKEY_WHEEL_BASE_MOVEMENTS | ||
| 288 | # define MOUSEKEY_WHEEL_BASE_MOVEMENTS 48 | ||
| 289 | # endif | ||
| 290 | # ifndef MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS | ||
| 291 | # define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48 | ||
| 292 | # endif | ||
| 293 | # ifndef MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS | ||
| 294 | # define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8 | ||
| 295 | # endif | ||
| 296 | #endif // MOUSEKEY_ENABLE | ||
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index a49373726..b54d0cfcc 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c | |||
| @@ -86,6 +86,9 @@ void keyboard_post_init_user(void) { | |||
| 86 | #if defined(RGB_MATRIX_ENABLE) | 86 | #if defined(RGB_MATRIX_ENABLE) |
| 87 | keyboard_post_init_rgb_matrix(); | 87 | keyboard_post_init_rgb_matrix(); |
| 88 | #endif | 88 | #endif |
| 89 | #if defined(SPLIT_KEYBOARD) && defined(SPLIT_TRANSACTION_IDS_USER) | ||
| 90 | keyboard_post_init_transport_sync(); | ||
| 91 | #endif | ||
| 89 | keyboard_post_init_keymap(); | 92 | keyboard_post_init_keymap(); |
| 90 | } | 93 | } |
| 91 | 94 | ||
| @@ -100,12 +103,12 @@ void shutdown_user(void) { | |||
| 100 | rgblight_enable_noeeprom(); | 103 | rgblight_enable_noeeprom(); |
| 101 | rgblight_mode_noeeprom(1); | 104 | rgblight_mode_noeeprom(1); |
| 102 | rgblight_setrgb_red(); | 105 | rgblight_setrgb_red(); |
| 103 | #endif // RGBLIGHT_ENABLE | 106 | #endif // RGBLIGHT_ENABLE |
| 104 | #ifdef RGB_MATRIX_ENABLE | 107 | #ifdef RGB_MATRIX_ENABLE |
| 105 | rgb_matrix_set_color_all(0xFF, 0x00, 0x00); | 108 | rgb_matrix_set_color_all(0xFF, 0x00, 0x00); |
| 106 | rgb_matrix_update_pwm_buffers(); | 109 | rgb_matrix_update_pwm_buffers(); |
| 107 | 110 | ||
| 108 | #endif // RGB_MATRIX_ENABLE | 111 | #endif // RGB_MATRIX_ENABLE |
| 109 | shutdown_keymap(); | 112 | shutdown_keymap(); |
| 110 | } | 113 | } |
| 111 | 114 | ||
| @@ -120,7 +123,11 @@ void suspend_power_down_user(void) { | |||
| 120 | 123 | ||
| 121 | __attribute__((weak)) void suspend_wakeup_init_keymap(void) {} | 124 | __attribute__((weak)) void suspend_wakeup_init_keymap(void) {} |
| 122 | 125 | ||
| 123 | void suspend_wakeup_init_user(void) { suspend_wakeup_init_keymap(); } | 126 | void suspend_wakeup_init_user(void) { |
| 127 | if (layer_state_is(_GAMEPAD)) { layer_off(_GAMEPAD); } | ||
| 128 | if (layer_state_is(_DIABLO)) { layer_off(_DIABLO); } | ||
| 129 | suspend_wakeup_init_keymap(); | ||
| 130 | } | ||
| 124 | 131 | ||
| 125 | __attribute__((weak)) void matrix_scan_keymap(void) {} | 132 | __attribute__((weak)) void matrix_scan_keymap(void) {} |
| 126 | 133 | ||
| @@ -135,13 +142,13 @@ void matrix_scan_user(void) { | |||
| 135 | startup_user(); | 142 | startup_user(); |
| 136 | } | 143 | } |
| 137 | 144 | ||
| 138 | #ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code. | 145 | #ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code. |
| 139 | run_diablo_macro_check(); | 146 | run_diablo_macro_check(); |
| 140 | #endif // TAP_DANCE_ENABLE | 147 | #endif // TAP_DANCE_ENABLE |
| 141 | 148 | ||
| 142 | #if defined(RGBLIGHT_ENABLE) | 149 | #if defined(RGBLIGHT_ENABLE) |
| 143 | matrix_scan_rgb_light(); | 150 | matrix_scan_rgb_light(); |
| 144 | #endif // RGBLIGHT_ENABLE | 151 | #endif // RGBLIGHT_ENABLE |
| 145 | #if defined(RGB_MATRIX_ENABLE) | 152 | #if defined(RGB_MATRIX_ENABLE) |
| 146 | matrix_scan_rgb_matrix(); | 153 | matrix_scan_rgb_matrix(); |
| 147 | #endif | 154 | #endif |
| @@ -160,15 +167,13 @@ __attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state) | |||
| 160 | // on layer change, no matter where the change was initiated | 167 | // on layer change, no matter where the change was initiated |
| 161 | // Then runs keymap's layer change check | 168 | // Then runs keymap's layer change check |
| 162 | layer_state_t layer_state_set_user(layer_state_t state) { | 169 | layer_state_t layer_state_set_user(layer_state_t state) { |
| 163 | if (!is_keyboard_master()) { | 170 | if (!is_keyboard_master()) { return state; } |
| 164 | return state; | ||
| 165 | } | ||
| 166 | 171 | ||
| 167 | state = layer_state_set_keymap(state); | 172 | state = layer_state_set_keymap(state); |
| 168 | state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST); | 173 | state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST); |
| 169 | #if defined(RGBLIGHT_ENABLE) | 174 | #if defined(RGBLIGHT_ENABLE) |
| 170 | state = layer_state_set_rgb_light(state); | 175 | state = layer_state_set_rgb_light(state); |
| 171 | #endif // RGBLIGHT_ENABLE | 176 | #endif // RGBLIGHT_ENABLE |
| 172 | #if defined(AUDIO_ENABLE) && !defined(__arm__) | 177 | #if defined(AUDIO_ENABLE) && !defined(__arm__) |
| 173 | static bool is_gamepad_on = false; | 178 | static bool is_gamepad_on = false; |
| 174 | if (layer_state_cmp(state, _GAMEPAD) != is_gamepad_on) { | 179 | if (layer_state_cmp(state, _GAMEPAD) != is_gamepad_on) { |
| @@ -187,15 +192,13 @@ __attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t | |||
| 187 | 192 | ||
| 188 | // Runs state check and changes underglow color and animation | 193 | // Runs state check and changes underglow color and animation |
| 189 | layer_state_t default_layer_state_set_user(layer_state_t state) { | 194 | layer_state_t default_layer_state_set_user(layer_state_t state) { |
| 190 | if (!is_keyboard_master()) { | 195 | if (!is_keyboard_master()) { return state; } |
| 191 | return state; | ||
| 192 | } | ||
| 193 | 196 | ||
| 194 | state = default_layer_state_set_keymap(state); | 197 | state = default_layer_state_set_keymap(state); |
| 195 | #if 0 | 198 | #if 0 |
| 196 | # if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | 199 | # if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) |
| 197 | state = default_layer_state_set_rgb(state); | 200 | state = default_layer_state_set_rgb(state); |
| 198 | # endif // RGBLIGHT_ENABLE | 201 | # endif // RGBLIGHT_ENABLE |
| 199 | #endif | 202 | #endif |
| 200 | return state; | 203 | return state; |
| 201 | } | 204 | } |
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index e37c73bb2..f1d756f74 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | #include "process_records.h" | 22 | #include "process_records.h" |
| 23 | #ifdef TAP_DANCE_ENABLE | 23 | #ifdef TAP_DANCE_ENABLE |
| 24 | # include "tap_dances.h" | 24 | # include "tap_dances.h" |
| 25 | #endif // TAP_DANCE_ENABLE | 25 | #endif // TAP_DANCE_ENABLE |
| 26 | #if defined(RGBLIGHT_ENABLE) | 26 | #if defined(RGBLIGHT_ENABLE) |
| 27 | # include "rgb_stuff.h" | 27 | # include "rgb_stuff.h" |
| 28 | #endif | 28 | #endif |
| @@ -35,6 +35,9 @@ | |||
| 35 | #if defined(PIMORONI_TRACKBALL_ENABLE) | 35 | #if defined(PIMORONI_TRACKBALL_ENABLE) |
| 36 | # include "drivers/sensors/pimoroni_trackball.h" | 36 | # include "drivers/sensors/pimoroni_trackball.h" |
| 37 | #endif | 37 | #endif |
| 38 | #ifdef SPLIT_KEYBOARD | ||
| 39 | # include "transport_sync.h" | ||
| 40 | #endif | ||
| 38 | 41 | ||
| 39 | /* Define layer names */ | 42 | /* Define layer names */ |
| 40 | enum userspace_layers { | 43 | enum userspace_layers { |
| @@ -98,12 +101,12 @@ We use custom codes here, so we can substitute the right stuff | |||
| 98 | # define KC_D3_2 TD(TD_D3_2) | 101 | # define KC_D3_2 TD(TD_D3_2) |
| 99 | # define KC_D3_3 TD(TD_D3_3) | 102 | # define KC_D3_3 TD(TD_D3_3) |
| 100 | # define KC_D3_4 TD(TD_D3_4) | 103 | # define KC_D3_4 TD(TD_D3_4) |
| 101 | #else // TAP_DANCE_ENABLE | 104 | #else // TAP_DANCE_ENABLE |
| 102 | # define KC_D3_1 KC_1 | 105 | # define KC_D3_1 KC_1 |
| 103 | # define KC_D3_2 KC_2 | 106 | # define KC_D3_2 KC_2 |
| 104 | # define KC_D3_3 KC_3 | 107 | # define KC_D3_3 KC_3 |
| 105 | # define KC_D3_4 KC_4 | 108 | # define KC_D3_4 KC_4 |
| 106 | #endif // TAP_DANCE_ENABLE | 109 | #endif // TAP_DANCE_ENABLE |
| 107 | 110 | ||
| 108 | #if defined(DRASHNA_CUSTOM_TRANSPORT) && defined(POINTING_DEVICE_ENABLE) | 111 | #if defined(DRASHNA_CUSTOM_TRANSPORT) && defined(POINTING_DEVICE_ENABLE) |
| 109 | void master_mouse_send(int8_t x, int8_t y); | 112 | void master_mouse_send(int8_t x, int8_t y); |
diff --git a/users/drashna/drashna_font.h b/users/drashna/drashna_font.h index 6a3865a44..46ebf3710 100644 --- a/users/drashna/drashna_font.h +++ b/users/drashna/drashna_font.h | |||
| @@ -5,8 +5,9 @@ | |||
| 5 | 5 | ||
| 6 | #include "progmem.h" | 6 | #include "progmem.h" |
| 7 | 7 | ||
| 8 | // clang-format off | ||
| 8 | static const unsigned char font[] PROGMEM = { | 9 | static const unsigned char font[] PROGMEM = { |
| 9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x00 0 | 10 | 0x07, 0x08, 0x7F, 0x08, 0x07, 0x00, // 0x00 0 |
| 10 | 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, // 0x01 1 | 11 | 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, // 0x01 1 |
| 11 | 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, // 0x02 2 | 12 | 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, // 0x02 2 |
| 12 | 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, // 0x03 3 ♥ | 13 | 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, // 0x03 3 ♥ |
| @@ -1304,3 +1305,5 @@ static const unsigned char font[] PROGMEM = { | |||
| 1304 | 1305 | ||
| 1305 | #endif | 1306 | #endif |
| 1306 | }; | 1307 | }; |
| 1308 | |||
| 1309 | // clang-format on | ||
diff --git a/users/drashna/drashna_transport.c b/users/drashna/drashna_transport.c deleted file mode 100644 index 9df11c9bd..000000000 --- a/users/drashna/drashna_transport.c +++ /dev/null | |||
| @@ -1,603 +0,0 @@ | |||
| 1 | /* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com> | ||
| 2 | * | ||
| 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 | |||
| 17 | #include <string.h> | ||
| 18 | #include <stddef.h> | ||
| 19 | |||
| 20 | #include "matrix.h" | ||
| 21 | #include QMK_KEYBOARD_H | ||
| 22 | |||
| 23 | #define ROWS_PER_HAND (MATRIX_ROWS / 2) | ||
| 24 | #define SYNC_TIMER_OFFSET 2 | ||
| 25 | |||
| 26 | #ifdef RGBLIGHT_ENABLE | ||
| 27 | # include "rgblight.h" | ||
| 28 | #endif | ||
| 29 | |||
| 30 | #ifdef BACKLIGHT_ENABLE | ||
| 31 | # include "backlight.h" | ||
| 32 | #endif | ||
| 33 | |||
| 34 | #ifdef ENCODER_ENABLE | ||
| 35 | # include "encoder.h" | ||
| 36 | static pin_t encoders_pad[] = ENCODERS_PAD_A; | ||
| 37 | # define NUMBER_OF_ENCODERS (sizeof(encoders_pad) / sizeof(pin_t)) | ||
| 38 | #endif | ||
| 39 | |||
| 40 | #ifdef POINTING_DEVICE_ENABLE | ||
| 41 | static uint16_t device_cpi = 0; | ||
| 42 | static int8_t split_mouse_x = 0, split_mouse_y = 0; | ||
| 43 | #endif | ||
| 44 | |||
| 45 | #ifdef OLED_DRIVER_ENABLE | ||
| 46 | # include "oled_driver.h" | ||
| 47 | #endif | ||
| 48 | |||
| 49 | #if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) | ||
| 50 | # include "led_matrix.h" | ||
| 51 | #endif | ||
| 52 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
| 53 | # include "rgb_matrix.h" | ||
| 54 | #endif | ||
| 55 | |||
| 56 | #if defined(USE_I2C) | ||
| 57 | |||
| 58 | # include "i2c_master.h" | ||
| 59 | # include "i2c_slave.h" | ||
| 60 | |||
| 61 | typedef struct _I2C_slave_buffer_t { | ||
| 62 | # ifndef DISABLE_SYNC_TIMER | ||
| 63 | uint32_t sync_timer; | ||
| 64 | # endif | ||
| 65 | # ifdef SPLIT_TRANSPORT_MIRROR | ||
| 66 | matrix_row_t mmatrix[ROWS_PER_HAND]; | ||
| 67 | # endif | ||
| 68 | matrix_row_t smatrix[ROWS_PER_HAND]; | ||
| 69 | # ifdef SPLIT_MODS_ENABLE | ||
| 70 | uint8_t real_mods; | ||
| 71 | uint8_t weak_mods; | ||
| 72 | # ifndef NO_ACTION_ONESHOT | ||
| 73 | uint8_t oneshot_mods; | ||
| 74 | # endif | ||
| 75 | # endif | ||
| 76 | # ifdef BACKLIGHT_ENABLE | ||
| 77 | uint8_t backlight_level; | ||
| 78 | # endif | ||
| 79 | # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) | ||
| 80 | rgblight_syncinfo_t rgblight_sync; | ||
| 81 | # endif | ||
| 82 | # ifdef ENCODER_ENABLE | ||
| 83 | uint8_t encoder_state[NUMBER_OF_ENCODERS]; | ||
| 84 | # endif | ||
| 85 | # ifdef WPM_ENABLE | ||
| 86 | uint8_t current_wpm; | ||
| 87 | # endif | ||
| 88 | # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) | ||
| 89 | led_eeconfig_t led_matrix; | ||
| 90 | bool led_suspend_state; | ||
| 91 | # endif | ||
| 92 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
| 93 | rgb_config_t rgb_matrix; | ||
| 94 | bool rgb_suspend_state; | ||
| 95 | # endif | ||
| 96 | int8_t mouse_x; | ||
| 97 | int8_t mouse_y; | ||
| 98 | uint16_t device_cpi; | ||
| 99 | bool oled_on; | ||
| 100 | layer_state_t t_layer_state; | ||
| 101 | layer_state_t t_default_layer_state; | ||
| 102 | } __attribute__((packed)) I2C_slave_buffer_t; | ||
| 103 | |||
| 104 | static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; | ||
| 105 | |||
| 106 | # define I2C_BACKLIGHT_START offsetof(I2C_slave_buffer_t, backlight_level) | ||
| 107 | # define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync) | ||
| 108 | # define I2C_KEYMAP_MASTER_START offsetof(I2C_slave_buffer_t, mmatrix) | ||
| 109 | # define I2C_KEYMAP_SLAVE_START offsetof(I2C_slave_buffer_t, smatrix) | ||
| 110 | # define I2C_SYNC_TIME_START offsetof(I2C_slave_buffer_t, sync_timer) | ||
| 111 | # define I2C_REAL_MODS_START offsetof(I2C_slave_buffer_t, real_mods) | ||
| 112 | # define I2C_WEAK_MODS_START offsetof(I2C_slave_buffer_t, weak_mods) | ||
| 113 | # define I2C_ONESHOT_MODS_START offsetof(I2C_slave_buffer_t, oneshot_mods) | ||
| 114 | # define I2C_ENCODER_START offsetof(I2C_slave_buffer_t, encoder_state) | ||
| 115 | # define I2C_WPM_START offsetof(I2C_slave_buffer_t, current_wpm) | ||
| 116 | # define I2C_MOUSE_X_START offsetof(I2C_slave_buffer_t, mouse_x) | ||
| 117 | # define I2C_MOUSE_Y_START offsetof(I2C_slave_buffer_t, mouse_y) | ||
| 118 | # define I2C_MOUSE_DPI_START offsetof(I2C_slave_buffer_t, device_cpi) | ||
| 119 | # define I2C_OLED_ON_START offsetof(I2C_slave_buffer_t, oled_on) | ||
| 120 | # define I2C_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_layer_state) | ||
| 121 | # define I2C_DEFAULT_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_default_layer_state) | ||
| 122 | # define I2C_LED_MATRIX_START offsetof(I2C_slave_buffer_t, led_matrix) | ||
| 123 | # define I2C_LED_SUSPEND_START offsetof(I2C_slave_buffer_t, led_suspend_state) | ||
| 124 | # define I2C_RGB_MATRIX_START offsetof(I2C_slave_buffer_t, rgb_matrix) | ||
| 125 | # define I2C_RGB_SUSPEND_START offsetof(I2C_slave_buffer_t, rgb_suspend_state) | ||
| 126 | |||
| 127 | # define TIMEOUT 100 | ||
| 128 | |||
| 129 | # ifndef SLAVE_I2C_ADDRESS | ||
| 130 | # define SLAVE_I2C_ADDRESS 0x32 | ||
| 131 | # endif | ||
| 132 | |||
| 133 | // Get rows from other half over i2c | ||
| 134 | bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { | ||
| 135 | i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_SLAVE_START, (void *)slave_matrix, sizeof(i2c_buffer->smatrix), TIMEOUT); | ||
| 136 | # ifdef SPLIT_TRANSPORT_MIRROR | ||
| 137 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_MASTER_START, (void *)master_matrix, sizeof(i2c_buffer->mmatrix), TIMEOUT); | ||
| 138 | # endif | ||
| 139 | // write backlight info | ||
| 140 | # ifdef BACKLIGHT_ENABLE | ||
| 141 | uint8_t level = is_backlight_enabled() ? get_backlight_level() : 0; | ||
| 142 | if (level != i2c_buffer->backlight_level) { | ||
| 143 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_BACKLIGHT_START, (void *)&level, sizeof(level), TIMEOUT) >= 0) { | ||
| 144 | i2c_buffer->backlight_level = level; | ||
| 145 | } | ||
| 146 | } | ||
| 147 | # endif | ||
| 148 | |||
| 149 | # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) | ||
| 150 | if (rgblight_get_change_flags()) { | ||
| 151 | rgblight_syncinfo_t rgblight_sync; | ||
| 152 | rgblight_get_syncinfo(&rgblight_sync); | ||
| 153 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_START, (void *)&rgblight_sync, sizeof(rgblight_sync), TIMEOUT) >= 0) { | ||
| 154 | rgblight_clear_change_flags(); | ||
| 155 | } | ||
| 156 | } | ||
| 157 | # endif | ||
| 158 | |||
| 159 | # ifdef ENCODER_ENABLE | ||
| 160 | i2c_readReg(SLAVE_I2C_ADDRESS, I2C_ENCODER_START, (void *)i2c_buffer->encoder_state, sizeof(i2c_buffer->encoder_state), TIMEOUT); | ||
| 161 | encoder_update_raw(i2c_buffer->encoder_state); | ||
| 162 | # endif | ||
| 163 | |||
| 164 | # ifdef WPM_ENABLE | ||
| 165 | uint8_t current_wpm = get_current_wpm(); | ||
| 166 | if (current_wpm != i2c_buffer->current_wpm) { | ||
| 167 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_WPM_START, (void *)¤t_wpm, sizeof(current_wpm), TIMEOUT) >= 0) { | ||
| 168 | i2c_buffer->current_wpm = current_wpm; | ||
| 169 | } | ||
| 170 | } | ||
| 171 | # endif | ||
| 172 | |||
| 173 | # ifdef POINTING_DEVICE_ENABLE | ||
| 174 | if (is_keyboard_left()) { | ||
| 175 | report_mouse_t temp_report = pointing_device_get_report(); | ||
| 176 | i2c_readReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_X_START, (void *)&i2c_buffer->mouse_x, sizeof(i2c_buffer->mouse_x), TIMEOUT); | ||
| 177 | temp_report.x = i2c_buffer->mouse_x; | ||
| 178 | i2c_readReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_Y_START, (void *)&i2c_buffer->mouse_y, sizeof(i2c_buffer->mouse_y), TIMEOUT); | ||
| 179 | temp_report.y = i2c_buffer->mouse_y; | ||
| 180 | pointing_device_set_report(temp_report); | ||
| 181 | |||
| 182 | if (device_cpi != i2c_buffer->device_cpi) { | ||
| 183 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_DPI_START, (void *)&device_cpi, sizeof(device_cpi), TIMEOUT) >= 0) { | ||
| 184 | i2c_buffer->device_cpi = device_cpi | ||
| 185 | } | ||
| 186 | } | ||
| 187 | } | ||
| 188 | # endif | ||
| 189 | |||
| 190 | # ifdef SPLIT_MODS_ENABLE | ||
| 191 | uint8_t real_mods = get_mods(); | ||
| 192 | if (real_mods != i2c_buffer->real_mods) { | ||
| 193 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_REAL_MODS_START, (void *)&real_mods, sizeof(real_mods), TIMEOUT) >= 0) { | ||
| 194 | i2c_buffer->real_mods = real_mods; | ||
| 195 | } | ||
| 196 | } | ||
| 197 | |||
| 198 | uint8_t weak_mods = get_weak_mods(); | ||
| 199 | if (weak_mods != i2c_buffer->weak_mods) { | ||
| 200 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_WEAK_MODS_START, (void *)&weak_mods, sizeof(weak_mods), TIMEOUT) >= 0) { | ||
| 201 | i2c_buffer->weak_mods = weak_mods; | ||
| 202 | } | ||
| 203 | } | ||
| 204 | |||
| 205 | # ifndef NO_ACTION_ONESHOT | ||
| 206 | uint8_t oneshot_mods = get_oneshot_mods(); | ||
| 207 | if (oneshot_mods != i2c_buffer->oneshot_mods) { | ||
| 208 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_ONESHOT_MODS_START, (void *)&oneshot_mods, sizeof(oneshot_mods), TIMEOUT) >= 0) { | ||
| 209 | i2c_buffer->oneshot_mods = oneshot_mods; | ||
| 210 | } | ||
| 211 | } | ||
| 212 | # endif | ||
| 213 | # endif | ||
| 214 | |||
| 215 | if (layer_state != i2c_buffer->t_layer_state) { | ||
| 216 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LAYER_STATE_START, (void *)&layer_state, sizeof(layer_state), TIMEOUT) >= 0) { | ||
| 217 | i2c_buffer->t_layer_state = layer_state; | ||
| 218 | } | ||
| 219 | } | ||
| 220 | |||
| 221 | if (default_layer_state != i2c_buffer->t_default_layer_state) { | ||
| 222 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_DEFAULT_LAYER_STATE_START, (void *)&default_layer_state, sizeof(default_layer_state), TIMEOUT) >= 0) { | ||
| 223 | i2c_buffer->t_default_layer_state = default_layer_state; | ||
| 224 | } | ||
| 225 | } | ||
| 226 | |||
| 227 | # ifdef OLED_DRIVER_ENABLE | ||
| 228 | bool is_oled_on = is_oled_on(); | ||
| 229 | if (is_oled_on != i2c_buffer->oled_on) { | ||
| 230 | if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LAYER_STATE_START, (void *)&is_oled_on, sizeof(is_oled_on), TIMEOUT) >= 0) { | ||
| 231 | i2c_buffer->oled_on = is_oled_on; | ||
| 232 | } | ||
| 233 | } | ||
| 234 | # endif | ||
| 235 | |||
| 236 | # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) | ||
| 237 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_MATRIX_START, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix), TIMEOUT); | ||
| 238 | bool suspend_state = led_matrix_get_suspend_state(); | ||
| 239 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->led_suspend_state), TIMEOUT); | ||
| 240 | # endif | ||
| 241 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
| 242 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_START, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix), TIMEOUT); | ||
| 243 | bool suspend_state = rgb_matrix_get_suspend_state(); | ||
| 244 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->rgb_suspend_state), TIMEOUT); | ||
| 245 | # endif | ||
| 246 | |||
| 247 | # ifndef DISABLE_SYNC_TIMER | ||
| 248 | i2c_buffer->sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET; | ||
| 249 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_SYNC_TIME_START, (void *)&i2c_buffer->sync_timer, sizeof(i2c_buffer->sync_timer), TIMEOUT); | ||
| 250 | # endif | ||
| 251 | |||
| 252 | return true; | ||
| 253 | } | ||
| 254 | |||
| 255 | void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { | ||
| 256 | # ifndef DISABLE_SYNC_TIMER | ||
| 257 | sync_timer_update(i2c_buffer->sync_timer); | ||
| 258 | # endif | ||
| 259 | // Copy matrix to I2C buffer | ||
| 260 | memcpy((void *)i2c_buffer->smatrix, (void *)slave_matrix, sizeof(i2c_buffer->smatrix)); | ||
| 261 | # ifdef SPLIT_TRANSPORT_MIRROR | ||
| 262 | memcpy((void *)master_matrix, (void *)i2c_buffer->mmatrix, sizeof(i2c_buffer->mmatrix)); | ||
| 263 | # endif | ||
| 264 | |||
| 265 | // Read Backlight Info | ||
| 266 | # ifdef BACKLIGHT_ENABLE | ||
| 267 | backlight_set(i2c_buffer->backlight_level); | ||
| 268 | # endif | ||
| 269 | |||
| 270 | # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) | ||
| 271 | // Update the RGB with the new data | ||
| 272 | if (i2c_buffer->rgblight_sync.status.change_flags != 0) { | ||
| 273 | rgblight_update_sync(&i2c_buffer->rgblight_sync, false); | ||
| 274 | i2c_buffer->rgblight_sync.status.change_flags = 0; | ||
| 275 | } | ||
| 276 | # endif | ||
| 277 | |||
| 278 | # ifdef ENCODER_ENABLE | ||
| 279 | encoder_state_raw(i2c_buffer->encoder_state); | ||
| 280 | # endif | ||
| 281 | |||
| 282 | # ifdef WPM_ENABLE | ||
| 283 | set_current_wpm(i2c_buffer->current_wpm); | ||
| 284 | # endif | ||
| 285 | |||
| 286 | # ifdef POINTING_DEVICE_ENABLE | ||
| 287 | if (!is_keyboard_left()) { | ||
| 288 | static uint16_t cpi; | ||
| 289 | if (cpi != i2c_buffer->device_cpi) { | ||
| 290 | cpi = i2c_buffer->device_cpi; | ||
| 291 | pmw_set_cpi(cpi); | ||
| 292 | } | ||
| 293 | i2c_buffer->mouse_x = split_mouse_x; | ||
| 294 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_X_START, (void *)&i2c_buffer->mouse_x, sizeof(i2c_buffer->mouse_x), TIMEOUT); | ||
| 295 | i2c_buffer->mouse_y = split_mouse_y; | ||
| 296 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_Y_START, (void *)&i2c_buffer->mouse_y, sizeof(i2c_buffer->mouse_y), TIMEOUT); | ||
| 297 | } | ||
| 298 | |||
| 299 | # endif | ||
| 300 | |||
| 301 | # ifdef SPLIT_MODS_ENABLE | ||
| 302 | set_mods(i2c_buffer->real_mods); | ||
| 303 | set_weak_mods(i2c_buffer->weak_mods); | ||
| 304 | # ifndef NO_ACTION_ONESHOT | ||
| 305 | set_oneshot_mods(i2c_buffer->oneshot_mods); | ||
| 306 | # endif | ||
| 307 | # endif | ||
| 308 | |||
| 309 | if (layer_state != i2c_buffer->t_layer_state) { | ||
| 310 | layer_state = i2c_buffer->t_layer_state; | ||
| 311 | } | ||
| 312 | if (default_layer_state != i2c_buffer->t_default_layer_state) { | ||
| 313 | default_layer_state = i2c_buffer->t_default_layer_state; | ||
| 314 | } | ||
| 315 | |||
| 316 | # ifdef OLED_DRIVER_ENABLE | ||
| 317 | if (i2c_buffer->oled_on) { | ||
| 318 | oled_on(); | ||
| 319 | } else { | ||
| 320 | oled_off(); | ||
| 321 | } | ||
| 322 | # endif | ||
| 323 | |||
| 324 | # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) | ||
| 325 | memcpy((void *)i2c_buffer->led_matrix, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix)); | ||
| 326 | led_matrix_set_suspend_state(i2c_buffer->led_suspend_state); | ||
| 327 | # endif | ||
| 328 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
| 329 | memcpy((void *)i2c_buffer->rgb_matrix, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix)); | ||
| 330 | rgb_matrix_set_suspend_state(i2c_buffer->rgb_suspend_state); | ||
| 331 | # endif | ||
| 332 | } | ||
| 333 | |||
| 334 | void transport_master_init(void) { i2c_init(); } | ||
| 335 | |||
| 336 | void transport_slave_init(void) { i2c_slave_init(SLAVE_I2C_ADDRESS); } | ||
| 337 | |||
| 338 | #else // USE_SERIAL | ||
| 339 | |||
| 340 | # include "serial.h" | ||
| 341 | |||
| 342 | typedef struct _Serial_s2m_buffer_t { | ||
| 343 | // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack | ||
| 344 | matrix_row_t smatrix[ROWS_PER_HAND]; | ||
| 345 | # ifdef ENCODER_ENABLE | ||
| 346 | uint8_t encoder_state[NUMBER_OF_ENCODERS]; | ||
| 347 | # endif | ||
| 348 | int8_t mouse_x; | ||
| 349 | int8_t mouse_y; | ||
| 350 | } __attribute__((packed)) Serial_s2m_buffer_t; | ||
| 351 | |||
| 352 | typedef struct _Serial_m2s_buffer_t { | ||
| 353 | # ifdef SPLIT_MODS_ENABLE | ||
| 354 | uint8_t real_mods; | ||
| 355 | uint8_t weak_mods; | ||
| 356 | # ifndef NO_ACTION_ONESHOT | ||
| 357 | uint8_t oneshot_mods; | ||
| 358 | # endif | ||
| 359 | # endif | ||
| 360 | # ifndef DISABLE_SYNC_TIMER | ||
| 361 | uint32_t sync_timer; | ||
| 362 | # endif | ||
| 363 | # ifdef SPLIT_TRANSPORT_MIRROR | ||
| 364 | matrix_row_t mmatrix[ROWS_PER_HAND]; | ||
| 365 | # endif | ||
| 366 | # ifdef BACKLIGHT_ENABLE | ||
| 367 | uint8_t backlight_level; | ||
| 368 | # endif | ||
| 369 | # ifdef WPM_ENABLE | ||
| 370 | uint8_t current_wpm; | ||
| 371 | # endif | ||
| 372 | uint16_t device_cpi; | ||
| 373 | bool oled_on; | ||
| 374 | layer_state_t t_layer_state; | ||
| 375 | layer_state_t t_default_layer_state; | ||
| 376 | # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) | ||
| 377 | led_eeconfig_t led_matrix; | ||
| 378 | bool led_suspend_state; | ||
| 379 | # endif | ||
| 380 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
| 381 | rgb_config_t rgb_matrix; | ||
| 382 | bool rgb_suspend_state; | ||
| 383 | # endif | ||
| 384 | } __attribute__((packed)) Serial_m2s_buffer_t; | ||
| 385 | |||
| 386 | # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) | ||
| 387 | // When MCUs on both sides drive their respective RGB LED chains, | ||
| 388 | // it is necessary to synchronize, so it is necessary to communicate RGB | ||
| 389 | // information. In that case, define RGBLIGHT_SPLIT with info on the number | ||
| 390 | // of LEDs on each half. | ||
| 391 | // | ||
| 392 | // Otherwise, if the master side MCU drives both sides RGB LED chains, | ||
| 393 | // there is no need to communicate. | ||
| 394 | |||
| 395 | typedef struct _Serial_rgblight_t { | ||
| 396 | rgblight_syncinfo_t rgblight_sync; | ||
| 397 | } Serial_rgblight_t; | ||
| 398 | |||
| 399 | volatile Serial_rgblight_t serial_rgblight = {}; | ||
| 400 | uint8_t volatile status_rgblight = 0; | ||
| 401 | # endif | ||
| 402 | |||
| 403 | volatile Serial_s2m_buffer_t serial_s2m_buffer = {}; | ||
| 404 | volatile Serial_m2s_buffer_t serial_m2s_buffer = {}; | ||
| 405 | uint8_t volatile status0 = 0; | ||
| 406 | |||
| 407 | enum serial_transaction_id { | ||
| 408 | GET_SLAVE_MATRIX = 0, | ||
| 409 | # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) | ||
| 410 | PUT_RGBLIGHT, | ||
| 411 | # endif | ||
| 412 | }; | ||
| 413 | |||
| 414 | SSTD_t transactions[] = { | ||
| 415 | [GET_SLAVE_MATRIX] = | ||
| 416 | { | ||
| 417 | (uint8_t *)&status0, | ||
| 418 | sizeof(serial_m2s_buffer), | ||
| 419 | (uint8_t *)&serial_m2s_buffer, | ||
| 420 | sizeof(serial_s2m_buffer), | ||
| 421 | (uint8_t *)&serial_s2m_buffer, | ||
| 422 | }, | ||
| 423 | # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) | ||
| 424 | [PUT_RGBLIGHT] = | ||
| 425 | { | ||
| 426 | (uint8_t *)&status_rgblight, sizeof(serial_rgblight), (uint8_t *)&serial_rgblight, 0, NULL // no slave to master transfer | ||
| 427 | }, | ||
| 428 | # endif | ||
| 429 | }; | ||
| 430 | |||
| 431 | void transport_master_init(void) { soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); } | ||
| 432 | |||
| 433 | void transport_slave_init(void) { soft_serial_target_init(transactions, TID_LIMIT(transactions)); } | ||
| 434 | |||
| 435 | # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) | ||
| 436 | |||
| 437 | // rgblight synchronization information communication. | ||
| 438 | |||
| 439 | void transport_rgblight_master(void) { | ||
| 440 | if (rgblight_get_change_flags()) { | ||
| 441 | rgblight_get_syncinfo((rgblight_syncinfo_t *)&serial_rgblight.rgblight_sync); | ||
| 442 | if (soft_serial_transaction(PUT_RGBLIGHT) == TRANSACTION_END) { | ||
| 443 | rgblight_clear_change_flags(); | ||
| 444 | } | ||
| 445 | } | ||
| 446 | } | ||
| 447 | |||
| 448 | void transport_rgblight_slave(void) { | ||
| 449 | if (status_rgblight == TRANSACTION_ACCEPTED) { | ||
| 450 | rgblight_update_sync((rgblight_syncinfo_t *)&serial_rgblight.rgblight_sync, false); | ||
| 451 | status_rgblight = TRANSACTION_END; | ||
| 452 | } | ||
| 453 | } | ||
| 454 | |||
| 455 | # else | ||
| 456 | # define transport_rgblight_master() | ||
| 457 | # define transport_rgblight_slave() | ||
| 458 | # endif | ||
| 459 | |||
| 460 | bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { | ||
| 461 | # ifndef SERIAL_USE_MULTI_TRANSACTION | ||
| 462 | if (soft_serial_transaction() != TRANSACTION_END) { | ||
| 463 | return false; | ||
| 464 | } | ||
| 465 | # else | ||
| 466 | transport_rgblight_master(); | ||
| 467 | if (soft_serial_transaction(GET_SLAVE_MATRIX) != TRANSACTION_END) { | ||
| 468 | return false; | ||
| 469 | } | ||
| 470 | # endif | ||
| 471 | |||
| 472 | // TODO: if MATRIX_COLS > 8 change to unpack() | ||
| 473 | for (int i = 0; i < ROWS_PER_HAND; ++i) { | ||
| 474 | slave_matrix[i] = serial_s2m_buffer.smatrix[i]; | ||
| 475 | # ifdef SPLIT_TRANSPORT_MIRROR | ||
| 476 | serial_m2s_buffer.mmatrix[i] = master_matrix[i]; | ||
| 477 | # endif | ||
| 478 | } | ||
| 479 | |||
| 480 | # ifdef BACKLIGHT_ENABLE | ||
| 481 | // Write backlight level for slave to read | ||
| 482 | serial_m2s_buffer.backlight_level = is_backlight_enabled() ? get_backlight_level() : 0; | ||
| 483 | # endif | ||
| 484 | |||
| 485 | # ifdef ENCODER_ENABLE | ||
| 486 | encoder_update_raw((uint8_t *)serial_s2m_buffer.encoder_state); | ||
| 487 | # endif | ||
| 488 | |||
| 489 | # ifdef WPM_ENABLE | ||
| 490 | // Write wpm to slave | ||
| 491 | serial_m2s_buffer.current_wpm = get_current_wpm(); | ||
| 492 | # endif | ||
| 493 | |||
| 494 | # ifdef SPLIT_MODS_ENABLE | ||
| 495 | serial_m2s_buffer.real_mods = get_mods(); | ||
| 496 | serial_m2s_buffer.weak_mods = get_weak_mods(); | ||
| 497 | # ifndef NO_ACTION_ONESHOT | ||
| 498 | serial_m2s_buffer.oneshot_mods = get_oneshot_mods(); | ||
| 499 | # endif | ||
| 500 | # endif | ||
| 501 | |||
| 502 | # ifdef POINTING_DEVICE_ENABLE | ||
| 503 | if (is_keyboard_left()) { | ||
| 504 | report_mouse_t temp_report = pointing_device_get_report(); | ||
| 505 | temp_report.x = serial_s2m_buffer.mouse_x; | ||
| 506 | temp_report.y = serial_s2m_buffer.mouse_y; | ||
| 507 | pointing_device_set_report(temp_report); | ||
| 508 | serial_m2s_buffer.device_cpi = device_cpi; | ||
| 509 | } | ||
| 510 | # endif | ||
| 511 | |||
| 512 | serial_m2s_buffer.t_layer_state = layer_state; | ||
| 513 | serial_m2s_buffer.t_default_layer_state = default_layer_state; | ||
| 514 | # ifdef OLED_DRIVER_ENABLE | ||
| 515 | serial_m2s_buffer.oled_on = is_oled_on(); | ||
| 516 | # endif | ||
| 517 | |||
| 518 | # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) | ||
| 519 | serial_m2s_buffer.led_matrix = led_matrix_eeconfig; | ||
| 520 | serial_m2s_buffer.led_suspend_state = led_matrix_get_suspend_state(); | ||
| 521 | # endif | ||
| 522 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
| 523 | serial_m2s_buffer.rgb_matrix = rgb_matrix_config; | ||
| 524 | serial_m2s_buffer.rgb_suspend_state = rgb_matrix_get_suspend_state(); | ||
| 525 | # endif | ||
| 526 | |||
| 527 | # ifndef DISABLE_SYNC_TIMER | ||
| 528 | serial_m2s_buffer.sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET; | ||
| 529 | # endif | ||
| 530 | return true; | ||
| 531 | } | ||
| 532 | |||
| 533 | void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { | ||
| 534 | transport_rgblight_slave(); | ||
| 535 | # ifndef DISABLE_SYNC_TIMER | ||
| 536 | sync_timer_update(serial_m2s_buffer.sync_timer); | ||
| 537 | # endif | ||
| 538 | |||
| 539 | // TODO: if MATRIX_COLS > 8 change to pack() | ||
| 540 | for (int i = 0; i < ROWS_PER_HAND; ++i) { | ||
| 541 | serial_s2m_buffer.smatrix[i] = slave_matrix[i]; | ||
| 542 | # ifdef SPLIT_TRANSPORT_MIRROR | ||
| 543 | master_matrix[i] = serial_m2s_buffer.mmatrix[i]; | ||
| 544 | # endif | ||
| 545 | } | ||
| 546 | |||
| 547 | # ifdef BACKLIGHT_ENABLE | ||
| 548 | backlight_set(serial_m2s_buffer.backlight_level); | ||
| 549 | # endif | ||
| 550 | |||
| 551 | # ifdef ENCODER_ENABLE | ||
| 552 | encoder_state_raw((uint8_t *)serial_s2m_buffer.encoder_state); | ||
| 553 | # endif | ||
| 554 | |||
| 555 | # ifdef WPM_ENABLE | ||
| 556 | set_current_wpm(serial_m2s_buffer.current_wpm); | ||
| 557 | # endif | ||
| 558 | |||
| 559 | # ifdef SPLIT_MODS_ENABLE | ||
| 560 | set_mods(serial_m2s_buffer.real_mods); | ||
| 561 | set_weak_mods(serial_m2s_buffer.weak_mods); | ||
| 562 | # ifndef NO_ACTION_ONESHOT | ||
| 563 | set_oneshot_mods(serial_m2s_buffer.oneshot_mods); | ||
| 564 | # endif | ||
| 565 | # endif | ||
| 566 | |||
| 567 | # ifdef POINTING_DEVICE_ENABLE | ||
| 568 | if (!is_keyboard_left()) { | ||
| 569 | static uint16_t cpi; | ||
| 570 | if (cpi != serial_m2s_buffer.device_cpi) { | ||
| 571 | cpi = serial_m2s_buffer.device_cpi; | ||
| 572 | pmw_set_cpi(cpi); | ||
| 573 | } | ||
| 574 | serial_s2m_buffer.mouse_x = split_mouse_x; | ||
| 575 | serial_s2m_buffer.mouse_y = split_mouse_y; | ||
| 576 | } | ||
| 577 | # endif | ||
| 578 | |||
| 579 | if (layer_state != serial_m2s_buffer.t_layer_state) { | ||
| 580 | layer_state = serial_m2s_buffer.t_layer_state; | ||
| 581 | } | ||
| 582 | if (default_layer_state != serial_m2s_buffer.t_default_layer_state) { | ||
| 583 | default_layer_state = serial_m2s_buffer.t_default_layer_state; | ||
| 584 | } | ||
| 585 | # ifdef OLED_DRIVER_ENABLE | ||
| 586 | if (serial_m2s_buffer.oled_on) { | ||
| 587 | oled_on(); | ||
| 588 | } else { | ||
| 589 | oled_off(); | ||
| 590 | } | ||
| 591 | # endif | ||
| 592 | |||
| 593 | # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) | ||
| 594 | led_matrix_eeconfig = serial_m2s_buffer.led_matrix; | ||
| 595 | led_matrix_set_suspend_state(serial_m2s_buffer.led_suspend_state); | ||
| 596 | # endif | ||
| 597 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
| 598 | rgb_matrix_config = serial_m2s_buffer.rgb_matrix; | ||
| 599 | rgb_matrix_set_suspend_state(serial_m2s_buffer.rgb_suspend_state); | ||
| 600 | # endif | ||
| 601 | } | ||
| 602 | |||
| 603 | #endif | ||
diff --git a/users/drashna/oled_stuff.c b/users/drashna/oled_stuff.c index 98e467d93..253c5181e 100644 --- a/users/drashna/oled_stuff.c +++ b/users/drashna/oled_stuff.c | |||
| @@ -25,7 +25,7 @@ | |||
| 25 | #endif | 25 | #endif |
| 26 | 26 | ||
| 27 | uint32_t oled_timer = 0; | 27 | uint32_t oled_timer = 0; |
| 28 | static char keylog_str[KEYLOGGER_LENGTH + 1] = {"\n"}; | 28 | static char keylog_str[KEYLOGGER_LENGTH + 1] = { 0 }; |
| 29 | static uint16_t log_timer = 0; | 29 | static uint16_t log_timer = 0; |
| 30 | 30 | ||
| 31 | // clang-format off | 31 | // clang-format off |
| @@ -57,12 +57,12 @@ void add_keylog(uint16_t keycode) { | |||
| 57 | keycode = 0; | 57 | keycode = 0; |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | for (uint8_t i = (KEYLOGGER_LENGTH - 1); i > 0; --i) { | 60 | for (uint8_t i = 1; i < KEYLOGGER_LENGTH; i++) { |
| 61 | keylog_str[i] = keylog_str[i - 1]; | 61 | keylog_str[i-1] = keylog_str[i]; |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | if (keycode < (sizeof(code_to_name) / sizeof(char))) { | 64 | if (keycode < (sizeof(code_to_name) / sizeof(char))) { |
| 65 | keylog_str[0] = pgm_read_byte(&code_to_name[keycode]); | 65 | keylog_str[(KEYLOGGER_LENGTH - 1)] = pgm_read_byte(&code_to_name[keycode]); |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | log_timer = timer_read(); | 68 | log_timer = timer_read(); |
| @@ -92,30 +92,14 @@ void render_keylogger_status(void) { | |||
| 92 | void render_default_layer_state(void) { | 92 | void render_default_layer_state(void) { |
| 93 | oled_write_P(PSTR(OLED_RENDER_LAYOUT_NAME), false); | 93 | oled_write_P(PSTR(OLED_RENDER_LAYOUT_NAME), false); |
| 94 | switch (get_highest_layer(default_layer_state)) { | 94 | switch (get_highest_layer(default_layer_state)) { |
| 95 | case _QWERTY: | 95 | case _QWERTY: oled_write_P(PSTR(OLED_RENDER_LAYOUT_QWERTY), false); break; |
| 96 | oled_write_P(PSTR(OLED_RENDER_LAYOUT_QWERTY), false); | 96 | case _COLEMAK: oled_write_P(PSTR(OLED_RENDER_LAYOUT_COLEMAK), false); break; |
| 97 | break; | 97 | case _DVORAK: oled_write_P(PSTR(OLED_RENDER_LAYOUT_DVORAK), false); break; |
| 98 | case _COLEMAK: | 98 | case _WORKMAN: oled_write_P(PSTR(OLED_RENDER_LAYOUT_WORKMAN), false); break; |
| 99 | oled_write_P(PSTR(OLED_RENDER_LAYOUT_COLEMAK), false); | 99 | case _NORMAN: oled_write_P(PSTR(OLED_RENDER_LAYOUT_NORMAN), false); break; |
| 100 | break; | 100 | case _MALTRON: oled_write_P(PSTR(OLED_RENDER_LAYOUT_MALTRON), false); break; |
| 101 | case _DVORAK: | 101 | case _EUCALYN: oled_write_P(PSTR(OLED_RENDER_LAYOUT_EUCALYN), false); break; |
| 102 | oled_write_P(PSTR(OLED_RENDER_LAYOUT_DVORAK), false); | 102 | case _CARPLAX: oled_write_P(PSTR(OLED_RENDER_LAYOUT_CARPLAX), false); break; |
| 103 | break; | ||
| 104 | case _WORKMAN: | ||
| 105 | oled_write_P(PSTR(OLED_RENDER_LAYOUT_WORKMAN), false); | ||
| 106 | break; | ||
| 107 | case _NORMAN: | ||
| 108 | oled_write_P(PSTR(OLED_RENDER_LAYOUT_NORMAN), false); | ||
| 109 | break; | ||
| 110 | case _MALTRON: | ||
| 111 | oled_write_P(PSTR(OLED_RENDER_LAYOUT_MALTRON), false); | ||
| 112 | break; | ||
| 113 | case _EUCALYN: | ||
| 114 | oled_write_P(PSTR(OLED_RENDER_LAYOUT_EUCALYN), false); | ||
| 115 | break; | ||
| 116 | case _CARPLAX: | ||
| 117 | oled_write_P(PSTR(OLED_RENDER_LAYOUT_CARPLAX), false); | ||
| 118 | break; | ||
| 119 | } | 103 | } |
| 120 | #ifdef OLED_DISPLAY_128X64 | 104 | #ifdef OLED_DISPLAY_128X64 |
| 121 | oled_advance_page(true); | 105 | oled_advance_page(true); |
| @@ -159,12 +143,12 @@ void render_keylock_status(uint8_t led_usb_state) { | |||
| 159 | } | 143 | } |
| 160 | void render_matrix_scan_rate(void) { | 144 | void render_matrix_scan_rate(void) { |
| 161 | #ifdef DEBUG_MATRIX_SCAN_RATE | 145 | #ifdef DEBUG_MATRIX_SCAN_RATE |
| 162 | char matrix_rate[5]; | 146 | char matrix_rate[5]; |
| 163 | uint16_t n = get_matrix_scan_rate(); | 147 | uint16_t n = get_matrix_scan_rate(); |
| 164 | matrix_rate[4] = '\0'; | 148 | matrix_rate[4] = '\0'; |
| 165 | matrix_rate[3] = '0' + n % 10; | 149 | matrix_rate[3] = '0' + n % 10; |
| 166 | matrix_rate[2] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; | 150 | matrix_rate[2] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; |
| 167 | matrix_rate[1] = n / 10 ? '0' + n / 10 : ' '; | 151 | matrix_rate[1] = n / 10 ? '0' + n / 10 : ' '; |
| 168 | matrix_rate[0] = ' '; | 152 | matrix_rate[0] = ' '; |
| 169 | oled_write_P(PSTR("MS:"), false); | 153 | oled_write_P(PSTR("MS:"), false); |
| 170 | oled_write(matrix_rate, false); | 154 | oled_write(matrix_rate, false); |
| @@ -284,6 +268,10 @@ void render_user_status(void) { | |||
| 284 | oled_write_P(rgb_layer_status[userspace_config.rgb_layer_change], false); | 268 | oled_write_P(rgb_layer_status[userspace_config.rgb_layer_change], false); |
| 285 | static const char PROGMEM nukem_good[2][3] = {{0xF8, 0xF9, 0}, {0xF6, 0xF7, 0}}; | 269 | static const char PROGMEM nukem_good[2][3] = {{0xF8, 0xF9, 0}, {0xF6, 0xF7, 0}}; |
| 286 | oled_write_P(nukem_good[0], userspace_config.nuke_switch); | 270 | oled_write_P(nukem_good[0], userspace_config.nuke_switch); |
| 271 | #if defined(UNICODE_ENABLE) | ||
| 272 | static const char PROGMEM uc_mod_status[5][3] = {{0xEA, 0xEB, 0}, {0xEC, 0xED, 0}}; | ||
| 273 | oled_write_P(uc_mod_status[get_unicode_input_mode() == UC_MAC], false); | ||
| 274 | #endif | ||
| 287 | #if defined(OLED_DISPLAY_128X64) | 275 | #if defined(OLED_DISPLAY_128X64) |
| 288 | oled_advance_page(true); | 276 | oled_advance_page(true); |
| 289 | #endif | 277 | #endif |
| @@ -306,34 +294,34 @@ void render_wpm(void) { | |||
| 306 | char wpm_counter[4]; | 294 | char wpm_counter[4]; |
| 307 | wpm_counter[3] = '\0'; | 295 | wpm_counter[3] = '\0'; |
| 308 | wpm_counter[2] = '0' + n % 10; | 296 | wpm_counter[2] = '0' + n % 10; |
| 309 | wpm_counter[1] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; | 297 | wpm_counter[1] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; |
| 310 | wpm_counter[0] = n / 10 ? '0' + n / 10 : ' '; | 298 | wpm_counter[0] = n / 10 ? '0' + n / 10 : ' '; |
| 311 | # else | 299 | # else |
| 312 | char wpm_counter[6]; | 300 | char wpm_counter[6]; |
| 313 | wpm_counter[5] = '\0'; | 301 | wpm_counter[5] = '\0'; |
| 314 | wpm_counter[4] = '0' + n % 10; | 302 | wpm_counter[4] = '0' + n % 10; |
| 315 | wpm_counter[3] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; | 303 | wpm_counter[3] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; |
| 316 | wpm_counter[2] = n / 10 ? '0' + n / 10 : ' '; | 304 | wpm_counter[2] = n / 10 ? '0' + n / 10 : ' '; |
| 317 | wpm_counter[1] = ' '; | 305 | wpm_counter[1] = ' '; |
| 318 | wpm_counter[0] = ' '; | 306 | wpm_counter[0] = ' '; |
| 319 | # endif | 307 | # endif |
| 320 | oled_write_P(PSTR(OLED_RENDER_WPM_COUNTER), false); | 308 | oled_write_P(PSTR(OLED_RENDER_WPM_COUNTER), false); |
| 321 | oled_write(wpm_counter, false); | 309 | oled_write(wpm_counter, false); |
| 322 | #endif | 310 | #endif |
| 323 | } | 311 | } |
| 324 | 312 | ||
| 325 | #ifdef KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball | 313 | #if defined(KEYBOARD_handwired_tractyl_manuform_5x6_right) |
| 326 | extern keyboard_config_t keyboard_config; | 314 | extern keyboard_config_t keyboard_config; |
| 327 | extern uint16_t dpi_array[]; | 315 | extern uint16_t dpi_array[]; |
| 328 | 316 | ||
| 329 | void render_pointing_dpi_status(void) { | 317 | void render_pointing_dpi_status(void) { |
| 330 | char dpi_status[6]; | 318 | char dpi_status[6]; |
| 331 | uint16_t n = dpi_array[keyboard_config.dpi_config]; | 319 | uint16_t n = dpi_array[keyboard_config.dpi_config]; |
| 332 | dpi_status[5] = '\0'; | 320 | dpi_status[5] = '\0'; |
| 333 | dpi_status[4] = '0' + n % 10; | 321 | dpi_status[4] = '0' + n % 10; |
| 334 | dpi_status[3] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; | 322 | dpi_status[3] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; |
| 335 | dpi_status[2] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; | 323 | dpi_status[2] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; |
| 336 | dpi_status[1] = n / 10 ? '0' + n / 10 : ' '; | 324 | dpi_status[1] = n / 10 ? '0' + n / 10 : ' '; |
| 337 | dpi_status[0] = ' '; | 325 | dpi_status[0] = ' '; |
| 338 | oled_write_P(PSTR(" DPI: "), false); | 326 | oled_write_P(PSTR(" DPI: "), false); |
| 339 | oled_write(dpi_status, false); | 327 | oled_write(dpi_status, false); |
| @@ -360,7 +348,7 @@ void render_status_main(void) { | |||
| 360 | # else | 348 | # else |
| 361 | render_wpm(); | 349 | render_wpm(); |
| 362 | # endif | 350 | # endif |
| 363 | # ifdef KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball | 351 | # if defined(KEYBOARD_handwired_tractyl_manuform_5x6_right) |
| 364 | render_pointing_dpi_status(); | 352 | render_pointing_dpi_status(); |
| 365 | # endif | 353 | # endif |
| 366 | oled_write_P(PSTR("\n"), false); | 354 | oled_write_P(PSTR("\n"), false); |
| @@ -375,6 +363,15 @@ void render_status_main(void) { | |||
| 375 | render_keylogger_status(); | 363 | render_keylogger_status(); |
| 376 | } | 364 | } |
| 377 | 365 | ||
| 366 | __attribute__((weak)) oled_rotation_t oled_init_keymap(oled_rotation_t rotation) { return rotation; } | ||
| 367 | |||
| 368 | oled_rotation_t oled_init_user(oled_rotation_t rotation) { | ||
| 369 | for (uint8_t i = 0; i < (KEYLOGGER_LENGTH - 1); i++) { | ||
| 370 | add_keylog(0); | ||
| 371 | } | ||
| 372 | return oled_init_keymap(rotation); | ||
| 373 | } | ||
| 374 | |||
| 378 | void oled_task_user(void) { | 375 | void oled_task_user(void) { |
| 379 | update_log(); | 376 | update_log(); |
| 380 | 377 | ||
| @@ -385,7 +382,7 @@ void oled_task_user(void) { | |||
| 385 | } else { | 382 | } else { |
| 386 | oled_on(); | 383 | oled_on(); |
| 387 | } | 384 | } |
| 388 | render_status_main(); // Renders the current keyboard state (layer, lock, caps, scroll, etc) | 385 | render_status_main(); // Renders the current keyboard state (layer, lock, caps, scroll, etc) |
| 389 | } else { | 386 | } else { |
| 390 | render_status_secondary(); | 387 | render_status_secondary(); |
| 391 | } | 388 | } |
diff --git a/users/drashna/oled_stuff.h b/users/drashna/oled_stuff.h index 1f4440bd4..ad9cf09ed 100644 --- a/users/drashna/oled_stuff.h +++ b/users/drashna/oled_stuff.h | |||
| @@ -19,97 +19,98 @@ | |||
| 19 | #include "quantum.h" | 19 | #include "quantum.h" |
| 20 | #include "oled_driver.h" | 20 | #include "oled_driver.h" |
| 21 | 21 | ||
| 22 | void oled_driver_render_logo(void); | 22 | void oled_driver_render_logo(void); |
| 23 | bool process_record_user_oled(uint16_t keycode, keyrecord_t *record); | 23 | bool process_record_user_oled(uint16_t keycode, keyrecord_t *record); |
| 24 | oled_rotation_t oled_init_keymap(oled_rotation_t rotation); | ||
| 24 | extern uint32_t oled_timer; | 25 | extern uint32_t oled_timer; |
| 25 | 26 | ||
| 26 | #ifdef OLED_DISPLAY_128X64 | 27 | #ifdef OLED_DISPLAY_128X64 |
| 27 | # define OLED_RENDER_KEYLOGGER "Keylogger: " | 28 | # define OLED_RENDER_KEYLOGGER "Keylogger: " |
| 28 | 29 | ||
| 29 | # define OLED_RENDER_LAYOUT_NAME "Layout: " | 30 | # define OLED_RENDER_LAYOUT_NAME "Layout: " |
| 30 | # define OLED_RENDER_LAYOUT_QWERTY "Qwerty" | 31 | # define OLED_RENDER_LAYOUT_QWERTY "Qwerty" |
| 31 | # define OLED_RENDER_LAYOUT_COLEMAK "Colemak" | 32 | # define OLED_RENDER_LAYOUT_COLEMAK "Colemak" |
| 32 | # define OLED_RENDER_LAYOUT_DVORAK "Dvorak" | 33 | # define OLED_RENDER_LAYOUT_DVORAK "Dvorak" |
| 33 | # define OLED_RENDER_LAYOUT_WORKMAN "Workman" | 34 | # define OLED_RENDER_LAYOUT_WORKMAN "Workman" |
| 34 | # define OLED_RENDER_LAYOUT_NORMAN "Norman" | 35 | # define OLED_RENDER_LAYOUT_NORMAN "Norman" |
| 35 | # define OLED_RENDER_LAYOUT_MALTRON "Matron" | 36 | # define OLED_RENDER_LAYOUT_MALTRON "Matron" |
| 36 | # define OLED_RENDER_LAYOUT_EUCALYN "Eucalyn" | 37 | # define OLED_RENDER_LAYOUT_EUCALYN "Eucalyn" |
| 37 | # define OLED_RENDER_LAYOUT_CARPLAX "Carplax" | 38 | # define OLED_RENDER_LAYOUT_CARPLAX "Carplax" |
| 38 | 39 | ||
| 39 | # define OLED_RENDER_LAYER_NAME "Layer:" | 40 | # define OLED_RENDER_LAYER_NAME "Layer:" |
| 40 | # define OLED_RENDER_LAYER_LOWER "Lower" | 41 | # define OLED_RENDER_LAYER_LOWER "Lower" |
| 41 | # define OLED_RENDER_LAYER_RAISE "Raise" | 42 | # define OLED_RENDER_LAYER_RAISE "Raise" |
| 42 | # define OLED_RENDER_LAYER_ADJUST "Adjust" | 43 | # define OLED_RENDER_LAYER_ADJUST "Adjust" |
| 43 | # define OLED_RENDER_LAYER_MODS "Mods" | 44 | # define OLED_RENDER_LAYER_MODS "Mods" |
| 44 | 45 | ||
| 45 | # define OLED_RENDER_LOCK_NAME "Lock: " | 46 | # define OLED_RENDER_LOCK_NAME "Lock: " |
| 46 | # define OLED_RENDER_LOCK_NUML "NUML" | 47 | # define OLED_RENDER_LOCK_NUML "NUML" |
| 47 | # define OLED_RENDER_LOCK_CAPS "CAPS" | 48 | # define OLED_RENDER_LOCK_CAPS "CAPS" |
| 48 | # define OLED_RENDER_LOCK_SCLK "SCLK" | 49 | # define OLED_RENDER_LOCK_SCLK "SCLK" |
| 49 | 50 | ||
| 50 | # define OLED_RENDER_MODS_NAME "Mods:" | 51 | # define OLED_RENDER_MODS_NAME "Mods:" |
| 51 | # define OLED_RENDER_MODS_SFT "Sft" | 52 | # define OLED_RENDER_MODS_SFT "Sft" |
| 52 | # define OLED_RENDER_MODS_CTL "Ctl" | 53 | # define OLED_RENDER_MODS_CTL "Ctl" |
| 53 | # define OLED_RENDER_MODS_ALT "Alt" | 54 | # define OLED_RENDER_MODS_ALT "Alt" |
| 54 | # define OLED_RENDER_MODS_GUI "GUI" | 55 | # define OLED_RENDER_MODS_GUI "GUI" |
| 55 | 56 | ||
| 56 | # define OLED_RENDER_BOOTMAGIC_NAME "Boot " | 57 | # define OLED_RENDER_BOOTMAGIC_NAME "Boot " |
| 57 | # define OLED_RENDER_BOOTMAGIC_NKRO "NKRO" | 58 | # define OLED_RENDER_BOOTMAGIC_NKRO "NKRO" |
| 58 | # define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI" | 59 | # define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI" |
| 59 | # define OLED_RENDER_BOOTMAGIC_GRV "GRV" | 60 | # define OLED_RENDER_BOOTMAGIC_GRV "GRV" |
| 60 | # define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT" | 61 | # define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT" |
| 61 | # define OLED_RENDER_BOOTMAGIC_SWAP "SWAP" | 62 | # define OLED_RENDER_BOOTMAGIC_SWAP "SWAP" |
| 62 | # define OLED_RENDER_BOOTMAGIC_CAPS "CAPS" | 63 | # define OLED_RENDER_BOOTMAGIC_CAPS "CAPS" |
| 63 | 64 | ||
| 64 | # define OLED_RENDER_USER_NAME "USER:" | 65 | # define OLED_RENDER_USER_NAME "USER:" |
| 65 | # define OLED_RENDER_USER_ANIM "Anim" | 66 | # define OLED_RENDER_USER_ANIM "Anim" |
| 66 | # define OLED_RENDER_USER_LAYR "Layr" | 67 | # define OLED_RENDER_USER_LAYR "Layr" |
| 67 | # define OLED_RENDER_USER_NUKE "Nuke" | 68 | # define OLED_RENDER_USER_NUKE "Nuke" |
| 68 | 69 | ||
| 69 | # define OLED_RENDER_WPM_COUNTER "WPM: " | 70 | # define OLED_RENDER_WPM_COUNTER "WPM: " |
| 70 | #else | 71 | #else |
| 71 | # define OLED_RENDER_KEYLOGGER "KLogr" | 72 | # define OLED_RENDER_KEYLOGGER "KLogr" |
| 72 | 73 | ||
| 73 | # define OLED_RENDER_LAYOUT_NAME "Lyout" | 74 | # define OLED_RENDER_LAYOUT_NAME "Lyout" |
| 74 | # define OLED_RENDER_LAYOUT_QWERTY " QRTY" | 75 | # define OLED_RENDER_LAYOUT_QWERTY " QRTY" |
| 75 | # define OLED_RENDER_LAYOUT_COLEMAK " COLE" | 76 | # define OLED_RENDER_LAYOUT_COLEMAK " COLE" |
| 76 | # define OLED_RENDER_LAYOUT_DVORAK " DVRK" | 77 | # define OLED_RENDER_LAYOUT_DVORAK " DVRK" |
| 77 | # define OLED_RENDER_LAYOUT_WORKMAN " WKMN" | 78 | # define OLED_RENDER_LAYOUT_WORKMAN " WKMN" |
| 78 | # define OLED_RENDER_LAYOUT_NORMAN " NORM" | 79 | # define OLED_RENDER_LAYOUT_NORMAN " NORM" |
| 79 | # define OLED_RENDER_LAYOUT_MALTRON " MLTN" | 80 | # define OLED_RENDER_LAYOUT_MALTRON " MLTN" |
| 80 | # define OLED_RENDER_LAYOUT_EUCALYN " ECLN" | 81 | # define OLED_RENDER_LAYOUT_EUCALYN " ECLN" |
| 81 | # define OLED_RENDER_LAYOUT_CARPLAX " CRPX" | 82 | # define OLED_RENDER_LAYOUT_CARPLAX " CRPX" |
| 82 | 83 | ||
| 83 | # define OLED_RENDER_LAYER_NAME "LAYER" | 84 | # define OLED_RENDER_LAYER_NAME "LAYER" |
| 84 | # define OLED_RENDER_LAYER_LOWER "Lower" | 85 | # define OLED_RENDER_LAYER_LOWER "Lower" |
| 85 | # define OLED_RENDER_LAYER_RAISE "Raise" | 86 | # define OLED_RENDER_LAYER_RAISE "Raise" |
| 86 | # define OLED_RENDER_LAYER_ADJUST "Adjst" | 87 | # define OLED_RENDER_LAYER_ADJUST "Adjst" |
| 87 | # define OLED_RENDER_LAYER_MODS " Mods" | 88 | # define OLED_RENDER_LAYER_MODS " Mods" |
| 88 | 89 | ||
| 89 | # define OLED_RENDER_LOCK_NAME "Lock:" | 90 | # define OLED_RENDER_LOCK_NAME "Lock:" |
| 90 | # define OLED_RENDER_LOCK_NUML "NumL" | 91 | # define OLED_RENDER_LOCK_NUML "NumL" |
| 91 | # define OLED_RENDER_LOCK_CAPS "CapL" | 92 | # define OLED_RENDER_LOCK_CAPS "CapL" |
| 92 | # define OLED_RENDER_LOCK_SCLK "ScrL" | 93 | # define OLED_RENDER_LOCK_SCLK "ScrL" |
| 93 | 94 | ||
| 94 | # define OLED_RENDER_MODS_NAME "Mods: " | 95 | # define OLED_RENDER_MODS_NAME "Mods: " |
| 95 | # define OLED_RENDER_MODS_SFT "Shft" | 96 | # define OLED_RENDER_MODS_SFT "Shft" |
| 96 | # define OLED_RENDER_MODS_CTL "Ctrl" | 97 | # define OLED_RENDER_MODS_CTL "Ctrl" |
| 97 | # define OLED_RENDER_MODS_ALT "Alt\n" | 98 | # define OLED_RENDER_MODS_ALT "Alt\n" |
| 98 | # define OLED_RENDER_MODS_GUI "GUI\n" | 99 | # define OLED_RENDER_MODS_GUI "GUI\n" |
| 99 | 100 | ||
| 100 | # define OLED_RENDER_BOOTMAGIC_NAME "BTMGK" | 101 | # define OLED_RENDER_BOOTMAGIC_NAME "BTMGK" |
| 101 | # define OLED_RENDER_BOOTMAGIC_NKRO "NKRO" | 102 | # define OLED_RENDER_BOOTMAGIC_NKRO "NKRO" |
| 102 | # define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI" | 103 | # define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI" |
| 103 | # define OLED_RENDER_BOOTMAGIC_GRV "GRV" | 104 | # define OLED_RENDER_BOOTMAGIC_GRV "GRV" |
| 104 | # define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT" | 105 | # define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT" |
| 105 | # define OLED_RENDER_BOOTMAGIC_SWAP "SWAP" | 106 | # define OLED_RENDER_BOOTMAGIC_SWAP "SWAP" |
| 106 | # define OLED_RENDER_BOOTMAGIC_CAPS "CAPS" | 107 | # define OLED_RENDER_BOOTMAGIC_CAPS "CAPS" |
| 107 | 108 | ||
| 108 | # define OLED_RENDER_USER_NAME "USER:" | 109 | # define OLED_RENDER_USER_NAME "USER:" |
| 109 | # define OLED_RENDER_USER_ANIM "Anim" | 110 | # define OLED_RENDER_USER_ANIM "Anim" |
| 110 | # define OLED_RENDER_USER_LAYR "Layr" | 111 | # define OLED_RENDER_USER_LAYR "Layr" |
| 111 | # define OLED_RENDER_USER_NUKE "Nuke" | 112 | # define OLED_RENDER_USER_NUKE "Nuke" |
| 112 | 113 | ||
| 113 | # define OLED_RENDER_WPM_COUNTER "WPM: " | 114 | # define OLED_RENDER_WPM_COUNTER "WPM: " |
| 114 | 115 | ||
| 115 | #endif | 116 | #endif |
diff --git a/users/drashna/process_records.c b/users/drashna/process_records.c index ef901226e..124354a5b 100644 --- a/users/drashna/process_records.c +++ b/users/drashna/process_records.c | |||
| @@ -29,10 +29,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 29 | // If console is enabled, it will print the matrix position and status of each key pressed | 29 | // If console is enabled, it will print the matrix position and status of each key pressed |
| 30 | #ifdef KEYLOGGER_ENABLE | 30 | #ifdef KEYLOGGER_ENABLE |
| 31 | uprintf("KL: kc: 0x%04X, col: %2u, row: %2u, pressed: %b, time: %5u, int: %b, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count); | 31 | uprintf("KL: kc: 0x%04X, col: %2u, row: %2u, pressed: %b, time: %5u, int: %b, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count); |
| 32 | #endif // KEYLOGGER_ENABLE | 32 | #endif // KEYLOGGER_ENABLE |
| 33 | #ifdef OLED_DRIVER_ENABLE | 33 | #ifdef OLED_DRIVER_ENABLE |
| 34 | process_record_user_oled(keycode, record); | 34 | process_record_user_oled(keycode, record); |
| 35 | #endif // OLED | 35 | #endif // OLED |
| 36 | 36 | ||
| 37 | if (!(process_record_keymap(keycode, record) && process_record_secrets(keycode, record) | 37 | if (!(process_record_keymap(keycode, record) && process_record_secrets(keycode, record) |
| 38 | #ifdef RGB_MATRIX_ENABLE | 38 | #ifdef RGB_MATRIX_ENABLE |
| @@ -59,7 +59,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 59 | } | 59 | } |
| 60 | break; | 60 | break; |
| 61 | 61 | ||
| 62 | case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader | 62 | case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader |
| 63 | if (!record->event.pressed) { | 63 | if (!record->event.pressed) { |
| 64 | #ifndef MAKE_BOOTLOADER | 64 | #ifndef MAKE_BOOTLOADER |
| 65 | uint8_t temp_mod = mod_config(get_mods()); | 65 | uint8_t temp_mod = mod_config(get_mods()); |
| @@ -90,56 +90,44 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 90 | 90 | ||
| 91 | break; | 91 | break; |
| 92 | 92 | ||
| 93 | case VRSN: // Prints firmware version | 93 | case VRSN: // Prints firmware version |
| 94 | if (record->event.pressed) { | 94 | if (record->event.pressed) { send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY); } |
| 95 | send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY); | ||
| 96 | } | ||
| 97 | break; | 95 | break; |
| 98 | 96 | ||
| 99 | case KC_DIABLO_CLEAR: // reset all Diablo timers, disabling them | 97 | case KC_DIABLO_CLEAR: // reset all Diablo timers, disabling them |
| 100 | #ifdef TAP_DANCE_ENABLE | 98 | #ifdef TAP_DANCE_ENABLE |
| 101 | if (record->event.pressed) { | 99 | if (record->event.pressed) { |
| 102 | for (uint8_t index = 0; index < 4; index++) { | 100 | for (uint8_t index = 0; index < 4; index++) { diablo_timer[index].key_interval = 0; } |
| 103 | diablo_timer[index].key_interval = 0; | ||
| 104 | } | ||
| 105 | } | 101 | } |
| 106 | #endif // TAP_DANCE_ENABLE | 102 | #endif // TAP_DANCE_ENABLE |
| 107 | break; | 103 | break; |
| 108 | 104 | ||
| 109 | case KC_CCCV: // One key copy/paste | 105 | case KC_CCCV: // One key copy/paste |
| 110 | if (record->event.pressed) { | 106 | if (record->event.pressed) { |
| 111 | copy_paste_timer = timer_read(); | 107 | copy_paste_timer = timer_read(); |
| 112 | } else { | 108 | } else { |
| 113 | if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy | 109 | if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy |
| 114 | tap_code16(LCTL(KC_C)); | 110 | tap_code16(LCTL(KC_C)); |
| 115 | } else { // Tap, paste | 111 | } else { // Tap, paste |
| 116 | tap_code16(LCTL(KC_V)); | 112 | tap_code16(LCTL(KC_V)); |
| 117 | } | 113 | } |
| 118 | } | 114 | } |
| 119 | break; | 115 | break; |
| 120 | #ifdef UNICODE_ENABLE | 116 | #ifdef UNICODE_ENABLE |
| 121 | case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻ | 117 | case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻ |
| 122 | if (record->event.pressed) { | 118 | if (record->event.pressed) { send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻"); } |
| 123 | send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻"); | ||
| 124 | } | ||
| 125 | break; | 119 | break; |
| 126 | case UC_TABL: // ┬─┬ノ( º _ ºノ) | 120 | case UC_TABL: // ┬─┬ノ( º _ ºノ) |
| 127 | if (record->event.pressed) { | 121 | if (record->event.pressed) { send_unicode_string("┬─┬ノ( º _ ºノ)"); } |
| 128 | send_unicode_string("┬─┬ノ( º _ ºノ)"); | ||
| 129 | } | ||
| 130 | break; | 122 | break; |
| 131 | case UC_SHRG: // ¯\_(ツ)_/¯ | 123 | case UC_SHRG: // ¯\_(ツ)_/¯ |
| 132 | if (record->event.pressed) { | 124 | if (record->event.pressed) { send_unicode_string("¯\\_(ツ)_/¯"); } |
| 133 | send_unicode_string("¯\\_(ツ)_/¯"); | ||
| 134 | } | ||
| 135 | break; | 125 | break; |
| 136 | case UC_DISA: // ಠ_ಠ | 126 | case UC_DISA: // ಠ_ಠ |
| 137 | if (record->event.pressed) { | 127 | if (record->event.pressed) { send_unicode_string("ಠ_ಠ"); } |
| 138 | send_unicode_string("ಠ_ಠ"); | ||
| 139 | } | ||
| 140 | break; | 128 | break; |
| 141 | #endif | 129 | #endif |
| 142 | case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal | 130 | case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal |
| 143 | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | 131 | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) |
| 144 | if (record->event.pressed) { | 132 | if (record->event.pressed) { |
| 145 | userspace_config.rgb_layer_change ^= 1; | 133 | userspace_config.rgb_layer_change ^= 1; |
| @@ -149,14 +137,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 149 | # if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE) | 137 | # if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE) |
| 150 | rgblight_enable_noeeprom(); | 138 | rgblight_enable_noeeprom(); |
| 151 | # endif | 139 | # endif |
| 152 | layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better) | 140 | layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better) |
| 153 | # if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE) | 141 | # if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE) |
| 154 | } else { | 142 | } else { |
| 155 | rgblight_disable_noeeprom(); | 143 | rgblight_disable_noeeprom(); |
| 156 | # endif | 144 | # endif |
| 157 | } | 145 | } |
| 158 | } | 146 | } |
| 159 | #endif // RGBLIGHT_ENABLE | 147 | #endif // RGBLIGHT_ENABLE |
| 160 | break; | 148 | break; |
| 161 | 149 | ||
| 162 | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | 150 | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) |
| @@ -176,7 +164,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 176 | } | 164 | } |
| 177 | return false; | 165 | return false; |
| 178 | break; | 166 | break; |
| 179 | case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions | 167 | case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions |
| 180 | if (record->event.pressed) { | 168 | if (record->event.pressed) { |
| 181 | bool is_eeprom_updated; | 169 | bool is_eeprom_updated; |
| 182 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) | 170 | # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES) |
| @@ -194,9 +182,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 194 | is_eeprom_updated = true; | 182 | is_eeprom_updated = true; |
| 195 | } | 183 | } |
| 196 | # endif | 184 | # endif |
| 197 | if (is_eeprom_updated) { | 185 | if (is_eeprom_updated) { eeconfig_update_user(userspace_config.raw); } |
| 198 | eeconfig_update_user(userspace_config.raw); | ||
| 199 | } | ||
| 200 | } | 186 | } |
| 201 | #endif | 187 | #endif |
| 202 | } | 188 | } |
diff --git a/users/drashna/process_records.h b/users/drashna/process_records.h index f60e6d7eb..f65cfc03c 100644 --- a/users/drashna/process_records.h +++ b/users/drashna/process_records.h | |||
| @@ -17,58 +17,58 @@ | |||
| 17 | #pragma once | 17 | #pragma once |
| 18 | #include "drashna.h" | 18 | #include "drashna.h" |
| 19 | 19 | ||
| 20 | #if defined(KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball) | 20 | #if defined(KEYBOARD_handwired_tractyl_manuform_5x6_right) |
| 21 | # define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE | 21 | # define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE |
| 22 | #else | 22 | #else |
| 23 | # define PLACEHOLDER_SAFE_RANGE SAFE_RANGE | 23 | # define PLACEHOLDER_SAFE_RANGE SAFE_RANGE |
| 24 | #endif | 24 | #endif |
| 25 | 25 | ||
| 26 | enum userspace_custom_keycodes { | 26 | enum userspace_custom_keycodes { |
| 27 | VRSN = PLACEHOLDER_SAFE_RANGE, // Prints QMK Firmware and board info | 27 | VRSN = PLACEHOLDER_SAFE_RANGE, // Prints QMK Firmware and board info |
| 28 | KC_QWERTY, // Sets default layer to QWERTY | 28 | KC_QWERTY, // Sets default layer to QWERTY |
| 29 | KC_COLEMAK, // Sets default layer to COLEMAK | 29 | KC_COLEMAK, // Sets default layer to COLEMAK |
| 30 | KC_DVORAK, // Sets default layer to DVORAK | 30 | KC_DVORAK, // Sets default layer to DVORAK |
| 31 | KC_WORKMAN, // Sets default layer to WORKMAN | 31 | KC_WORKMAN, // Sets default layer to WORKMAN |
| 32 | KC_DIABLO_CLEAR, // Clears all Diablo Timers | 32 | KC_DIABLO_CLEAR, // Clears all Diablo Timers |
| 33 | KC_MAKE, // Run keyboard's customized make command | 33 | KC_MAKE, // Run keyboard's customized make command |
| 34 | KC_RGB_T, // Toggles RGB Layer Indication mode | 34 | KC_RGB_T, // Toggles RGB Layer Indication mode |
| 35 | RGB_IDL, // RGB Idling animations | 35 | RGB_IDL, // RGB Idling animations |
| 36 | KC_SECRET_1, // test1 | 36 | KC_SECRET_1, // test1 |
| 37 | KC_SECRET_2, // test2 | 37 | KC_SECRET_2, // test2 |
| 38 | KC_SECRET_3, // test3 | 38 | KC_SECRET_3, // test3 |
| 39 | KC_SECRET_4, // test4 | 39 | KC_SECRET_4, // test4 |
| 40 | KC_SECRET_5, // test5 | 40 | KC_SECRET_5, // test5 |
| 41 | KC_CCCV, // Hold to copy, tap to paste | 41 | KC_CCCV, // Hold to copy, tap to paste |
| 42 | KC_NUKE, // NUCLEAR LAUNCH DETECTED!!! | 42 | KC_NUKE, // NUCLEAR LAUNCH DETECTED!!! |
| 43 | UC_FLIP, // (ಠ痊ಠ)┻━┻ | 43 | UC_FLIP, // (ಠ痊ಠ)┻━┻ |
| 44 | UC_TABL, // ┬─┬ノ( º _ ºノ) | 44 | UC_TABL, // ┬─┬ノ( º _ ºノ) |
| 45 | UC_SHRG, // ¯\_(ツ)_/¯ | 45 | UC_SHRG, // ¯\_(ツ)_/¯ |
| 46 | UC_DISA, // ಠ_ಠ | 46 | UC_DISA, // ಠ_ಠ |
| 47 | NEW_SAFE_RANGE // use "NEWPLACEHOLDER for keymap specific codes | 47 | NEW_SAFE_RANGE // use "NEWPLACEHOLDER for keymap specific codes |
| 48 | }; | 48 | }; |
| 49 | 49 | ||
| 50 | bool process_record_secrets(uint16_t keycode, keyrecord_t *record); | 50 | bool process_record_secrets(uint16_t keycode, keyrecord_t *record); |
| 51 | bool process_record_keymap(uint16_t keycode, keyrecord_t *record); | 51 | bool process_record_keymap(uint16_t keycode, keyrecord_t *record); |
| 52 | 52 | ||
| 53 | #define LOWER MO(_LOWER) | 53 | #define LOWER MO(_LOWER) |
| 54 | #define RAISE MO(_RAISE) | 54 | #define RAISE MO(_RAISE) |
| 55 | #define ADJUST MO(_ADJUST) | 55 | #define ADJUST MO(_ADJUST) |
| 56 | #define TG_MODS OS_TOGG | 56 | #define TG_MODS OS_TOGG |
| 57 | #define TG_GAME TG(_GAMEPAD) | 57 | #define TG_GAME TG(_GAMEPAD) |
| 58 | #define TG_DBLO TG(_DIABLO) | 58 | #define TG_DBLO TG(_DIABLO) |
| 59 | #define OS_LWR OSL(_LOWER) | 59 | #define OS_LWR OSL(_LOWER) |
| 60 | #define OS_RSE OSL(_RAISE) | 60 | #define OS_RSE OSL(_RAISE) |
| 61 | 61 | ||
| 62 | #define KC_SEC1 KC_SECRET_1 | 62 | #define KC_SEC1 KC_SECRET_1 |
| 63 | #define KC_SEC2 KC_SECRET_2 | 63 | #define KC_SEC2 KC_SECRET_2 |
| 64 | #define KC_SEC3 KC_SECRET_3 | 64 | #define KC_SEC3 KC_SECRET_3 |
| 65 | #define KC_SEC4 KC_SECRET_4 | 65 | #define KC_SEC4 KC_SECRET_4 |
| 66 | #define KC_SEC5 KC_SECRET_5 | 66 | #define KC_SEC5 KC_SECRET_5 |
| 67 | 67 | ||
| 68 | #define QWERTY KC_QWERTY | 68 | #define QWERTY KC_QWERTY |
| 69 | #define DVORAK KC_DVORAK | 69 | #define DVORAK KC_DVORAK |
| 70 | #define COLEMAK KC_COLEMAK | 70 | #define COLEMAK KC_COLEMAK |
| 71 | #define WORKMAN KC_WORKMAN | 71 | #define WORKMAN KC_WORKMAN |
| 72 | 72 | ||
| 73 | #define KC_RESET RESET | 73 | #define KC_RESET RESET |
| 74 | #define KC_RST KC_RESET | 74 | #define KC_RST KC_RESET |
| @@ -77,9 +77,9 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record); | |||
| 77 | # define KC_C1R3 SH_T(KC_TAB) | 77 | # define KC_C1R3 SH_T(KC_TAB) |
| 78 | #elif defined(DRASHNA_LP) | 78 | #elif defined(DRASHNA_LP) |
| 79 | # define KC_C1R3 TG(_GAMEPAD) | 79 | # define KC_C1R3 TG(_GAMEPAD) |
| 80 | #else // SWAP_HANDS_ENABLE | 80 | #else // SWAP_HANDS_ENABLE |
| 81 | # define KC_C1R3 KC_TAB | 81 | # define KC_C1R3 KC_TAB |
| 82 | #endif // SWAP_HANDS_ENABLE | 82 | #endif // SWAP_HANDS_ENABLE |
| 83 | 83 | ||
| 84 | #define BK_LWER LT(_LOWER, KC_BSPC) | 84 | #define BK_LWER LT(_LOWER, KC_BSPC) |
| 85 | #define SP_LWER LT(_LOWER, KC_SPC) | 85 | #define SP_LWER LT(_LOWER, KC_SPC) |
diff --git a/users/drashna/rgb_matrix_stuff.c b/users/drashna/rgb_matrix_stuff.c index 9e9e1e427..9fbe6214b 100644 --- a/users/drashna/rgb_matrix_stuff.c +++ b/users/drashna/rgb_matrix_stuff.c | |||
| @@ -28,33 +28,27 @@ static uint32_t hypno_timer; | |||
| 28 | 28 | ||
| 29 | void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type, uint8_t led_min, uint8_t led_max) { | 29 | void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type, uint8_t led_min, uint8_t led_max) { |
| 30 | HSV hsv = {hue, sat, val}; | 30 | HSV hsv = {hue, sat, val}; |
| 31 | if (hsv.v > rgb_matrix_get_val()) { | 31 | if (hsv.v > rgb_matrix_get_val()) { hsv.v = rgb_matrix_get_val(); } |
| 32 | hsv.v = rgb_matrix_get_val(); | ||
| 33 | } | ||
| 34 | 32 | ||
| 35 | switch (mode) { | 33 | switch (mode) { |
| 36 | case 1: // breathing | 34 | case 1: // breathing |
| 37 | { | 35 | { |
| 38 | uint16_t time = scale16by8(g_rgb_timer, speed / 8); | 36 | uint16_t time = scale16by8(g_rgb_timer, speed / 8); |
| 39 | hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v); | 37 | hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v); |
| 40 | RGB rgb = hsv_to_rgb(hsv); | 38 | RGB rgb = hsv_to_rgb(hsv); |
| 41 | for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { | 39 | for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { |
| 42 | if (HAS_FLAGS(g_led_config.flags[i], led_type)) { | 40 | if (HAS_FLAGS(g_led_config.flags[i], led_type)) { RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b); } |
| 43 | RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b); | ||
| 44 | } | 41 | } |
| 42 | break; | ||
| 45 | } | 43 | } |
| 46 | break; | 44 | default: // Solid Color |
| 47 | } | 45 | { |
| 48 | default: // Solid Color | 46 | RGB rgb = hsv_to_rgb(hsv); |
| 49 | { | 47 | for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { |
| 50 | RGB rgb = hsv_to_rgb(hsv); | 48 | if (HAS_FLAGS(g_led_config.flags[i], led_type)) { RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b); } |
| 51 | for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { | ||
| 52 | if (HAS_FLAGS(g_led_config.flags[i], led_type)) { | ||
| 53 | RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b); | ||
| 54 | } | 49 | } |
| 50 | break; | ||
| 55 | } | 51 | } |
| 56 | break; | ||
| 57 | } | ||
| 58 | } | 52 | } |
| 59 | } | 53 | } |
| 60 | 54 | ||
| @@ -62,38 +56,30 @@ __attribute__((weak)) void rgb_matrix_indicator_keymap(void) {} | |||
| 62 | 56 | ||
| 63 | void matrix_scan_rgb_matrix(void) { | 57 | void matrix_scan_rgb_matrix(void) { |
| 64 | #if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) | 58 | #if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) |
| 65 | if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && sync_timer_elapsed32(hypno_timer) > 15000) { | 59 | if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && sync_timer_elapsed32(hypno_timer) > 15000) { rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE); } |
| 66 | rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE); | ||
| 67 | } | ||
| 68 | #endif | 60 | #endif |
| 69 | rgb_matrix_indicator_keymap(); | 61 | rgb_matrix_indicator_keymap(); |
| 70 | } | 62 | } |
| 71 | 63 | ||
| 72 | void keyboard_post_init_rgb_matrix(void) { | 64 | void keyboard_post_init_rgb_matrix(void) { |
| 73 | #if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) | 65 | #if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) |
| 74 | if (userspace_config.rgb_matrix_idle_anim) { | 66 | if (userspace_config.rgb_matrix_idle_anim) { rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE); } |
| 75 | rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE); | ||
| 76 | } | ||
| 77 | #endif | 67 | #endif |
| 78 | } | 68 | } |
| 79 | 69 | ||
| 80 | bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record) { | 70 | bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record) { |
| 81 | #if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) | 71 | #if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) |
| 82 | hypno_timer = sync_timer_read32(); | 72 | hypno_timer = sync_timer_read32(); |
| 83 | if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_REST_MODE) { | 73 | if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_REST_MODE) { rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP); } |
| 84 | rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP); | ||
| 85 | } | ||
| 86 | #endif | 74 | #endif |
| 87 | switch (keycode) { | 75 | switch (keycode) { |
| 88 | case RGB_IDL: // This allows me to use underglow as layer indication, or as normal | 76 | case RGB_IDL: // This allows me to use underglow as layer indication, or as normal |
| 89 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) | 77 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) |
| 90 | if (record->event.pressed) { | 78 | if (record->event.pressed) { |
| 91 | userspace_config.rgb_matrix_idle_anim ^= 1; | 79 | userspace_config.rgb_matrix_idle_anim ^= 1; |
| 92 | dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim); | 80 | dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim); |
| 93 | eeconfig_update_user(userspace_config.raw); | 81 | eeconfig_update_user(userspace_config.raw); |
| 94 | if (userspace_config.rgb_matrix_idle_anim) { | 82 | if (userspace_config.rgb_matrix_idle_anim) { rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP); } |
| 95 | rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP); | ||
| 96 | } | ||
| 97 | } | 83 | } |
| 98 | #endif | 84 | #endif |
| 99 | break; | 85 | break; |
diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c index 6723ad4bf..1665638cf 100644 --- a/users/drashna/rgb_stuff.c +++ b/users/drashna/rgb_stuff.c | |||
| @@ -28,7 +28,7 @@ void rgblight_sethsv_default_helper(uint8_t index) { rgblight_sethsv_at(rgblight | |||
| 28 | static rgblight_fadeout lights[RGBLED_NUM]; | 28 | static rgblight_fadeout lights[RGBLED_NUM]; |
| 29 | 29 | ||
| 30 | /* Handler for fading/twinkling effect */ | 30 | /* Handler for fading/twinkling effect */ |
| 31 | void scan_rgblight_fadeout(void) { // Don't effing change this function .... rgblight_sethsv is supppppper intensive | 31 | void scan_rgblight_fadeout(void) { // Don't effing change this function .... rgblight_sethsv is supppppper intensive |
| 32 | bool litup = false; | 32 | bool litup = false; |
| 33 | 33 | ||
| 34 | for (uint8_t light_index = 0; light_index < RGBLED_NUM; ++light_index) { | 34 | for (uint8_t light_index = 0; light_index < RGBLED_NUM; ++light_index) { |
| @@ -38,21 +38,15 @@ void scan_rgblight_fadeout(void) { // Don't effing change this function .... rg | |||
| 38 | 38 | ||
| 39 | if (light->life) { | 39 | if (light->life) { |
| 40 | light->life -= 1; | 40 | light->life -= 1; |
| 41 | if (get_highest_layer(layer_state) == 0) { | 41 | if (get_highest_layer(layer_state) == 0) { sethsv(light->hue + rand() % 0xF, 255, light->life, (LED_TYPE *)&led[light_index]); } |
| 42 | sethsv(light->hue + rand() % 0xF, 255, light->life, (LED_TYPE *)&led[light_index]); | ||
| 43 | } | ||
| 44 | light->timer = sync_timer_read(); | 42 | light->timer = sync_timer_read(); |
| 45 | } else { | 43 | } else { |
| 46 | if (light->enabled && get_highest_layer(layer_state) == 0) { | 44 | if (light->enabled && get_highest_layer(layer_state) == 0) { rgblight_sethsv_default_helper(light_index); } |
| 47 | rgblight_sethsv_default_helper(light_index); | ||
| 48 | } | ||
| 49 | litup = light->enabled = false; | 45 | litup = light->enabled = false; |
| 50 | } | 46 | } |
| 51 | } | 47 | } |
| 52 | } | 48 | } |
| 53 | if (litup && get_highest_layer(layer_state) == 0) { | 49 | if (litup && get_highest_layer(layer_state) == 0) { rgblight_set(); } |
| 54 | rgblight_set(); | ||
| 55 | } | ||
| 56 | } | 50 | } |
| 57 | 51 | ||
| 58 | /* Triggers a LED to fade/twinkle. | 52 | /* Triggers a LED to fade/twinkle. |
| @@ -98,9 +92,7 @@ void start_rgb_light(void) { | |||
| 98 | bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record) { | 92 | bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record) { |
| 99 | uint16_t temp_keycode = keycode; | 93 | uint16_t temp_keycode = keycode; |
| 100 | // Filter out the actual keycode from MT and LT keys. | 94 | // Filter out the actual keycode from MT and LT keys. |
| 101 | if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { | 95 | if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { temp_keycode &= 0xFF; } |
| 102 | temp_keycode &= 0xFF; | ||
| 103 | } | ||
| 104 | 96 | ||
| 105 | switch (temp_keycode) { | 97 | switch (temp_keycode) { |
| 106 | # ifdef RGBLIGHT_TWINKLE | 98 | # ifdef RGBLIGHT_TWINKLE |
| @@ -110,11 +102,9 @@ bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record) { | |||
| 110 | case KC_KP_SLASH ... KC_KP_DOT: | 102 | case KC_KP_SLASH ... KC_KP_DOT: |
| 111 | case KC_F13 ... KC_F24: | 103 | case KC_F13 ... KC_F24: |
| 112 | case KC_AUDIO_MUTE ... KC_MEDIA_REWIND: | 104 | case KC_AUDIO_MUTE ... KC_MEDIA_REWIND: |
| 113 | if (record->event.pressed) { | 105 | if (record->event.pressed) { start_rgb_light(); } |
| 114 | start_rgb_light(); | ||
| 115 | } | ||
| 116 | break; | 106 | break; |
| 117 | # endif // RGBLIGHT_TWINKLE | 107 | # endif // RGBLIGHT_TWINKLE |
| 118 | } | 108 | } |
| 119 | return true; | 109 | return true; |
| 120 | } | 110 | } |
| @@ -129,9 +119,7 @@ static uint16_t rgblight_startup_loop_timer; | |||
| 129 | void keyboard_post_init_rgb_light(void) { | 119 | void keyboard_post_init_rgb_light(void) { |
| 130 | # if defined(RGBLIGHT_STARTUP_ANIMATION) | 120 | # if defined(RGBLIGHT_STARTUP_ANIMATION) |
| 131 | is_enabled = rgblight_is_enabled(); | 121 | is_enabled = rgblight_is_enabled(); |
| 132 | if (userspace_config.rgb_layer_change) { | 122 | if (userspace_config.rgb_layer_change) { rgblight_enable_noeeprom(); } |
| 133 | rgblight_enable_noeeprom(); | ||
| 134 | } | ||
| 135 | if (rgblight_is_enabled()) { | 123 | if (rgblight_is_enabled()) { |
| 136 | layer_state_set_rgb_light(layer_state); | 124 | layer_state_set_rgb_light(layer_state); |
| 137 | old_hue = rgblight_get_hue(); | 125 | old_hue = rgblight_get_hue(); |
| @@ -145,7 +133,7 @@ void keyboard_post_init_rgb_light(void) { | |||
| 145 | void matrix_scan_rgb_light(void) { | 133 | void matrix_scan_rgb_light(void) { |
| 146 | # ifdef RGBLIGHT_TWINKLE | 134 | # ifdef RGBLIGHT_TWINKLE |
| 147 | scan_rgblight_fadeout(); | 135 | scan_rgblight_fadeout(); |
| 148 | # endif // RGBLIGHT_ENABLE | 136 | # endif // RGBLIGHT_ENABLE |
| 149 | 137 | ||
| 150 | # if defined(RGBLIGHT_STARTUP_ANIMATION) | 138 | # if defined(RGBLIGHT_STARTUP_ANIMATION) |
| 151 | if (is_rgblight_startup && is_keyboard_master()) { | 139 | if (is_rgblight_startup && is_keyboard_master()) { |
| @@ -156,12 +144,8 @@ void matrix_scan_rgb_light(void) { | |||
| 156 | rgblight_startup_loop_timer = sync_timer_read(); | 144 | rgblight_startup_loop_timer = sync_timer_read(); |
| 157 | if (counter == 255) { | 145 | if (counter == 255) { |
| 158 | is_rgblight_startup = false; | 146 | is_rgblight_startup = false; |
| 159 | if (!is_enabled) { | 147 | if (!is_enabled) { rgblight_disable_noeeprom(); } |
| 160 | rgblight_disable_noeeprom(); | 148 | if (userspace_config.rgb_layer_change) { layer_state_set_rgb_light(layer_state); } |
| 161 | } | ||
| 162 | if (userspace_config.rgb_layer_change) { | ||
| 163 | layer_state_set_rgb_light(layer_state); | ||
| 164 | } | ||
| 165 | } | 149 | } |
| 166 | } | 150 | } |
| 167 | } | 151 | } |
| @@ -179,55 +163,25 @@ layer_state_t layer_state_set_rgb_light(layer_state_t state) { | |||
| 179 | if (userspace_config.rgb_layer_change) { | 163 | if (userspace_config.rgb_layer_change) { |
| 180 | switch (get_highest_layer(state | default_layer_state)) { | 164 | switch (get_highest_layer(state | default_layer_state)) { |
| 181 | case _MACROS: // mouse | 165 | case _MACROS: // mouse |
| 182 | if (!layer_state_cmp(state, _GAMEPAD) && !layer_state_cmp(state, _DIABLO)) { | 166 | if (!layer_state_cmp(state, _GAMEPAD) && !layer_state_cmp(state, _DIABLO)) { rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_BREATHING + 3); } |
| 183 | rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_BREATHING + 3); | ||
| 184 | } | ||
| 185 | break; | ||
| 186 | case _MEDIA: | ||
| 187 | rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_KNIGHT + 1); | ||
| 188 | break; | ||
| 189 | case _GAMEPAD: | ||
| 190 | rgblight_set_hsv_and_mode(HSV_ORANGE, RGBLIGHT_MODE_SNAKE + 2); | ||
| 191 | break; | ||
| 192 | case _DIABLO: | ||
| 193 | rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_BREATHING + 3); | ||
| 194 | break; | ||
| 195 | case _RAISE: | ||
| 196 | rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_BREATHING + 3); | ||
| 197 | break; | ||
| 198 | case _LOWER: | ||
| 199 | rgblight_set_hsv_and_mode(HSV_GREEN, RGBLIGHT_MODE_BREATHING + 3); | ||
| 200 | break; | ||
| 201 | case _ADJUST: | ||
| 202 | rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2); | ||
| 203 | break; | ||
| 204 | case _COLEMAK: | ||
| 205 | rgblight_set_hsv_and_mode(HSV_MAGENTA, RGBLIGHT_MODE_STATIC_LIGHT); | ||
| 206 | break; | ||
| 207 | case _DVORAK: | ||
| 208 | rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, RGBLIGHT_MODE_STATIC_LIGHT); | ||
| 209 | break; | ||
| 210 | case _WORKMAN: | ||
| 211 | rgblight_set_hsv_and_mode(HSV_GOLDENROD, RGBLIGHT_MODE_STATIC_LIGHT); | ||
| 212 | break; | ||
| 213 | case _NORMAN: | ||
| 214 | rgblight_set_hsv_and_mode(HSV_CORAL, RGBLIGHT_MODE_STATIC_LIGHT); | ||
| 215 | break; | ||
| 216 | case _MALTRON: | ||
| 217 | rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_STATIC_LIGHT); | ||
| 218 | break; | ||
| 219 | case _EUCALYN: | ||
| 220 | rgblight_set_hsv_and_mode(HSV_PINK, RGBLIGHT_MODE_STATIC_LIGHT); | ||
| 221 | break; | ||
| 222 | case _CARPLAX: | ||
| 223 | rgblight_set_hsv_and_mode(HSV_BLUE, RGBLIGHT_MODE_STATIC_LIGHT); | ||
| 224 | break; | ||
| 225 | default: | ||
| 226 | rgblight_set_hsv_and_mode(HSV_CYAN, RGBLIGHT_MODE_STATIC_LIGHT); | ||
| 227 | break; | 167 | break; |
| 168 | case _MEDIA: rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_KNIGHT + 1); break; | ||
| 169 | case _GAMEPAD: rgblight_set_hsv_and_mode(HSV_ORANGE, RGBLIGHT_MODE_SNAKE + 2); break; | ||
| 170 | case _DIABLO: rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_BREATHING + 3); break; | ||
| 171 | case _RAISE: rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_BREATHING + 3); break; | ||
| 172 | case _LOWER: rgblight_set_hsv_and_mode(HSV_GREEN, RGBLIGHT_MODE_BREATHING + 3); break; | ||
| 173 | case _ADJUST: rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2); break; | ||
| 174 | case _COLEMAK: rgblight_set_hsv_and_mode(HSV_MAGENTA, RGBLIGHT_MODE_STATIC_LIGHT); break; | ||
| 175 | case _DVORAK: rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, RGBLIGHT_MODE_STATIC_LIGHT); break; | ||
| 176 | case _WORKMAN: rgblight_set_hsv_and_mode(HSV_GOLDENROD, RGBLIGHT_MODE_STATIC_LIGHT); break; | ||
| 177 | case _NORMAN: rgblight_set_hsv_and_mode(HSV_CORAL, RGBLIGHT_MODE_STATIC_LIGHT); break; | ||
| 178 | case _MALTRON: rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_STATIC_LIGHT); break; | ||
| 179 | case _EUCALYN: rgblight_set_hsv_and_mode(HSV_PINK, RGBLIGHT_MODE_STATIC_LIGHT); break; | ||
| 180 | case _CARPLAX: rgblight_set_hsv_and_mode(HSV_BLUE, RGBLIGHT_MODE_STATIC_LIGHT); break; | ||
| 181 | default: rgblight_set_hsv_and_mode(HSV_CYAN, RGBLIGHT_MODE_STATIC_LIGHT); break; | ||
| 228 | } | 182 | } |
| 229 | } | 183 | } |
| 230 | # endif // RGBLIGHT_ENABLE | 184 | # endif // RGBLIGHT_ENABLE |
| 231 | 185 | ||
| 232 | return state; | 186 | return state; |
| 233 | } | 187 | } |
diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk index fa4fb2420..b9156f6a4 100644 --- a/users/drashna/rules.mk +++ b/users/drashna/rules.mk | |||
| @@ -80,28 +80,29 @@ endif | |||
| 80 | 80 | ||
| 81 | CUSTOM_SPLIT_TRANSPORT ?= yes | 81 | CUSTOM_SPLIT_TRANSPORT ?= yes |
| 82 | ifeq ($(strip $(SPLIT_KEYBOARD)), yes) | 82 | ifeq ($(strip $(SPLIT_KEYBOARD)), yes) |
| 83 | ifneq ($(strip $(SPLIT_TRANSPORT)), custom) | 83 | QUANTUM_LIB_SRC += transport_sync.c |
| 84 | ifeq ($(strip $(CUSTOM_SPLIT_TRANSPORT)), yes) | 84 | # ifneq ($(strip $(SPLIT_TRANSPORT)), custom) |
| 85 | SPLIT_TRANSPORT = custom | 85 | # ifeq ($(strip $(CUSTOM_SPLIT_TRANSPORT)), yes) |
| 86 | QUANTUM_LIB_SRC += drashna_transport.c | 86 | # SPLIT_TRANSPORT = custom |
| 87 | OPT_DEFS += -DDRASHNA_CUSTOM_TRANSPORT | 87 | # QUANTUM_LIB_SRC += drashna_transport.c |
| 88 | # Unused functions are pruned away, which is why we can add multiple drivers here without bloat. | 88 | # OPT_DEFS += -DDRASHNA_CUSTOM_TRANSPORT |
| 89 | ifeq ($(PLATFORM),AVR) | 89 | # # Unused functions are pruned away, which is why we can add multiple drivers here without bloat. |
| 90 | ifneq ($(NO_I2C),yes) | 90 | # ifeq ($(PLATFORM),AVR) |
| 91 | QUANTUM_LIB_SRC += i2c_master.c \ | 91 | # ifneq ($(NO_I2C),yes) |
| 92 | i2c_slave.c | 92 | # QUANTUM_LIB_SRC += i2c_master.c \ |
| 93 | endif | 93 | # i2c_slave.c |
| 94 | endif | 94 | # endif |
| 95 | # endif | ||
| 95 | 96 | ||
| 96 | SERIAL_DRIVER ?= bitbang | 97 | # SERIAL_DRIVER ?= bitbang |
| 97 | OPT_DEFS += -DSERIAL_DRIVER_$(strip $(shell echo $(SERIAL_DRIVER) | tr '[:lower:]' '[:upper:]')) | 98 | # OPT_DEFS += -DSERIAL_DRIVER_$(strip $(shell echo $(SERIAL_DRIVER) | tr '[:lower:]' '[:upper:]')) |
| 98 | ifeq ($(strip $(SERIAL_DRIVER)), bitbang) | 99 | # ifeq ($(strip $(SERIAL_DRIVER)), bitbang) |
| 99 | QUANTUM_LIB_SRC += serial.c | 100 | # QUANTUM_LIB_SRC += serial.c |
| 100 | else | 101 | # else |
| 101 | QUANTUM_LIB_SRC += serial_$(strip $(SERIAL_DRIVER)).c | 102 | # QUANTUM_LIB_SRC += serial_$(strip $(SERIAL_DRIVER)).c |
| 102 | endif | 103 | # endif |
| 103 | endif | 104 | # endif |
| 104 | endif | 105 | # endif |
| 105 | endif | 106 | endif |
| 106 | 107 | ||
| 107 | # DEBUG_MATRIX_SCAN_RATE_ENABLE = api | 108 | # DEBUG_MATRIX_SCAN_RATE_ENABLE = api |
diff --git a/users/drashna/tap_dances.c b/users/drashna/tap_dances.c index 01873489d..6b27afc5a 100644 --- a/users/drashna/tap_dances.c +++ b/users/drashna/tap_dances.c | |||
| @@ -26,7 +26,7 @@ uint8_t diablo_times[] = {0, 1, 3, 5, 10, 30}; | |||
| 26 | 26 | ||
| 27 | // Cycle through the times for the macro, starting at 0, for disabled. | 27 | // Cycle through the times for the macro, starting at 0, for disabled. |
| 28 | void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data) { | 28 | void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data) { |
| 29 | diable_keys_t *diablo_keys = (diable_keys_t *)user_data; | 29 | diable_keys_t *diablo_keys = (diable_keys_t *)user_data; |
| 30 | // Sets the keycode based on the index | 30 | // Sets the keycode based on the index |
| 31 | diablo_timer[diablo_keys->index].keycode = diablo_keys->keycode; | 31 | diablo_timer[diablo_keys->index].keycode = diablo_keys->keycode; |
| 32 | 32 | ||
| @@ -34,7 +34,7 @@ void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data) { | |||
| 34 | if (state->count >= (sizeof(diablo_times) / sizeof(uint8_t))) { | 34 | if (state->count >= (sizeof(diablo_times) / sizeof(uint8_t))) { |
| 35 | diablo_timer[diablo_keys->index].key_interval = 0; | 35 | diablo_timer[diablo_keys->index].key_interval = 0; |
| 36 | reset_tap_dance(state); | 36 | reset_tap_dance(state); |
| 37 | } else { // else set the interval (tapdance count starts at 1, array starts at 0, so offset by one) | 37 | } else { // else set the interval (tapdance count starts at 1, array starts at 0, so offset by one) |
| 38 | diablo_timer[diablo_keys->index].key_interval = diablo_times[state->count - 1]; | 38 | diablo_timer[diablo_keys->index].key_interval = diablo_times[state->count - 1]; |
| 39 | } | 39 | } |
| 40 | } | 40 | } |
| @@ -64,9 +64,7 @@ void run_diablo_macro_check(void) { | |||
| 64 | // reset the timer, since enough time has passed | 64 | // reset the timer, since enough time has passed |
| 65 | diablo_timer[index].timer = timer_read(); | 65 | diablo_timer[index].timer = timer_read(); |
| 66 | // send keycode ONLY if we're on the diablo layer. | 66 | // send keycode ONLY if we're on the diablo layer. |
| 67 | if (IS_LAYER_ON(_DIABLO)) { | 67 | if (IS_LAYER_ON(_DIABLO)) { tap_code(diablo_timer[index].keycode); } |
| 68 | tap_code(diablo_timer[index].keycode); | ||
| 69 | } | ||
| 70 | } | 68 | } |
| 71 | } | 69 | } |
| 72 | } | 70 | } |
diff --git a/users/drashna/tap_dances.h b/users/drashna/tap_dances.h index 7f73f2803..182cc6756 100644 --- a/users/drashna/tap_dances.h +++ b/users/drashna/tap_dances.h | |||
| @@ -43,4 +43,4 @@ enum { | |||
| 43 | TD_D3_4 | 43 | TD_D3_4 |
| 44 | }; | 44 | }; |
| 45 | // clang-format on | 45 | // clang-format on |
| 46 | #endif // TAP_DANCE_ENABLE | 46 | #endif // TAP_DANCE_ENABLE |
diff --git a/users/drashna/template.c b/users/drashna/template.c index f98964ae4..636955c43 100644 --- a/users/drashna/template.c +++ b/users/drashna/template.c | |||
| @@ -54,9 +54,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 54 | break; | 54 | break; |
| 55 | 55 | ||
| 56 | case VRSN: | 56 | case VRSN: |
| 57 | if (record->event.pressed) { | 57 | if (record->event.pressed) { SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } |
| 58 | SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); | ||
| 59 | } | ||
| 60 | return false; | 58 | return false; |
| 61 | break; | 59 | break; |
| 62 | } | 60 | } |
| @@ -89,7 +87,7 @@ __attribute__((weak)) void startup_keymap(void) {} | |||
| 89 | void startup_user(void) { | 87 | void startup_user(void) { |
| 90 | #ifdef RGBLIGHT_ENABLE | 88 | #ifdef RGBLIGHT_ENABLE |
| 91 | matrix_init_rgb(); | 89 | matrix_init_rgb(); |
| 92 | #endif // RGBLIGHT_ENABLE | 90 | #endif // RGBLIGHT_ENABLE |
| 93 | startup_keymap(); | 91 | startup_keymap(); |
| 94 | } | 92 | } |
| 95 | 93 | ||
diff --git a/users/drashna/template.h b/users/drashna/template.h index cb1ad75d8..e00a0530e 100644 --- a/users/drashna/template.h +++ b/users/drashna/template.h | |||
| @@ -24,8 +24,8 @@ | |||
| 24 | #define BASE 0 | 24 | #define BASE 0 |
| 25 | 25 | ||
| 26 | enum custom_keycodes { | 26 | enum custom_keycodes { |
| 27 | VRSN = SAFE_RANGE, // can always be here | 27 | VRSN = SAFE_RANGE, // can always be here |
| 28 | KC_MAKE, | 28 | KC_MAKE, |
| 29 | KC_RESET, | 29 | KC_RESET, |
| 30 | NEWPLACEHOLDER // use "NEWPLACEHOLDER for keymap specific codes | 30 | NEWPLACEHOLDER // use "NEWPLACEHOLDER for keymap specific codes |
| 31 | }; | 31 | }; |
diff --git a/users/drashna/transport_sync.c b/users/drashna/transport_sync.c new file mode 100644 index 000000000..baa1f7651 --- /dev/null +++ b/users/drashna/transport_sync.c | |||
| @@ -0,0 +1,80 @@ | |||
| 1 | #ifdef SPLIT_TRANSACTION_IDS_USER | ||
| 2 | #include "transport_sync.h" | ||
| 3 | #include "transactions.h" | ||
| 4 | #include <string.h> | ||
| 5 | |||
| 6 | typedef struct { | ||
| 7 | bool oled_on; | ||
| 8 | uint16_t keymap_config; | ||
| 9 | } user_runtime_config_t; | ||
| 10 | |||
| 11 | user_runtime_config_t user_state; | ||
| 12 | |||
| 13 | void user_sync(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) { | ||
| 14 | if (initiator2target_buffer_size == sizeof(user_state)) { | ||
| 15 | memcpy(&user_state, initiator2target_buffer, initiator2target_buffer_size); | ||
| 16 | } | ||
| 17 | } | ||
| 18 | |||
| 19 | void keyboard_post_init_transport_sync(void) { | ||
| 20 | // Register keyboard state sync split transaction | ||
| 21 | transaction_register_rpc(RPC_ID_USER_STATE_SYNC, user_sync); | ||
| 22 | } | ||
| 23 | |||
| 24 | void user_state_update(void) { | ||
| 25 | if (is_keyboard_master()) { | ||
| 26 | |||
| 27 | #ifdef OLED_DRIVER_ENABLE | ||
| 28 | user_state.oled_on = is_oled_on(); | ||
| 29 | #endif | ||
| 30 | |||
| 31 | user_state.keymap_config = keymap_config.raw; | ||
| 32 | } else { | ||
| 33 | #ifdef OLED_DRIVER_ENABLE | ||
| 34 | if (user_state.oled_on) { | ||
| 35 | oled_on(); | ||
| 36 | } else { | ||
| 37 | oled_off(); | ||
| 38 | } | ||
| 39 | #endif | ||
| 40 | if (keymap_config.raw != user_state.keymap_config) { | ||
| 41 | keymap_config.raw = user_state.keymap_config; | ||
| 42 | } | ||
| 43 | } | ||
| 44 | } | ||
| 45 | |||
| 46 | void user_state_sync(void) { | ||
| 47 | if (is_keyboard_master()) { | ||
| 48 | // Keep track of the last state, so that we can tell if we need to propagate to slave | ||
| 49 | static user_runtime_config_t last_user_state; | ||
| 50 | static uint32_t last_sync; | ||
| 51 | bool needs_sync = false; | ||
| 52 | |||
| 53 | // Check if the state values are different | ||
| 54 | if (memcmp(&user_state, &last_user_state, sizeof(user_state))) { | ||
| 55 | needs_sync = true; | ||
| 56 | memcpy(&last_user_state, &user_state, sizeof(user_state)); | ||
| 57 | } | ||
| 58 | |||
| 59 | // Send to slave every 500ms regardless of state change | ||
| 60 | if (timer_elapsed32(last_sync) > 250) { | ||
| 61 | needs_sync = true; | ||
| 62 | } | ||
| 63 | |||
| 64 | // Perform the sync if requested | ||
| 65 | if (needs_sync) { | ||
| 66 | if (transaction_rpc_send(RPC_ID_USER_STATE_SYNC, sizeof(user_state), &user_state)) { | ||
| 67 | last_sync = timer_read32(); | ||
| 68 | } | ||
| 69 | } | ||
| 70 | } | ||
| 71 | } | ||
| 72 | |||
| 73 | void housekeeping_task_user(void) { | ||
| 74 | // Update kb_state so we can send to slave | ||
| 75 | user_state_update(); | ||
| 76 | |||
| 77 | // Data sync from master to slave | ||
| 78 | user_state_sync(); | ||
| 79 | } | ||
| 80 | #endif | ||
diff --git a/users/drashna/transport_sync.h b/users/drashna/transport_sync.h new file mode 100644 index 000000000..e2b3eae76 --- /dev/null +++ b/users/drashna/transport_sync.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | |||
| 2 | /* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com> | ||
| 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 | #pragma once | ||
| 19 | |||
| 20 | #include "drashna.h" | ||
| 21 | |||
| 22 | void keyboard_post_init_transport_sync(void); | ||
