diff options
Diffstat (limited to 'quantum/quantum.c')
| -rw-r--r-- | quantum/quantum.c | 470 |
1 files changed, 59 insertions, 411 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c index 2e5e6376b..9cd50b11d 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c | |||
| @@ -16,10 +16,6 @@ | |||
| 16 | 16 | ||
| 17 | #include "quantum.h" | 17 | #include "quantum.h" |
| 18 | 18 | ||
| 19 | #if !defined(RGBLIGHT_ENABLE) && !defined(RGB_MATRIX_ENABLE) | ||
| 20 | # include "rgb.h" | ||
| 21 | #endif | ||
| 22 | |||
| 23 | #ifdef PROTOCOL_LUFA | 19 | #ifdef PROTOCOL_LUFA |
| 24 | # include "outputselect.h" | 20 | # include "outputselect.h" |
| 25 | #endif | 21 | #endif |
| @@ -57,26 +53,13 @@ extern backlight_config_t backlight_config; | |||
| 57 | # ifndef GOODBYE_SONG | 53 | # ifndef GOODBYE_SONG |
| 58 | # define GOODBYE_SONG SONG(GOODBYE_SOUND) | 54 | # define GOODBYE_SONG SONG(GOODBYE_SOUND) |
| 59 | # endif | 55 | # endif |
| 60 | # ifndef AG_NORM_SONG | ||
| 61 | # define AG_NORM_SONG SONG(AG_NORM_SOUND) | ||
| 62 | # endif | ||
| 63 | # ifndef AG_SWAP_SONG | ||
| 64 | # define AG_SWAP_SONG SONG(AG_SWAP_SOUND) | ||
| 65 | # endif | ||
| 66 | # ifndef CG_NORM_SONG | ||
| 67 | # define CG_NORM_SONG SONG(AG_NORM_SOUND) | ||
| 68 | # endif | ||
| 69 | # ifndef CG_SWAP_SONG | ||
| 70 | # define CG_SWAP_SONG SONG(AG_SWAP_SOUND) | ||
| 71 | # endif | ||
| 72 | float goodbye_song[][2] = GOODBYE_SONG; | 56 | float goodbye_song[][2] = GOODBYE_SONG; |
| 73 | float ag_norm_song[][2] = AG_NORM_SONG; | ||
| 74 | float ag_swap_song[][2] = AG_SWAP_SONG; | ||
| 75 | float cg_norm_song[][2] = CG_NORM_SONG; | ||
| 76 | float cg_swap_song[][2] = CG_SWAP_SONG; | ||
| 77 | # ifdef DEFAULT_LAYER_SONGS | 57 | # ifdef DEFAULT_LAYER_SONGS |
| 78 | float default_layer_songs[][16][2] = DEFAULT_LAYER_SONGS; | 58 | float default_layer_songs[][16][2] = DEFAULT_LAYER_SONGS; |
| 79 | # endif | 59 | # endif |
| 60 | # ifdef SENDSTRING_BELL | ||
| 61 | float bell_song[][2] = SONG(TERMINAL_SOUND); | ||
| 62 | # endif | ||
| 80 | #endif | 63 | #endif |
| 81 | 64 | ||
| 82 | static void do_code16(uint16_t code, void (*f)(uint8_t)) { | 65 | static void do_code16(uint16_t code, void (*f)(uint8_t)) { |
| @@ -164,11 +147,6 @@ void reset_keyboard(void) { | |||
| 164 | bootloader_jump(); | 147 | bootloader_jump(); |
| 165 | } | 148 | } |
| 166 | 149 | ||
| 167 | /* true if the last press of GRAVE_ESC was shifted (i.e. GUI or SHIFT were pressed), false otherwise. | ||
| 168 | * Used to ensure that the correct keycode is released if the key is released. | ||
| 169 | */ | ||
| 170 | static bool grave_esc_was_shifted = false; | ||
| 171 | |||
| 172 | /* Convert record into usable keycode via the contained event. */ | 150 | /* Convert record into usable keycode via the contained event. */ |
| 173 | uint16_t get_record_keycode(keyrecord_t *record) { return get_event_keycode(record->event); } | 151 | uint16_t get_record_keycode(keyrecord_t *record) { return get_event_keycode(record->event); } |
| 174 | 152 | ||
| @@ -235,6 +213,9 @@ bool process_record_quantum(keyrecord_t *record) { | |||
| 235 | #if defined(RGB_MATRIX_ENABLE) | 213 | #if defined(RGB_MATRIX_ENABLE) |
| 236 | process_rgb_matrix(keycode, record) && | 214 | process_rgb_matrix(keycode, record) && |
| 237 | #endif | 215 | #endif |
| 216 | #if defined(VIA_ENABLE) | ||
| 217 | process_record_via(keycode, record) && | ||
| 218 | #endif | ||
| 238 | process_record_kb(keycode, record) && | 219 | process_record_kb(keycode, record) && |
| 239 | #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) | 220 | #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) |
| 240 | process_midi(keycode, record) && | 221 | process_midi(keycode, record) && |
| @@ -272,402 +253,77 @@ bool process_record_quantum(keyrecord_t *record) { | |||
| 272 | #ifdef SPACE_CADET_ENABLE | 253 | #ifdef SPACE_CADET_ENABLE |
| 273 | process_space_cadet(keycode, record) && | 254 | process_space_cadet(keycode, record) && |
| 274 | #endif | 255 | #endif |
| 256 | #ifdef MAGIC_KEYCODE_ENABLE | ||
| 257 | process_magic(keycode, record) && | ||
| 258 | #endif | ||
| 259 | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | ||
| 260 | process_rgb(keycode, record) && | ||
| 261 | #endif | ||
| 275 | true)) { | 262 | true)) { |
| 276 | return false; | 263 | return false; |
| 277 | } | 264 | } |
| 278 | 265 | ||
| 279 | // Shift / paren setup | 266 | if (record->event.pressed) { |
| 280 | 267 | switch (keycode) { | |
| 281 | switch (keycode) { | 268 | case RESET: |
| 282 | case RESET: | ||
| 283 | if (record->event.pressed) { | ||
| 284 | reset_keyboard(); | 269 | reset_keyboard(); |
| 285 | } | 270 | return false; |
| 286 | return false; | 271 | #ifndef NO_DEBUG |
| 287 | case DEBUG: | 272 | case DEBUG: |
| 288 | if (record->event.pressed) { | ||
| 289 | debug_enable ^= 1; | 273 | debug_enable ^= 1; |
| 290 | if (debug_enable) { | 274 | if (debug_enable) { |
| 291 | print("DEBUG: enabled.\n"); | 275 | print("DEBUG: enabled.\n"); |
| 292 | } else { | 276 | } else { |
| 293 | print("DEBUG: disabled.\n"); | 277 | print("DEBUG: disabled.\n"); |
| 294 | } | 278 | } |
| 295 | } | 279 | #endif |
| 296 | return false; | 280 | return false; |
| 297 | case EEPROM_RESET: | 281 | case EEPROM_RESET: |
| 298 | if (record->event.pressed) { | ||
| 299 | eeconfig_init(); | 282 | eeconfig_init(); |
| 300 | } | 283 | return false; |
| 301 | return false; | ||
| 302 | #ifdef FAUXCLICKY_ENABLE | 284 | #ifdef FAUXCLICKY_ENABLE |
| 303 | case FC_TOG: | 285 | case FC_TOG: |
| 304 | if (record->event.pressed) { | ||
| 305 | FAUXCLICKY_TOGGLE; | 286 | FAUXCLICKY_TOGGLE; |
| 306 | } | 287 | return false; |
| 307 | return false; | 288 | case FC_ON: |
| 308 | case FC_ON: | ||
| 309 | if (record->event.pressed) { | ||
| 310 | FAUXCLICKY_ON; | 289 | FAUXCLICKY_ON; |
| 311 | } | 290 | return false; |
| 312 | return false; | 291 | case FC_OFF: |
| 313 | case FC_OFF: | ||
| 314 | if (record->event.pressed) { | ||
| 315 | FAUXCLICKY_OFF; | 292 | FAUXCLICKY_OFF; |
| 316 | } | 293 | return false; |
| 317 | return false; | ||
| 318 | #endif | 294 | #endif |
| 319 | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | ||
| 320 | case RGB_TOG: | ||
| 321 | // Split keyboards need to trigger on key-up for edge-case issue | ||
| 322 | # ifndef SPLIT_KEYBOARD | ||
| 323 | if (record->event.pressed) { | ||
| 324 | # else | ||
| 325 | if (!record->event.pressed) { | ||
| 326 | # endif | ||
| 327 | rgblight_toggle(); | ||
| 328 | } | ||
| 329 | return false; | ||
| 330 | case RGB_MODE_FORWARD: | ||
| 331 | if (record->event.pressed) { | ||
| 332 | uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)); | ||
| 333 | if (shifted) { | ||
| 334 | rgblight_step_reverse(); | ||
| 335 | } else { | ||
| 336 | rgblight_step(); | ||
| 337 | } | ||
| 338 | } | ||
| 339 | return false; | ||
| 340 | case RGB_MODE_REVERSE: | ||
| 341 | if (record->event.pressed) { | ||
| 342 | uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)); | ||
| 343 | if (shifted) { | ||
| 344 | rgblight_step(); | ||
| 345 | } else { | ||
| 346 | rgblight_step_reverse(); | ||
| 347 | } | ||
| 348 | } | ||
| 349 | return false; | ||
| 350 | case RGB_HUI: | ||
| 351 | // Split keyboards need to trigger on key-up for edge-case issue | ||
| 352 | # ifndef SPLIT_KEYBOARD | ||
| 353 | if (record->event.pressed) { | ||
| 354 | # else | ||
| 355 | if (!record->event.pressed) { | ||
| 356 | # endif | ||
| 357 | rgblight_increase_hue(); | ||
| 358 | } | ||
| 359 | return false; | ||
| 360 | case RGB_HUD: | ||
| 361 | // Split keyboards need to trigger on key-up for edge-case issue | ||
| 362 | # ifndef SPLIT_KEYBOARD | ||
| 363 | if (record->event.pressed) { | ||
| 364 | # else | ||
| 365 | if (!record->event.pressed) { | ||
| 366 | # endif | ||
| 367 | rgblight_decrease_hue(); | ||
| 368 | } | ||
| 369 | return false; | ||
| 370 | case RGB_SAI: | ||
| 371 | // Split keyboards need to trigger on key-up for edge-case issue | ||
| 372 | # ifndef SPLIT_KEYBOARD | ||
| 373 | if (record->event.pressed) { | ||
| 374 | # else | ||
| 375 | if (!record->event.pressed) { | ||
| 376 | # endif | ||
| 377 | rgblight_increase_sat(); | ||
| 378 | } | ||
| 379 | return false; | ||
| 380 | case RGB_SAD: | ||
| 381 | // Split keyboards need to trigger on key-up for edge-case issue | ||
| 382 | # ifndef SPLIT_KEYBOARD | ||
| 383 | if (record->event.pressed) { | ||
| 384 | # else | ||
| 385 | if (!record->event.pressed) { | ||
| 386 | # endif | ||
| 387 | rgblight_decrease_sat(); | ||
| 388 | } | ||
| 389 | return false; | ||
| 390 | case RGB_VAI: | ||
| 391 | // Split keyboards need to trigger on key-up for edge-case issue | ||
| 392 | # ifndef SPLIT_KEYBOARD | ||
| 393 | if (record->event.pressed) { | ||
| 394 | # else | ||
| 395 | if (!record->event.pressed) { | ||
| 396 | # endif | ||
| 397 | rgblight_increase_val(); | ||
| 398 | } | ||
| 399 | return false; | ||
| 400 | case RGB_VAD: | ||
| 401 | // Split keyboards need to trigger on key-up for edge-case issue | ||
| 402 | # ifndef SPLIT_KEYBOARD | ||
| 403 | if (record->event.pressed) { | ||
| 404 | # else | ||
| 405 | if (!record->event.pressed) { | ||
| 406 | # endif | ||
| 407 | rgblight_decrease_val(); | ||
| 408 | } | ||
| 409 | return false; | ||
| 410 | case RGB_SPI: | ||
| 411 | if (record->event.pressed) { | ||
| 412 | rgblight_increase_speed(); | ||
| 413 | } | ||
| 414 | return false; | ||
| 415 | case RGB_SPD: | ||
| 416 | if (record->event.pressed) { | ||
| 417 | rgblight_decrease_speed(); | ||
| 418 | } | ||
| 419 | return false; | ||
| 420 | case RGB_MODE_PLAIN: | ||
| 421 | if (record->event.pressed) { | ||
| 422 | rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); | ||
| 423 | } | ||
| 424 | return false; | ||
| 425 | case RGB_MODE_BREATHE: | ||
| 426 | # ifdef RGBLIGHT_EFFECT_BREATHING | ||
| 427 | if (record->event.pressed) { | ||
| 428 | if ((RGBLIGHT_MODE_BREATHING <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_BREATHING_end)) { | ||
| 429 | rgblight_step(); | ||
| 430 | } else { | ||
| 431 | rgblight_mode(RGBLIGHT_MODE_BREATHING); | ||
| 432 | } | ||
| 433 | } | ||
| 434 | # endif | ||
| 435 | return false; | ||
| 436 | case RGB_MODE_RAINBOW: | ||
| 437 | # ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD | ||
| 438 | if (record->event.pressed) { | ||
| 439 | if ((RGBLIGHT_MODE_RAINBOW_MOOD <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_RAINBOW_MOOD_end)) { | ||
| 440 | rgblight_step(); | ||
| 441 | } else { | ||
| 442 | rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD); | ||
| 443 | } | ||
| 444 | } | ||
| 445 | # endif | ||
| 446 | return false; | ||
| 447 | case RGB_MODE_SWIRL: | ||
| 448 | # ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL | ||
| 449 | if (record->event.pressed) { | ||
| 450 | if ((RGBLIGHT_MODE_RAINBOW_SWIRL <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_RAINBOW_SWIRL_end)) { | ||
| 451 | rgblight_step(); | ||
| 452 | } else { | ||
| 453 | rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL); | ||
| 454 | } | ||
| 455 | } | ||
| 456 | # endif | ||
| 457 | return false; | ||
| 458 | case RGB_MODE_SNAKE: | ||
| 459 | # ifdef RGBLIGHT_EFFECT_SNAKE | ||
| 460 | if (record->event.pressed) { | ||
| 461 | if ((RGBLIGHT_MODE_SNAKE <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_SNAKE_end)) { | ||
| 462 | rgblight_step(); | ||
| 463 | } else { | ||
| 464 | rgblight_mode(RGBLIGHT_MODE_SNAKE); | ||
| 465 | } | ||
| 466 | } | ||
| 467 | # endif | ||
| 468 | return false; | ||
| 469 | case RGB_MODE_KNIGHT: | ||
| 470 | # ifdef RGBLIGHT_EFFECT_KNIGHT | ||
| 471 | if (record->event.pressed) { | ||
| 472 | if ((RGBLIGHT_MODE_KNIGHT <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_KNIGHT_end)) { | ||
| 473 | rgblight_step(); | ||
| 474 | } else { | ||
| 475 | rgblight_mode(RGBLIGHT_MODE_KNIGHT); | ||
| 476 | } | ||
| 477 | } | ||
| 478 | # endif | ||
| 479 | return false; | ||
| 480 | case RGB_MODE_XMAS: | ||
| 481 | # ifdef RGBLIGHT_EFFECT_CHRISTMAS | ||
| 482 | if (record->event.pressed) { | ||
| 483 | rgblight_mode(RGBLIGHT_MODE_CHRISTMAS); | ||
| 484 | } | ||
| 485 | # endif | ||
| 486 | return false; | ||
| 487 | case RGB_MODE_GRADIENT: | ||
| 488 | # ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT | ||
| 489 | if (record->event.pressed) { | ||
| 490 | if ((RGBLIGHT_MODE_STATIC_GRADIENT <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_STATIC_GRADIENT_end)) { | ||
| 491 | rgblight_step(); | ||
| 492 | } else { | ||
| 493 | rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT); | ||
| 494 | } | ||
| 495 | } | ||
| 496 | # endif | ||
| 497 | return false; | ||
| 498 | case RGB_MODE_RGBTEST: | ||
| 499 | # ifdef RGBLIGHT_EFFECT_RGB_TEST | ||
| 500 | if (record->event.pressed) { | ||
| 501 | rgblight_mode(RGBLIGHT_MODE_RGB_TEST); | ||
| 502 | } | ||
| 503 | # endif | ||
| 504 | return false; | ||
| 505 | #endif // defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | ||
| 506 | #ifdef VELOCIKEY_ENABLE | 295 | #ifdef VELOCIKEY_ENABLE |
| 507 | case VLK_TOG: | 296 | case VLK_TOG: |
| 508 | if (record->event.pressed) { | ||
| 509 | velocikey_toggle(); | 297 | velocikey_toggle(); |
| 510 | } | 298 | return false; |
| 511 | return false; | ||
| 512 | #endif | 299 | #endif |
| 513 | #ifdef PROTOCOL_LUFA | 300 | #ifdef BLUETOOTH_ENABLE |
| 514 | case OUT_AUTO: | 301 | case OUT_AUTO: |
| 515 | if (record->event.pressed) { | ||
| 516 | set_output(OUTPUT_AUTO); | 302 | set_output(OUTPUT_AUTO); |
| 517 | } | 303 | return false; |
| 518 | return false; | 304 | case OUT_USB: |
| 519 | case OUT_USB: | ||
| 520 | if (record->event.pressed) { | ||
| 521 | set_output(OUTPUT_USB); | 305 | set_output(OUTPUT_USB); |
| 522 | } | 306 | return false; |
| 523 | return false; | 307 | case OUT_BT: |
| 524 | # ifdef BLUETOOTH_ENABLE | ||
| 525 | case OUT_BT: | ||
| 526 | if (record->event.pressed) { | ||
| 527 | set_output(OUTPUT_BLUETOOTH); | 308 | set_output(OUTPUT_BLUETOOTH); |
| 528 | } | 309 | return false; |
| 529 | return false; | ||
| 530 | # endif | ||
| 531 | #endif | ||
| 532 | case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_ALT_GUI: | ||
| 533 | case MAGIC_SWAP_LCTL_LGUI ... MAGIC_EE_HANDS_RIGHT: | ||
| 534 | if (record->event.pressed) { | ||
| 535 | // MAGIC actions (BOOTMAGIC without the boot) | ||
| 536 | if (!eeconfig_is_enabled()) { | ||
| 537 | eeconfig_init(); | ||
| 538 | } | ||
| 539 | /* keymap config */ | ||
| 540 | keymap_config.raw = eeconfig_read_keymap(); | ||
| 541 | switch (keycode) { | ||
| 542 | case MAGIC_SWAP_CONTROL_CAPSLOCK: | ||
| 543 | keymap_config.swap_control_capslock = true; | ||
| 544 | break; | ||
| 545 | case MAGIC_CAPSLOCK_TO_CONTROL: | ||
| 546 | keymap_config.capslock_to_control = true; | ||
| 547 | break; | ||
| 548 | case MAGIC_SWAP_LALT_LGUI: | ||
| 549 | keymap_config.swap_lalt_lgui = true; | ||
| 550 | break; | ||
| 551 | case MAGIC_SWAP_RALT_RGUI: | ||
| 552 | keymap_config.swap_ralt_rgui = true; | ||
| 553 | break; | ||
| 554 | case MAGIC_SWAP_LCTL_LGUI: | ||
| 555 | keymap_config.swap_lctl_lgui = true; | ||
| 556 | break; | ||
| 557 | case MAGIC_SWAP_RCTL_RGUI: | ||
| 558 | keymap_config.swap_rctl_rgui = true; | ||
| 559 | break; | ||
| 560 | case MAGIC_NO_GUI: | ||
| 561 | keymap_config.no_gui = true; | ||
| 562 | break; | ||
| 563 | case MAGIC_SWAP_GRAVE_ESC: | ||
| 564 | keymap_config.swap_grave_esc = true; | ||
| 565 | break; | ||
| 566 | case MAGIC_SWAP_BACKSLASH_BACKSPACE: | ||
| 567 | keymap_config.swap_backslash_backspace = true; | ||
| 568 | break; | ||
| 569 | case MAGIC_HOST_NKRO: | ||
| 570 | clear_keyboard(); // clear first buffer to prevent stuck keys | ||
| 571 | keymap_config.nkro = true; | ||
| 572 | break; | ||
| 573 | case MAGIC_SWAP_ALT_GUI: | ||
| 574 | keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = true; | ||
| 575 | #ifdef AUDIO_ENABLE | ||
| 576 | PLAY_SONG(ag_swap_song); | ||
| 577 | #endif | ||
| 578 | break; | ||
| 579 | case MAGIC_SWAP_CTL_GUI: | ||
| 580 | keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = true; | ||
| 581 | #ifdef AUDIO_ENABLE | ||
| 582 | PLAY_SONG(cg_swap_song); | ||
| 583 | #endif | ||
| 584 | break; | ||
| 585 | case MAGIC_UNSWAP_CONTROL_CAPSLOCK: | ||
| 586 | keymap_config.swap_control_capslock = false; | ||
| 587 | break; | ||
| 588 | case MAGIC_UNCAPSLOCK_TO_CONTROL: | ||
| 589 | keymap_config.capslock_to_control = false; | ||
| 590 | break; | ||
| 591 | case MAGIC_UNSWAP_LALT_LGUI: | ||
| 592 | keymap_config.swap_lalt_lgui = false; | ||
| 593 | break; | ||
| 594 | case MAGIC_UNSWAP_RALT_RGUI: | ||
| 595 | keymap_config.swap_ralt_rgui = false; | ||
| 596 | break; | ||
| 597 | case MAGIC_UNSWAP_LCTL_LGUI: | ||
| 598 | keymap_config.swap_lctl_lgui = false; | ||
| 599 | break; | ||
| 600 | case MAGIC_UNSWAP_RCTL_RGUI: | ||
| 601 | keymap_config.swap_rctl_rgui = false; | ||
| 602 | break; | ||
| 603 | case MAGIC_UNNO_GUI: | ||
| 604 | keymap_config.no_gui = false; | ||
| 605 | break; | ||
| 606 | case MAGIC_UNSWAP_GRAVE_ESC: | ||
| 607 | keymap_config.swap_grave_esc = false; | ||
| 608 | break; | ||
| 609 | case MAGIC_UNSWAP_BACKSLASH_BACKSPACE: | ||
| 610 | keymap_config.swap_backslash_backspace = false; | ||
| 611 | break; | ||
| 612 | case MAGIC_UNHOST_NKRO: | ||
| 613 | clear_keyboard(); // clear first buffer to prevent stuck keys | ||
| 614 | keymap_config.nkro = false; | ||
| 615 | break; | ||
| 616 | case MAGIC_UNSWAP_ALT_GUI: | ||
| 617 | keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = false; | ||
| 618 | #ifdef AUDIO_ENABLE | ||
| 619 | PLAY_SONG(ag_norm_song); | ||
| 620 | #endif | ||
| 621 | break; | ||
| 622 | case MAGIC_UNSWAP_CTL_GUI: | ||
| 623 | keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = false; | ||
| 624 | #ifdef AUDIO_ENABLE | ||
| 625 | PLAY_SONG(cg_norm_song); | ||
| 626 | #endif | 310 | #endif |
| 627 | break; | 311 | #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING) |
| 628 | case MAGIC_TOGGLE_ALT_GUI: | 312 | case BL_BRTG: |
| 629 | keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui; | 313 | backlight_toggle_breathing(); |
| 630 | keymap_config.swap_ralt_rgui = keymap_config.swap_lalt_lgui; | ||
| 631 | #ifdef AUDIO_ENABLE | ||
| 632 | if (keymap_config.swap_ralt_rgui) { | ||
| 633 | PLAY_SONG(ag_swap_song); | ||
| 634 | } else { | ||
| 635 | PLAY_SONG(ag_norm_song); | ||
| 636 | } | ||
| 637 | #endif | ||
| 638 | break; | ||
| 639 | case MAGIC_TOGGLE_CTL_GUI: | ||
| 640 | keymap_config.swap_lctl_lgui = !keymap_config.swap_lctl_lgui; | ||
| 641 | keymap_config.swap_rctl_rgui = keymap_config.swap_lctl_lgui; | ||
| 642 | #ifdef AUDIO_ENABLE | ||
| 643 | if (keymap_config.swap_rctl_rgui) { | ||
| 644 | PLAY_SONG(cg_swap_song); | ||
| 645 | } else { | ||
| 646 | PLAY_SONG(cg_norm_song); | ||
| 647 | } | ||
| 648 | #endif | ||
| 649 | break; | ||
| 650 | case MAGIC_TOGGLE_NKRO: | ||
| 651 | clear_keyboard(); // clear first buffer to prevent stuck keys | ||
| 652 | keymap_config.nkro = !keymap_config.nkro; | ||
| 653 | break; | ||
| 654 | case MAGIC_EE_HANDS_LEFT: | ||
| 655 | eeconfig_update_handedness(true); | ||
| 656 | break; | ||
| 657 | case MAGIC_EE_HANDS_RIGHT: | ||
| 658 | eeconfig_update_handedness(false); | ||
| 659 | break; | ||
| 660 | default: | ||
| 661 | break; | ||
| 662 | } | ||
| 663 | eeconfig_update_keymap(keymap_config.raw); | ||
| 664 | clear_keyboard(); // clear to prevent stuck keys | ||
| 665 | |||
| 666 | return false; | 314 | return false; |
| 667 | } | 315 | #endif |
| 668 | break; | 316 | } |
| 317 | } | ||
| 669 | 318 | ||
| 319 | // keycodes that depend on both pressed and non-pressed state | ||
| 320 | switch (keycode) { | ||
| 670 | case GRAVE_ESC: { | 321 | case GRAVE_ESC: { |
| 322 | /* true if the last press of GRAVE_ESC was shifted (i.e. GUI or SHIFT were pressed), false otherwise. | ||
| 323 | * Used to ensure that the correct keycode is released if the key is released. | ||
| 324 | */ | ||
| 325 | static bool grave_esc_was_shifted = false; | ||
| 326 | |||
| 671 | uint8_t shifted = get_mods() & ((MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI))); | 327 | uint8_t shifted = get_mods() & ((MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI))); |
| 672 | 328 | ||
| 673 | #ifdef GRAVE_ESC_ALT_OVERRIDE | 329 | #ifdef GRAVE_ESC_ALT_OVERRIDE |
| @@ -710,15 +366,6 @@ bool process_record_quantum(keyrecord_t *record) { | |||
| 710 | send_keyboard_report(); | 366 | send_keyboard_report(); |
| 711 | return false; | 367 | return false; |
| 712 | } | 368 | } |
| 713 | |||
| 714 | #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING) | ||
| 715 | case BL_BRTG: { | ||
| 716 | if (record->event.pressed) { | ||
| 717 | backlight_toggle_breathing(); | ||
| 718 | } | ||
| 719 | return false; | ||
| 720 | } | ||
| 721 | #endif | ||
| 722 | } | 369 | } |
| 723 | 370 | ||
| 724 | return process_action_kb(record); | 371 | return process_action_kb(record); |
| @@ -829,6 +476,13 @@ void send_string_with_delay_P(const char *str, uint8_t interval) { | |||
| 829 | } | 476 | } |
| 830 | 477 | ||
| 831 | void send_char(char ascii_code) { | 478 | void send_char(char ascii_code) { |
| 479 | #if defined(AUDIO_ENABLE) && defined(SENDSTRING_BELL) | ||
| 480 | if (ascii_code == '\a') { // BEL | ||
| 481 | PLAY_SONG(bell_song); | ||
| 482 | return; | ||
| 483 | } | ||
| 484 | #endif | ||
| 485 | |||
| 832 | uint8_t keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]); | 486 | uint8_t keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]); |
| 833 | bool is_shifted = pgm_read_byte(&ascii_to_shift_lut[(uint8_t)ascii_code]); | 487 | bool is_shifted = pgm_read_byte(&ascii_to_shift_lut[(uint8_t)ascii_code]); |
| 834 | bool is_altgred = pgm_read_byte(&ascii_to_altgr_lut[(uint8_t)ascii_code]); | 488 | bool is_altgred = pgm_read_byte(&ascii_to_altgr_lut[(uint8_t)ascii_code]); |
| @@ -909,9 +563,7 @@ __attribute__((weak)) void bootmagic_lite(void) { | |||
| 909 | 563 | ||
| 910 | // We need multiple scans because debouncing can't be turned off. | 564 | // We need multiple scans because debouncing can't be turned off. |
| 911 | matrix_scan(); | 565 | matrix_scan(); |
| 912 | #if defined(DEBOUNCING_DELAY) && DEBOUNCING_DELAY > 0 | 566 | #if defined(DEBOUNCE) && DEBOUNCE > 0 |
| 913 | wait_ms(DEBOUNCING_DELAY * 2); | ||
| 914 | #elif defined(DEBOUNCE) && DEBOUNCE > 0 | ||
| 915 | wait_ms(DEBOUNCE * 2); | 567 | wait_ms(DEBOUNCE * 2); |
| 916 | #else | 568 | #else |
| 917 | wait_ms(30); | 569 | wait_ms(30); |
| @@ -982,12 +634,8 @@ void matrix_scan_quantum() { | |||
| 982 | matrix_scan_combo(); | 634 | matrix_scan_combo(); |
| 983 | #endif | 635 | #endif |
| 984 | 636 | ||
| 985 | #if defined(BACKLIGHT_ENABLE) | 637 | #ifdef LED_MATRIX_ENABLE |
| 986 | # if defined(LED_MATRIX_ENABLE) | ||
| 987 | led_matrix_task(); | 638 | led_matrix_task(); |
| 988 | # elif defined(BACKLIGHT_PIN) || defined(BACKLIGHT_PINS) | ||
| 989 | backlight_task(); | ||
| 990 | # endif | ||
| 991 | #endif | 639 | #endif |
| 992 | 640 | ||
| 993 | #ifdef RGB_MATRIX_ENABLE | 641 | #ifdef RGB_MATRIX_ENABLE |
