]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Big overhaul to Drashna keymaps and userspace (#3097)
authorDrashna Jaelre <drashna@live.com>
Fri, 1 Jun 2018 05:11:06 +0000 (22:11 -0700)
committerJack Humbert <jack.humb@gmail.com>
Fri, 1 Jun 2018 05:11:06 +0000 (01:11 -0400)
* Optimize secrets code

* Orthodox tweaks

* rules.mk features

* Minor cleanup

* Revert mod bits

* Force Hold breaks One Shot Tap Toggle

* Cleanup

* Moke keymaps more consistent

* minor ergodox tweak

* More OSM for the Orthodox

* Cleanup of userspace

* Toggle Secrets

* Add hidden process record for super secret macros

* Make sure secret macros always compiles

* finish up making them super secret

* Add ColinTA's rgb twinkle as WIP

* Optimize RGB Twinkling for typing

Also, tweak RGB indicators.

AND WTF, I HAVE NO IDEA WHY THE INDICATORS ONLY WORK AS IS.  The logical method for getting them working doesn't ... and it's beyond bizarre

* Make console logging more configurable

* Indicator travisty

* Clean up userspace rgb code

* Optimize RGB Twinking to work on default layer only, and to base it's color on the curent hue

* Eff it... rgblight_sethsv_at runs at every matrix scan

* RGB Twinkle cleanup

* Update Iris code for new board

* Move RGB Indicator and RGB Twinkle into userspace

* Move RGB Indicator code to rgb_stuff.c

* Major cleanup of RGB Code in userspace

* Additional cleanup of RGB code in userspace

* Use noeeprom functions to save my boards!

* Enable RGB Sleep on all boards now

* Add old iris board

* tapping tweak

* Use byte 19 for eeprom to prepare for possible merge of eeconfig function pr

* Add code to fix default layer after eeprom reset

21 files changed:
keyboards/iris/keymaps/drashna/config.h
keyboards/iris/keymaps/drashna/keymap.c
keyboards/iris/keymaps/drashna/rules.mk
keyboards/iris/keymaps/drashna_old/config.h [new file with mode: 0644]
keyboards/iris/keymaps/drashna_old/keymap.c [new file with mode: 0644]
keyboards/iris/keymaps/drashna_old/rules.mk [new file with mode: 0644]
keyboards/orthodox/keymaps/drashna/config.h
keyboards/orthodox/keymaps/drashna/keymap.c
keyboards/orthodox/keymaps/drashna/rules.mk
keyboards/viterbi/keymaps/drashna/rules.mk
layouts/community/ergodox/drashna/keymap.c
layouts/community/ergodox/drashna/rules.mk
users/drashna/config.h
users/drashna/drashna.c
users/drashna/drashna.h
users/drashna/readme.md
users/drashna/rgb_stuff.c [new file with mode: 0644]
users/drashna/rgb_stuff.h [new file with mode: 0644]
users/drashna/rules.mk
users/drashna/tap_dances.c [new file with mode: 0644]
users/drashna/tap_dances.h [new file with mode: 0644]

index bfdd0022bebd534c2383a52a0527508f3576e4cd..d2c11292395db4a2aecf7b9ea109c72ff2811f48 100644 (file)
@@ -33,7 +33,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #ifdef RGBLIGHT_ENABLE
 #undef RGBLED_NUM
-#define RGBLED_NUM 16     // Number of LEDs
+#define RGBLED_NUM 18     // Number of LEDs
 #define RGBLIGHT_ANIMATIONS
 #define RGBLIGHT_HUE_STEP 12
 #define RGBLIGHT_SAT_STEP 12
@@ -58,4 +58,13 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define PRODUCT         Drashna Hacked Iris Rev.2
 #endif
 
+#define SHFT_LED1 6
+#define SHFT_LED2 11
+
+#define CTRL_LED1 7
+#define CTRL_LED2 10
+
+#define GUI_LED1 8
+#define GUI_LED2 9
+
 #endif
index b24e5fe5339da524aa97312c31a7f552b4640a63..bc3cd38ad9625f8a4801696afa25286bd1befd3e 100644 (file)
@@ -2,15 +2,6 @@
 #include QMK_KEYBOARD_H
 #include "drashna.h"
 
-#ifdef INDICATOR_LIGHTS
-extern userspace_config_t userspace_config;
-
-uint8_t last_mod;
-uint8_t last_led;
-uint8_t last_osm;
-bool has_mods_changed = false;
-#endif
-
 #define KC_ALAP ALT_T(KC_APP)
 #define KC_OSLG OSM(MOD_LGUI)
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -55,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
   [_LOWER] = LAYOUT_wrapper(
      _______, _________________FUNC_LEFT_________________,                       _________________FUNC_RIGHT________________, _______,
-     _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
+     KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                       KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
      _______, _______, _______, _______, _______, _______,                       _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
      _______, _______, _______, _______, _______, _______, _______,     _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______,
                                        _______, _______, _______,         _______, _______, _______
@@ -63,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
   [_RAISE] = LAYOUT_wrapper(
       _______, _________________FUNC_LEFT_________________,                      _________________FUNC_RIGHT________________, _______,
-      _______, _______, _______, _______, _______, _______,                      _______, _______, _______, _______, _______, _______,
+      KC_GRV,  ________________NUMBER_LEFT________________,                      ________________NUMBER_RIGHT_______________, _______,
       _______, _______, _______, _______, _______, _______,                      _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
       _______, _______, _______, _______, _______, _______, _______,    _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END,  _______,
                                         _______, _______, _______,        _______, _______, _______
@@ -71,93 +62,28 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
   [_ADJUST] = LAYOUT_wrapper(
       KC_MAKE, _______, _______, _______, _______, _______,                      KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_RST,
-      VRSN,    RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG,                      _______, _______, _______, _______, _______, EPRM,
-      _______, _______, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,                      AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, _______,
-      TG(_MODS),RGB_SMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T,_______,    _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY,
+      VRSN,    RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG,                      KC_NUKE, _______, _______, _______, _______, EPRM,
+      _______, _______, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,                      AG_SWAP, QWERTY,  COLEMAK, DVORAK,  WORKMAN, TG(_MODS),
+      _______, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, KC_RGB_T,_______,    _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY,
                                         _______, _______, _______,        _______, _______, _______
    )
 
 };
 
 
-void matrix_init_keymap(void) {
+bool indicator_is_this_led_used(uint8_t index) {
+  switch (index) {
 #ifdef INDICATOR_LIGHTS
-  last_mod = get_mods();
-  last_led = host_keyboard_leds();
-  last_osm =get_oneshot_mods();
+    case SHFT_LED1:
+    case SHFT_LED2:
+    case CTRL_LED1:
+    case CTRL_LED2:
+    case GUI_LED1:
+    case GUI_LED2:
+      return true;
+      break;
 #endif
-}
-
-uint32_t layer_state_set_keymap (uint32_t state) {
-#ifdef INDICATOR_LIGHTS
-  uint8_t modifiders = get_mods();
-  uint8_t led_usb_state = host_keyboard_leds();
-  uint8_t one_shot = get_oneshot_mods();
-
-
-  if (modifiders & MODS_SHIFT_MASK || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MODS_SHIFT_MASK) {
-    rgblight_sethsv_at(0, 255, 255, 5);
-    rgblight_sethsv_at(0, 255, 255, 10);
-  }
-  if (modifiders & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) {
-    rgblight_sethsv_at(51, 255, 255, 6);
-    rgblight_sethsv_at(51, 255, 255, 9);
-  }
-  if (modifiders & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) {
-    rgblight_sethsv_at(120, 255, 255, 7);
-    rgblight_sethsv_at(120, 255, 255, 8);
+    default:
+    return false;
   }
-#endif
-
-  return state;
-}
-
-
-void matrix_scan_keymap (void) {
-
-#ifdef INDICATOR_LIGHTS
-  uint8_t current_mod = get_mods();
-  uint8_t current_led = host_keyboard_leds();
-  uint8_t current_osm =get_oneshot_mods();
-
-  if (last_mod == current_mod) {
-    last_mod = current_mod;
-    has_mods_changed = true;
-  }
-  if (last_led == current_led) {
-    last_led = current_led;
-    has_mods_changed = true;
-  }
-  if (last_osm == current_osm) {
-    last_osm = current_osm;
-    has_mods_changed = true;
-  }
-
-
-  if (userspace_config.rgb_layer_change && has_mods_changed && biton32(layer_state) == 0) {
-    if (current_mod & MODS_SHIFT_MASK || current_led & (1<<USB_LED_CAPS_LOCK) || current_osm & MODS_SHIFT_MASK) {
-      rgblight_sethsv_at(0, 255, 255, 5);
-      rgblight_sethsv_at(0, 255, 255, 10);
-    } else {
-      rgblight_sethsv_default_helper(5);
-      rgblight_sethsv_default_helper(10);
-    }
-    if (current_mod & MODS_CTRL_MASK || current_osm & MODS_CTRL_MASK) {
-      rgblight_sethsv_at(51, 255, 255, 6);
-      rgblight_sethsv_at(51, 255, 255, 9);
-    } else {
-      rgblight_sethsv_default_helper(6);
-      rgblight_sethsv_default_helper(9);
-    }
-    if (current_mod & MODS_GUI_MASK || current_osm & MODS_GUI_MASK) {
-      rgblight_sethsv_at(120, 255, 255, 7);
-      rgblight_sethsv_at(120, 255, 255, 8);
-    } else {
-      rgblight_sethsv_default_helper(7);
-      rgblight_sethsv_default_helper(8);
-
-    }
-  }
-#endif
-
 }
index 2608985c6f923cf0a8ab2b2b6ebd6db6d3a24a50..1b2604239fe1c56e2125fec1d0e3edd7d4edb6af 100644 (file)
@@ -7,6 +7,9 @@ TAP_DANCE_ENABLE  = no
 RGBLIGHT_ENABLE   = yes
 AUDIO_ENABLE      = yes
 NKRO_ENABLE       = yes
-BACKLIGHT_ENABLE = no
-SWAP_HANDS_ENABLE = yes
+BACKLIGHT_ENABLE  = no
+SWAP_HANDS_ENABLE = no
+
 INDICATOR_LIGHTS  = yes
+MACROS_ENABLED    = no
+RGBLIGHT_TWINKLE  = yes
diff --git a/keyboards/iris/keymaps/drashna_old/config.h b/keyboards/iris/keymaps/drashna_old/config.h
new file mode 100644 (file)
index 0000000..4eec671
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+Copyright 2017 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "config_common.h"
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+#undef USE_I2C
+
+/* Select hand configuration */
+
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
+
+#ifdef RGBLIGHT_ENABLE
+#undef RGBLED_NUM
+#define RGBLED_NUM 16     // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_HUE_STEP 12
+#define RGBLIGHT_SAT_STEP 12
+#define RGBLIGHT_VAL_STEP 12
+#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
+#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
+#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
+
+#define RGBLIGHT_LIMIT_VAL 225
+#endif // RGBLIGHT_ENABLE
+
+#ifdef AUDIO_ENABLE
+#define C6_AUDIO
+#ifdef RGBLIGHT_ENABLE
+#define NO_MUSIC_MODE
+#endif //RGBLIGHT_ENABLE
+#endif //AUDIO_ENABLE
+
+
+#undef PRODUCT
+#ifdef KEYBOARD_iris_rev2
+#define PRODUCT         Drashna Hacked Iris Rev.2
+#endif
+
+#define SHFT_LED1 5
+#define SHFT_LED2 10
+
+#define CTRL_LED1 6
+#define CTRL_LED2 9
+
+#define GUI_LED1 7
+#define GUI_LED2 8
+
+#endif
diff --git a/keyboards/iris/keymaps/drashna_old/keymap.c b/keyboards/iris/keymaps/drashna_old/keymap.c
new file mode 100644 (file)
index 0000000..bc3cd38
--- /dev/null
@@ -0,0 +1,89 @@
+
+#include QMK_KEYBOARD_H
+#include "drashna.h"
+
+#define KC_ALAP ALT_T(KC_APP)
+#define KC_OSLG OSM(MOD_LGUI)
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QWERTY] = LAYOUT_wrapper(
+     KC_ESC,  ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
+     KC_TAB , _________________QWERTY_L1_________________,                       _________________QWERTY_R1_________________, KC_BSLS,
+     KC_CCCV, _________________QWERTY_L2_________________,                       _________________QWERTY_R2_________________, KC_QUOT,
+     KC_MLSF, _________________QWERTY_L3_________________, KC_ALAP,     KC_OSLG, _________________QWERTY_R3_________________, KC_MRSF,
+                             LT(_LOWER,KC_GRV), KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
+  ),
+  [_COLEMAK] = LAYOUT_wrapper(
+     KC_ESC , ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
+     KC_TAB , _________________COLEMAK_L1________________,                       _________________COLEMAK_R1________________, KC_BSLS,
+     KC_CCCV, _________________COLEMAK_L2________________,                       _________________COLEMAK_R2________________, KC_QUOT,
+     KC_MLSF, _________________COLEMAK_L3________________, KC_ALAP,     KC_OSLG, _________________COLEMAK_R3________________, KC_MRSF,
+                             LT(_LOWER,KC_GRV), KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
+  ),
+  [_DVORAK] = LAYOUT_wrapper(
+     KC_ESC,  ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
+     KC_TAB , _________________DVORAK_L1_________________,                       _________________DVORAK_R1_________________, KC_BSLS,
+     KC_CCCV, _________________DVORAK_L2_________________,                       _________________DVORAK_R2_________________, KC_QUOT,
+     KC_MLSF, _________________DVORAK_L3_________________, KC_ALAP,     KC_OSLG, _________________DVORAK_R3_________________, KC_MRSF,
+                             LT(_LOWER,KC_GRV), KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
+  ),
+  [_WORKMAN] = LAYOUT_wrapper(
+     KC_ESC,  ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS,
+     KC_TAB , _________________WORKMAN_L1________________,                       _________________WORKMAN_R1________________, KC_BSLS,
+     KC_CCCV, _________________WORKMAN_L2________________,                       _________________WORKMAN_R2________________, KC_QUOT,
+     KC_MLSF, _________________WORKMAN_L3________________, KC_ALAP,     KC_OSLG, _________________WORKMAN_R3________________, KC_MRSF,
+                             LT(_LOWER,KC_GRV), KC_SPC,  KC_BSPC,         KC_DEL,  KC_ENT,  RAISE
+  ),
+
+  [_MODS] = LAYOUT_wrapper(
+     _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
+     _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
+     _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
+     KC_LSFT, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, KC_RSFT,
+                                       _______, _______, _______,         _______, _______, _______
+  ),
+
+
+  [_LOWER] = LAYOUT_wrapper(
+     _______, _________________FUNC_LEFT_________________,                       _________________FUNC_RIGHT________________, _______,
+     KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                       KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+     _______, _______, _______, _______, _______, _______,                       _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+     _______, _______, _______, _______, _______, _______, _______,     _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______,
+                                       _______, _______, _______,         _______, _______, _______
+  ),
+
+  [_RAISE] = LAYOUT_wrapper(
+      _______, _________________FUNC_LEFT_________________,                      _________________FUNC_RIGHT________________, _______,
+      KC_GRV,  ________________NUMBER_LEFT________________,                      ________________NUMBER_RIGHT_______________, _______,
+      _______, _______, _______, _______, _______, _______,                      _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+      _______, _______, _______, _______, _______, _______, _______,    _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END,  _______,
+                                        _______, _______, _______,        _______, _______, _______
+   ),
+
+  [_ADJUST] = LAYOUT_wrapper(
+      KC_MAKE, _______, _______, _______, _______, _______,                      KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_RST,
+      VRSN,    RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG,                      KC_NUKE, _______, _______, _______, _______, EPRM,
+      _______, _______, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,                      AG_SWAP, QWERTY,  COLEMAK, DVORAK,  WORKMAN, TG(_MODS),
+      _______, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, KC_RGB_T,_______,    _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY,
+                                        _______, _______, _______,        _______, _______, _______
+   )
+
+};
+
+
+bool indicator_is_this_led_used(uint8_t index) {
+  switch (index) {
+#ifdef INDICATOR_LIGHTS
+    case SHFT_LED1:
+    case SHFT_LED2:
+    case CTRL_LED1:
+    case CTRL_LED2:
+    case GUI_LED1:
+    case GUI_LED2:
+      return true;
+      break;
+#endif
+    default:
+    return false;
+  }
+}
diff --git a/keyboards/iris/keymaps/drashna_old/rules.mk b/keyboards/iris/keymaps/drashna_old/rules.mk
new file mode 100644 (file)
index 0000000..1a6b63f
--- /dev/null
@@ -0,0 +1,17 @@
+USER_NAME := drashna
+
+BOOTMAGIC_ENABLE  = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE   = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE   = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE    = no         # Console for debug(+400)
+COMMAND_ENABLE    = no        # Commands for debug and configuration
+TAP_DANCE_ENABLE  = no
+RGBLIGHT_ENABLE   = yes
+AUDIO_ENABLE      = yes
+NKRO_ENABLE       = yes
+BACKLIGHT_ENABLE  = no
+SWAP_HANDS_ENABLE = no
+
+INDICATOR_LIGHTS  = yes
+MACROS_ENABLED    = no
+RGBLIGHT_TWINKLE  = yes
index 1c3620616ce57c4180fefe83c63e40985f8eb63d..8c283e7ca4e24ee3c3230d7c30ccaf8326fee335 100644 (file)
@@ -76,4 +76,14 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define QMK_LED B0
 #define QMK_SPEAKER C6
 
+
+#define SHFT_LED1 5
+#define SHFT_LED2 10
+
+#define CTRL_LED1 6
+#define CTRL_LED2 9
+
+#define GUI_LED1 7
+#define GUI_LED2 8
+
 #endif
index bcc59268c09db4dbea3699f37f5f8fb8ff88d7d2..c65e21cb0e5889204ff5666f523e634b56d47505 100644 (file)
@@ -28,7 +28,6 @@ extern userspace_config_t userspace_config;
 uint8_t last_mod;
 uint8_t last_led;
 uint8_t last_osm;
-bool has_mods_changed = false;
 #endif
 
 // Each layer gets a name for readability, which is then used in the keymap matrix below.
@@ -46,25 +45,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 [_QWERTY] = LAYOUT_wrapper(\
   KC_ESC,  _________________QWERTY_L1_________________,                                                               _________________QWERTY_R1_________________, KC_BSPC,
-  KC_TAB,  _________________QWERTY_L2_________________,          KC_UP,   KC_DOWN,         KC_LEFT, KC_RIGHT,         _________________QWERTY_R2_________________, KC_QUOT,
-  KC_MLSF, _________________QWERTY_L3_________________, LOWER,   KC_SPACE,KC_BSPC,         KC_DEL,  KC_ENT,  RAISE,   _________________QWERTY_R3_________________, KC_LGUI
+  KC_TAB,  _________________QWERTY_L2_________________,          ALT_APP, OS_LGUI,         KC_LALT, OS_RGUI,          _________________QWERTY_R2_________________, KC_QUOT,
+  KC_MLSF, _________________QWERTY_L3_________________, LOWER,   KC_SPACE,KC_BSPC,         KC_DEL,  KC_ENT,  RAISE,   _________________QWERTY_R3_________________, KC_MRSF
 ),
 
 [_COLEMAK] = LAYOUT_wrapper(\
   KC_ESC,  _________________COLEMAK_L1________________,                                                               _________________COLEMAK_R1________________, KC_BSPC,
-  KC_TAB,  _________________COLEMAK_L2________________,          KC_UP,   KC_DOWN,         KC_LEFT, KC_RIGHT,         _________________COLEMAK_R2________________, KC_QUOT,
-  KC_MLSF, _________________COLEMAK_L3________________, LOWER,   KC_SPACE,KC_BSPC,         KC_DEL,  KC_ENT,  RAISE,   _________________COLEMAK_R3________________, KC_LGUI
+  KC_TAB,  _________________COLEMAK_L2________________,          ALT_APP, OS_LGUI,         KC_LALT, OS_RGUI,          _________________COLEMAK_R2________________, KC_QUOT,
+  KC_MLSF, _________________COLEMAK_L3________________, LOWER,   KC_SPACE,KC_BSPC,         KC_DEL,  KC_ENT,  RAISE,   _________________COLEMAK_R3________________, KC_MRSF
 ),
 
 [_DVORAK] = LAYOUT_wrapper(\
   KC_ESC,  _________________DVORAK_L1_________________,                                                               _________________DVORAK_R1_________________, KC_BSPC,
-  KC_TAB,  _________________DVORAK_L2_________________,          KC_UP,   KC_DOWN,         KC_LEFT, KC_RIGHT,         _________________DVORAK_R2_________________, KC_MINS,
-  KC_MLSF, _________________DVORAK_L3_________________, LOWER,   KC_SPACE,KC_BSPC,         KC_DEL,  KC_ENT,  RAISE,   _________________DVORAK_R3_________________, KC_LGUI
+  KC_TAB,  _________________DVORAK_L2_________________,          ALT_APP, OS_LGUI,         KC_LALT, OS_RGUI,          _________________DVORAK_R2_________________, KC_MINS,
+  KC_MLSF, _________________DVORAK_L3_________________, LOWER,   KC_SPACE,KC_BSPC,         KC_DEL,  KC_ENT,  RAISE,   _________________DVORAK_R3_________________, KC_MRSF
 ),
 [_WORKMAN] = LAYOUT_wrapper(\
   KC_ESC,  _________________WORKMAN_L1________________,                                                               _________________WORKMAN_R1________________, KC_BSPC,
-  KC_TAB,  _________________WORKMAN_L2________________,          KC_UP,   KC_DOWN,         KC_LEFT, KC_RIGHT,         _________________WORKMAN_R2________________, KC_MINS,
-  KC_MLSF, _________________WORKMAN_L3________________, LOWER,   KC_SPACE,KC_BSPC,         KC_DEL,  KC_ENT,  RAISE,   _________________WORKMAN_R3________________, KC_LGUI
+  KC_TAB,  _________________WORKMAN_L2________________,          ALT_APP, OS_LGUI,         KC_LALT, OS_RGUI,          _________________WORKMAN_R2________________, KC_MINS,
+  KC_MLSF, _________________WORKMAN_L3________________, LOWER,   KC_SPACE,KC_BSPC,         KC_DEL,  KC_ENT,  RAISE,   _________________WORKMAN_R3________________, KC_MRSF
 ),
 [_MODS] = LAYOUT_wrapper(\
   _______, _______, _______, _______, _______, _______,                                                               _______, _______, _______, _______, _______, _______,
@@ -73,105 +72,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 ),
 
 [_LOWER] = LAYOUT_wrapper(\
-  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                                                               KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
-  _______, _________________FUNC_LEFT_________________,           KC_PGUP, KC_PGDN,         KC_HOME, KC_END,           _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
-  _______, _________________FUNC_RIGHT________________,  _______, _______, _______,         _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______
+  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                                                                KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+  KC_F11,  _________________FUNC_LEFT_________________,           _______, _______,         _______, _______,          _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+  KC_F12,  _________________FUNC_RIGHT________________,  _______, _______, _______,         _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______
 ),
 
 [_RAISE] = LAYOUT_wrapper(\
   KC_GRV,  ________________NUMBER_LEFT________________,                                                               ________________NUMBER_RIGHT_______________, KC_BSPC,
-  _______, _______, _______, _______, _______, _______,          KC_PGUP, KC_PGDN,         KC_HOME, KC_END,           _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+  _______, _______, _______, _______, _______, _______,          _______, _______,         _______, _______,          _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
   _______, _______, _______, _______, _______, _______, _______, _______, _______,         _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______
 ),
 
 [_ADJUST] = LAYOUT_wrapper(\
   KC_MAKE, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG,                                                               KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_RESET,
-  VRSN,    _______, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,          _______, _______,         _______, _______,          AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, EPRM,
+  VRSN,    _______, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,          _______, _______,         _______, KC_NUKE,          AG_SWAP, QWERTY,  COLEMAK, DVORAK,  WORKMAN, EPRM,
   TG(_MODS),RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T,_______, _______, _______,         _______, _______, _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY
 )
 
 
 };
 
-void matrix_init_keymap(void) {
-#ifdef INDICATOR_LIGHTS
-  last_mod = get_mods();
-  last_led = host_keyboard_leds();
-  last_osm =get_oneshot_mods();
-#endif
-}
 
-uint32_t layer_state_set_keymap (uint32_t state) {
+bool indicator_is_this_led_used(uint8_t index) {
+  switch (index) {
 #ifdef INDICATOR_LIGHTS
-  uint8_t modifiders = get_mods();
-  uint8_t led_usb_state = host_keyboard_leds();
-  uint8_t one_shot = get_oneshot_mods();
-
-
-  if (modifiders & MODS_SHIFT_MASK || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MODS_SHIFT_MASK) {
-    rgblight_sethsv_at(0, 255, 255, 5);
-    rgblight_sethsv_at(0, 255, 255, 10);
-  }
-  if (modifiders & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) {
-    rgblight_sethsv_at(51, 255, 255, 6);
-    rgblight_sethsv_at(51, 255, 255, 9);
-  }
-  if (modifiders & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) {
-    rgblight_sethsv_at(120, 255, 255, 7);
-    rgblight_sethsv_at(120, 255, 255, 8);
-  }
+    case SHFT_LED1:
+    case SHFT_LED2:
+    case CTRL_LED1:
+    case CTRL_LED2:
+    case GUI_LED1:
+    case GUI_LED2:
+      return true;
+      break;
 #endif
-
-  return state;
-}
-
-
-void matrix_scan_keymap (void) {
-
-#ifdef INDICATOR_LIGHTS
-  uint8_t current_mod = get_mods();
-  uint8_t current_led = host_keyboard_leds();
-  uint8_t current_osm =get_oneshot_mods();
-
-  if (last_mod == current_mod) {
-    last_mod = current_mod;
-    has_mods_changed = true;
+    default:
+    return false;
   }
-  if (last_led == current_led) {
-    last_led = current_led;
-    has_mods_changed = true;
-  }
-  if (last_osm == current_osm) {
-    last_osm = current_osm;
-    has_mods_changed = true;
-  }
-
-
-  if (userspace_config.rgb_layer_change && has_mods_changed && biton32(layer_state) == 0) {
-    if (current_mod & MODS_SHIFT_MASK || current_led & (1<<USB_LED_CAPS_LOCK) || current_osm & MODS_SHIFT_MASK) {
-      rgblight_sethsv_at(0, 255, 255, 5);
-      rgblight_sethsv_at(0, 255, 255, 10);
-    } else {
-      rgblight_sethsv_default_helper(5);
-      rgblight_sethsv_default_helper(10);
-    }
-    if (current_mod & MODS_CTRL_MASK || current_osm & MODS_CTRL_MASK) {
-      rgblight_sethsv_at(51, 255, 255, 6);
-      rgblight_sethsv_at(51, 255, 255, 9);
-    } else {
-      rgblight_sethsv_default_helper(6);
-      rgblight_sethsv_default_helper(9);
-    }
-    if (current_mod & MODS_GUI_MASK || current_osm & MODS_GUI_MASK) {
-      rgblight_sethsv_at(120, 255, 255, 7);
-      rgblight_sethsv_at(120, 255, 255, 8);
-    } else {
-      rgblight_sethsv_default_helper(7);
-      rgblight_sethsv_default_helper(8);
-
-    }
-  }
-#endif
-
 }
-
index 7ea609ede6cbccacb913cb5d82242b62cd1a2b78..e7ed88d846d2d3d7808fc97d05e081bd53e97014 100644 (file)
@@ -7,4 +7,7 @@ TAP_DANCE_ENABLE  = no
 RGBLIGHT_ENABLE   = yes
 AUDIO_ENABLE      = yes
 NKRO_ENABLE       = yes
+
 INDICATOR_LIGHTS  = yes
+MACROS_ENABLED    = no
+RGBLIGHT_TWINKLE  = yes
index 4b5596a53e63ca3db171e5d73714bf953fefe21b..a7b18e071afd6a15fffdc094e74a540251143708 100644 (file)
@@ -8,7 +8,11 @@ RGBLIGHT_ENABLE   = yes
 AUDIO_ENABLE      = yes
 NKRO_ENABLE       = yes
 
-CUSTOM_LAYOUT     = no
+NO_SECRETS        = yes
+MACROS_ENABLED    = yes
+INDICATOR_LIGHTS  = no
+RGBLIGHT_TWINKLE  = yes
+
 LAYOUTS = ortho_5x7
 
 # SRC := $(filter-out serial.c matrix.c i2c.c split_util.c,$(SRC))
@@ -17,3 +21,4 @@ LAYOUTS = ortho_5x7
 # SRC := $(filter-out i2c.c,$(SRC))
 # SRC := $(filter-out split_util.c,$(SRC))
 # SRC += quantum/matrix.c
+
index 92c790957fa25729ed6113e66ba3162c5a3f7ee1..1506db03a75f3fa96bb72377eef43491f131bb51 100644 (file)
@@ -89,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 // Otherwise, it needs KC_*
   [_COLEMAK] = LAYOUT_ergodox_pretty_wrapper(
         // left hand                                                                       // right hand
-             KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______,                 _______, KC_6,    KC_7,    KC_8,    KC_9,     KC_0,   KC_MINS,
+             KC_EQL,  ________________NUMBER_LEFT________________, _______,                 _______, ________________NUMBER_RIGHT_______________, KC_MINS,
              KC_TAB,  _________________COLEMAK_L1________________, TG(_DIABLO),         TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS,
              KC_C1R3, _________________COLEMAK_L2________________,                                   _________________COLEMAK_R2________________, KC_QUOT,
              KC_MLSF, _________________COLEMAK_L3________________, TG(_GAMEPAD),       TG(_GAMEPAD), _________________COLEMAK_R3________________, KC_MRSF,
@@ -121,7 +121,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 // Otherwise, it needs KC_*
   [_DVORAK] = LAYOUT_ergodox_pretty_wrapper(
         // left hand        // right hand
-             KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______,                 _______, KC_6,    KC_7,    KC_8,    KC_9,     KC_0,   KC_BSLS,
+             KC_EQL,  ________________NUMBER_LEFT________________, _______,                 _______, ________________NUMBER_RIGHT_______________, KC_BSLS,
              KC_TAB,  _________________DVORAK_L1_________________, TG(_DIABLO),         TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH,
              KC_C1R3, _________________DVORAK_L2_________________,                                   _________________DVORAK_R2_________________, KC_MINS,
              KC_MLSF, _________________DVORAK_L3_________________, TG(_GAMEPAD),       TG(_GAMEPAD), _________________DVORAK_R3_________________, KC_MRSF,
@@ -153,7 +153,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 // Otherwise, it needs KC_*
   [_WORKMAN] = LAYOUT_ergodox_pretty_wrapper(
         // left hand
-             KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______,                 _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
+             KC_EQL,  ________________NUMBER_LEFT________________, _______,                 _______, ________________NUMBER_RIGHT_______________, KC_MINS,
              KC_TAB,  _________________WORKMAN_L1________________, TG(_DIABLO),         TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS,
              KC_C1R3, _________________WORKMAN_L2________________,                                   _________________WORKMAN_R2________________, KC_QUOT,
              KC_MLSF, _________________WORKMAN_L3________________, TG(_GAMEPAD),       TG(_GAMEPAD), _________________WORKMAN_R3________________, KC_MRSF,
@@ -240,7 +240,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
   [_LOWER] = LAYOUT_ergodox_pretty_wrapper(
              _______, _________________FUNC_LEFT_________________, _______,                 _______, _________________FUNC_RIGHT________________, KC_F11,
-             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, _______,
+             KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______,                 _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
              _______, _______, _______, _______, _______, _______,                                   _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
              _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, _______,
              _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, _______,
@@ -251,20 +251,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
   [_RAISE] = LAYOUT_ergodox_pretty_wrapper(
              _______, _________________FUNC_LEFT_________________, _______,                 _______, _________________FUNC_RIGHT________________, KC_F11,
-             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, _______,
+             KC_GRV,  ________________NUMBER_LEFT________________, _______,                 _______, ________________NUMBER_RIGHT_______________, _______,
              _______, _______, _______, _______, _______, _______,                                   _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
-             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, KC_RSFT,
-             _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, _______,
+             _______, _______, _______, _______, _______, _______, _______,                 _______, _______, _______, _______, _______, _______, _______,
+             _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, KC_SLCK,
                                                           _______, _______,                 _______, _______,
                                                                    _______,                 _______,
                                                  _______, _______, _______,                 _______, _______, _______
             ),
 
   [_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
-             KC_MAKE, _______, _______, _______, _______, _______, _______,                 _______, KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_RST,
+             KC_MAKE, _______, _______, _______, _______, _______, _______,                 KC_NUKE, KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_RST,
              VRSN,    RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG, _______,                 _______, _______, _______, _______, _______, _______, EPRM,
-             RGB_SMOD,RGB_HUI, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,                                   AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS),
-             TG(_MODS),RGB_SMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T,_______,                 _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY,
+             RGB_SMOD,RGB_HUI, CK_TOGG, AU_ON,   AU_OFF,  AG_NORM,                                   AG_SWAP, QWERTY,  COLEMAK, DVORAK,  WORKMAN, TG(_MODS),
+             _______, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, KC_RGB_T,_______,                 _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY,
              _______, _______, _______, _______, _______,                                                     _______, _______, _______, _______, _______,
                                                           _______, _______,                 _______, _______,
                                                                    _______,                 _______,
index e5bf2d4b36a8268def4164a047b01796ba60a5c7..aea07134bf84b4b7906b0dfb89061a5daf5bdfec 100644 (file)
@@ -1,7 +1,7 @@
 TAP_DANCE_ENABLE  = yes
 SLEEP_LED_ENABLE  = no  # Breathing sleep LED during USB suspend
 COMMAND_ENABLE    = yes  # Commands for debug and configuration
-ifeq ($(strip $(KEYBOARD)), ergodox_ez)
+ifdef KEYBOARD_ergodox_ez
   RGBLIGHT_ENABLE   = yes
 endif
 CONSOLE_ENABLE    = no
@@ -9,3 +9,9 @@ BOOTMAGIC_ENABLE  = yes
 
 UNICODE_ENABLE    = no
 UNICDOEMAP_ENABLE = yes
+
+MACROS_ENABLED    = no
+INDICATOR_LIGHTS  = no
+ifdef RGBLIGHT_ENABLE
+  RGBLIGHT_TWINKLE  = yes
+endif
index ef1860778eeb08ed16537a9b74f5ad2519e40975..26c989d7f5c386c7dec5d6060c04db2a51737632 100644 (file)
                                   SONG(DVORAK_SOUND), \
                                   SONG(OVERWATCH_THEME) \
                                 }
+
+#define AUDIO_CLICKY_FREQ_RANDOMNESS 1.0f
+
 #endif
 
 #ifdef RGBLIGHT_ENABLE
-  #ifndef KEYBOARD_ergodox_ez
-    #define RGBLIGHT_SLEEP
-  #endif // !KEYBOARD_ergodox_ez
+#define RGBLIGHT_SLEEP
 #endif // RGBLIGHT_ENABLE
 
 
@@ -42,7 +43,7 @@
 #define IGNORE_MOD_TAP_INTERRUPT
 #undef PERMISSIVE_HOLD
 #undef PREVENT_STUCK_MODIFIERS
-#define TAPPING_FORCE_HOLD
+// #define TAPPING_FORCE_HOLD
 //#define RETRO_TAPPING
 
 #define FORCE_NKRO
@@ -54,7 +55,7 @@
 #ifdef TAPPING_TERM
 #undef TAPPING_TERM
 #endif // TAPPING_TERM
-#define TAPPING_TERM 200
+#define TAPPING_TERM 175
 
 
 // Disable action_get_macro and fn_actions, since we don't use these
index 6ce541bfbca9069026128a0df3fb342660f9f5a1..8efd99f805d3877a6d5c263e6d3610609303fb44 100644 (file)
@@ -17,119 +17,36 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "drashna.h"
 #include "version.h"
-
-#if (__has_include("secrets.h") && !defined(NO_SECRETS))
-#include "secrets.h"
-#else
-// `PROGMEM const char secret[][x]` may work better, but it takes up more space in the firmware
-// And I'm not familiar enough to know which is better or why...
-PROGMEM const char secret[][64] = {
-  "test1",
-  "test2",
-  "test3",
-  "test4",
-  "test5"
-};
-#endif
+#include "eeprom.h"
+#include "tap_dances.h"
+#include "rgb_stuff.h"
 
 
 float tone_copy[][2]            = SONG(SCROLL_LOCK_ON_SOUND);
 float tone_paste[][2]           = SONG(SCROLL_LOCK_OFF_SOUND);
 
-
 static uint16_t copy_paste_timer;
 userspace_config_t userspace_config;
 
 //  Helper Functions
-void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); };
-
-#ifdef RGBLIGHT_ENABLE
-void rgblight_sethsv_default_helper(uint8_t index) {
-  uint8_t default_layer = eeconfig_read_default_layer();
-  if (default_layer & (1UL << _COLEMAK)) {
-    rgblight_sethsv_at(300, 255, 255, index);
-    rgblight_sethsv_at(300, 255, 255, index);
-  }
-  else if (default_layer & (1UL << _DVORAK)) {
-    rgblight_sethsv_at(120, 255, 255, index);
-    rgblight_sethsv_at(120, 255, 255, index);
-  }
-  else if (default_layer & (1UL << _WORKMAN)) {
-    rgblight_sethsv_at(43, 255, 255, index);
-    rgblight_sethsv_at(43, 255, 255, index);
-  }
-  else {
-    rgblight_sethsv_at(180, 255, 255, index);
-    rgblight_sethsv_at(180, 255, 255, index);
-  }
-}
-#endif // RGBLIGHT_ENABLE
-
 
-// =========================================  TAP DANCE  =========================================
-#ifdef TAP_DANCE_ENABLE
-//define diablo macro timer variables
-static uint16_t diablo_timer[4];
-static uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
-static uint8_t diablo_key_time[4];
-
-// has the correct number of seconds elapsed (as defined by diablo_times)
-bool check_dtimer(uint8_t dtimer) { return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; };
-
-// Cycle through the times for the macro, starting at 0, for disabled.
-// Max of six values, so don't exceed
-void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
-  if (state->count >= 7) {
-    diablo_key_time[diablo_key] = diablo_times[0];
-    reset_tap_dance(state);
-  }  else {
-    diablo_key_time[diablo_key] = diablo_times[state->count - 1];
-  }
-}
 
-// Would rather have one function for all of this, but no idea how to do that...
-void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 0); }
-void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 1); }
-void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 2); }
-void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 3); }
-
-//Tap Dance Definitions
-qk_tap_dance_action_t tap_dance_actions[] = {
-  // tap once to disable, and more to enable timed micros
-  [TD_D3_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
-  [TD_D3_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
-  [TD_D3_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
-  [TD_D3_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
-};
-
-// Sends the key press to system, but only if on the Diablo layer
-void send_diablo_keystroke(uint8_t diablo_key) {
-  if (biton32(layer_state) == _DIABLO) {
-    switch (diablo_key) {
-      case 0:
-        tap(KC_1); break;
-      case 1:
-        tap(KC_2); break;
-      case 2:
-        tap(KC_3); break;
-      case 3:
-        tap(KC_4); break;
-    }
+// This block is for all of the gaming macros, as they were all doing
+// the same thing, but with differring text sent.
+bool send_game_macro(const char *str, keyrecord_t *record, bool override) {
+  if (!record->event.pressed || override) {
+    clear_keyboard();
+    tap(userspace_config.is_overwatch ? KC_BSPC : KC_ENTER);
+    wait_ms(50);
+    send_string(str);
+    wait_ms(50);
+    tap(KC_ENTER);
   }
+  if (override) wait_ms(3000);
+  return false;
 }
 
-// Checks each of the 4 timers/keys to see if enough time has elapsed
-// Runs the "send string" command if enough time has passed, and resets the timer.
-void run_diablo_macro_check(void) {
-  uint8_t dtime;
-  for (dtime = 0; dtime < 4; dtime++) {
-    if (check_dtimer(dtime) && diablo_key_time[dtime]) {
-      diablo_timer[dtime] = timer_read();
-      send_diablo_keystroke(dtime);
-    }
-  }
-}
-#endif // TAP_DANCE_ENABLE
+void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); };
 
 
 // Add reconfigurable functions here, for keymap customization
@@ -147,6 +64,11 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
   return true;
 }
 
+__attribute__ ((weak))
+bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
 __attribute__ ((weak))
 uint32_t layer_state_set_keymap (uint32_t state) {
   return state;
@@ -159,9 +81,12 @@ void led_set_keymap(uint8_t usb_led) {}
 // Call user matrix init, set default RGB colors and then
 // call the keymap's init function
 void matrix_init_user(void) {
-  uint8_t default_layer = eeconfig_read_default_layer();
   userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE);
 
+#ifdef AUDIO_CLICKY
+  clicky_enable = userspace_config.clicky_enable;
+#endif
+
 #ifdef BOOTLOADER_CATERINA
   DDRD &= ~(1<<5);
   PORTD &= ~(1<<5);
@@ -170,39 +95,15 @@ void matrix_init_user(void) {
   PORTB &= ~(1<<0);
 #endif
 
-  if (userspace_config.rgb_layer_change) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_enable();
-#endif // RGBLIGHT_ENABLE
-    if (default_layer & (1UL << _COLEMAK)) {
-  #ifdef RGBLIGHT_ENABLE
-      rgblight_sethsv_magenta();
-  #endif // RGBLIGHT_ENABLE
-    } else if (default_layer & (1UL << _DVORAK)) {
-  #ifdef RGBLIGHT_ENABLE
-      rgblight_sethsv_green();
-  #endif // RGBLIGHT_ENABLE
-    } else if (default_layer & (1UL << _WORKMAN)) {
-  #ifdef RGBLIGHT_ENABLE
-      rgblight_sethsv_goldenrod();
-  #endif // RGBLIGHT_ENABLE
-    } else {
-  #ifdef RGBLIGHT_ENABLE
-      rgblight_sethsv_teal();
-  #endif // RGBLIGHT_ENABLE
-    }
-  }
 
-#ifdef AUDIO_CLICKY
-  clicky_enable = userspace_config.clicky_enable;
-#endif
-
-#if ( defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE) )
+#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
        set_unicode_input_mode(UC_WINC);
 #endif //UNICODE_ENABLE
-
+  matrix_init_rgb();
   matrix_init_keymap();
 }
+
+
 // No global matrix scan code, so just run keymap's matrix
 // scan function
 void matrix_scan_user(void) {
@@ -211,24 +112,14 @@ void matrix_scan_user(void) {
   run_diablo_macro_check();
 #endif // TAP_DANCE_ENABLE
 
+#ifdef RGBLIGHT_ENABLE
+  matrix_scan_rgb();
+#endif // RGBLIGHT_ENABLE
+
   matrix_scan_keymap();
 }
 
 
-// This block is for all of the gaming macros, as they were all doing
-// the same thing, but with differring text sent.
-bool send_game_macro(const char *str, keyrecord_t *record, bool override) {
-  if (!record->event.pressed || override) {
-    clear_keyboard();
-    tap(userspace_config.is_overwatch ? KC_BSPC : KC_ENTER);
-    wait_ms(50);
-    send_string(str);
-    wait_ms(50);
-    tap(KC_ENTER);
-  }
-  if (override) wait_ms(3000);
-  return false;
-}
 
 
 // Defines actions tor my global custom keycodes. Defined in drashna.h file
@@ -236,10 +127,9 @@ bool send_game_macro(const char *str, keyrecord_t *record, bool override) {
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 
   // If console is enabled, it will print the matrix position and status of each key pressed
-#ifdef CONSOLE_ENABLE
+#ifdef KEYLOGGER_ENABLE
   xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
-#endif //CONSOLE_ENABLE
-
+#endif //KEYLOGGER_ENABLE
 
   switch (keycode) {
   case KC_QWERTY:
@@ -287,8 +177,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
   case KC_RESET: // Custom RESET code that sets RGBLights to RED
     if (!record->event.pressed) {
 #ifdef RGBLIGHT_ENABLE
-      rgblight_enable();
-      rgblight_mode(1);
+      rgblight_enable_noeeprom();
+      rgblight_mode_noeeprom(1);
       rgblight_setrgb_red();
 #endif // RGBLIGHT_ENABLE
       reset_keyboard();
@@ -300,6 +190,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
   case EPRM: // Resets EEPROM
     if (record->event.pressed) {
       eeconfig_init();
+      default_layer_set(1UL<<eeconfig_read_default_layer());
+      layer_state_set(layer_state);
     }
     return false;
     break;
@@ -310,24 +202,24 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     return false;
     break;
 
-
-  case KC_SECRET_1 ... KC_SECRET_5: // Secrets!  Externally defined strings, not stored in repo
-    if (!record->event.pressed) {
-      clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
-      send_string_P(secret[keycode - KC_SECRET_1]);
-    }
-    return false;
-    break;
-
+/*  Code has been depreciated
+    case KC_SECRET_1 ... KC_SECRET_5: // Secrets!  Externally defined strings, not stored in repo
+      if (!record->event.pressed) {
+        clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
+        send_string(decoy_secret[keycode - KC_SECRET_1]);
+      }
+      return false;
+      break;
+*/
 
 // These are a serious of gaming macros.
 // Only enables for the viterbi, basically,
 // to save on firmware space, since it's limited.
-#if !(defined(KEYBOARD_orthodox_rev1) || defined(KEYBOARD_orthodox_rev3) || defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_iris_rev2))
+#ifdef MACROS_ENABLED
   case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros
     if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); }
 #ifdef RGBLIGHT_ENABLE
-    userspace_config.is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
+    userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18);
 #endif //RGBLIGHT_ENABLE
     return false; break;
   case KC_SALT:
@@ -353,40 +245,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     return send_game_macro("OMG!!!  C9!!!", record, false);
   case KC_GGEZ:
     return send_game_macro("That was a fantastic game, though it was a bit easy. Try harder next time!", record, false);
-#endif // !(defined(KEYBOARD_orthodox_rev1) || defined(KEYBOARD_orthodox_rev3) || defined(KEYBOARD_ergodox_ez))
+#endif // MACROS_ENABLED
 
 
-#ifdef TAP_DANCE_ENABLE
   case KC_DIABLO_CLEAR:  // reset all Diablo timers, disabling them
+#ifdef TAP_DANCE_ENABLE
     if (record->event.pressed) {
       uint8_t dtime;
       for (dtime = 0; dtime < 4; dtime++) {
         diablo_key_time[dtime] = diablo_times[0];
       }
     }
+#endif // TAP_DANCE_ENABLE#endif
     return false; break;
-#endif // TAP_DANCE_ENABLE
-
-
-  case KC_RGB_T:  // This allows me to use underglow as layer indication, or as normal
-#ifdef RGBLIGHT_ENABLE
-    if (record->event.pressed) {
-      userspace_config.rgb_layer_change ^= 1;
-      eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw);
-      if (userspace_config.rgb_layer_change) {
-        layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
-      }
-    }
-#endif // RGBLIGHT_ENABLE
-    return false; break;
-#ifdef RGBLIGHT_ENABLE
-  case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
-    if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
-      userspace_config.rgb_layer_change = false;
-      eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw);
-    }
-    return true; break;
-#endif // RGBLIGHT_ENABLE
 
 
   case KC_CCCV:                                    // One key copy/paste
@@ -443,7 +314,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 #endif // UNICODE_ENABLE
 
   }
-  return process_record_keymap(keycode, record);
+  return process_record_keymap(keycode, record) && process_record_secrets(keycode, record) && process_record_user_rgb(keycode, record);
 }
 
 
@@ -452,111 +323,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 // on layer change, no matter where the change was initiated
 // Then runs keymap's layer change check
 uint32_t layer_state_set_user(uint32_t state) {
-  uint8_t default_layer = eeconfig_read_default_layer();
   state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
-
-  switch (biton32(state)) {
-  case _MACROS:
-#ifdef RGBLIGHT_ENABLE
-    if (userspace_config.rgb_layer_change) {
-      rgblight_sethsv_orange();
-      userspace_config.is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
-    }
-#endif // RGBLIGHT_ENABLE
-
-    break;
-  case _MEDIA:
-#ifdef RGBLIGHT_ENABLE
-    if (userspace_config.rgb_layer_change) {
-      rgblight_sethsv_chartreuse();
-      rgblight_mode(22);
-    }
-#endif // RGBLIGHT_ENABLE
-
-    break;
-  case _GAMEPAD:
-#ifdef RGBLIGHT_ENABLE
-    if (userspace_config.rgb_layer_change) {
-      rgblight_sethsv_orange();
-      rgblight_mode(17);
-    }
-#endif // RGBLIGHT_ENABLE
-
-    break;
-  case _DIABLO:
-#ifdef RGBLIGHT_ENABLE
-    if (userspace_config.rgb_layer_change) {
-      rgblight_sethsv_red();
-      rgblight_mode(5);
-    }
-#endif // RGBLIGHT_ENABLE
-
-    break;
-  case _RAISE:
 #ifdef RGBLIGHT_ENABLE
-    if (userspace_config.rgb_layer_change) {
-      rgblight_sethsv_yellow();
-      rgblight_mode(5);
-    }
-#endif // RGBLIGHT_ENABLE
-
-    break;
-  case _LOWER:
-#ifdef RGBLIGHT_ENABLE
-    if (userspace_config.rgb_layer_change) {
-      rgblight_sethsv_orange();
-      rgblight_mode(5);
-    }
-#endif // RGBLIGHT_ENABLE
-
-    break;
-  case _ADJUST:
-#ifdef RGBLIGHT_ENABLE
-    if (userspace_config.rgb_layer_change) {
-      rgblight_sethsv_red();
-      rgblight_mode(23);
-    }
-#endif // RGBLIGHT_ENABLE
-
-    break;
-  default: //  for any other layers, or the default layer
-    if (default_layer & (1UL << _COLEMAK)) {
-#ifdef RGBLIGHT_ENABLE
-      if (userspace_config.rgb_layer_change) { rgblight_sethsv_magenta(); }
-#endif // RGBLIGHT_ENABLE
-
-    }
-    else if (default_layer & (1UL << _DVORAK)) {
-#ifdef RGBLIGHT_ENABLE
-      if (userspace_config.rgb_layer_change) { rgblight_sethsv_green(); }
+  state = layer_state_set_rgb(state);
 #endif // RGBLIGHT_ENABLE
-
-    }
-    else if (default_layer & (1UL << _WORKMAN)) {
-#ifdef RGBLIGHT_ENABLE
-      if (userspace_config.rgb_layer_change) { rgblight_sethsv_goldenrod(); }
-#endif // RGBLIGHT_ENABLE
-
-    }
-    else {
-#ifdef RGBLIGHT_ENABLE
-      if (userspace_config.rgb_layer_change) { rgblight_sethsv_teal(); }
-#endif // RGBLIGHT_ENABLE
-
-    }
-    if (biton32(state) == _MODS) { // If the non-OSM layer is enabled, then breathe
-#ifdef RGBLIGHT_ENABLE
-      if (userspace_config.rgb_layer_change) { rgblight_mode(2); }
-#endif // RGBLIGHT_ENABLE
-
-    } else {                       // otherwise, stay solid
-#ifdef RGBLIGHT_ENABLE
-      if (userspace_config.rgb_layer_change) { rgblight_mode(1); }
-#endif // RGBLIGHT_ENABLE
-
-    }
-    break;
-  }
   return layer_state_set_keymap (state);
 }
 
index 87a72f52804ddfadcb6a9a132a042aa261d84db7..e035b86fbf0435733f4d6cf614a433d3eb1f8d02 100644 (file)
@@ -42,6 +42,7 @@ enum userspace_layers {
 #define MODS_ALT_MASK  (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
 #define MODS_GUI_MASK  (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
 
+
 // RGB color codes are no longer located here anymore.  Instead, you will want to
 // head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h
 
@@ -51,7 +52,11 @@ extern bool clicky_enable;
 void rgblight_sethsv_default_helper(uint8_t index);
 #endif // RGBLIGHT_ENABLE
 
-#define EECONFIG_USERSPACE (uint8_t *)20
+void tap(uint16_t keycode);
+bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
+
+
+#define EECONFIG_USERSPACE (uint8_t *)19
 
 typedef union {
   uint8_t raw;
@@ -59,6 +64,7 @@ typedef union {
     bool     clicky_enable    :1;
     bool     rgb_layer_change :1;
     bool     is_overwatch     :1;
+    bool     nuke_switch      :1;
   };
 } userspace_config_t;
 
@@ -91,6 +97,8 @@ enum userspace_custom_keycodes {
   KC_SECRET_4,
   KC_SECRET_5,
   KC_CCCV,
+  KC_NUKE,
+
 #ifdef UNICODE_ENABLE
   UC_FLIP,
 #endif //UNICODE_ENABLE
@@ -112,8 +120,8 @@ enum userspace_custom_keycodes {
 #define DVORAK KC_DVORAK
 #define COLEMAK KC_COLEMAK
 #define WORKMAN KC_WORKMAN
-#define KC_RST KC_RESET
 
+#define KC_RST KC_RESET
 
 #ifdef SWAP_HANDS_ENABLE
 #define KC_C1R3 SH_TT
@@ -125,6 +133,16 @@ enum userspace_custom_keycodes {
 #define KC_MLSF OSM(MOD_LSFT)
 #define KC_MRSF OSM(MOD_RSFT)
 
+#define OS_LGUI OSM(MOD_LGUI)
+#define OS_RGUI OSM(MOD_RGUI)
+#define OS_LSFT OSM(MOD_LSFT)
+#define OS_RSFT OSM(MOD_RSFT)
+#define OS_LCTL OSM(MOD_LCTL)
+#define OS_RCTL OSM(MOD_RCTL)
+#define OS_LALT OSM(MOD_LALT)
+#define OS_RALT OSM(MOD_RALT)
+#define ALT_APP ALT_T(KC_APP)
+
 #define MG_NKRO MAGIC_TOGGLE_NKRO
 
 
@@ -200,8 +218,8 @@ enum {
 #define ______________COLEMAK_MOD_DH_L3____________ CTL_T(KC_Z),   KC_X,    KC_C,    KC_D,    KC_V
 
 #define ______________COLEMAK_MOD_DH_R1____________       KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN
-#define ______________COLEMAK_MOD_DH_R2____________       KC_K,    KC_N,    KC_E,    KC_I,    KC_O
-#define ______________COLEMAK_MOD_DH_R3____________       KC_M,    KC_H,    KC_COMM, KC_DOT,  CTL_T(KC_SLASH)
+#define ______________COLEMAK_MOD_DH_R2____________       KC_M,    KC_N,    KC_E,    KC_I,    KC_O
+#define ______________COLEMAK_MOD_DH_R3____________       KC_K,    KC_H,    KC_COMM, KC_DOT,  CTL_T(KC_SLASH)
 
 
 #define _________________DVORAK_L1_________________        KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y
@@ -227,7 +245,7 @@ enum {
 #define _________________NORMAN_L3_________________ CTL_T(KC_Z),   KC_X,    KC_C,    KC_V,    KC_B
 
 #define _________________NORMAN_R1_________________       KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN
-#define _________________NORMAN_R2_________________       KC_J,    KC_N,    KC_I,    KC_O,    KC_U
+#define _________________NORMAN_R2_________________       KC_Y,    KC_N,    KC_I,    KC_O,    KC_U
 #define _________________NORMAN_R3_________________       KC_P,    KC_M,    KC_COMM, KC_DOT,  CTL_T(KC_SLASH)
 
 #define ________________NUMBER_LEFT________________       KC_1,    KC_2,    KC_3,    KC_4,    KC_5
@@ -243,7 +261,7 @@ enum {
 #define ___________ERGODOX_BOTTOM_RIGHT____________       KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
 
 
-#define __________________ERGODOX_THUMB_CLUSTER_____________________           ALT_T(KC_APP), KC_LGUI,                 KC_RGUI, CTL_T(KC_ESCAPE), \
+#define __________________ERGODOX_THUMB_CLUSTER_____________________           ALT_T(KC_APP), OSM(MOD_LGUI),                 OSM(MOD_RGUI), CTL_T(KC_ESCAPE), \
                                                                                               KC_HOME,                 KC_PGUP, \
                                                                 LT(_LOWER, KC_SPACE),KC_BSPC, KC_END,                  KC_PGDN, KC_DEL,  LT(_RAISE, KC_ENTER)
 
index ddf24b24f7ee67b2a80f581645aa2f8d5802df88..0aa73ece9058b2d0662b74393da3eb310734382d 100644 (file)
@@ -96,7 +96,7 @@ Then you can create this file and add your macro strings to it:
 
 ###### secrets.h
 ```c
-PROGMEM const char secret[][64] = {
+static const char * const secrets[] = {
   "secret1",
   "secret2",
   "secret3",
@@ -116,7 +116,7 @@ In the `<name>.c` file, you will want to add this to the top:
 #else
 // `PROGMEM const char secret[][x]` may work better, but it takes up more space in the firmware
 // And I'm not familiar enough to know which is better or why...
-PROGMEM const char secret[][64] = {
+static const char * const secrets[] = {
   "test1",
   "test2",
   "test3",
diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c
new file mode 100644 (file)
index 0000000..af7190c
--- /dev/null
@@ -0,0 +1,261 @@
+#include "drashna.h"
+#include "rgb_stuff.h"
+
+extern rgblight_config_t rgblight_config;
+extern userspace_config_t userspace_config;
+
+#ifdef RGBLIGHT_ENABLE
+void rgblight_sethsv_default_helper(uint8_t index) {
+  rgblight_sethsv_at(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, index);
+}
+#endif // RGBLIGHT_ENABLE
+
+#ifdef INDICATOR_LIGHTS
+uint8_t last_mod;
+uint8_t last_led;
+uint8_t last_osm;
+uint8_t current_mod;
+uint8_t current_led;
+uint8_t current_osm;
+
+
+void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) {
+  if (userspace_config.rgb_layer_change && biton32(layer_state) == 0) {
+    if (this_mod & MODS_SHIFT_MASK || this_led & (1<<USB_LED_CAPS_LOCK) || this_osm & MODS_SHIFT_MASK) {
+      rgblight_sethsv_at(0, 255, 255, SHFT_LED1);
+      rgblight_sethsv_at(0, 255, 255, SHFT_LED2);
+    } else {
+      rgblight_sethsv_default_helper(SHFT_LED1);
+      rgblight_sethsv_default_helper(SHFT_LED2);
+    }
+    if (this_mod & MODS_CTRL_MASK || this_osm & MODS_CTRL_MASK) {
+      rgblight_sethsv_at(51, 255, 255, CTRL_LED1);
+      rgblight_sethsv_at(51, 255, 255, CTRL_LED2);
+    } else {
+      rgblight_sethsv_default_helper(CTRL_LED1);
+      rgblight_sethsv_default_helper(CTRL_LED2);
+    }
+    if (this_mod & MODS_GUI_MASK || this_osm & MODS_GUI_MASK) {
+      rgblight_sethsv_at(120, 255, 255, GUI_LED1);
+      rgblight_sethsv_at(120, 255, 255, GUI_LED2);
+    } else {
+      rgblight_sethsv_default_helper(GUI_LED1);
+      rgblight_sethsv_default_helper(GUI_LED2);
+    }
+  }
+}
+
+void matrix_scan_indicator(void) {
+  current_mod = get_mods();
+  current_led = host_keyboard_leds();
+  current_osm = get_oneshot_mods();
+
+  set_rgb_indicators(current_mod, current_led, current_osm);
+
+  last_mod = current_mod;
+  last_led = current_led;
+  last_osm = current_osm;
+
+}
+#endif //INDICATOR_LIGHTS
+
+#ifdef RGBLIGHT_TWINKLE
+static rgblight_fadeout lights[RGBLED_NUM];
+
+__attribute__ ((weak))
+bool indicator_is_this_led_used(uint8_t index) { return false; }
+
+void scan_rgblight_fadeout(void) { // Don't effing change this function .... rgblight_sethsv is supppppper intensive
+  bool litup = false;
+  for (uint8_t light_index = 0 ; light_index < RGBLED_NUM ; ++light_index ) {
+    if (lights[light_index].enabled && timer_elapsed(lights[light_index].timer) > 10) {
+      rgblight_fadeout *light = &lights[light_index];
+      litup = true;
+
+      if (light->life) {
+        light->life -= 1;
+        if (biton32(layer_state) == 0) {
+          sethsv(light->hue + rand() % 0xF, 255, light->life, (LED_TYPE *)&led[light_index]);
+        }
+        light->timer = timer_read();
+      }
+      else {
+        if (light->enabled && biton32(layer_state) == 0) { rgblight_sethsv_default_helper(light_index); }
+        litup = light->enabled = false;
+      }
+    }
+  }
+  if (litup && biton32(layer_state) == 0) {
+    rgblight_set();
+  }
+}
+
+void start_rgb_light(void) {
+
+    uint8_t indices[RGBLED_NUM];
+    uint8_t indices_count = 0;
+    uint8_t min_life = 0xFF;
+    uint8_t min_life_index = -1;
+    for (uint8_t index = 0 ; index < RGBLED_NUM ; ++index ) {
+      if (indicator_is_this_led_used(index)) { continue; }
+      if (lights[index].enabled) {
+        if (min_life_index == -1 ||
+          lights[index].life < min_life)
+        {
+          min_life = lights[index].life;
+          min_life_index = index;
+        }
+        continue;
+      }
+
+      indices[indices_count] = index;
+      ++indices_count;
+    }
+
+    uint8_t light_index;
+    if (!indices_count) {
+        light_index = min_life_index;
+    }
+    else {
+      light_index = indices[rand() % indices_count];
+    }
+
+    rgblight_fadeout *light = &lights[light_index];
+    light->enabled = true;
+    light->timer = timer_read();
+    light->life = 0xC0 + rand() % 0x40;
+
+    light->hue = rgblight_config.hue + (rand() % 0xB4) - 0x54;
+
+    rgblight_sethsv_at(light->hue, 255, light->life, light_index);
+}
+#endif
+
+
+bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
+    switch (keycode) {
+#ifdef RGBLIGHT_TWINKLE
+    case KC_A ... KC_SLASH:
+    case KC_F1 ... KC_F12:
+    case KC_INSERT ... KC_UP:
+    case KC_KP_SLASH ... KC_KP_DOT:
+    case KC_F13 ... KC_F24:
+    case KC_AUDIO_MUTE ... KC_MEDIA_REWIND:
+      if (record->event.pressed) { start_rgb_light(); }
+      return true; break;
+#endif // RGBLIGHT_TWINKLE
+  case KC_RGB_T:  // This allows me to use underglow as layer indication, or as normal
+#ifdef RGBLIGHT_ENABLE
+    if (record->event.pressed) {
+      userspace_config.rgb_layer_change ^= 1;
+      xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
+      eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw);
+      if (userspace_config.rgb_layer_change) {
+        layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
+      }
+    }
+#endif // RGBLIGHT_ENABLE
+    return false; break;
+#ifdef RGBLIGHT_ENABLE
+  case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
+    if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
+      if (userspace_config.rgb_layer_change) {
+        userspace_config.rgb_layer_change = false;
+        xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
+        eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw);
+      }
+    }
+    return true; break;
+#endif // RGBLIGHT_ENABLE
+  }
+    return true;
+}
+
+
+
+void matrix_init_rgb(void) {
+#ifdef INDICATOR_LIGHTS
+  current_mod = last_mod = get_mods();
+  current_led = last_led = host_keyboard_leds();
+  current_osm = last_osm = get_oneshot_mods();
+#endif
+
+  if (userspace_config.rgb_layer_change) {
+    uint8_t default_layer = eeconfig_read_default_layer();
+    rgblight_enable_noeeprom();
+    if (default_layer & (1UL << _COLEMAK)) {
+      rgblight_sethsv_magenta();
+    } else if (default_layer & (1UL << _DVORAK)) {
+      rgblight_sethsv_green();
+    } else if (default_layer & (1UL << _WORKMAN)) {
+      rgblight_sethsv_goldenrod();
+    } else {
+      rgblight_sethsv_cyan();
+    }
+  }
+}
+
+void matrix_scan_rgb(void) {
+#ifdef RGBLIGHT_TWINKLE
+  scan_rgblight_fadeout();
+#endif // RGBLIGHT_ENABLE
+
+#ifdef INDICATOR_LIGHTS
+  matrix_scan_indicator();
+#endif
+
+}
+
+
+uint32_t layer_state_set_rgb(uint32_t state) {
+#ifdef RGBLIGHT_ENABLE
+  uint8_t default_layer = eeconfig_read_default_layer();
+  if (userspace_config.rgb_layer_change) {
+    switch (biton32(state)) {
+    case _MACROS:
+      rgblight_sethsv_noeeprom_orange();
+      userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18);
+      break;
+    case _MEDIA:
+      rgblight_sethsv_noeeprom_chartreuse();
+      rgblight_mode_noeeprom(22);
+      break;
+    case _GAMEPAD:
+      rgblight_sethsv_noeeprom_orange();
+      rgblight_mode_noeeprom(17);
+      break;
+    case _DIABLO:
+      rgblight_sethsv_noeeprom_red();
+      rgblight_mode_noeeprom(5);
+      break;
+    case _RAISE:
+      rgblight_sethsv_noeeprom_yellow();
+      rgblight_mode_noeeprom(5);
+      break;
+    case _LOWER:
+      rgblight_sethsv_noeeprom_orange();
+      rgblight_mode_noeeprom(5);
+      break;
+    case _ADJUST:
+      rgblight_sethsv_noeeprom_red();
+      rgblight_mode_noeeprom(23);
+      break;
+    default: //  for any other layers, or the default layer
+      if (default_layer & (1UL << _COLEMAK)) {
+        rgblight_sethsv_noeeprom_magenta();
+      } else if (default_layer & (1UL << _DVORAK)) {
+        rgblight_sethsv_noeeprom_green();
+      } else if (default_layer & (1UL << _WORKMAN)) {
+        rgblight_sethsv_noeeprom_goldenrod();
+      } else {
+        rgblight_sethsv_noeeprom_cyan();
+      }
+      biton32(state) == _MODS ? rgblight_mode_noeeprom(2) : rgblight_mode_noeeprom(1); // if _MODS layer is on, then breath to denote it
+      break;
+    }
+//    layer_state_set_indicator(); // Runs every scan, so need to call this here .... since I can't get it working "right" anyhow
+  }
+#endif // RGBLIGHT_ENABLE
+
+  return state;
+}
diff --git a/users/drashna/rgb_stuff.h b/users/drashna/rgb_stuff.h
new file mode 100644 (file)
index 0000000..6426ea2
--- /dev/null
@@ -0,0 +1,16 @@
+#include "quantum.h"
+
+typedef struct {
+    bool enabled;
+    uint8_t hue;
+    uint16_t timer;
+    uint8_t life;
+} rgblight_fadeout;
+
+bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record);
+void scan_rgblight_fadeout(void);
+void matrix_init_rgb(void);
+void matrix_scan_rgb(void);
+uint32_t layer_state_set_rgb(uint32_t state);
+
+
index e2c5a2995b9997dd020b26c4bcae77eef354a933..18df665c0d41f6c2d93cea8b181ca46ecbf36d90 100644 (file)
@@ -1,11 +1,34 @@
 
-SRC += drashna.c
+SRC += drashna.c secrets.c rgb_stuff.c
+
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+  SRC += tap_dances.c
+endif
+
 EXTRAFLAGS        += -flto
 
 ifeq ($(strip $(NO_SECRETS)), yes)
     OPT_DEFS += -DNO_SECRETS
 endif
 
-ifeq ($(strip $(INDICATOR_LIGHTS)), yes)
-    OPT_DEFS += -DINDICATOR_LIGHTS
+ifdef RGBLIGHT_ENABLE
+  ifeq ($(strip $(INDICATOR_LIGHTS)), yes)
+      OPT_DEFS += -DINDICATOR_LIGHTS
+  endif
+  ifeq ($(strip $(RGBLIGHT_TWINKLE)), yes)
+    OPT_DEFS += -DRGBLIGHT_TWINKLE
+  endif
+  ifeq ($(strip $(RGBLIGHT_NOEEPROM)), yes)
+    OPT_DEFS += -DRGBLIGHT_NOEEPROM
+  endif
+endif
+
+ifeq ($(strip $(MACROS_ENABLED)), yes)
+    OPT_DEFS += -DMACROS_ENABLED
+endif
+
+ifdef CONSOLE_ENABLE
+  ifeq ($(strip $(KEYLOGGER_ENABLE)), yes)
+    OPT_DEFS += -DKEYLOGGER_ENABLE
+  endif
 endif
diff --git a/users/drashna/tap_dances.c b/users/drashna/tap_dances.c
new file mode 100644 (file)
index 0000000..c9e4b1d
--- /dev/null
@@ -0,0 +1,65 @@
+#include "drashna.h"
+#include "tap_dances.h"
+
+
+//define diablo macro timer variables
+uint16_t diablo_timer[4];
+uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
+uint8_t diablo_key_time[4];
+
+// has the correct number of seconds elapsed (as defined by diablo_times)
+bool check_dtimer(uint8_t dtimer) { return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; };
+
+// Cycle through the times for the macro, starting at 0, for disabled.
+// Max of six values, so don't exceed
+void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
+  if (state->count >= 7) {
+    diablo_key_time[diablo_key] = diablo_times[0];
+    reset_tap_dance(state);
+  }  else {
+    diablo_key_time[diablo_key] = diablo_times[state->count - 1];
+  }
+}
+
+// Would rather have one function for all of this, but no idea how to do that...
+void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 0); }
+void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 1); }
+void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 2); }
+void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 3); }
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+  // tap once to disable, and more to enable timed micros
+  [TD_D3_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
+  [TD_D3_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
+  [TD_D3_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
+  [TD_D3_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
+};
+
+// Sends the key press to system, but only if on the Diablo layer
+void send_diablo_keystroke(uint8_t diablo_key) {
+  if (biton32(layer_state) == _DIABLO) {
+    switch (diablo_key) {
+      case 0:
+        tap(KC_1); break;
+      case 1:
+        tap(KC_2); break;
+      case 2:
+        tap(KC_3); break;
+      case 3:
+        tap(KC_4); break;
+    }
+  }
+}
+
+// Checks each of the 4 timers/keys to see if enough time has elapsed
+// Runs the "send string" command if enough time has passed, and resets the timer.
+void run_diablo_macro_check(void) {
+  uint8_t dtime;
+  for (dtime = 0; dtime < 4; dtime++) {
+    if (check_dtimer(dtime) && diablo_key_time[dtime]) {
+      diablo_timer[dtime] = timer_read();
+      send_diablo_keystroke(dtime);
+    }
+  }
+}
diff --git a/users/drashna/tap_dances.h b/users/drashna/tap_dances.h
new file mode 100644 (file)
index 0000000..8935753
--- /dev/null
@@ -0,0 +1,7 @@
+//define diablo macro timer variables
+extern uint16_t diablo_timer[4];
+extern uint8_t diablo_times[];
+extern uint8_t diablo_key_time[4];
+
+
+void run_diablo_macro_check(void);