]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - quantum/quantum.c
Extended the hint of the programmer to link to the relevant README part instead of...
[qmk_firmware.git] / quantum / quantum.c
index 65213eaea7b369f901c4a3679a35077ea892ba21..23873852f5b5efab601351f30fff08d60ad9ba41 100644 (file)
@@ -235,8 +235,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 +255,165 @@ 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_MOD:
+    if (record->event.pressed) {
+      rgblight_step();
+    }
+    return false;
+  case RGB_SMOD:
+    // same as RBG_MOD, but if shift is pressed, it will use the reverese direction instead.
+    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_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_HUD:
-               if (record->event.pressed) {
-                       rgblight_decrease_hue();
+    }
+    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_SAI:
-               if (record->event.pressed) {
-                       rgblight_increase_sat();
+    }
+    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_SAD:
-               if (record->event.pressed) {
-                       rgblight_decrease_sat();
+    }
+    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;
-       case RGB_VAI:
-               if (record->event.pressed) {
-                       rgblight_increase_val();
+    }
+    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;
-      break;
-       case RGB_VAD:
-               if (record->event.pressed) {
-                       rgblight_decrease_val();
+    }
+    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;
-      break;
-       #endif
+    }
+    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 +520,6 @@ bool process_record_quantum(keyrecord_t *record) {
         unregister_mods(MOD_BIT(KC_LSFT));
       }
       return false;
-      // break;
     }
 
     case KC_RSPC: {
@@ -477,7 +542,6 @@ 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)
@@ -554,21 +618,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 +674,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]);