Skip to content

Commit

Permalink
[Keymap] Userspace refactor, adding leader key functionality (qmk#7790)
Browse files Browse the repository at this point in the history
* Userspace refactor

* Fixed missed ifdef

* tapcode16, adjust layout

* glcdfont changes from qmk#7745

* Modify Keymaps, add workman

* RGB & OLED update
  • Loading branch information
Curry authored and drashna committed Jan 9, 2020
1 parent 2969a8e commit 2989c75
Show file tree
Hide file tree
Showing 19 changed files with 409 additions and 422 deletions.
File renamed without changes.
129 changes: 61 additions & 68 deletions users/curry/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,97 +6,82 @@
/* Set Polling rate to 1000Hz */
#define USB_POLLING_INTERVAL_MS 1

#ifdef RGBLIGHT_ENABLE
#if defined(RGBLIGHT_ENABLE)
# undef RGBLIGHT_ANIMATIONS
# if defined(__AVR__) && !defined(__AVR_AT90USB1286__)
# define RGBLIGHT_SLEEP
# define RGBLIGHT_EFFECT_BREATHING
# define RGBLIGHT_EFFECT_SNAKE
# define RGBLIGHT_EFFECT_KNIGHT
# else
# define RGBLIGHT_ANIMATIONS
# endif
# define RGBLIGHT_SLEEP
# define RGBLIGHT_EFFECT_BREATHING
# define RGBLIGHT_EFFECT_SNAKE
# define RGBLIGHT_EFFECT_KNIGHT
#endif // RGBLIGHT_ENABLE

#ifdef RGB_MATRIX_ENABLE
# define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
#if defined(RGB_MATRIX_ENABLE)
# define RGB_MATRIX_KEYPRESSES
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
// # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
// # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
// # define EECONFIG_RGB_MATRIX (uint32_t *)16

# if defined(__AVR__) && !defined(__AVR_AT90USB1286__)
# define DISABLE_RGB_MATRIX_ALPHAS_MODS
# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
# define DISABLE_RGB_MATRIX_BREATHING
# define DISABLE_RGB_MATRIX_BAND_SAT
# define DISABLE_RGB_MATRIX_BAND_VAL
# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
# define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
# define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
# define DISABLE_RGB_MATRIX_CYCLE_ALL
# define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
# define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
# define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
# define RGB_DISABLE_WHEN_USB_SUSPENDED true

# define DISABLE_RGB_MATRIX_ALPHAS_MODS
# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
# define DISABLE_RGB_MATRIX_BREATHING
# define DISABLE_RGB_MATRIX_BAND_SAT
# define DISABLE_RGB_MATRIX_BAND_VAL
# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
# define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
# define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
# define DISABLE_RGB_MATRIX_CYCLE_ALL
# define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
# define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
# define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
# define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
# define DISABLE_RGB_MATRIX_DUAL_BEACON
# define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
# define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
# define DISABLE_RGB_MATRIX_RAINBOW_BEACON
# define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
# define DISABLE_RGB_MATRIX_RAINDROPS
# define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
# define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
# define DISABLE_RGB_MATRIX_DUAL_BEACON
# define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
# define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
# define DISABLE_RGB_MATRIX_RAINBOW_BEACON
# define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
# define DISABLE_RGB_MATRIX_RAINDROPS
# define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
// # define DISABLE_RGB_MATRIX_TYPING_HEATMAP
# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
# define DISABLE_RGB_MATRIX_SPLASH
# define DISABLE_RGB_MATRIX_MULTISPLASH
# define DISABLE_RGB_MATRIX_SOLID_SPLASH
# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
# endif // AVR
#endif // RGB_MATRIX_ENABLE

#ifndef ONESHOT_TAP_TOGGLE
# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
# define DISABLE_RGB_MATRIX_SPLASH
# define DISABLE_RGB_MATRIX_MULTISPLASH
# define DISABLE_RGB_MATRIX_SOLID_SPLASH
# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif // RGB_MATRIX_ENABLE

#if !defined(ONESHOT_TAP_TOGGLE)
# define ONESHOT_TAP_TOGGLE 2
#endif // !ONESHOT_TAP_TOGGLE

#ifndef ONESHOT_TIMEOUT
#if !defined(ONESHOT_TIMEOUT)
# define ONESHOT_TIMEOUT 3000
#endif // !ONESHOT_TIMEOUT

#ifndef QMK_KEYS_PER_SCAN
#if !defined(QMK_KEYS_PER_SCAN)
# define QMK_KEYS_PER_SCAN 4
#endif // !QMK_KEYS_PER_SCAN

// this makes it possible to do rolling combos (zx) with keys that
// convert to other keys on hold (z becomes ctrl when you hold it,
// and when this option isn't enabled, z rapidly followed by x
// actually sends Ctrl-x. That's bad.)
#define IGNORE_MOD_TAP_INTERRUPT
#undef PERMISSIVE_HOLD
//#define TAPPING_FORCE_HOLD
//#define RETRO_TAPPING

#define FORCE_NKRO

#ifndef TAPPING_TOGGLE
#if !defined(TAPPING_TOGGLE)
# define TAPPING_TOGGLE 1
#endif

#ifdef TAPPING_TERM
#if defined(TAPPING_TERM)
# undef TAPPING_TERM
#endif // TAPPING_TERM

#if defined(KEYBOARD_ergodox_ez)
# define TAPPING_TERM 185
#elif defined(KEYBOARD_crkbd)
Expand All @@ -107,12 +92,20 @@

#define TAP_CODE_DELAY 5

#define LEADER_TIMEOUT 250
#define LEADER_PER_KEY_TIMING

/* Disable unused and unneeded features to reduce on firmware size */
#ifdef LOCKING_SUPPORT_ENABLE
#if defined(LOCKING_SUPPORT_ENABLE)
# undef LOCKING_SUPPORT_ENABLE
#endif
#ifdef LOCKING_RESYNC_ENABLE

#if defined(LOCKING_RESYNC_ENABLE)
# undef LOCKING_RESYNC_ENABLE
#endif

#if defined(OLED_FONT_H)
# undef OLED_FONT_H
#endif

#define OLED_FONT_H "users/curry/glcdfont.c"
19 changes: 9 additions & 10 deletions users/curry/curry.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,16 @@ void rgb_matrix_update_pwm_buffers(void);

// On RESET, set all RGB to red, shutdown the keymap.
void shutdown_user(void) {
#ifdef RGBLIGHT_ENABLE
#if defined(RGBLIGHT_ENABLE)
rgblight_enable_noeeprom();
rgblight_mode_noeeprom(1);
rgblight_setrgb_red();
#endif // RGBLIGHT_ENABLE
#ifdef RGB_MATRIX_ENABLE
#endif

#if defined(RGB_MATRIX_ENABLE)
rgb_matrix_set_color_all(0xFF, 0x00, 0x00);
rgb_matrix_update_pwm_buffers();
#endif // RGB_MATRIX_ENABLE
#endif
shutdown_keymap();
}

Expand All @@ -77,7 +78,7 @@ __attribute__((weak)) void matrix_scan_keymap(void) {}

// No global matrix scan code, so just run keymap's matrix
// scan function
void matrix_scan_user(void) {
__attribute__((weak)) void matrix_scan_user(void) {
static bool has_ran_yet;
if (!has_ran_yet) {
has_ran_yet = true;
Expand All @@ -96,18 +97,16 @@ __attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state)
// On Layer change, run keymap's layer change check
layer_state_t layer_state_set_user(layer_state_t state) {
state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
#if defined(RGBLIGHT_ENABLE)
state = layer_state_set_rgb(state);
#endif // RGBLIGHT_ENABLE
#endif
return layer_state_set_keymap(state);
}

__attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t state) { return state; }

// Runs state check and changes underglow color and animation
layer_state_t default_layer_state_set_user(layer_state_t state) {
return default_layer_state_set_keymap(state);
}
layer_state_t default_layer_state_set_user(layer_state_t state) { return default_layer_state_set_keymap(state); }

__attribute__((weak)) void led_set_keymap(uint8_t usb_led) {}

Expand Down
14 changes: 10 additions & 4 deletions users/curry/curry.h
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
#pragma once

#include QMK_KEYBOARD_H

#include "version.h"
#include "eeprom.h"
#include "wrappers.h"
#include "process_records.h"

#ifdef TAP_DANCE_ENABLE
#if defined(TAP_DANCE_ENABLE)
# include "tap_dances.h"
#endif // TAP_DANCE_ENABLE
#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
# include "rgb_stuff.h"

#if defined(RGB_MATRIX_ENABLE)
# include "rgb_matrix_user.h"
#endif

#if defined(RGBLIGHT_ENABLE)
# include "rgb_lighting_user.h"
#endif

#if defined(KEYBOARD_lily58_rev1) & defined(PROTOCOL_LUFA)
# include "lufa.h"
# include "split_util.h"
Expand All @@ -23,6 +28,7 @@ enum userspace_layers {
_QWERTY = 0,
_COLEMAK,
_DVORAK,
_WORKMAN,
_MODS,
_LOWER,
_RAISE,
Expand Down
11 changes: 1 addition & 10 deletions users/curry/glcdfont.c
Original file line number Diff line number Diff line change
@@ -1,13 +1,4 @@
#pragma once

#ifdef __AVR__
# include <avr/io.h>
# include <avr/pgmspace.h>
#elif defined(ESP8266)
# include <pgmspace.h>
#else
# define PROGMEM
#endif
#include "progmem.h"

// Corne 8x6 font with QMK Firmware Logo
// Online editor: https://helixfonteditor.netlify.com/
Expand Down
24 changes: 24 additions & 0 deletions users/curry/leader.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#include "curry.h"
#include "leader.h"

LEADER_EXTERNS();

void matrix_scan_user(void) {
static bool has_ran_yet;
if (!has_ran_yet) {
has_ran_yet = true;
startup_user();
}

#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
matrix_scan_rgb();
#endif // RGBLIGHT_ENABLE
LEADER_DICTIONARY() {
leading = false;
leader_end();
SEQ_ONE_KEY(KC_F) { SEND_STRING(SS_LCTL("akf")); } // Select all and format
SEQ_ONE_KEY(KC_P) { SEND_STRING(SS_LCTL(SS_LSFT("4"))); } // Screenshot region
SEQ_TWO_KEYS(KC_D, KC_D) { SEND_STRING(SS_LCTL("ac")); } // Copy all
}
matrix_scan_keymap();
}
3 changes: 3 additions & 0 deletions users/curry/leader.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

void matrix_scan_user(void);
13 changes: 7 additions & 6 deletions users/curry/oled.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#include "curry.h"

#ifdef OLED_DRIVER_ENABLE
#define KEYLOGGER_LENGTH 5
static uint32_t oled_timer = 0;
static char keylog_str[KEYLOGGER_LENGTH + 1] = {"\n"};
Expand All @@ -26,6 +25,7 @@ static const char PROGMEM code_to_name[0xFF] = {
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' // Fx
};

// clang-format on
void add_keylog(uint16_t keycode);

oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
Expand All @@ -49,7 +49,7 @@ void add_keylog(uint16_t keycode) {
}

void render_keylogger_status(void) {
oled_write_P(PSTR("Keys"), false);
oled_write_P(PSTR("Keys:"), false);
oled_write(keylog_str, false);
}

Expand All @@ -65,6 +65,9 @@ void render_default_layer_state(void) {
case _DVORAK:
oled_write_P(PSTR(" DVRK"), false);
break;
case _WORKMAN:
oled_write_P(PSTR(" WRKM"), false);
break;
}
}

Expand Down Expand Up @@ -139,11 +142,11 @@ void oled_task_user(void) {
oled_off();
return;
}
# ifndef SPLIT_KEYBOARD
#if !defined(SPLIT_KEYBOARD)
else {
oled_on();
}
# endif
#endif
if (is_keyboard_master()) {
render_status_main(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
} else {
Expand All @@ -158,5 +161,3 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
}
return true;
}

#endif
Loading

0 comments on commit 2989c75

Please sign in to comment.