X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=quantum%2Fquantum.c;h=52f19af98e20a9c75fdae659c2e5905b95988f74;hb=e6b91549e36f9d9d20f9857c8a081ad1ecfbfff0;hp=65213eaea7b369f901c4a3679a35077ea892ba21;hpb=a729d852fe502d62e09bab1a31f49b738f8892e4;p=qmk_firmware.git diff --git a/quantum/quantum.c b/quantum/quantum.c index 65213eaea..52f19af98 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -132,7 +132,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { void reset_keyboard(void) { clear_keyboard(); -#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_ENABLE_BASIC)) +#if defined(MIDI_ENABLE) && defined(MIDI_BASIC) + process_midi_all_notes_off(); +#endif +#if defined(AUDIO_ENABLE) music_all_notes_off(); uint16_t timer_start = timer_read(); PLAY_SONG(goodbye_song); @@ -143,7 +146,8 @@ void reset_keyboard(void) { #else wait_ms(250); #endif -#ifdef CATERINA_BOOTLOADER +// this is also done later in bootloader.c - not sure if it's neccesary here +#ifdef BOOTLOADER_CATERINA *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific #endif bootloader_jump(); @@ -235,8 +239,14 @@ bool process_record_quantum(keyrecord_t *record) { #ifdef PRINTING_ENABLE process_printer(keycode, record) && #endif + #ifdef AUTO_SHIFT_ENABLE + process_auto_shift(keycode, record) && + #endif #ifdef UNICODEMAP_ENABLE process_unicode_map(keycode, record) && + #endif + #ifdef TERMINAL_ENABLE + process_terminal(keycode, record) && #endif true)) { return false; @@ -249,105 +259,170 @@ bool process_record_quantum(keyrecord_t *record) { if (record->event.pressed) { reset_keyboard(); } - return false; - break; + return false; case DEBUG: if (record->event.pressed) { - print("\nDEBUG: enabled.\n"); debug_enable = true; + print("DEBUG: enabled.\n"); } - return false; - break; + return false; #ifdef FAUXCLICKY_ENABLE case FC_TOG: if (record->event.pressed) { FAUXCLICKY_TOGGLE; } return false; - break; case FC_ON: if (record->event.pressed) { FAUXCLICKY_ON; } return false; - break; case FC_OFF: if (record->event.pressed) { FAUXCLICKY_OFF; } return false; - break; #endif - #ifdef RGBLIGHT_ENABLE - case RGB_TOG: - if (record->event.pressed) { - rgblight_toggle(); + #ifdef RGBLIGHT_ENABLE + case RGB_TOG: + if (record->event.pressed) { + rgblight_toggle(); + } + return false; + case RGB_MODE_FORWARD: + if (record->event.pressed) { + uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)); + if(shifted) { + rgblight_step_reverse(); } - return false; - break; - case RGB_MOD: - if (record->event.pressed) { - rgblight_step(); + else { + rgblight_step(); } - return false; - break; - case RGB_HUI: - if (record->event.pressed) { - rgblight_increase_hue(); + } + return false; + case RGB_MODE_REVERSE: + if (record->event.pressed) { + uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)); + if(shifted) { + rgblight_step(); } - return false; - break; - case RGB_HUD: - if (record->event.pressed) { - rgblight_decrease_hue(); + else { + rgblight_step_reverse(); } - return false; - break; - case RGB_SAI: - if (record->event.pressed) { - rgblight_increase_sat(); + } + return false; + case RGB_HUI: + if (record->event.pressed) { + rgblight_increase_hue(); + } + return false; + case RGB_HUD: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + return false; + case RGB_SAI: + if (record->event.pressed) { + rgblight_increase_sat(); + } + return false; + case RGB_SAD: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + return false; + case RGB_VAI: + if (record->event.pressed) { + rgblight_increase_val(); + } + return false; + case RGB_VAD: + if (record->event.pressed) { + rgblight_decrease_val(); + } + return false; + case RGB_MODE_PLAIN: + if (record->event.pressed) { + rgblight_mode(1); + } + return false; + case RGB_MODE_BREATHE: + if (record->event.pressed) { + if ((2 <= rgblight_get_mode()) && (rgblight_get_mode() < 5)) { + rgblight_step(); + } else { + rgblight_mode(2); } - return false; - break; - case RGB_SAD: - if (record->event.pressed) { - rgblight_decrease_sat(); + } + return false; + case RGB_MODE_RAINBOW: + if (record->event.pressed) { + if ((6 <= rgblight_get_mode()) && (rgblight_get_mode() < 8)) { + rgblight_step(); + } else { + rgblight_mode(6); } - return false; - break; - case RGB_VAI: - if (record->event.pressed) { - rgblight_increase_val(); + } + return false; + case RGB_MODE_SWIRL: + if (record->event.pressed) { + if ((9 <= rgblight_get_mode()) && (rgblight_get_mode() < 14)) { + rgblight_step(); + } else { + rgblight_mode(9); } - return false; - break; - case RGB_VAD: - if (record->event.pressed) { - rgblight_decrease_val(); + } + return false; + case RGB_MODE_SNAKE: + if (record->event.pressed) { + if ((15 <= rgblight_get_mode()) && (rgblight_get_mode() < 20)) { + rgblight_step(); + } else { + rgblight_mode(15); } - return false; - break; - #endif + } + return false; + case RGB_MODE_KNIGHT: + if (record->event.pressed) { + if ((21 <= rgblight_get_mode()) && (rgblight_get_mode() < 23)) { + rgblight_step(); + } else { + rgblight_mode(21); + } + } + return false; + case RGB_MODE_XMAS: + if (record->event.pressed) { + rgblight_mode(24); + } + return false; + case RGB_MODE_GRADIENT: + if (record->event.pressed) { + if ((25 <= rgblight_get_mode()) && (rgblight_get_mode() < 34)) { + rgblight_step(); + } else { + rgblight_mode(25); + } + } + return false; + #endif #ifdef PROTOCOL_LUFA case OUT_AUTO: if (record->event.pressed) { set_output(OUTPUT_AUTO); } return false; - break; case OUT_USB: if (record->event.pressed) { set_output(OUTPUT_USB); } return false; - break; #ifdef BLUETOOTH_ENABLE case OUT_BT: if (record->event.pressed) { set_output(OUTPUT_BLUETOOTH); } return false; - break; #endif #endif case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO: @@ -454,7 +529,6 @@ bool process_record_quantum(keyrecord_t *record) { unregister_mods(MOD_BIT(KC_LSFT)); } return false; - // break; } case KC_RSPC: { @@ -477,17 +551,39 @@ bool process_record_quantum(keyrecord_t *record) { unregister_mods(MOD_BIT(KC_RSFT)); } return false; - // break; } case GRAVE_ESC: { uint8_t shifted = get_mods() & ((MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT) |MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))); +#ifdef GRAVE_ESC_ALT_OVERRIDE + // if ALT is pressed, ESC is always sent + // this is handy for the cmd+opt+esc shortcut on macOS, among other things. + if (get_mods() & (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT))) { + shifted = 0; + } +#endif + #ifdef GRAVE_ESC_CTRL_OVERRIDE - // if CTRL is pressed, ESC is always read as ESC, even if SHIFT or GUI is pressed. + // if CTRL is pressed, ESC is always sent // this is handy for the ctrl+shift+esc shortcut on windows, among other things. - if (get_mods() & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))) + if (get_mods() & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))) { shifted = 0; + } +#endif + +#ifdef GRAVE_ESC_GUI_OVERRIDE + // if GUI is pressed, ESC is always sent + if (get_mods() & (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI))) { + shifted = 0; + } +#endif + +#ifdef GRAVE_ESC_SHIFT_OVERRIDE + // if SHIFT is pressed, ESC is always sent + if (get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { + shifted = 0; + } #endif if (record->event.pressed) { @@ -554,21 +650,55 @@ void send_string(const char *str) { send_string_with_delay(str, 0); } +void send_string_P(const char *str) { + send_string_with_delay_P(str, 0); +} + void send_string_with_delay(const char *str, uint8_t interval) { while (1) { - uint8_t keycode; - uint8_t ascii_code = pgm_read_byte(str); + char ascii_code = *str; if (!ascii_code) break; - keycode = pgm_read_byte(&ascii_to_keycode_lut[ascii_code]); - if (pgm_read_byte(&ascii_to_shift_lut[ascii_code])) { - register_code(KC_LSFT); - register_code(keycode); - unregister_code(keycode); - unregister_code(KC_LSFT); + if (ascii_code == 1) { + // tap + uint8_t keycode = *(++str); + register_code(keycode); + unregister_code(keycode); + } else if (ascii_code == 2) { + // down + uint8_t keycode = *(++str); + register_code(keycode); + } else if (ascii_code == 3) { + // up + uint8_t keycode = *(++str); + unregister_code(keycode); + } else { + send_char(ascii_code); } - else { - register_code(keycode); - unregister_code(keycode); + ++str; + // interval + { uint8_t ms = interval; while (ms--) wait_ms(1); } + } +} + +void send_string_with_delay_P(const char *str, uint8_t interval) { + while (1) { + char ascii_code = pgm_read_byte(str); + if (!ascii_code) break; + if (ascii_code == 1) { + // tap + uint8_t keycode = pgm_read_byte(++str); + register_code(keycode); + unregister_code(keycode); + } else if (ascii_code == 2) { + // down + uint8_t keycode = pgm_read_byte(++str); + register_code(keycode); + } else if (ascii_code == 3) { + // up + uint8_t keycode = pgm_read_byte(++str); + unregister_code(keycode); + } else { + send_char(ascii_code); } ++str; // interval @@ -576,6 +706,20 @@ void send_string_with_delay(const char *str, uint8_t interval) { } } +void send_char(char ascii_code) { + uint8_t keycode; + keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]); + if (pgm_read_byte(&ascii_to_shift_lut[(uint8_t)ascii_code])) { + register_code(KC_LSFT); + register_code(keycode); + unregister_code(keycode); + unregister_code(KC_LSFT); + } else { + register_code(keycode); + unregister_code(keycode); + } +} + void set_single_persistent_default_layer(uint8_t default_layer) { #if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS) PLAY_SONG(default_layer_songs[default_layer]); @@ -794,6 +938,11 @@ void backlight_task(void) { #ifdef BACKLIGHT_BREATHING +#ifdef NO_BACKLIGHT_CLOCK +void breathing_defaults(void) {} +void breathing_intensity_default(void) {} +#else + #define BREATHING_NO_HALT 0 #define BREATHING_HALT_OFF 1 #define BREATHING_HALT_ON 2 @@ -993,8 +1142,7 @@ ISR(TIMER1_COMPA_vect) } - - +#endif // NO_BACKLIGHT_CLOCK #endif // breathing #else // backlight @@ -1056,6 +1204,7 @@ void send_nibble(uint8_t number) { __attribute__((weak)) uint16_t hex_to_keycode(uint8_t hex) { + hex = hex & 0xF; if (hex == 0x0) { return KC_0; } else if (hex < 0xA) {