Compare commits

...

3 Commits

Author SHA1 Message Date
Mark 7cb29a6bba
Cleanup 2023-12-19 09:03:31 -08:00
Mark 87029d00c1
Timing change 2023-12-19 09:03:08 -08:00
Mark e3e82a1109
Added short-circuit leader key 2023-12-19 08:34:06 -08:00
18 changed files with 953 additions and 729 deletions

View File

@ -1,23 +1,3 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
Copyright 2015 ZSA Technology Labs Inc (@zsa)
Copyright 2020 Christopher Courtney <drashna@live.com> (@drashna)
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/>.
*/
#include "betalupi_ergodox.h"
#include "features/beta_rawhid.h"
@ -66,16 +46,16 @@ void matrix_init_kb(void) {
PORTE |= (1<<6);
keyboard_config.raw = eeconfig_read_kb();
#ifdef RGB_MATRIX_ENABLE
if (keyboard_config.rgb_matrix_enable) {
rgb_matrix_set_flags(LED_FLAG_ALL);
} else {
rgb_matrix_set_flags(LED_FLAG_NONE);
}
#endif
#ifdef RGB_MATRIX_ENABLE
if (keyboard_config.rgb_matrix_enable) {
rgb_matrix_set_flags(LED_FLAG_ALL);
} else {
rgb_matrix_set_flags(LED_FLAG_NONE);
}
#endif
ergodox_blink_all_leds();
matrix_init_user();
}
@ -144,139 +124,6 @@ out:
}
#ifdef SWAP_HANDS_ENABLE
__attribute__ ((weak))
// swap-hands action needs a matrix to define the swap
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
/* Left hand, matrix positions */
{{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}},
{{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}},
{{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}},
{{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}},
{{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}},
{{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}},
{{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}},
/* Right hand, matrix positions */
{{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}},
{{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}},
{{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}},
{{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}},
{{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}},
{{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}},
{{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}},
};
#endif
#ifdef RGB_MATRIX_ENABLE
void suspend_power_down_kb(void) {
rgb_matrix_set_suspend_state(true);
suspend_power_down_user();
}
void suspend_wakeup_init_kb(void) {
rgb_matrix_set_suspend_state(false);
suspend_wakeup_init_user();
}
const is31_led g_is31_leds[RGB_MATRIX_LED_COUNT] = {
//{driver, R location, G location, B location}
{0, C3_1, C2_1, C4_1}, // LED1 on right
{0, C6_1, C5_1, C7_1}, // LED2
{0, C4_2, C3_2, C5_2}, // LED3
{0, C7_2, C6_2, C8_2}, // LED4
{0, C2_3, C1_3, C3_3}, // LED5
{0, C5_3, C4_3, C6_3}, // LED6
{0, C8_3, C7_3, C9_3}, // LED7
{0, C2_4, C1_4, C3_4}, // LED8
{0, C6_4, C5_4, C7_4}, // LED9
{0, C2_5, C1_5, C3_5}, // LED10
{0, C7_5, C6_5, C8_5}, // LED11
{0, C2_6, C1_6, C3_6}, // LED12
{0, C5_6, C4_6, C6_6}, // LED13
{0, C8_6, C7_6, C9_6}, // LED14
{0, C2_7, C1_7, C3_7}, // LED15
{0, C5_7, C4_7, C6_7}, // LED16
{0, C2_8, C1_8, C3_8}, // LED17
{0, C5_8, C4_8, C6_8}, // LED18
{0, C3_9, C2_9, C4_9}, // LED19
{0, C6_9, C5_9, C7_9}, // LED20
{0, C4_10, C3_10, C5_10}, // LED21
{0, C7_10, C6_10, C8_10}, // LED22
{0, C2_11, C1_11, C3_11}, // LED23
{0, C5_11, C4_11, C6_11}, // LED24
{1, C3_1, C2_1, C4_1}, // LED1 on left
{1, C6_1, C5_1, C7_1}, // LED2
{1, C4_2, C3_2, C5_2}, // LED3
{1, C7_2, C6_2, C8_2}, // LED4
{1, C2_3, C1_3, C3_3}, // LED5
{1, C5_3, C4_3, C6_3}, // LED6
{1, C8_3, C7_3, C9_3}, // LED7
{1, C2_4, C1_4, C3_4}, // LED8
{1, C6_4, C5_4, C7_4}, // LED9
{1, C2_5, C1_5, C3_5}, // LED10
{1, C7_5, C6_5, C8_5}, // LED11
{1, C2_6, C1_6, C3_6}, // LED12
{1, C5_6, C4_6, C6_6}, // LED13
{1, C8_6, C7_6, C9_6}, // LED14
{1, C2_7, C1_7, C3_7}, // LED15
{1, C5_7, C4_7, C6_7}, // LED16
{1, C2_8, C1_8, C3_8}, // LED17
{1, C5_8, C4_8, C6_8}, // LED18
{1, C3_9, C2_9, C4_9}, // LED19
{1, C6_9, C5_9, C7_9}, // LED20
{1, C4_10, C3_10, C5_10}, // LED21
{1, C7_10, C6_10, C8_10}, // LED22
{1, C2_11, C1_11, C3_11}, // LED23
{1, C5_11, C4_11, C6_11} // LED24
};
led_config_t g_led_config = { {
// Key matrix to LED index
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ 28, 33, 38, 43, 47, NO_LED },
{ 27, 32, 37, 42, 46, NO_LED },
{ 26, 31, 36, 41, 45, NO_LED },
{ 25, 30, 35, 40, 44, NO_LED },
{ 24, 29, 34, 39, NO_LED, NO_LED },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ 0, 5, 10, 15, NO_LED, NO_LED },
{ 1, 6, 11, 16, 20, NO_LED },
{ 2, 7, 12, 17, 21, NO_LED },
{ 3, 8, 13, 18, 22, NO_LED },
{ 4, 9, 14, 19, 23, NO_LED },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }
}, {
// LED index to physical position
{ 137, 0 }, { 154, 0 }, { 172, 0 }, { 189, 0 }, { 206, 0 }, { 137, 12 },
{ 154, 12 }, { 172, 12 }, { 189, 12 }, { 206, 12 }, { 137, 25 }, { 154, 25 },
{ 172, 25 }, { 189, 25 }, { 206, 25 }, { 137, 38 }, { 154, 38 }, { 172, 38 },
{ 189, 38 }, { 206, 38 }, { 154, 51 }, { 172, 51 }, { 189, 51 }, { 206, 51 },
{ 86, 0 }, { 68, 0 }, { 51, 0 }, { 34, 0 }, { 17, 0 }, { 86, 12 },
{ 68, 12 }, { 51, 12 }, { 34, 12 }, { 17, 12 }, { 86, 25 }, { 68, 25 },
{ 51, 25 }, { 34, 25 }, { 17, 25 }, { 86, 38 }, { 68, 38 }, { 51, 38 },
{ 34, 38 }, { 17, 38 }, { 68, 51 }, { 51, 51 }, { 34, 51 }, { 17, 51 }
}, {
// LED index to flag
4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4,
4, 4, 1, 1, 1, 1,
4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4,
4, 4, 1, 1, 1, 1
} };
#endif
void keyboard_post_init_kb(void) {
// Start with matrix enabled
@ -295,196 +142,6 @@ void keyboard_post_init_kb(void) {
keyboard_post_init_user();
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case LED_LEVEL:
if (record->event.pressed) {
keyboard_config.led_level++;
if (keyboard_config.led_level > 4) {
keyboard_config.led_level = 0;
}
ergodox_led_all_set((uint8_t)keyboard_config.led_level * 255 / 4 );
eeconfig_update_kb(keyboard_config.raw);
layer_state_set_kb(layer_state);
}
break;
#ifdef RGB_MATRIX_ENABLE
case TOGGLE_LAYER_COLOR:
if (record->event.pressed) {
keyboard_config.disable_layer_led ^= 1;
if (keyboard_config.disable_layer_led) {
rgb_matrix_set_color_all(0, 0, 0);
}
eeconfig_update_kb(keyboard_config.raw);
}
break;
case RGB_TOG:
if (record->event.pressed) {
switch (rgb_matrix_get_flags()) {
case LED_FLAG_ALL: {
rgb_matrix_set_flags(LED_FLAG_NONE);
keyboard_config.rgb_matrix_enable = false;
rgb_matrix_set_color_all(0, 0, 0);
}
break;
default: {
rgb_matrix_set_flags(LED_FLAG_ALL);
keyboard_config.rgb_matrix_enable = true;
}
break;
}
eeconfig_update_kb(keyboard_config.raw);
}
hid_send_state();
return false;
case RGB_MOD:
// Tell the host whenever we change animation mode.
hid_send_state();
return true;
#endif
// Custom RGBLIGHT macros
#ifdef RGBLIGHT_ENABLE
#ifdef RGBLIGHT_NO_EEPROM
case LIGHT_TOG:
if (record->event.pressed) {
rgblight_toggle_noeeprom();
}
break;
case LIGHT_MOD:
if (record->event.pressed) {
rgblight_step_noeeprom();
}
break;
case LIGHT_HUI:
if (record->event.pressed) {
rgblight_increase_hue_noeeprom();
}
break;
case LIGHT_HUD:
if (record->event.pressed) {
rgblight_decrease_hue_noeeprom();
}
break;
case LIGHT_SAI:
if (record->event.pressed) {
rgblight_increase_sat_noeeprom();
}
break;
case LIGHT_SAD:
if (record->event.pressed) {
rgblight_decrease_sat_noeeprom();
}
break;
case LIGHT_VAI:
if (record->event.pressed) {
rgblight_increase_val_noeeprom();
}
break;
case LIGHT_VAD:
if (record->event.pressed) {
rgblight_decrease_val_noeeprom();
}
break;
case LIGHT_SPI:
if (record->event.pressed) {
rgblight_increase_speed_noeeprom();
}
break;
case LIGHT_SPD:
if (record->event.pressed) {
rgblight_decrease_speed_noeeprom();
}
break;
#else
case LIGHT_TOG:
if (record->event.pressed) {
rgblight_toggle();
}
break;
case LIGHT_MOD:
if (record->event.pressed) {
rgblight_step();
}
break;
case LIGHT_HUI:
if (record->event.pressed) {
rgblight_increase_hue();
}
break;
case LIGHT_HUD:
if (record->event.pressed) {
rgblight_decrease_hue();
}
break;
case LIGHT_SAI:
if (record->event.pressed) {
rgblight_increase_sat();
}
break;
case LIGHT_SAD:
if (record->event.pressed) {
rgblight_decrease_sat();
}
break;
case LIGHT_VAI:
if (record->event.pressed) {
rgblight_increase_val();
}
break;
case LIGHT_VAD:
if (record->event.pressed) {
rgblight_decrease_val();
}
break;
case LIGHT_SPI:
if (record->event.pressed) {
rgblight_increase_speed();
}
break;
case LIGHT_SPD:
if (record->event.pressed) {
rgblight_decrease_speed();
}
break;
#endif
#endif
}
return process_record_user(keycode, record);
}
layer_state_t layer_state_set_kb(layer_state_t state) {
//uint8_t layer = biton32(state);
hid_send_state(
.state = state
);
return layer_state_set_user(state);
};
// EEPROM is getting reset!
void eeconfig_init_kb(void) {
keyboard_config.raw = 0;
@ -495,22 +152,30 @@ void eeconfig_init_kb(void) {
}
layer_state_t layer_state_set_kb(layer_state_t state) {
//uint8_t layer = biton32(state);
hid_send_state(
.state = state
);
return layer_state_set_user(state);
};
void matrix_scan_kb(void) {
#ifdef CAPS_LOCK_STATUS
led_t led_state = host_keyboard_led_state();
if(led_state.caps_lock) {
ergodox_right_led_3_on();
}
else {
uint8_t layer = get_highest_layer(layer_state);
if(layer != 3) {
ergodox_right_led_3_off();
#ifdef CAPS_LOCK_STATUS
led_t led_state = host_keyboard_led_state();
if(led_state.caps_lock) {
ergodox_right_led_3_on();
}
}
#endif
else {
uint8_t layer = get_highest_layer(layer_state);
if(layer != 3) {
ergodox_right_led_3_off();
}
}
#endif
matrix_scan_user();
}
}

View File

@ -1,29 +1,10 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
Copyright 2015 ZSA Technology Labs Inc (@zsa)
Copyright 2020 Christopher Courtney <drashna@live.com> (@drashna)
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/>.
*/
#pragma once
#include "quantum.h"
#include <stdint.h>
#include <stdbool.h>
#include "i2c_master.h"
#include "hardware/macros.h"
// I2C aliases and register addresses (see "mcp23018.md")
#define I2C_ADDR 0b0100000
@ -121,187 +102,4 @@ typedef union {
};
} keyboard_config_t;
extern keyboard_config_t keyboard_config;
// Turns {h, s, v} triples into a macro, so that
// the LEDS_ergodox macro can take them as inputs.
#define LC_HSV(h, s, v) {h, s, v}
// Rearrange a human-readable LED layout into the correct Ergodox order.
// LEDS_ergodox ONLY WORKS WITH MACROS.
// Don't input a standalone triple {h, s, v};
// Use LC_HSV if you need a single-instance color.
#define LEDS_ergodox( \
l01,l02,l03,l04,l05, \
l06,l07,l08,l09,l10, \
l11,l12,l13,l14,l15, \
l16,l17,l18,l19,l20, \
l21,l22,l23,l24, \
\
l25,l26,l27,l28,l29, \
l30,l31,l32,l33,l34, \
l35,l36,l37,l38,l39, \
l40,l41,l42,l43,l44, \
l45,l46,l47,l48 \
) \
{ \
l25,l26,l27,l28,l29, \
l30,l31,l32,l33,l34, \
l35,l36,l37,l38,l39, \
l40,l41,l42,l43,l44, \
l45,l46,l47,l48, \
\
l05,l04,l03,l02,l01, \
l10,l09,l08,l07,l06, \
l15,l14,l13,l12,l11, \
l20,l19,l18,l17,l16, \
l24,l23,l22,l21 \
}
/*
LEFT HAND: LINES 115-122
RIGHT HAND: LINES 124-131
*/
#define LAYOUT_ergodox( \
\
k00,k01,k02,k03,k04,k05,k06, \
k10,k11,k12,k13,k14,k15,k16, \
k20,k21,k22,k23,k24,k25, \
k30,k31,k32,k33,k34,k35,k36, \
k40,k41,k42,k43,k44, \
k55,k56, \
k54, \
k53,k52,k51, \
\
k07,k08,k09,k0A,k0B,k0C,k0D, \
k17,k18,k19,k1A,k1B,k1C,k1D, \
k28,k29,k2A,k2B,k2C,k2D, \
k37,k38,k39,k3A,k3B,k3C,k3D, \
k49,k4A,k4B,k4C,k4D, \
k57,k58, \
k59, \
k5C,k5B,k5A ) \
\
/* matrix positions */ \
{ \
{ k00, k10, k20, k30, k40, KC_NO }, \
{ k01, k11, k21, k31, k41, k51 }, \
{ k02, k12, k22, k32, k42, k52 }, \
{ k03, k13, k23, k33, k43, k53 }, \
{ k04, k14, k24, k34, k44, k54 }, \
{ k05, k15, k25, k35, KC_NO, k55 }, \
{ k06, k16, KC_NO, k36, KC_NO, k56 }, \
\
{ k07, k17, KC_NO, k37,KC_NO, k57 }, \
{ k08, k18, k28, k38,KC_NO, k58 }, \
{ k09, k19, k29, k39, k49, k59 }, \
{ k0A, k1A, k2A, k3A, k4A, k5A }, \
{ k0B, k1B, k2B, k3B, k4B, k5B }, \
{ k0C, k1C, k2C, k3C, k4C, k5C }, \
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \
}
/*
LEFT HAND: LINES 158-165
RIGHT HAND: LINES 167-174
*/
#define LAYOUT_ergodox_80( \
\
k00,k01,k02,k03,k04,k05,k06, \
k10,k11,k12,k13,k14,k15,k16, \
k20,k21,k22,k23,k24,k25, \
k30,k31,k32,k33,k34,k35,k36, \
k40,k41,k42,k43,k44, \
k55,k56, \
k45,k46,k54, \
k53,k52,k51, \
\
k07,k08,k09,k0A,k0B,k0C,k0D, \
k17,k18,k19,k1A,k1B,k1C,k1D, \
k28,k29,k2A,k2B,k2C,k2D, \
k37,k38,k39,k3A,k3B,k3C,k3D, \
k49,k4A,k4B,k4C,k4D, \
k57,k58, \
k59,k47,k48, \
k5C,k5B,k5A ) \
\
/* matrix positions */ \
{ \
{ k00, k10, k20, k30, k40, KC_NO }, \
{ k01, k11, k21, k31, k41, k51 }, \
{ k02, k12, k22, k32, k42, k52 }, \
{ k03, k13, k23, k33, k43, k53 }, \
{ k04, k14, k24, k34, k44, k54 }, \
{ k05, k15, k25, k35, k45, k55 }, \
{ k06, k16, KC_NO, k36, k46, k56 }, \
\
{ k07, k17, KC_NO, k37, k47, k57 }, \
{ k08, k18, k28, k38, k48, k58 }, \
{ k09, k19, k29, k39, k49, k59 }, \
{ k0A, k1A, k2A, k3A, k4A, k5A }, \
{ k0B, k1B, k2B, k3B, k4B, k5B }, \
{ k0C, k1C, k2C, k3C, k4C, k5C }, \
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \
}
/* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */
#define LAYOUT_ergodox_pretty( \
L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06, \
L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \
L20,L21,L22,L23,L24,L25, R21,R22,R23,R24,R25,R26, \
L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36, \
L40,L41,L42,L43,L44, R42,R43,R44,R45,R46, \
L55,L56, R50,R51, \
L54, R52, \
L53,L52,L51, R55,R54,R53 ) \
\
/* matrix positions */ \
{ \
{ L00, L10, L20, L30, L40, KC_NO }, \
{ L01, L11, L21, L31, L41, L51 }, \
{ L02, L12, L22, L32, L42, L52 }, \
{ L03, L13, L23, L33, L43, L53 }, \
{ L04, L14, L24, L34, L44, L54 }, \
{ L05, L15, L25, L35, KC_NO, L55 }, \
{ L06, L16, KC_NO, L36, KC_NO, L56 }, \
\
{ R00, R10, KC_NO, R30,KC_NO, R50 }, \
{ R01, R11, R21, R31,KC_NO, R51 }, \
{ R02, R12, R22, R32, R42, R52 }, \
{ R03, R13, R23, R33, R43, R53 }, \
{ R04, R14, R24, R34, R44, R54 }, \
{ R05, R15, R25, R35, R45, R55 }, \
{ R06, R16, R26, R36, R46, KC_NO } \
}
/* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */
#define LAYOUT_ergodox_pretty_80( \
L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06, \
L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \
L20,L21,L22,L23,L24,L25, R21,R22,R23,R24,R25,R26, \
L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36, \
L40,L41,L42,L43,L44, R42,R43,R44,R45,R46, \
L55,L56, R50,R51, \
L45,L46,L54, R52,R40,R41, \
L53,L52,L51, R55,R54,R53 ) \
\
/* matrix positions */ \
{ \
{ L00, L10, L20, L30, L40, KC_NO }, \
{ L01, L11, L21, L31, L41, L51 }, \
{ L02, L12, L22, L32, L42, L52 }, \
{ L03, L13, L23, L33, L43, L53 }, \
{ L04, L14, L24, L34, L44, L54 }, \
{ L05, L15, L25, L35, L45, L55 }, \
{ L06, L16, KC_NO, L36, L46, L56 }, \
\
{ R00, R10, KC_NO, R30, R40, R50 }, \
{ R01, R11, R21, R31, R41, R51 }, \
{ R02, R12, R22, R32, R42, R52 }, \
{ R03, R13, R23, R33, R43, R53 }, \
{ R04, R14, R24, R34, R44, R54 }, \
{ R05, R15, R25, R35, R45, R55 }, \
{ R06, R16, R26, R36, R46, KC_NO } \
}
extern keyboard_config_t keyboard_config;

View File

@ -0,0 +1,39 @@
#pragma once
#ifdef ENABLE_BETA_LEADER
#include "quantum.h"
bool beta_process_leader(uint16_t keycode, keyrecord_t *record);
void beta_leader_start(void);
void beta_leader_end(void);
bool beta_leader_check(void);
void beta_qk_leader_check(void);
void beta_qk_leader_start(void);
#define BETA_LEADER_EXTERNS() \
extern bool beta_leading; \
extern uint16_t beta_leader_time; \
extern uint16_t beta_leader_sequence[5]; \
extern uint8_t beta_leader_sequence_size
// Normal sequence
// These do the same thing as SEQ_X_KEYS from qmk.
#define BETA_SEQ_1_LONG(key) if (beta_leader_sequence[0] == (key) && beta_leader_sequence[1] == 0 && beta_leader_sequence[2] == 0 && beta_leader_sequence[3] == 0 && beta_leader_sequence[4] == 0 && timer_elapsed(beta_leader_time) > LEADER_TIMEOUT)
#define BETA_SEQ_2_LONG(key1, key2) if (beta_leader_sequence[0] == (key1) && beta_leader_sequence[1] == (key2) && beta_leader_sequence[2] == 0 && beta_leader_sequence[3] == 0 && beta_leader_sequence[4] == 0 && timer_elapsed(beta_leader_time) > LEADER_TIMEOUT)
#define BETA_SEQ_3_LONG(key1, key2, key3) if (beta_leader_sequence[0] == (key1) && beta_leader_sequence[1] == (key2) && beta_leader_sequence[2] == (key3) && beta_leader_sequence[3] == 0 && beta_leader_sequence[4] == 0 && timer_elapsed(beta_leader_time) > LEADER_TIMEOUT)
#define BETA_SEQ_4_LONG(key1, key2, key3, key4) if (beta_leader_sequence[0] == (key1) && beta_leader_sequence[1] == (key2) && beta_leader_sequence[2] == (key3) && beta_leader_sequence[3] == (key4) && beta_leader_sequence[4] == 0 && timer_elapsed(beta_leader_time) > LEADER_TIMEOUT)
#define BETA_SEQ_5_LONG(key1, key2, key3, key4, key5) if (leader_sequence[0] == (key1) && beta_leader_sequence[1] == (key2) && beta_leader_sequence[2] == (key3) && beta_leader_sequence[3] == (key4) && beta_leader_sequence[4] == (key5) && timer_elapsed(beta_leader_time) > LEADER_TIMEOUT)
// Short-circuit sequence
// These match as soon as a matching sequence is seen,
// not waiting for the leader timeout. They thus register
// immediately, but cannot be used in longer sequences.
#define BETA_SEQ_1_SHORT(key) if (beta_leader_sequence[0] == (key))
#define BETA_SEQ_2_SHORT(key1, key2) if (beta_leader_sequence[0] == (key1) && beta_leader_sequence[1] == (key2))
#define BETA_SEQ_3_SHORT(key1, key2, key3) if (beta_leader_sequence[0] == (key1) && beta_leader_sequence[1] == (key2))
#define BETA_SEQ_4_SHORT(key1, key2, key3, key4) if (beta_leader_sequence[0] == (key1) && beta_leader_sequence[1] == (key2))
#define BETA_SEQ_5_SHORT(key1, key2, key3, key4, key5) if (beta_leader_sequence[0] == (key1) && beta_leader_sequence[1] == (key2))
#endif

View File

@ -0,0 +1,103 @@
#ifdef ENABLE_BETA_LEADER
#include "beta_leader.h"
#include <string.h>
#ifndef LEADER_TIMEOUT
#define LEADER_TIMEOUT 300
#endif
__attribute__((weak)) void beta_leader_start(void) {}
__attribute__((weak)) void beta_leader_end(void) {}
__attribute__((weak)) bool beta_leader_check(void) { return true; }
// Leader key stuff
bool beta_leading = false;
uint16_t beta_leader_time = 0;
bool beta_leader_change = false;
uint16_t beta_leader_sequence[5] = {0, 0, 0, 0, 0};
uint8_t beta_leader_sequence_size = 0;
void beta_qk_leader_start(void) {
if (beta_leading) {
return;
}
beta_leader_start();
beta_leading = true;
beta_leader_time = timer_read();
beta_leader_sequence_size = 0;
beta_leader_change = false; // If true, run
memset(beta_leader_sequence, 0, sizeof(beta_leader_sequence));
}
void beta_qk_leader_check() {
#ifdef LEADER_NO_TIMEOUT
bool timeout = (beta_leading && beta_leader_sequence_size > 0 && timer_elapsed(beta_leader_time) > LEADER_TIMEOUT);
#else
bool timeout = (beta_leading && timer_elapsed(beta_leader_time) > LEADER_TIMEOUT);
#endif
if (beta_leader_change || timeout) {
beta_leader_change = false;
if (
beta_leader_sequence[beta_leader_sequence_size - 1] == (KC_LEAD)
) {
beta_leading = false;
beta_leader_end();
return;
}
if (timeout) {
beta_leading = false;
beta_leader_end();
}
if (!beta_leader_check()) {
beta_leading = false;
beta_leader_end();
};
}
}
bool beta_process_leader(uint16_t keycode, keyrecord_t *record) {
// Leader key set-up
if (record->event.pressed) {
if (beta_leading) {
# ifndef LEADER_NO_TIMEOUT
if (timer_elapsed(beta_leader_time) < LEADER_TIMEOUT)
# endif // LEADER_NO_TIMEOUT
{
# ifndef LEADER_KEY_STRICT_KEY_PROCESSING
if (IS_QK_MOD_TAP(keycode)) {
keycode = QK_MOD_TAP_GET_TAP_KEYCODE(keycode);
} else if (IS_QK_LAYER_TAP(keycode)) {
keycode = QK_LAYER_TAP_GET_TAP_KEYCODE(keycode);
}
# endif // LEADER_KEY_STRICT_KEY_PROCESSING
if (beta_leader_sequence_size < ARRAY_SIZE(beta_leader_sequence)) {
beta_leader_sequence[beta_leader_sequence_size] = keycode;
beta_leader_sequence_size++;
beta_leader_change = true;
} else {
beta_leading = false;
beta_leader_end();
return true;
}
# ifdef LEADER_PER_KEY_TIMING
beta_leader_time = timer_read();
# endif
return false;
}
} else {
if (keycode == QK_LEADER) {
beta_qk_leader_start();
}
}
}
return true;
}
#endif

View File

@ -0,0 +1,34 @@
// Turns {h, s, v} triples into a macro, so that
// the LEDS_ergodox macro can take them as inputs.
#define LC_HSV(h, s, v) {h, s, v}
// Rearrange a human-readable LED layout into the correct Ergodox order.
// LEDS_ergodox ONLY WORKS WITH MACROS.
// Don't input a standalone triple {h, s, v};
// Use LC_HSV if you need a single-instance color.
#define LEDS_ergodox( \
l01,l02,l03,l04,l05, \
l06,l07,l08,l09,l10, \
l11,l12,l13,l14,l15, \
l16,l17,l18,l19,l20, \
l21,l22,l23,l24, \
\
l25,l26,l27,l28,l29, \
l30,l31,l32,l33,l34, \
l35,l36,l37,l38,l39, \
l40,l41,l42,l43,l44, \
l45,l46,l47,l48 \
) \
{ \
l25,l26,l27,l28,l29, \
l30,l31,l32,l33,l34, \
l35,l36,l37,l38,l39, \
l40,l41,l42,l43,l44, \
l45,l46,l47,l48, \
\
l05,l04,l03,l02,l01, \
l10,l09,l08,l07,l06, \
l15,l14,l13,l12,l11, \
l20,l19,l18,l17,l16, \
l24,l23,l22,l21 \
}

View File

@ -0,0 +1,133 @@
#include "betalupi_ergodox.h"
#ifdef SWAP_HANDS_ENABLE
__attribute__ ((weak))
// swap-hands action needs a matrix to define the swap
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
/* Left hand, matrix positions */
{{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}},
{{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}},
{{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}},
{{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}},
{{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}},
{{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}},
{{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}},
/* Right hand, matrix positions */
{{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}},
{{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}},
{{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}},
{{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}},
{{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}},
{{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}},
{{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}},
};
#endif
#ifdef RGB_MATRIX_ENABLE
void suspend_power_down_kb(void) {
rgb_matrix_set_suspend_state(true);
suspend_power_down_user();
}
void suspend_wakeup_init_kb(void) {
rgb_matrix_set_suspend_state(false);
suspend_wakeup_init_user();
}
const is31_led g_is31_leds[RGB_MATRIX_LED_COUNT] = {
//{driver, R location, G location, B location}
{0, C3_1, C2_1, C4_1}, // LED1 on right
{0, C6_1, C5_1, C7_1}, // LED2
{0, C4_2, C3_2, C5_2}, // LED3
{0, C7_2, C6_2, C8_2}, // LED4
{0, C2_3, C1_3, C3_3}, // LED5
{0, C5_3, C4_3, C6_3}, // LED6
{0, C8_3, C7_3, C9_3}, // LED7
{0, C2_4, C1_4, C3_4}, // LED8
{0, C6_4, C5_4, C7_4}, // LED9
{0, C2_5, C1_5, C3_5}, // LED10
{0, C7_5, C6_5, C8_5}, // LED11
{0, C2_6, C1_6, C3_6}, // LED12
{0, C5_6, C4_6, C6_6}, // LED13
{0, C8_6, C7_6, C9_6}, // LED14
{0, C2_7, C1_7, C3_7}, // LED15
{0, C5_7, C4_7, C6_7}, // LED16
{0, C2_8, C1_8, C3_8}, // LED17
{0, C5_8, C4_8, C6_8}, // LED18
{0, C3_9, C2_9, C4_9}, // LED19
{0, C6_9, C5_9, C7_9}, // LED20
{0, C4_10, C3_10, C5_10}, // LED21
{0, C7_10, C6_10, C8_10}, // LED22
{0, C2_11, C1_11, C3_11}, // LED23
{0, C5_11, C4_11, C6_11}, // LED24
{1, C3_1, C2_1, C4_1}, // LED1 on left
{1, C6_1, C5_1, C7_1}, // LED2
{1, C4_2, C3_2, C5_2}, // LED3
{1, C7_2, C6_2, C8_2}, // LED4
{1, C2_3, C1_3, C3_3}, // LED5
{1, C5_3, C4_3, C6_3}, // LED6
{1, C8_3, C7_3, C9_3}, // LED7
{1, C2_4, C1_4, C3_4}, // LED8
{1, C6_4, C5_4, C7_4}, // LED9
{1, C2_5, C1_5, C3_5}, // LED10
{1, C7_5, C6_5, C8_5}, // LED11
{1, C2_6, C1_6, C3_6}, // LED12
{1, C5_6, C4_6, C6_6}, // LED13
{1, C8_6, C7_6, C9_6}, // LED14
{1, C2_7, C1_7, C3_7}, // LED15
{1, C5_7, C4_7, C6_7}, // LED16
{1, C2_8, C1_8, C3_8}, // LED17
{1, C5_8, C4_8, C6_8}, // LED18
{1, C3_9, C2_9, C4_9}, // LED19
{1, C6_9, C5_9, C7_9}, // LED20
{1, C4_10, C3_10, C5_10}, // LED21
{1, C7_10, C6_10, C8_10}, // LED22
{1, C2_11, C1_11, C3_11}, // LED23
{1, C5_11, C4_11, C6_11} // LED24
};
led_config_t g_led_config = { {
// Key matrix to LED index
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ 28, 33, 38, 43, 47, NO_LED },
{ 27, 32, 37, 42, 46, NO_LED },
{ 26, 31, 36, 41, 45, NO_LED },
{ 25, 30, 35, 40, 44, NO_LED },
{ 24, 29, 34, 39, NO_LED, NO_LED },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
{ 0, 5, 10, 15, NO_LED, NO_LED },
{ 1, 6, 11, 16, 20, NO_LED },
{ 2, 7, 12, 17, 21, NO_LED },
{ 3, 8, 13, 18, 22, NO_LED },
{ 4, 9, 14, 19, 23, NO_LED },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }
}, {
// LED index to physical position
{ 137, 0 }, { 154, 0 }, { 172, 0 }, { 189, 0 }, { 206, 0 }, { 137, 12 },
{ 154, 12 }, { 172, 12 }, { 189, 12 }, { 206, 12 }, { 137, 25 }, { 154, 25 },
{ 172, 25 }, { 189, 25 }, { 206, 25 }, { 137, 38 }, { 154, 38 }, { 172, 38 },
{ 189, 38 }, { 206, 38 }, { 154, 51 }, { 172, 51 }, { 189, 51 }, { 206, 51 },
{ 86, 0 }, { 68, 0 }, { 51, 0 }, { 34, 0 }, { 17, 0 }, { 86, 12 },
{ 68, 12 }, { 51, 12 }, { 34, 12 }, { 17, 12 }, { 86, 25 }, { 68, 25 },
{ 51, 25 }, { 34, 25 }, { 17, 25 }, { 86, 38 }, { 68, 38 }, { 51, 38 },
{ 34, 38 }, { 17, 38 }, { 68, 51 }, { 51, 51 }, { 34, 51 }, { 17, 51 }
}, {
// LED index to flag
4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4,
4, 4, 1, 1, 1, 1,
4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4,
4, 4, 1, 1, 1, 1
} };
#endif

View File

@ -18,97 +18,386 @@
"layouts": {
"LAYOUT_ergodox": {
"layout": [
{"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
{"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
{"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
{"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
{"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
{"matrix": [0, 0], "x": 0, "y": 0.375, "w": 1.5},
{"matrix": [1, 0], "x": 1.5, "y": 0.375},
{"matrix": [2, 0], "x": 2.5, "y": 0.125},
{"matrix": [3, 0], "x": 3.5, "y": 0},
{"matrix": [4, 0], "x": 4.5, "y": 0.125},
{"matrix": [5, 0], "x": 5.5, "y": 0.25},
{"matrix": [6, 0], "x": 6.5, "y": 0.25},
{"x":6, "y":5}, {"x":7, "y":5},
{"x":7, "y":6},
{"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":7},
{"matrix": [0, 1], "x": 0, "y": 1.375, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1.375},
{"matrix": [2, 1], "x": 2.5, "y": 1.125},
{"matrix": [3, 1], "x": 3.5, "y": 1},
{"matrix": [4, 1], "x": 4.5, "y": 1.125},
{"matrix": [5, 1], "x": 5.5, "y": 1.25},
{"matrix": [6, 1], "x": 6.5, "y": 1.25, "h": 1.5},
{"matrix": [0, 2], "x": 0, "y": 2.375, "w": 1.5},
{"matrix": [1, 2], "x": 1.5, "y": 2.375},
{"matrix": [2, 2], "x": 2.5, "y": 2.125},
{"matrix": [3, 2], "x": 3.5, "y": 2},
{"matrix": [4, 2], "x": 4.5, "y": 2.125},
{"matrix": [5, 2], "x": 5.5, "y": 2.25},
{"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
{"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
{"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
{"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
{"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
{"matrix": [0, 3], "x": 0, "y": 3.375, "w": 1.5},
{"matrix": [1, 3], "x": 1.5, "y": 3.375},
{"matrix": [2, 3], "x": 2.5, "y": 3.125},
{"matrix": [3, 3], "x": 3.5, "y": 3},
{"matrix": [4, 3], "x": 4.5, "y": 3.125},
{"matrix": [5, 3], "x": 5.5, "y": 3.25},
{"matrix": [6, 3], "x": 6.5, "y": 2.75, "h": 1.5},
{"matrix": [0, 4], "x": 0.5, "y": 4.375},
{"matrix": [1, 4], "x": 1.5, "y": 4.375},
{"matrix": [2, 4], "x": 2.5, "y": 4.125},
{"matrix": [3, 4], "x": 3.5, "y": 4},
{"matrix": [4, 4], "x": 4.5, "y": 4.125},
{"x":9, "y":5}, {"x":10, "y":5},
{"x":9, "y":6},
{"x":9, "y":7}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}
{"matrix": [5, 5], "x": 6, "y": 5},
{"matrix": [6, 5], "x": 7, "y": 5},
{"matrix": [4, 5], "x": 7, "y": 6},
{"matrix": [3, 5], "x": 5, "y": 6, "h": 2},
{"matrix": [2, 5], "x": 6, "y": 6, "h": 2},
{"matrix": [1, 5], "x": 7, "y": 7},
{"matrix": [7, 0], "x": 9.5, "y": 0.25},
{"matrix": [8, 0], "x": 10.5, "y": 0.25},
{"matrix": [9, 0], "x": 11.5, "y": 0.125},
{"matrix": [10, 0], "x": 12.5, "y": 0},
{"matrix": [11, 0], "x": 13.5, "y": 0.125},
{"matrix": [12, 0], "x": 14.5, "y": 0.375},
{"matrix": [13, 0], "x": 15.5, "y": 0.375, "w": 1.5},
{"matrix": [7, 1], "x": 9.5, "y": 1.25, "h": 1.5},
{"matrix": [8, 1], "x": 10.5, "y": 1.25},
{"matrix": [9, 1], "x": 11.5, "y": 1.125},
{"matrix": [10, 1], "x": 12.5, "y": 1},
{"matrix": [11, 1], "x": 13.5, "y": 1.125},
{"matrix": [12, 1], "x": 14.5, "y": 1.375},
{"matrix": [13, 1], "x": 15.5, "y": 1.375, "w": 1.5},
{"matrix": [8, 2], "x": 10.5, "y": 2.25},
{"matrix": [9, 2], "x": 11.5, "y": 2.125},
{"matrix": [10, 2], "x": 12.5, "y": 2},
{"matrix": [11, 2], "x": 13.5, "y": 2.125},
{"matrix": [12, 2], "x": 14.5, "y": 2.375},
{"matrix": [13, 2], "x": 15.5, "y": 2.375, "w": 1.5},
{"matrix": [7, 3], "x": 9.5, "y": 2.75, "h": 1.5},
{"matrix": [8, 3], "x": 10.5, "y": 3.25},
{"matrix": [9, 3], "x": 11.5, "y": 3.125},
{"matrix": [10, 3], "x": 12.5, "y": 3},
{"matrix": [11, 3], "x": 13.5, "y": 3.125},
{"matrix": [12, 3], "x": 14.5, "y": 3.375},
{"matrix": [13, 3], "x": 15.5, "y": 3.375, "w": 1.5},
{"matrix": [9, 4], "x": 11.5, "y": 4.125},
{"matrix": [10, 4], "x": 12.5, "y": 4},
{"matrix": [11, 4], "x": 13.5, "y": 4.125},
{"matrix": [12, 4], "x": 14.5, "y": 4.375},
{"matrix": [13, 4], "x": 15.5, "y": 4.375},
{"matrix": [7, 5], "x": 9, "y": 5},
{"matrix": [8, 5], "x": 10, "y": 5},
{"matrix": [9, 5], "x": 9, "y": 6},
{"matrix": [12, 5], "x": 9, "y": 7},
{"matrix": [11, 5], "x": 10, "y": 6, "h": 2},
{"matrix": [10, 5], "x": 11, "y": 6, "h": 2}
]
},
"LAYOUT_ergodox_pretty": {
"layout": [
{"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
{"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
{"matrix": [0, 0], "x": 0, "y": 0.375, "w": 1.5},
{"matrix": [1, 0], "x": 1.5, "y": 0.375},
{"matrix": [2, 0], "x": 2.5, "y": 0.125},
{"matrix": [3, 0], "x": 3.5, "y": 0},
{"matrix": [4, 0], "x": 4.5, "y": 0.125},
{"matrix": [5, 0], "x": 5.5, "y": 0.25},
{"matrix": [6, 0], "x": 6.5, "y": 0.25},
{"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
{"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
{"matrix": [7, 0], "x": 9.5, "y": 0.25},
{"matrix": [8, 0], "x": 10.5, "y": 0.25},
{"matrix": [9, 0], "x": 11.5, "y": 0.125},
{"matrix": [10, 0], "x": 12.5, "y": 0},
{"matrix": [11, 0], "x": 13.5, "y": 0.125},
{"matrix": [12, 0], "x": 14.5, "y": 0.375},
{"matrix": [13, 0], "x": 15.5, "y": 0.375, "w": 1.5},
{"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
{"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
{"matrix": [0, 1], "x": 0, "y": 1.375, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1.375},
{"matrix": [2, 1], "x": 2.5, "y": 1.125},
{"matrix": [3, 1], "x": 3.5, "y": 1},
{"matrix": [4, 1], "x": 4.5, "y": 1.125},
{"matrix": [5, 1], "x": 5.5, "y": 1.25},
{"matrix": [6, 1], "x": 6.5, "y": 1.25, "h": 1.5},
{"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
{"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
{"matrix": [7, 1], "x": 9.5, "y": 1.25, "h": 1.5},
{"matrix": [8, 1], "x": 10.5, "y": 1.25},
{"matrix": [9, 1], "x": 11.5, "y": 1.125},
{"matrix": [10, 1], "x": 12.5, "y": 1},
{"matrix": [11, 1], "x": 13.5, "y": 1.125},
{"matrix": [12, 1], "x": 14.5, "y": 1.375},
{"matrix": [13, 1], "x": 15.5, "y": 1.375, "w": 1.5},
{"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
{"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
{"matrix": [0, 2], "x": 0, "y": 2.375, "w": 1.5},
{"matrix": [1, 2], "x": 1.5, "y": 2.375},
{"matrix": [2, 2], "x": 2.5, "y": 2.125},
{"matrix": [3, 2], "x": 3.5, "y": 2},
{"matrix": [4, 2], "x": 4.5, "y": 2.125},
{"matrix": [5, 2], "x": 5.5, "y": 2.25},
{"x":6, "y":5}, {"x":7, "y":5}, {"x":9, "y":5}, {"x":10, "y":5},
{"x":7, "y":6}, {"x":9, "y":6},
{"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":7}, {"x":9, "y":7}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}
{"matrix": [8, 2], "x": 10.5, "y": 2.25},
{"matrix": [9, 2], "x": 11.5, "y": 2.125},
{"matrix": [10, 2], "x": 12.5, "y": 2},
{"matrix": [11, 2], "x": 13.5, "y": 2.125},
{"matrix": [12, 2], "x": 14.5, "y": 2.375},
{"matrix": [13, 2], "x": 15.5, "y": 2.375, "w": 1.5},
{"matrix": [0, 3], "x": 0, "y": 3.375, "w": 1.5},
{"matrix": [1, 3], "x": 1.5, "y": 3.375},
{"matrix": [2, 3], "x": 2.5, "y": 3.125},
{"matrix": [3, 3], "x": 3.5, "y": 3},
{"matrix": [4, 3], "x": 4.5, "y": 3.125},
{"matrix": [5, 3], "x": 5.5, "y": 3.25},
{"matrix": [6, 3], "x": 6.5, "y": 2.75, "h": 1.5},
{"matrix": [7, 3], "x": 9.5, "y": 2.75, "h": 1.5},
{"matrix": [8, 3], "x": 10.5, "y": 3.25},
{"matrix": [9, 3], "x": 11.5, "y": 3.125},
{"matrix": [10, 3], "x": 12.5, "y": 3},
{"matrix": [11, 3], "x": 13.5, "y": 3.125},
{"matrix": [12, 3], "x": 14.5, "y": 3.375},
{"matrix": [13, 3], "x": 15.5, "y": 3.375, "w": 1.5},
{"matrix": [0, 4], "x": 0.5, "y": 4.375},
{"matrix": [1, 4], "x": 1.5, "y": 4.375},
{"matrix": [2, 4], "x": 2.5, "y": 4.125},
{"matrix": [3, 4], "x": 3.5, "y": 4},
{"matrix": [4, 4], "x": 4.5, "y": 4.125},
{"matrix": [9, 4], "x": 11.5, "y": 4.125},
{"matrix": [10, 4], "x": 12.5, "y": 4},
{"matrix": [11, 4], "x": 13.5, "y": 4.125},
{"matrix": [12, 4], "x": 14.5, "y": 4.375},
{"matrix": [13, 4], "x": 15.5, "y": 4.375},
{"matrix": [5, 5], "x": 6, "y": 5},
{"matrix": [6, 5], "x": 7, "y": 5},
{"matrix": [7, 5], "x": 9, "y": 5},
{"matrix": [8, 5], "x": 10, "y": 5},
{"matrix": [4, 5], "x": 7, "y": 6},
{"matrix": [9, 5], "x": 9, "y": 6},
{"matrix": [3, 5], "x": 5, "y": 6, "h": 2},
{"matrix": [2, 5], "x": 6, "y": 6, "h": 2},
{"matrix": [1, 5], "x": 7, "y": 7},
{"matrix": [12, 5], "x": 9, "y": 7},
{"matrix": [11, 5], "x": 10, "y": 6, "h": 2},
{"matrix": [10, 5], "x": 11, "y": 6, "h": 2}
]
},
"LAYOUT_ergodox_80": {
"layout": [
{"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
{"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
{"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
{"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
{"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.375, "w": 1.5},
{"matrix": [1, 0], "x": 1.5, "y": 0.375},
{"matrix": [2, 0], "x": 2.5, "y": 0.125},
{"matrix": [3, 0], "x": 3.5, "y": 0},
{"matrix": [4, 0], "x": 4.5, "y": 0.125},
{"matrix": [5, 0], "x": 5.5, "y": 0.25},
{"matrix": [6, 0], "x": 6.5, "y": 0.25},
{"x":6, "y":5}, {"x":7, "y":5},
{"x":5, "y":6}, {"x":6, "y":6}, {"x":7, "y":6},
{"x":5, "y":7}, {"x":6, "y":7}, {"x":7, "y":7},
{"matrix": [0, 1], "x": 0, "y": 1.375, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1.375},
{"matrix": [2, 1], "x": 2.5, "y": 1.125},
{"matrix": [3, 1], "x": 3.5, "y": 1},
{"matrix": [4, 1], "x": 4.5, "y": 1.125},
{"matrix": [5, 1], "x": 5.5, "y": 1.25},
{"matrix": [6, 1], "x": 6.5, "y": 1.25, "h": 1.5},
{"matrix": [0, 2], "x": 0, "y": 2.375, "w": 1.5},
{"matrix": [1, 2], "x": 1.5, "y": 2.375},
{"matrix": [2, 2], "x": 2.5, "y": 2.125},
{"matrix": [3, 2], "x": 3.5, "y": 2},
{"matrix": [4, 2], "x": 4.5, "y": 2.125},
{"matrix": [5, 2], "x": 5.5, "y": 2.25},
{"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
{"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
{"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
{"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
{"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
{"matrix": [0, 3], "x": 0, "y": 3.375, "w": 1.5},
{"matrix": [1, 3], "x": 1.5, "y": 3.375},
{"matrix": [2, 3], "x": 2.5, "y": 3.125},
{"matrix": [3, 3], "x": 3.5, "y": 3},
{"matrix": [4, 3], "x": 4.5, "y": 3.125},
{"matrix": [5, 3], "x": 5.5, "y": 3.25},
{"matrix": [6, 3], "x": 6.5, "y": 2.75, "h": 1.5},
{"matrix": [0, 4], "x": 0.5, "y": 4.375},
{"matrix": [1, 4], "x": 1.5, "y": 4.375},
{"matrix": [2, 4], "x": 2.5, "y": 4.125},
{"matrix": [3, 4], "x": 3.5, "y": 4},
{"matrix": [4, 4], "x": 4.5, "y": 4.125},
{"x":9, "y":5}, {"x":10, "y":5},
{"x":9, "y":6}, {"x":10, "y":6}, {"x":11, "y":6},
{"x":9, "y":7}, {"x":10, "y":7}, {"x":11, "y":7}
]
},
{"matrix": [5, 5], "x": 6, "y": 5},
{"matrix": [6, 5], "x": 7, "y": 5},
{"matrix": [5, 4], "x": 5, "y": 6},
{"matrix": [6, 4], "x": 6, "y": 6},
{"matrix": [4, 5], "x": 7, "y": 6},
{"matrix": [3, 5], "x": 5, "y": 7},
{"matrix": [2, 5], "x": 6, "y": 7},
{"matrix": [1, 5], "x": 7, "y": 7},
{"matrix": [7, 0], "x": 9.5, "y": 0.25},
{"matrix": [8, 0], "x": 10.5, "y": 0.25},
{"matrix": [9, 0], "x": 11.5, "y": 0.125},
{"matrix": [10, 0], "x": 12.5, "y": 0},
{"matrix": [11, 0], "x": 13.5, "y": 0.125},
{"matrix": [12, 0], "x": 14.5, "y": 0.375},
{"matrix": [13, 0], "x": 15.5, "y": 0.375, "w": 1.5},
{"matrix": [7, 1], "x": 9.5, "y": 1.25, "h": 1.5},
{"matrix": [8, 1], "x": 10.5, "y": 1.25},
{"matrix": [9, 1], "x": 11.5, "y": 1.125},
{"matrix": [10, 1], "x": 12.5, "y": 1},
{"matrix": [11, 1], "x": 13.5, "y": 1.125},
{"matrix": [12, 1], "x": 14.5, "y": 1.375},
{"matrix": [13, 1], "x": 15.5, "y": 1.375, "w": 1.5},
{"matrix": [8, 2], "x": 10.5, "y": 2.25},
{"matrix": [9, 2], "x": 11.5, "y": 2.125},
{"matrix": [10, 2], "x": 12.5, "y": 2},
{"matrix": [11, 2], "x": 13.5, "y": 2.125},
{"matrix": [12, 2], "x": 14.5, "y": 2.375},
{"matrix": [13, 2], "x": 15.5, "y": 2.375, "w": 1.5},
{"matrix": [7, 3], "x": 9.5, "y": 2.75, "h": 1.5},
{"matrix": [8, 3], "x": 10.5, "y": 3.25},
{"matrix": [9, 3], "x": 11.5, "y": 3.125},
{"matrix": [10, 3], "x": 12.5, "y": 3},
{"matrix": [11, 3], "x": 13.5, "y": 3.125},
{"matrix": [12, 3], "x": 14.5, "y": 3.375},
{"matrix": [13, 3], "x": 15.5, "y": 3.375, "w": 1.5},
{"matrix": [9, 4], "x": 11.5, "y": 4.125},
{"matrix": [10, 4], "x": 12.5, "y": 4},
{"matrix": [11, 4], "x": 13.5, "y": 4.125},
{"matrix": [12, 4], "x": 14.5, "y": 4.375},
{"matrix": [13, 4], "x": 15.5, "y": 4.375},
{"matrix": [7, 5], "x": 9, "y": 5},
{"matrix": [8, 5], "x": 10, "y": 5},
{"matrix": [9, 5], "x": 9, "y": 6},
{"matrix": [7, 4], "x": 10, "y": 6},
{"matrix": [8, 4], "x": 11, "y": 6},
{"matrix": [12, 5], "x": 9, "y": 7},
{"matrix": [11, 5], "x": 10, "y": 7},
{"matrix": [10, 5], "x": 11, "y": 7}
]
},
"LAYOUT_ergodox_pretty_80": {
"layout": [
{"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
{"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.375, "w": 1.5},
{"matrix": [1, 0], "x": 1.5, "y": 0.375},
{"matrix": [2, 0], "x": 2.5, "y": 0.125},
{"matrix": [3, 0], "x": 3.5, "y": 0},
{"matrix": [4, 0], "x": 4.5, "y": 0.125},
{"matrix": [5, 0], "x": 5.5, "y": 0.25},
{"matrix": [6, 0], "x": 6.5, "y": 0.25},
{"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
{"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
{"matrix": [7, 0], "x": 9.5, "y": 0.25},
{"matrix": [8, 0], "x": 10.5, "y": 0.25},
{"matrix": [9, 0], "x": 11.5, "y": 0.125},
{"matrix": [10, 0], "x": 12.5, "y": 0},
{"matrix": [11, 0], "x": 13.5, "y": 0.125},
{"matrix": [12, 0], "x": 14.5, "y": 0.375},
{"matrix": [13, 0], "x": 15.5, "y": 0.375, "w": 1.5},
{"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
{"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
{"matrix": [0, 1], "x": 0, "y": 1.375, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1.375},
{"matrix": [2, 1], "x": 2.5, "y": 1.125},
{"matrix": [3, 1], "x": 3.5, "y": 1},
{"matrix": [4, 1], "x": 4.5, "y": 1.125},
{"matrix": [5, 1], "x": 5.5, "y": 1.25},
{"matrix": [6, 1], "x": 6.5, "y": 1.25, "h": 1.5},
{"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
{"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
{"matrix": [7, 1], "x": 9.5, "y": 1.25, "h": 1.5},
{"matrix": [8, 1], "x": 10.5, "y": 1.25},
{"matrix": [9, 1], "x": 11.5, "y": 1.125},
{"matrix": [10, 1], "x": 12.5, "y": 1},
{"matrix": [11, 1], "x": 13.5, "y": 1.125},
{"matrix": [12, 1], "x": 14.5, "y": 1.375},
{"matrix": [13, 1], "x": 15.5, "y": 1.375, "w": 1.5},
{"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
{"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
{"matrix": [0, 2], "x": 0, "y": 2.375, "w": 1.5},
{"matrix": [1, 2], "x": 1.5, "y": 2.375},
{"matrix": [2, 2], "x": 2.5, "y": 2.125},
{"matrix": [3, 2], "x": 3.5, "y": 2},
{"matrix": [4, 2], "x": 4.5, "y": 2.125},
{"matrix": [5, 2], "x": 5.5, "y": 2.25},
{"x":6, "y":5}, {"x":7, "y":5}, {"x":9, "y":5}, {"x":10, "y":5},
{"x":5, "y":6}, {"x":6, "y":6}, {"x":7, "y":6}, {"x":9, "y":6}, {"x":10, "y":6}, {"x":11, "y":6},
{"x":5, "y":7}, {"x":6, "y":7}, {"x":7, "y":7}, {"x":9, "y":7}, {"x":10, "y":7}, {"x":11, "y":7}
]
}
{"matrix": [8, 2], "x": 10.5, "y": 2.25},
{"matrix": [9, 2], "x": 11.5, "y": 2.125},
{"matrix": [10, 2], "x": 12.5, "y": 2},
{"matrix": [11, 2], "x": 13.5, "y": 2.125},
{"matrix": [12, 2], "x": 14.5, "y": 2.375},
{"matrix": [13, 2], "x": 15.5, "y": 2.375, "w": 1.5},
{"matrix": [0, 3], "x": 0, "y": 3.375, "w": 1.5},
{"matrix": [1, 3], "x": 1.5, "y": 3.375},
{"matrix": [2, 3], "x": 2.5, "y": 3.125},
{"matrix": [3, 3], "x": 3.5, "y": 3},
{"matrix": [4, 3], "x": 4.5, "y": 3.125},
{"matrix": [5, 3], "x": 5.5, "y": 3.25},
{"matrix": [6, 3], "x": 6.5, "y": 2.75, "h": 1.5},
{"matrix": [7, 3], "x": 9.5, "y": 2.75, "h": 1.5},
{"matrix": [8, 3], "x": 10.5, "y": 3.25},
{"matrix": [9, 3], "x": 11.5, "y": 3.125},
{"matrix": [10, 3], "x": 12.5, "y": 3},
{"matrix": [11, 3], "x": 13.5, "y": 3.125},
{"matrix": [12, 3], "x": 14.5, "y": 3.375},
{"matrix": [13, 3], "x": 15.5, "y": 3.375, "w": 1.5},
{"matrix": [0, 4], "x": 0.5, "y": 4.375},
{"matrix": [1, 4], "x": 1.5, "y": 4.375},
{"matrix": [2, 4], "x": 2.5, "y": 4.125},
{"matrix": [3, 4], "x": 3.5, "y": 4},
{"matrix": [4, 4], "x": 4.5, "y": 4.125},
{"matrix": [9, 4], "x": 11.5, "y": 4.125},
{"matrix": [10, 4], "x": 12.5, "y": 4},
{"matrix": [11, 4], "x": 13.5, "y": 4.125},
{"matrix": [12, 4], "x": 14.5, "y": 4.375},
{"matrix": [13, 4], "x": 15.5, "y": 4.375},
{"matrix": [5, 5], "x": 6, "y": 5},
{"matrix": [6, 5], "x": 7, "y": 5},
{"matrix": [7, 5], "x": 9, "y": 5},
{"matrix": [8, 5], "x": 10, "y": 5},
{"matrix": [5, 4], "x": 5, "y": 6},
{"matrix": [6, 4], "x": 6, "y": 6},
{"matrix": [4, 5], "x": 7, "y": 6},
{"matrix": [9, 5], "x": 9, "y": 6},
{"matrix": [7, 4], "x": 10, "y": 6},
{"matrix": [8, 4], "x": 11, "y": 6},
{"matrix": [3, 5], "x": 5, "y": 7},
{"matrix": [2, 5], "x": 6, "y": 7},
{"matrix": [1, 5], "x": 7, "y": 7},
{"matrix": [12, 5], "x": 9, "y": 7},
{"matrix": [11, 5], "x": 10, "y": 7},
{"matrix": [10, 5], "x": 11, "y": 7}
]
}
}
}

View File

@ -1,10 +1,11 @@
#define ENABLE_BETA_LEADER
// No timeout after initial leader key press
#define LEADER_NO_TIMEOUT
// Timeout resets after each keypress
#define LEADER_PER_KEY_TIMING
#define LEADER_TIMEOUT 200
#define LEADER_TIMEOUT 500
// Enable spellcheck over HID

View File

@ -73,6 +73,10 @@ enum tap_dance_codes {
#include "features/autocorrect/autocorrect.h"
#endif
#ifdef ENABLE_BETA_LEADER
#include "features/leader/beta_leader.h"
#endif
#include "features/beta_rawhid.h"
// Send a special character.
@ -86,6 +90,14 @@ bool send_special_character(uint16_t keycode) {
}
void matrix_scan_user(void) {
#ifdef ENABLE_BETA_LEADER
beta_qk_leader_check();
#endif
}
// Include all other parts of configuration
#include "layers/layers.c"
#include "parts/leader.c"
@ -96,6 +108,10 @@ bool send_special_character(uint16_t keycode) {
// Return TRUE to allow QMK to handle keypress.
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef ENABLE_BETA_LEADER
if (!beta_process_leader(keycode, record)) { return false; }
#endif
#ifdef ENABLE_HID_SPELLCHECK
if (!process_spellcheck(keycode, record)) { return false; }
#endif
@ -116,7 +132,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
SEND_STRING(SS_LCTL(SS_LGUI(SS_LSFT(SS_TAP(X_R)))));
}
return false;
// Workaround for one-shot LGUI key.
// Using just LGUI with LAYER_DESKTOP as OSL
// does not allow you to hold lgui. This does.

View File

@ -1,3 +1,4 @@
#include "keymap.h"
#include "extra_mappings.h"
#define LAYER_INCLUDE_FILE "definitions/layers.inc"

View File

@ -1,49 +1,56 @@
LEADER_EXTERNS();
#include "features/leader/beta_leader.h"
void leader_start(void) {
BETA_LEADER_EXTERNS();
void beta_leader_start(void) {
ergodox_right_led_3_on();
}
void leader_end(void) {
void beta_leader_end(void) {
ergodox_right_led_3_off();
}
void matrix_scan_user(void) {
LEADER_DICTIONARY() {
leading = false;
leader_end();
bool beta_leader_check(void) {
SEQ_TWO_KEYS(KC_E, KC_M) {
SEND_STRING(SECRET_EMAIL);
}
SEQ_TWO_KEYS(KC_G, KC_M) {
SEND_STRING(SECRET_GMAIL);
}
SEQ_TWO_KEYS(KC_L, KC_I) {
SEND_STRING(SECRET_SCHOOL_EMAIL);
}
SEQ_TWO_KEYS(KC_K, KC_B) {
layer_move(LAYER_KEYBOARD);
}
//SEQ_ONE_KEY(KC_F) {
// doesn't work, no deactivate
// also, this is slow since laeder key uses dumb logic
// set_oneshot_layer(LAYER_FKEYS, ONESHOT_START);
//}
SEQ_TWO_KEYS(KC_F, KC_1) { tap_code(KC_F1); }
SEQ_TWO_KEYS(KC_F, KC_2) { tap_code(KC_F2); }
SEQ_TWO_KEYS(KC_F, KC_3) { tap_code(KC_F3); }
SEQ_TWO_KEYS(KC_F, KC_4) { tap_code(KC_F4); }
SEQ_TWO_KEYS(KC_F, KC_5) { tap_code(KC_F5); }
SEQ_TWO_KEYS(KC_F, KC_Q) { tap_code(KC_F6); }
SEQ_TWO_KEYS(KC_F, KC_W) { tap_code(KC_F7); }
SEQ_TWO_KEYS(KC_F, KC_E) { tap_code(KC_F8); }
SEQ_TWO_KEYS(KC_F, KC_R) { tap_code(KC_F9); }
SEQ_TWO_KEYS(KC_F, KC_T) { tap_code(KC_F10); }
BETA_SEQ_2_SHORT(KC_E, KC_M) {
SEND_STRING(SECRET_EMAIL);
return false;
}
BETA_SEQ_2_SHORT(KC_G, KC_M) {
SEND_STRING(SECRET_GMAIL);
return false;
}
BETA_SEQ_2_SHORT(KC_L, KC_I) {
SEND_STRING(SECRET_SCHOOL_EMAIL);
return false;
}
BETA_SEQ_2_LONG(KC_K, KC_B) {
layer_move(LAYER_KEYBOARD);
return false;
}
/*
BETA_SEQ_1_SHORT(KC_F) {
// doesn't work, no deactivate
// also, this is slow since laeder key uses dumb logic
set_oneshot_layer(LAYER_FKEYS, ONESHOT_START);
return false;
}
*/
BETA_SEQ_2_SHORT(KC_F, KC_1) { tap_code(KC_F1); return false; }
BETA_SEQ_2_SHORT(KC_F, KC_2) { tap_code(KC_F2); return false; }
BETA_SEQ_2_SHORT(KC_F, KC_3) { tap_code(KC_F3); return false; }
BETA_SEQ_2_SHORT(KC_F, KC_4) { tap_code(KC_F4); return false; }
BETA_SEQ_2_SHORT(KC_F, KC_5) { tap_code(KC_F5); return false; }
BETA_SEQ_2_SHORT(KC_F, KC_Q) { tap_code(KC_F6); return false; }
BETA_SEQ_2_SHORT(KC_F, KC_W) { tap_code(KC_F7); return false; }
BETA_SEQ_2_SHORT(KC_F, KC_E) { tap_code(KC_F8); return false; }
BETA_SEQ_2_SHORT(KC_F, KC_R) { tap_code(KC_F9); return false; }
BETA_SEQ_2_SHORT(KC_F, KC_T) { tap_code(KC_F10); return false; }
return true;
}

View File

@ -1,4 +1,3 @@
# rules.mk overrides
LEADER_ENABLE = yes
TAP_DANCE_ENABLE = yes
TAP_DANCE_ENABLE = yes

View File

@ -1,23 +1,3 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
Copyright 2015 ZSA Technology Labs Inc (@zsa)
Copyright 2020 Christopher Courtney <drashna@live.com> (@drashna)
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/>.
*/
#pragma once
/*

View File

@ -0,0 +1,187 @@
#include "betalupi_ergodox.h"
#include "features/beta_rawhid.h"
// Handle a keypress.
// Returns true if we should keep looking for keypresses,
// returns false if we should stop.
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case LED_LEVEL:
if (record->event.pressed) {
keyboard_config.led_level++;
if (keyboard_config.led_level > 4) {
keyboard_config.led_level = 0;
}
ergodox_led_all_set((uint8_t)keyboard_config.led_level * 255 / 4 );
eeconfig_update_kb(keyboard_config.raw);
layer_state_set_kb(layer_state);
}
break;
#ifdef RGB_MATRIX_ENABLE
case TOGGLE_LAYER_COLOR:
if (record->event.pressed) {
keyboard_config.disable_layer_led ^= 1;
if (keyboard_config.disable_layer_led) {
rgb_matrix_set_color_all(0, 0, 0);
}
eeconfig_update_kb(keyboard_config.raw);
}
break;
case RGB_TOG:
if (record->event.pressed) {
switch (rgb_matrix_get_flags()) {
case LED_FLAG_ALL: {
rgb_matrix_set_flags(LED_FLAG_NONE);
keyboard_config.rgb_matrix_enable = false;
rgb_matrix_set_color_all(0, 0, 0);
}
break;
default: {
rgb_matrix_set_flags(LED_FLAG_ALL);
keyboard_config.rgb_matrix_enable = true;
}
break;
}
eeconfig_update_kb(keyboard_config.raw);
}
hid_send_state();
return false;
case RGB_MOD:
// Tell the host whenever we change animation mode.
hid_send_state();
return true;
#endif
// Custom RGBLIGHT macros
#ifdef RGBLIGHT_ENABLE
#ifdef RGBLIGHT_NO_EEPROM
case LIGHT_TOG:
if (record->event.pressed) {
rgblight_toggle_noeeprom();
}
break;
case LIGHT_MOD:
if (record->event.pressed) {
rgblight_step_noeeprom();
}
break;
case LIGHT_HUI:
if (record->event.pressed) {
rgblight_increase_hue_noeeprom();
}
break;
case LIGHT_HUD:
if (record->event.pressed) {
rgblight_decrease_hue_noeeprom();
}
break;
case LIGHT_SAI:
if (record->event.pressed) {
rgblight_increase_sat_noeeprom();
}
break;
case LIGHT_SAD:
if (record->event.pressed) {
rgblight_decrease_sat_noeeprom();
}
break;
case LIGHT_VAI:
if (record->event.pressed) {
rgblight_increase_val_noeeprom();
}
break;
case LIGHT_VAD:
if (record->event.pressed) {
rgblight_decrease_val_noeeprom();
}
break;
case LIGHT_SPI:
if (record->event.pressed) {
rgblight_increase_speed_noeeprom();
}
break;
case LIGHT_SPD:
if (record->event.pressed) {
rgblight_decrease_speed_noeeprom();
}
break;
#else
case LIGHT_TOG:
if (record->event.pressed) {
rgblight_toggle();
}
break;
case LIGHT_MOD:
if (record->event.pressed) {
rgblight_step();
}
break;
case LIGHT_HUI:
if (record->event.pressed) {
rgblight_increase_hue();
}
break;
case LIGHT_HUD:
if (record->event.pressed) {
rgblight_decrease_hue();
}
break;
case LIGHT_SAI:
if (record->event.pressed) {
rgblight_increase_sat();
}
break;
case LIGHT_SAD:
if (record->event.pressed) {
rgblight_decrease_sat();
}
break;
case LIGHT_VAI:
if (record->event.pressed) {
rgblight_increase_val();
}
break;
case LIGHT_VAD:
if (record->event.pressed) {
rgblight_decrease_val();
}
break;
case LIGHT_SPI:
if (record->event.pressed) {
rgblight_increase_speed();
}
break;
case LIGHT_SPD:
if (record->event.pressed) {
rgblight_decrease_speed();
}
break;
#endif
#endif
}
return process_record_user(keycode, record);
}

View File

@ -1,31 +0,0 @@
# Betalupi Ergodox
This is a modified version of the [ZSA ErgoDox firmware](https://git.betalupi.com/mirrors-QMK/zsa_firmware), based on the `ergodox_ex/glow` keyboard.
# Notes
This keyboard adds a few extra options in `config.h`:
```cpp
#define RGBLIGHT_OFF_AT_START
#define RGBLIGHT_NO_EEPROM
#ifdef ENABLE_HID_SPELLCHECK
#ifdef ENABLE_AUTOCORRECT
```
Also, there are a few custom kecodes defined in `betalupi_keyboard.c`. This allows us to control the rgb matrix and rgb lighting seperately---my keyboard has both.
```
// Custom RGBLIGHT macros
LIGHT_TOG, // Toggle backlight
LIGHT_HUI, // Increase backlight hue
LIGHT_HUD, // Decrease backlight hue
LIGHT_SAI, // Increase backlight sat
LIGHT_SAD, // Decrease backlight sat
LIGHT_VAI, // Increase backlight val
LIGHT_VAD, // Decrease backlight val
LIGHT_SPI, // Increase backlight speed
LIGHT_SPD, // Decrease backlight speed
LIGHT_MOD, // Change backlight animation mode
```

View File

@ -30,7 +30,7 @@ SLEEP_LED_ENABLE = no
API_SYSEX_ENABLE = no
MOUSE_SHARED_EP = no
MAGIC_ENABLE = no
LEADER_ENABLE = yes
LEADER_ENABLE = no
TAP_DANCE_ENABLE = yes
AUDIO_SUPPORTED = no
BACKLIGHT_SUPPORTED = no
@ -38,12 +38,15 @@ BACKLIGHT_SUPPORTED = no
DEBOUNCE_TYPE = sym_eager_pr
SRC += \
matrix.c \
led_i2c.c \
extra_mappings.c \
process_record.c \
hardware/matrix.c \
hardware/led_i2c.c \
hardware/maps.c \
features/beta_rawhid.c \
features/hid_spellcheck.c \
features/autocorrect/autocorrect.c \
extra_mappings.c
features/leader/leader.c
QUANTUM_LIB_SRC += i2c_master.c