diff options
Diffstat (limited to 'users/drashna')
| -rw-r--r-- | users/drashna/config.h | 164 | ||||
| -rw-r--r-- | users/drashna/drashna.c | 13 | ||||
| -rw-r--r-- | users/drashna/drashna.h | 42 | ||||
| -rw-r--r-- | users/drashna/drashna_font.h | 164 | ||||
| -rw-r--r-- | users/drashna/drashna_transport.c | 603 | ||||
| -rw-r--r-- | users/drashna/oled_stuff.c | 80 | ||||
| -rw-r--r-- | users/drashna/oled_stuff.h | 167 | ||||
| -rw-r--r-- | users/drashna/pimoroni_trackball.c | 151 | ||||
| -rw-r--r-- | users/drashna/process_records.c | 21 | ||||
| -rw-r--r-- | users/drashna/process_records.h | 101 | ||||
| -rw-r--r-- | users/drashna/rgb_matrix_stuff.c | 32 | ||||
| -rw-r--r-- | users/drashna/rgb_stuff.c | 34 | ||||
| -rw-r--r-- | users/drashna/rules.mk | 27 | ||||
| -rw-r--r-- | users/drashna/tap_dances.h | 4 | ||||
| -rw-r--r-- | users/drashna/transport_sync.c | 79 | ||||
| -rw-r--r-- | users/drashna/transport_sync.h (renamed from users/drashna/pimoroni_trackball.h) | 19 | ||||
| -rw-r--r-- | users/drashna/wrappers.h | 194 | 
17 files changed, 608 insertions, 1287 deletions
| diff --git a/users/drashna/config.h b/users/drashna/config.h index 5f7c32ff35..fbba210e7a 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -17,57 +17,79 @@  #pragma once  // Use custom magic number so that when switching branches, EEPROM always gets reset -#define EECONFIG_MAGIC_NUMBER (uint16_t)0x1339 +#define EECONFIG_MAGIC_NUMBER   (uint16_t)0x1339  /* Set Polling rate to 1000Hz */  #define USB_POLLING_INTERVAL_MS 1  #if defined(SPLIT_KEYBOARD)  #    define SPLIT_MODS_ENABLE -#    define SPLIT_TRANSPORT_MIRROR +#    define SPLIT_LAYER_STATE_ENABLE +#    define SPLIT_LED_STATE_ENABLE + +// #    define SPLIT_TRANSPORT_MIRROR  #    define SERIAL_USE_MULTI_TRANSACTION -// #    define SPLIT_NUM_TRANSACTIONS_KB 2 +#    define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_STATE_SYNC  #endif  #ifdef AUDIO_ENABLE -  #    define AUDIO_CLICKY -#    define STARTUP_SONG SONG(RICK_ROLL) -#    define GOODBYE_SONG SONG(SONIC_RING) -#    define DEFAULT_LAYER_SONGS \ -        { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND), SONG(OVERWATCH_THEME) } -  #    define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f -#    define UNICODE_SONG_MAC SONG(RICK_ROLL) -#    define UNICODE_SONG_LNX SONG(RICK_ROLL) -#    define UNICODE_SONG_WIN SONG(RICK_ROLL) -#    define UNICODE_SONG_BSD SONG(RICK_ROLL) -#    define UNICODE_SONG_WINC SONG(RICK_ROLL) +#    ifdef USER_SONG_LIST +#        define STARTUP_SONG SONG(RICK_ROLL) +#        define GOODBYE_SONG SONG(SONIC_RING) +#        define DEFAULT_LAYER_SONGS \ +            { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND), SONG(OVERWATCH_THEME) } +#        define UNICODE_SONG_MAC  SONG(MARIO_THEME) +#        define UNICODE_SONG_LNX  SONG(MARIO_POWERUP) +#        define UNICODE_SONG_WIN  SONG(MARIO_ONEUP) +#        define UNICODE_SONG_BSD  SONG(RICK_ROLL) +#        define UNICODE_SONG_WINC SONG(RICK_ROLL) +#    else +#        define STARTUP_SONG SONG(STARTUP_SOUND) +#        define GOODBYE_SONG SONG(GOODBYE_SOUND) +#        define DEFAULT_LAYER_SONGS \ +            { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND), SONG(WORKMAN_SOUND) } +#        define UNICODE_SONG_MAC  SONG(QWERTY_SOUND) +#        define UNICODE_SONG_LNX  SONG(COLEMAK_SOUND) +#        define UNICODE_SONG_WIN  SONG(DVORAK_SOUND) +#        define UNICODE_SONG_BSD  SONG(WORKMAN_SOUND) +#        define UNICODE_SONG_WINC SONG(PLOVER_GOODBYE_SOUND) +#    endif  #endif  // !AUDIO_ENABLE +#define UNICODE_SELECTED_MODES UC_WIN, UC_MAC +  #ifdef RGBLIGHT_ENABLE  #    define RGBLIGHT_SLEEP +#    undef RGBLIGHT_ANIMATIONS  #    if defined(__AVR__) && !defined(__AVR_AT90USB1286__) -#        undef RGBLIGHT_ANIMATIONS  #        define RGBLIGHT_EFFECT_BREATHING  #        define RGBLIGHT_EFFECT_SNAKE  #        define RGBLIGHT_EFFECT_KNIGHT  #    else -#        define RGBLIGHT_ANIMATIONS +#        define RGBLIGHT_EFFECT_BREATHING +#        define RGBLIGHT_EFFECT_RAINBOW_MOOD +#        define RGBLIGHT_EFFECT_RAINBOW_SWIRL +#        define RGBLIGHT_EFFECT_SNAKE +#        define RGBLIGHT_EFFECT_KNIGHT +// #        define RGBLIGHT_EFFECT_CHRISTMAS +// #        define RGBLIGHT_EFFECT_STATIC_GRADIENT +// #        define RGBLIGHT_EFFECT_RGB_TEST +// #        define RGBLIGHT_EFFECT_ALTERNATING +#        define RGBLIGHT_EFFECT_TWINKLE  #    endif -#    define RGBLIGHT_EFFECT_TWINKLE_LIFE  250 -#    define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1/24 +#    define RGBLIGHT_EFFECT_TWINKLE_LIFE        250 +#    define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1 / 24  #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)  #    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 +// #    define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects +// #    define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended  #    if defined(__AVR__) && !defined(__AVR_AT90USB1286__) && !defined(KEYBOARD_launchpad)  #        define DISABLE_RGB_MATRIX_ALPHAS_MODS @@ -120,7 +142,7 @@  #    ifdef OLED_FONT_H  #        undef OLED_FONT_H  #    endif -#    define OLED_FONT_H "drashna_font.h" +#    define OLED_FONT_H   "drashna_font.h"  #    define OLED_FONT_END 255  // #    define OLED_FONT_5X5  // #    define OLED_FONT_AZTECH @@ -152,9 +174,9 @@  // actually sends Ctrl-x. That's bad.)  #define IGNORE_MOD_TAP_INTERRUPT  #undef PERMISSIVE_HOLD -//#define TAPPING_FORCE_HOLD -//#define RETRO_TAPPING -#ifndef KEYBOARD_kyria_rev1 +//#define TAPPING_FORCE_HOLD_PER_KEY +//#define RETRO_TAPPING_PER_KEY +#if !defined(KEYBOARD_kyria) && !defined(KEYBOARD_splitkb_kyria)  #    define TAPPING_TERM_PER_KEY  #endif @@ -185,14 +207,16 @@  #    undef LOCKING_RESYNC_ENABLE  #endif +#define LAYER_STATE_16BIT +  #ifdef CONVERT_TO_PROTON_C  // pins that are available but not present on Pro Micro -#    define A3 PAL_LINE(GPIOA, 3) -#    define A4 PAL_LINE(GPIOA, 4) -#    define A5 PAL_LINE(GPIOA, 5) -#    define A6 PAL_LINE(GPIOA, 6) -#    define A7 PAL_LINE(GPIOA, 7) -#    define A8 PAL_LINE(GPIOA, 8) +#    define A3  PAL_LINE(GPIOA, 3) +#    define A4  PAL_LINE(GPIOA, 4) +#    define A5  PAL_LINE(GPIOA, 5) +#    define A6  PAL_LINE(GPIOA, 6) +#    define A7  PAL_LINE(GPIOA, 7) +#    define A8  PAL_LINE(GPIOA, 8)  #    define A13 PAL_LINE(GPIOA, 13)  #    define A14 PAL_LINE(GPIOA, 14)  #    define A15 PAL_LINE(GPIOA, 15) @@ -203,3 +227,79 @@  #    define C14 PAL_LINE(GPIOC, 14)  #    define C15 PAL_LINE(GPIOC, 15)  #endif + +#ifdef MOUSEKEY_ENABLE +// mouse movement config +#    ifdef MK_3_SPEED +#        undef MK_3_SPEED +#    endif +#    define MK_KINETIC_SPEED +#    ifdef MK_KINETIC_SPEED +#        ifndef MOUSEKEY_DELAY +#            define MOUSEKEY_DELAY 8 +#        endif +#        ifndef MOUSEKEY_INTERVAL +#            define MOUSEKEY_INTERVAL 20 +#        endif +#        ifdef MOUSEKEY_MOVE_DELTA +#            define MOUSEKEY_MOVE_DELTA 25 +#        endif +#    else +#        ifndef MOUSEKEY_DELAY +#            define MOUSEKEY_DELAY 300 +#        endif +#        ifndef MOUSEKEY_INTERVAL +#            define MOUSEKEY_INTERVAL 50 +#        endif +#        ifndef MOUSEKEY_MOVE_DELTA +#            define MOUSEKEY_MOVE_DELTA 5 +#        endif +#    endif +#    ifndef MOUSEKEY_MAX_SPEED +#        define MOUSEKEY_MAX_SPEED 7 +#    endif +#    ifndef MOUSEKEY_TIME_TO_MAX +#        define MOUSEKEY_TIME_TO_MAX 60 +#    endif +#    ifndef MOUSEKEY_INITIAL_SPEED +#        define MOUSEKEY_INITIAL_SPEED 100 +#    endif +#    ifndef MOUSEKEY_BASE_SPEED +#        define MOUSEKEY_BASE_SPEED 1000 +#    endif +#    ifndef MOUSEKEY_DECELERATED_SPEED +#        define MOUSEKEY_DECELERATED_SPEED 400 +#    endif +#    ifndef MOUSEKEY_ACCELERATED_SPEED +#        define MOUSEKEY_ACCELERATED_SPEED 3000 +#    endif +// mouse scroll config +#    ifndef MOUSEKEY_WHEEL_DELAY +#        define MOUSEKEY_WHEEL_DELAY 15 +#    endif +#    ifndef MOUSEKEY_WHEEL_DELTA +#        define MOUSEKEY_WHEEL_DELTA 1 +#    endif +#    ifndef MOUSEKEY_WHEEL_INTERVAL +#        define MOUSEKEY_WHEEL_INTERVAL 50 +#    endif +#    ifndef MOUSEKEY_WHEEL_MAX_SPEED +#        define MOUSEKEY_WHEEL_MAX_SPEED 8 +#    endif +#    ifndef MOUSEKEY_WHEEL_TIME_TO_MAX +#        define MOUSEKEY_WHEEL_TIME_TO_MAX 80 +#    endif +// mouse scroll kinetic config +#    ifndef MOUSEKEY_WHEEL_INITIAL_MOVEMENTS +#        define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 8 +#    endif +#    ifndef MOUSEKEY_WHEEL_BASE_MOVEMENTS +#        define MOUSEKEY_WHEEL_BASE_MOVEMENTS 48 +#    endif +#    ifndef MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS +#        define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48 +#    endif +#    ifndef MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS +#        define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8 +#    endif +#endif  // MOUSEKEY_ENABLE diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index a493737262..4cef5433d6 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -86,6 +86,9 @@ void keyboard_post_init_user(void) {  #if defined(RGB_MATRIX_ENABLE)      keyboard_post_init_rgb_matrix();  #endif +#if defined(SPLIT_KEYBOARD) && defined(SPLIT_TRANSACTION_IDS_USER) +    keyboard_post_init_transport_sync(); +#endif      keyboard_post_init_keymap();  } @@ -120,7 +123,15 @@ void suspend_power_down_user(void) {  __attribute__((weak)) void suspend_wakeup_init_keymap(void) {} -void suspend_wakeup_init_user(void) { suspend_wakeup_init_keymap(); } +void suspend_wakeup_init_user(void) { +    if (layer_state_is(_GAMEPAD)) { +        layer_off(_GAMEPAD); +    } +    if (layer_state_is(_DIABLO)) { +        layer_off(_DIABLO); +    } +    suspend_wakeup_init_keymap(); +}  __attribute__((weak)) void matrix_scan_keymap(void) {} diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index e66f106574..ca849b0509 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -33,30 +33,52 @@  #    include "oled_stuff.h"  #endif  #if defined(PIMORONI_TRACKBALL_ENABLE) -#    include "pimoroni_trackball.h" +#    include "drivers/sensors/pimoroni_trackball.h" +#endif +#ifdef SPLIT_KEYBOARD +#    include "transport_sync.h"  #endif  /* Define layer names */  enum userspace_layers { -    _QWERTY  = 0, -    _NUMLOCK = 0, +    _QWERTY             = 0, +    _NUMLOCK            = 0, +    FIRST_DEFAULT_LAYER = 0, +    _COLEMAK_DH,      _COLEMAK,      _DVORAK, -    _WORKMAN, -    _NORMAN, -    _MALTRON, -    _EUCALYN, -    _CARPLAX, +    LAST_DEFAULT_LAYER = _DVORAK,      _GAMEPAD,      _DIABLO, -    _MACROS, +    _MOUSE,      _MEDIA,      _LOWER,      _RAISE,      _ADJUST,  }; -#define _MOUSE _MACROS +#define _MACROS          _MOUSE +#define _DEFAULT_LAYER_1 FIRST_DEFAULT_LAYER +#define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 1) +#define _DEFAULT_LAYER_3 (FIRST_DEFAULT_LAYER + 2) +#define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 3) +#if LAST_DEFAULT_LAYER > (FIRST_DEFAULT_LAYER + 3) +#    define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 4) +#    define _DEFAULT_LAYER_3 (FIRST_DEFAULT_LAYER + 5) +#    define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 6) +#    define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 7) +#    if LAST_DEFAULT_LAYER > (FIRST_DEFAULT_LAYER + 7) +#        define _DEFAULT_LAYER_2 (FIRST_DEFAULT_LAYER + 8) +#        define _DEFAULT_LAYER_3 (FIRST_DEFAULT_LAYER + 9) +#        define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 10) +#        define _DEFAULT_LAYER_4 (FIRST_DEFAULT_LAYER + 11) +#    endif +#endif + +#define DEFAULT_LAYER_1_HSV HSV_CYAN +#define DEFAULT_LAYER_2_HSV HSV_SPRINGGREEN +#define DEFAULT_LAYER_3_HSV HSV_MAGENTA +#define DEFAULT_LAYER_4_HSV HSV_GOLDENROD  bool          mod_key_press_timer(uint16_t code, uint16_t mod_code, bool pressed);  bool          mod_key_press(uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer); diff --git a/users/drashna/drashna_font.h b/users/drashna/drashna_font.h index 6a3865a44d..e9353e62a9 100644 --- a/users/drashna/drashna_font.h +++ b/users/drashna/drashna_font.h @@ -3,10 +3,14 @@  // additional fonts from  // https://github.com/datacute/TinyOLED-Fonts -#include "progmem.h" +#if __has_include("../../../../Documents/qmk/oled_font.h") +#    include "../../../../Documents/qmk/oled_font.h" +#else +#    include "progmem.h" +// clang-format off  static const unsigned char font[] PROGMEM = { -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x00 0 +    0x07, 0x08, 0x7F, 0x08, 0x07, 0x00, // 0x00 0      0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, // 0x01 1      0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, // 0x02 2      0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, // 0x03 3 ♥ @@ -38,7 +42,7 @@ static const unsigned char font[] PROGMEM = {      0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, // 0x1D 29 ↭      0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, // 0x1E 30      0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, // 0x1F 31 -#if defined(OLED_FONT_5X5) +#    if defined(OLED_FONT_5X5)      0x00,0x00,0x00,0x00,0x00,0x00, // 0x20 32      0x5c,0x00,0x00,0x00,0x00,0x00, // 0x21 33 !      0x06,0x00,0x06,0x00,0x00,0x00, // 0x22 34 " @@ -135,7 +139,7 @@ static const unsigned char font[] PROGMEM = {      0x44,0x7c,0x10,0x00,0x00,0x00, // 0x7D 125 }      0x02,0x01,0x02,0x01,0x00,0x00, // 0x7E 126 ~      0x00,0x00,0x00,0x00,0x00,0x00, // 0x7F 127 -#elif defined(OLED_FONT_AZTECH) +#    lif defined(OLED_FONT_AZTECH)      0x00,0x00,0x00,0x00,0x00,0x00, // 0x20 32      0x00,0x2e,0x00,0x00,0x00,0x00, // 0x21 33 !      0x00,0x02,0x00,0x02,0x00,0x00, // 0x22 34 " @@ -232,7 +236,7 @@ static const unsigned char font[] PROGMEM = {      0x22,0x3e,0x08,0x00,0x00,0x00, // 0x7D 125 }      0x00,0x00,0x00,0x00,0x00,0x00, // 0x7E 126 ~      0x00,0x00,0x00,0x00,0x00,0x00, // 0x7F 127 -#elif defined(OLED_FONT_BMPLAIN) +#    elif defined(OLED_FONT_BMPLAIN)      0x00,0x00,0x00,0x00,0x00,0x00, // 0x20 32      0x2e,0x00,0x00,0x00,0x00,0x00, // 0x21 33 !      0x03,0x00,0x03,0x00,0x00,0x00, // 0x22 34 " @@ -329,7 +333,7 @@ static const unsigned char font[] PROGMEM = {      0x22,0x3e,0x08,0x00,0x00,0x00, // 0x7D 125 }      0x01,0x01,0x01,0x00,0x00,0x00, // 0x7E 126 ~      0x00,0x00,0x00,0x00,0x00,0x00, // 0x7F 127 -#elif defined(OLED_FONT_SUPER_DIGG) +#    elif defined(OLED_FONT_SUPER_DIGG)      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x20 32      0x58, 0x5C, 0x00, 0x00, 0x00, 0x00, // 0x21 33 !      0x00, 0x01, 0x00, 0x00, 0x01, 0x00, // 0x22 34 " @@ -426,7 +430,7 @@ static const unsigned char font[] PROGMEM = {      0xC2, 0xFE, 0x10, 0x00, 0x00, 0x00, // 0x7D 125 }      0x02, 0x01, 0x03, 0x04, 0x06, 0x02, // 0x7E 126 ~      0x3C, 0x22, 0x21, 0x22, 0x3C, 0x00, // 0x7F 127 -#else // default font +#    else // default font      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x20 32      0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, // 0x21 33 !      0x00, 0x07, 0x00, 0x07, 0x00, 0x00, // 0x22 34 " @@ -523,9 +527,9 @@ static const unsigned char font[] PROGMEM = {      0x00, 0x41, 0x36, 0x08, 0x00, 0x00, // 0x7D 125 }      0x02, 0x01, 0x02, 0x04, 0x02, 0x00, // 0x7E 126 ~      0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, // 0x7F 127 -#endif +#    endif -#if defined(OLED_LOGO_GMK_BAD) +#    if defined(OLED_LOGO_GMK_BAD)      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x80      0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0x70, // 0x81      0x38, 0x38, 0x38, 0x78, 0x70, 0xF0, // 0x82 @@ -654,7 +658,7 @@ static const unsigned char font[] PROGMEM = {      0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    #elif defined(OLED_LOGO_HUE_MANITEE) +#    elif defined(OLED_LOGO_HUE_MANITEE)      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x80      0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0,      0x90, 0x70, 0xE8, 0xA8, 0xE4, 0xC4, @@ -783,7 +787,7 @@ static const unsigned char font[] PROGMEM = {      0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    #elif defined(OLED_LOGO_CORNE) +#    elif defined(OLED_LOGO_CORNE)      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x80      0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, @@ -913,7 +917,7 @@ static const unsigned char font[] PROGMEM = {      0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -#elif defined(OLED_LOGO_GOTHAM) // see /keyboards/crkbd/keymaps/gotham/oled.c +#    elif defined(OLED_LOGO_GOTHAM) // see /keyboards/crkbd/keymaps/gotham/oled.c      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x80      0x00, 0x00, 0xC0, 0x60, 0x30, 0x18,      0xF8, 0x18, 0x00, 0xC0, 0x70, 0x1C, @@ -1042,137 +1046,7 @@ static const unsigned char font[] PROGMEM = {      0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -#elif defined(OLED_LOGO_SCIFI) -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x80, -    0x80, 0x80, 0xC0, 0xC0, 0xE0, 0x60, -    0x70, 0x30, 0x38, 0x18, 0x0C, 0x0C, -    0x1E, 0x0C, 0x80, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x80, -    0xC0, 0xE0, 0xF0, 0x38, 0x1C, 0x0E, -    0x07, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x80, -    0x80, 0x80, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x80, -    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -    0x00, 0x00, 0x80, 0x40, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x80, 0x80, 0x80, 0x00, -    0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, -    0xC0, 0x60, 0x60, 0x30, 0x10, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC, -    0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, -    0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, -    0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, -    0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, -    0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, -    0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, -    0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x10, -    0x30, 0x30, 0x70, 0x78, 0x78, 0x7C, -    0x7C, 0x7E, 0x3E, 0x3F, 0x3F, 0x3B, -    0x3B, 0x39, 0x39, 0x38, 0x38, 0x38, -    0x38, 0x38, 0x38, 0x38, 0x3C, 0x38, -    0x18, 0x8F, 0xDF, 0xF8, 0x7C, 0xBE, -    0xDF, 0xF7, 0xFB, 0xFD, 0xFE, 0xEF, -    0x73, 0x3B, 0x1B, 0x1F, 0xEF, 0xF7, -    0xFF, 0x7E, 0x6F, 0x6F, 0x6F, 0x6F, -    0x6D, 0xBD, 0xE1, 0xF9, 0x3F, 0x3F, -    0x39, 0x79, 0x79, 0x7D, 0xED, 0xED, -    0xCD, 0xC7, 0xC7, 0x87, 0xC7, 0xE3, -    0xE0, 0xF8, 0x7E, 0x3F, 0x37, 0x33, -    0x3B, 0x1B, 0x19, 0x19, 0x0D, 0xED, -    0xFF, 0xBF, 0xC7, 0xE7, 0xE3, 0xF0, -    0x7C, 0xDE, 0xE7, 0xFB, 0x3E, 0x3F, -    0xFC, 0xE0, 0xF8, 0x3E, 0xCF, 0xF3, -    0xFC, 0x3F, 0x1F, 0x1F, 0x3C, 0x7E, -    0x76, 0xF3, 0xE3, 0x81, 0x01, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, -    0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, -    0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, -    0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, -    0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, -    0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, -    0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, -    0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x20, 0x30, 0x18, 0x1E, -    0x0F, 0x03, 0x01, 0x00, 0x00, 0x00, -    0x01, 0x03, 0x03, 0x01, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x03, 0x07, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x01, 0xE1, 0x79, 0x3E, 0x1F, -    0x07, 0x01, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x01, 0x01, -    0x01, 0x00, 0x00, 0x01, 0x01, 0x01, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x01, 0x01, 0x03, -    0x02, 0x06, 0x04, 0x08, 0x18, 0x10, -    0x30, 0x20, 0x60, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x1C, 0x1C, 0x3E, 0x7F, 0x7F, -    0x00, 0x14, 0x08, 0x14, 0x00, 0x00, -    0x00, 0x1C, 0x1C, 0x3E, 0x7F, 0x7F, -    0x00, 0x22, 0x1C, 0x41, 0x3E, 0x00, -    0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, -    0x06, 0x0C, 0x18, 0x30, 0x00, 0x00, -    0x00, 0x00, 0x06, 0x06, 0x06, 0x0C, -    0x18, 0x30, 0x66, 0x66, 0x66, 0x00, -    0x00, 0x00, 0x00, 0x08, 0x0C, 0x7E, -    0x7F, 0x7E, 0x0C, 0x08, 0x00, 0x00, -    0x00, 0x00, 0x77, 0x77, 0x77, 0x00, -    0x77, 0x77, 0x77, 0x00, 0x00, 0x00, -    0x00, 0x00, 0xE7, 0xA5, 0xFF, 0x24, -    0x24, 0xFF, 0xA5, 0xE7, 0x00, 0x00, -    0x00, 0x00, 0x1C, 0x22, 0xC9, 0xD1, -    0xC9, 0x22, 0x1C, 0x00, 0x00, 0x00, -    0x00, 0x10, 0x02, 0x38, 0xFC, 0xED, -    0xFC, 0x38, 0x02, 0x10, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x3E, 0x4A, 0x4F, -    0x4A, 0x3E, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x40, 0x60, 0x6A, 0x64, -    0x6A, 0x60, 0x40, 0x00, 0x00, 0x00, -    0x00, 0x04, 0x42, 0x69, 0x65, 0x65, -    0x65, 0x69, 0x42, 0x04, 0x00, 0x00, -    0x00, 0x00, 0x1C, 0x14, 0x1C, 0x08, -    0x18, 0x08, 0x18, 0x00, 0x00, 0x00, -    0x00, 0x70, 0xC8, 0xEE, 0xF9, 0x70, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -#else +#    else      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x80      0x40, 0x40, 0x40, 0xF0, 0xF8, 0xF8,      0xFF, 0x38, 0xFF, 0xF8, 0xF8, 0x3F, @@ -1302,5 +1176,7 @@ static const unsigned char font[] PROGMEM = {      0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -#endif +#    endif    }; +// clang-format on +#endif diff --git a/users/drashna/drashna_transport.c b/users/drashna/drashna_transport.c deleted file mode 100644 index 9df11c9bdf..0000000000 --- a/users/drashna/drashna_transport.c +++ /dev/null @@ -1,603 +0,0 @@ -/* Copyright 2020 Christopher Courtney, aka Drashna Jael're  (@drashna) <[email protected]> - * - * 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 <string.h> -#include <stddef.h> - -#include "matrix.h" -#include QMK_KEYBOARD_H - -#define ROWS_PER_HAND (MATRIX_ROWS / 2) -#define SYNC_TIMER_OFFSET 2 - -#ifdef RGBLIGHT_ENABLE -#    include "rgblight.h" -#endif - -#ifdef BACKLIGHT_ENABLE -#    include "backlight.h" -#endif - -#ifdef ENCODER_ENABLE -#    include "encoder.h" -static pin_t encoders_pad[] = ENCODERS_PAD_A; -#    define NUMBER_OF_ENCODERS (sizeof(encoders_pad) / sizeof(pin_t)) -#endif - -#ifdef POINTING_DEVICE_ENABLE -static uint16_t device_cpi    = 0; -static int8_t   split_mouse_x = 0, split_mouse_y = 0; -#endif - -#ifdef OLED_DRIVER_ENABLE -#    include "oled_driver.h" -#endif - -#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) -#    include "led_matrix.h" -#endif -#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) -#    include "rgb_matrix.h" -#endif - -#if defined(USE_I2C) - -#    include "i2c_master.h" -#    include "i2c_slave.h" - -typedef struct _I2C_slave_buffer_t { -#    ifndef DISABLE_SYNC_TIMER -    uint32_t sync_timer; -#    endif -#    ifdef SPLIT_TRANSPORT_MIRROR -    matrix_row_t mmatrix[ROWS_PER_HAND]; -#    endif -    matrix_row_t smatrix[ROWS_PER_HAND]; -#    ifdef SPLIT_MODS_ENABLE -    uint8_t real_mods; -    uint8_t weak_mods; -#        ifndef NO_ACTION_ONESHOT -    uint8_t oneshot_mods; -#        endif -#    endif -#    ifdef BACKLIGHT_ENABLE -    uint8_t backlight_level; -#    endif -#    if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) -    rgblight_syncinfo_t rgblight_sync; -#    endif -#    ifdef ENCODER_ENABLE -    uint8_t encoder_state[NUMBER_OF_ENCODERS]; -#    endif -#    ifdef WPM_ENABLE -    uint8_t current_wpm; -#    endif -#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) -    led_eeconfig_t led_matrix; -    bool           led_suspend_state; -#    endif -#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) -    rgb_config_t rgb_matrix; -    bool         rgb_suspend_state; -#    endif -    int8_t        mouse_x; -    int8_t        mouse_y; -    uint16_t      device_cpi; -    bool          oled_on; -    layer_state_t t_layer_state; -    layer_state_t t_default_layer_state; -} __attribute__((packed)) I2C_slave_buffer_t; - -static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; - -#    define I2C_BACKLIGHT_START offsetof(I2C_slave_buffer_t, backlight_level) -#    define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync) -#    define I2C_KEYMAP_MASTER_START offsetof(I2C_slave_buffer_t, mmatrix) -#    define I2C_KEYMAP_SLAVE_START offsetof(I2C_slave_buffer_t, smatrix) -#    define I2C_SYNC_TIME_START offsetof(I2C_slave_buffer_t, sync_timer) -#    define I2C_REAL_MODS_START offsetof(I2C_slave_buffer_t, real_mods) -#    define I2C_WEAK_MODS_START offsetof(I2C_slave_buffer_t, weak_mods) -#    define I2C_ONESHOT_MODS_START offsetof(I2C_slave_buffer_t, oneshot_mods) -#    define I2C_ENCODER_START offsetof(I2C_slave_buffer_t, encoder_state) -#    define I2C_WPM_START offsetof(I2C_slave_buffer_t, current_wpm) -#    define I2C_MOUSE_X_START offsetof(I2C_slave_buffer_t, mouse_x) -#    define I2C_MOUSE_Y_START offsetof(I2C_slave_buffer_t, mouse_y) -#    define I2C_MOUSE_DPI_START offsetof(I2C_slave_buffer_t, device_cpi) -#    define I2C_OLED_ON_START offsetof(I2C_slave_buffer_t, oled_on) -#    define I2C_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_layer_state) -#    define I2C_DEFAULT_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_default_layer_state) -#    define I2C_LED_MATRIX_START offsetof(I2C_slave_buffer_t, led_matrix) -#    define I2C_LED_SUSPEND_START offsetof(I2C_slave_buffer_t, led_suspend_state) -#    define I2C_RGB_MATRIX_START offsetof(I2C_slave_buffer_t, rgb_matrix) -#    define I2C_RGB_SUSPEND_START offsetof(I2C_slave_buffer_t, rgb_suspend_state) - -#    define TIMEOUT 100 - -#    ifndef SLAVE_I2C_ADDRESS -#        define SLAVE_I2C_ADDRESS 0x32 -#    endif - -// Get rows from other half over i2c -bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { -    i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_SLAVE_START, (void *)slave_matrix, sizeof(i2c_buffer->smatrix), TIMEOUT); -#    ifdef SPLIT_TRANSPORT_MIRROR -    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_MASTER_START, (void *)master_matrix, sizeof(i2c_buffer->mmatrix), TIMEOUT); -#    endif -    // write backlight info -#    ifdef BACKLIGHT_ENABLE -    uint8_t level = is_backlight_enabled() ? get_backlight_level() : 0; -    if (level != i2c_buffer->backlight_level) { -        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_BACKLIGHT_START, (void *)&level, sizeof(level), TIMEOUT) >= 0) { -            i2c_buffer->backlight_level = level; -        } -    } -#    endif - -#    if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) -    if (rgblight_get_change_flags()) { -        rgblight_syncinfo_t rgblight_sync; -        rgblight_get_syncinfo(&rgblight_sync); -        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_START, (void *)&rgblight_sync, sizeof(rgblight_sync), TIMEOUT) >= 0) { -            rgblight_clear_change_flags(); -        } -    } -#    endif - -#    ifdef ENCODER_ENABLE -    i2c_readReg(SLAVE_I2C_ADDRESS, I2C_ENCODER_START, (void *)i2c_buffer->encoder_state, sizeof(i2c_buffer->encoder_state), TIMEOUT); -    encoder_update_raw(i2c_buffer->encoder_state); -#    endif - -#    ifdef WPM_ENABLE -    uint8_t current_wpm = get_current_wpm(); -    if (current_wpm != i2c_buffer->current_wpm) { -        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_WPM_START, (void *)¤t_wpm, sizeof(current_wpm), TIMEOUT) >= 0) { -            i2c_buffer->current_wpm = current_wpm; -        } -    } -#    endif - -#    ifdef POINTING_DEVICE_ENABLE -    if (is_keyboard_left()) { -        report_mouse_t temp_report = pointing_device_get_report(); -        i2c_readReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_X_START, (void *)&i2c_buffer->mouse_x, sizeof(i2c_buffer->mouse_x), TIMEOUT); -        temp_report.x = i2c_buffer->mouse_x; -        i2c_readReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_Y_START, (void *)&i2c_buffer->mouse_y, sizeof(i2c_buffer->mouse_y), TIMEOUT); -        temp_report.y = i2c_buffer->mouse_y; -        pointing_device_set_report(temp_report); - -        if (device_cpi != i2c_buffer->device_cpi) { -            if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_DPI_START, (void *)&device_cpi, sizeof(device_cpi), TIMEOUT) >= 0) { -                i2c_buffer->device_cpi = device_cpi -            } -        } -    } -#    endif - -#    ifdef SPLIT_MODS_ENABLE -    uint8_t real_mods = get_mods(); -    if (real_mods != i2c_buffer->real_mods) { -        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_REAL_MODS_START, (void *)&real_mods, sizeof(real_mods), TIMEOUT) >= 0) { -            i2c_buffer->real_mods = real_mods; -        } -    } - -    uint8_t weak_mods = get_weak_mods(); -    if (weak_mods != i2c_buffer->weak_mods) { -        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_WEAK_MODS_START, (void *)&weak_mods, sizeof(weak_mods), TIMEOUT) >= 0) { -            i2c_buffer->weak_mods = weak_mods; -        } -    } - -#        ifndef NO_ACTION_ONESHOT -    uint8_t oneshot_mods = get_oneshot_mods(); -    if (oneshot_mods != i2c_buffer->oneshot_mods) { -        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_ONESHOT_MODS_START, (void *)&oneshot_mods, sizeof(oneshot_mods), TIMEOUT) >= 0) { -            i2c_buffer->oneshot_mods = oneshot_mods; -        } -    } -#        endif -#    endif - -    if (layer_state != i2c_buffer->t_layer_state) { -        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LAYER_STATE_START, (void *)&layer_state, sizeof(layer_state), TIMEOUT) >= 0) { -            i2c_buffer->t_layer_state = layer_state; -        } -    } - -    if (default_layer_state != i2c_buffer->t_default_layer_state) { -        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_DEFAULT_LAYER_STATE_START, (void *)&default_layer_state, sizeof(default_layer_state), TIMEOUT) >= 0) { -            i2c_buffer->t_default_layer_state = default_layer_state; -        } -    } - -#    ifdef OLED_DRIVER_ENABLE -    bool is_oled_on = is_oled_on(); -    if (is_oled_on != i2c_buffer->oled_on) { -        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LAYER_STATE_START, (void *)&is_oled_on, sizeof(is_oled_on), TIMEOUT) >= 0) { -            i2c_buffer->oled_on = is_oled_on; -        } -    } -#    endif - -#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) -    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_MATRIX_START, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix), TIMEOUT); -    bool suspend_state = led_matrix_get_suspend_state(); -    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->led_suspend_state), TIMEOUT); -#    endif -#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) -    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_START, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix), TIMEOUT); -    bool suspend_state = rgb_matrix_get_suspend_state(); -    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->rgb_suspend_state), TIMEOUT); -#    endif - -#    ifndef DISABLE_SYNC_TIMER -    i2c_buffer->sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET; -    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_SYNC_TIME_START, (void *)&i2c_buffer->sync_timer, sizeof(i2c_buffer->sync_timer), TIMEOUT); -#    endif - -    return true; -} - -void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { -#    ifndef DISABLE_SYNC_TIMER -    sync_timer_update(i2c_buffer->sync_timer); -#    endif -    // Copy matrix to I2C buffer -    memcpy((void *)i2c_buffer->smatrix, (void *)slave_matrix, sizeof(i2c_buffer->smatrix)); -#    ifdef SPLIT_TRANSPORT_MIRROR -    memcpy((void *)master_matrix, (void *)i2c_buffer->mmatrix, sizeof(i2c_buffer->mmatrix)); -#    endif - -// Read Backlight Info -#    ifdef BACKLIGHT_ENABLE -    backlight_set(i2c_buffer->backlight_level); -#    endif - -#    if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) -    // Update the RGB with the new data -    if (i2c_buffer->rgblight_sync.status.change_flags != 0) { -        rgblight_update_sync(&i2c_buffer->rgblight_sync, false); -        i2c_buffer->rgblight_sync.status.change_flags = 0; -    } -#    endif - -#    ifdef ENCODER_ENABLE -    encoder_state_raw(i2c_buffer->encoder_state); -#    endif - -#    ifdef WPM_ENABLE -    set_current_wpm(i2c_buffer->current_wpm); -#    endif - -#    ifdef POINTING_DEVICE_ENABLE -    if (!is_keyboard_left()) { -        static uint16_t cpi; -        if (cpi != i2c_buffer->device_cpi) { -            cpi = i2c_buffer->device_cpi; -            pmw_set_cpi(cpi); -        } -        i2c_buffer->mouse_x = split_mouse_x; -        i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_X_START, (void *)&i2c_buffer->mouse_x, sizeof(i2c_buffer->mouse_x), TIMEOUT); -        i2c_buffer->mouse_y = split_mouse_y; -        i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_Y_START, (void *)&i2c_buffer->mouse_y, sizeof(i2c_buffer->mouse_y), TIMEOUT); -    } - -#    endif - -#    ifdef SPLIT_MODS_ENABLE -    set_mods(i2c_buffer->real_mods); -    set_weak_mods(i2c_buffer->weak_mods); -#        ifndef NO_ACTION_ONESHOT -    set_oneshot_mods(i2c_buffer->oneshot_mods); -#        endif -#    endif - -    if (layer_state != i2c_buffer->t_layer_state) { -        layer_state = i2c_buffer->t_layer_state; -    } -    if (default_layer_state != i2c_buffer->t_default_layer_state) { -        default_layer_state = i2c_buffer->t_default_layer_state; -    } - -#    ifdef OLED_DRIVER_ENABLE -    if (i2c_buffer->oled_on) { -        oled_on(); -    } else { -        oled_off(); -    } -#    endif - -#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) -    memcpy((void *)i2c_buffer->led_matrix, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix)); -    led_matrix_set_suspend_state(i2c_buffer->led_suspend_state); -#    endif -#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) -    memcpy((void *)i2c_buffer->rgb_matrix, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix)); -    rgb_matrix_set_suspend_state(i2c_buffer->rgb_suspend_state); -#    endif -} - -void transport_master_init(void) { i2c_init(); } - -void transport_slave_init(void) { i2c_slave_init(SLAVE_I2C_ADDRESS); } - -#else  // USE_SERIAL - -#    include "serial.h" - -typedef struct _Serial_s2m_buffer_t { -    // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack -    matrix_row_t smatrix[ROWS_PER_HAND]; -#    ifdef ENCODER_ENABLE -    uint8_t      encoder_state[NUMBER_OF_ENCODERS]; -#    endif -    int8_t       mouse_x; -    int8_t       mouse_y; -} __attribute__((packed)) Serial_s2m_buffer_t; - -typedef struct _Serial_m2s_buffer_t { -#    ifdef SPLIT_MODS_ENABLE -    uint8_t       real_mods; -    uint8_t       weak_mods; -#        ifndef NO_ACTION_ONESHOT -    uint8_t       oneshot_mods; -#        endif -#    endif -#    ifndef DISABLE_SYNC_TIMER -    uint32_t     sync_timer; -#    endif -#    ifdef SPLIT_TRANSPORT_MIRROR -    matrix_row_t mmatrix[ROWS_PER_HAND]; -#    endif -#    ifdef BACKLIGHT_ENABLE -    uint8_t       backlight_level; -#    endif -#    ifdef WPM_ENABLE -    uint8_t       current_wpm; -#    endif -    uint16_t      device_cpi; -    bool          oled_on; -    layer_state_t t_layer_state; -    layer_state_t t_default_layer_state; -#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) -    led_eeconfig_t led_matrix; -    bool           led_suspend_state; -#    endif -#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) -    rgb_config_t   rgb_matrix; -    bool           rgb_suspend_state; -#    endif -} __attribute__((packed)) Serial_m2s_buffer_t; - -#    if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) -// When MCUs on both sides drive their respective RGB LED chains, -// it is necessary to synchronize, so it is necessary to communicate RGB -// information. In that case, define RGBLIGHT_SPLIT with info on the number -// of LEDs on each half. -// -// Otherwise, if the master side MCU drives both sides RGB LED chains, -// there is no need to communicate. - -typedef struct _Serial_rgblight_t { -    rgblight_syncinfo_t rgblight_sync; -} Serial_rgblight_t; - -volatile Serial_rgblight_t serial_rgblight = {}; -uint8_t volatile status_rgblight           = 0; -#    endif - -volatile Serial_s2m_buffer_t serial_s2m_buffer = {}; -volatile Serial_m2s_buffer_t serial_m2s_buffer = {}; -uint8_t volatile status0                       = 0; - -enum serial_transaction_id { -    GET_SLAVE_MATRIX = 0, -#    if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) -    PUT_RGBLIGHT, -#    endif -}; - -SSTD_t transactions[] = { -    [GET_SLAVE_MATRIX] = -        { -            (uint8_t *)&status0, -            sizeof(serial_m2s_buffer), -            (uint8_t *)&serial_m2s_buffer, -            sizeof(serial_s2m_buffer), -            (uint8_t *)&serial_s2m_buffer, -        }, -#    if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) -    [PUT_RGBLIGHT] = -        { -            (uint8_t *)&status_rgblight, sizeof(serial_rgblight), (uint8_t *)&serial_rgblight, 0, NULL  // no slave to master transfer -        }, -#    endif -}; - -void transport_master_init(void) { soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); } - -void transport_slave_init(void) { soft_serial_target_init(transactions, TID_LIMIT(transactions)); } - -#    if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) - -// rgblight synchronization information communication. - -void transport_rgblight_master(void) { -    if (rgblight_get_change_flags()) { -        rgblight_get_syncinfo((rgblight_syncinfo_t *)&serial_rgblight.rgblight_sync); -        if (soft_serial_transaction(PUT_RGBLIGHT) == TRANSACTION_END) { -            rgblight_clear_change_flags(); -        } -    } -} - -void transport_rgblight_slave(void) { -    if (status_rgblight == TRANSACTION_ACCEPTED) { -        rgblight_update_sync((rgblight_syncinfo_t *)&serial_rgblight.rgblight_sync, false); -        status_rgblight = TRANSACTION_END; -    } -} - -#    else -#        define transport_rgblight_master() -#        define transport_rgblight_slave() -#    endif - -bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { -#    ifndef SERIAL_USE_MULTI_TRANSACTION -    if (soft_serial_transaction() != TRANSACTION_END) { -        return false; -    } -#    else -    transport_rgblight_master(); -    if (soft_serial_transaction(GET_SLAVE_MATRIX) != TRANSACTION_END) { -        return false; -    } -#    endif - -    // TODO:  if MATRIX_COLS > 8 change to unpack() -    for (int i = 0; i < ROWS_PER_HAND; ++i) { -        slave_matrix[i] = serial_s2m_buffer.smatrix[i]; -#    ifdef SPLIT_TRANSPORT_MIRROR -        serial_m2s_buffer.mmatrix[i] = master_matrix[i]; -#    endif -    } - -#    ifdef BACKLIGHT_ENABLE -    // Write backlight level for slave to read -    serial_m2s_buffer.backlight_level = is_backlight_enabled() ? get_backlight_level() : 0; -#    endif - -#    ifdef ENCODER_ENABLE -    encoder_update_raw((uint8_t *)serial_s2m_buffer.encoder_state); -#    endif - -#    ifdef WPM_ENABLE -    // Write wpm to slave -    serial_m2s_buffer.current_wpm  = get_current_wpm(); -#    endif - -#    ifdef SPLIT_MODS_ENABLE -    serial_m2s_buffer.real_mods    = get_mods(); -    serial_m2s_buffer.weak_mods    = get_weak_mods(); -#        ifndef NO_ACTION_ONESHOT -    serial_m2s_buffer.oneshot_mods = get_oneshot_mods(); -#        endif -#    endif - -#    ifdef POINTING_DEVICE_ENABLE -    if (is_keyboard_left()) { -        report_mouse_t temp_report = pointing_device_get_report(); -        temp_report.x              = serial_s2m_buffer.mouse_x; -        temp_report.y              = serial_s2m_buffer.mouse_y; -        pointing_device_set_report(temp_report); -        serial_m2s_buffer.device_cpi = device_cpi; -    } -#    endif - -    serial_m2s_buffer.t_layer_state           = layer_state; -    serial_m2s_buffer.t_default_layer_state   = default_layer_state; -#    ifdef OLED_DRIVER_ENABLE -    serial_m2s_buffer.oled_on                 = is_oled_on(); -#    endif - -#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) -    serial_m2s_buffer.led_matrix        = led_matrix_eeconfig; -    serial_m2s_buffer.led_suspend_state = led_matrix_get_suspend_state(); -#    endif -#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) -    serial_m2s_buffer.rgb_matrix        = rgb_matrix_config; -    serial_m2s_buffer.rgb_suspend_state = rgb_matrix_get_suspend_state(); -#    endif - -#    ifndef DISABLE_SYNC_TIMER -    serial_m2s_buffer.sync_timer   = sync_timer_read32() + SYNC_TIMER_OFFSET; -#    endif -    return true; -} - -void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { -    transport_rgblight_slave(); -#    ifndef DISABLE_SYNC_TIMER -    sync_timer_update(serial_m2s_buffer.sync_timer); -#    endif - -    // TODO: if MATRIX_COLS > 8 change to pack() -    for (int i = 0; i < ROWS_PER_HAND; ++i) { -        serial_s2m_buffer.smatrix[i] = slave_matrix[i]; -#    ifdef SPLIT_TRANSPORT_MIRROR -        master_matrix[i]             = serial_m2s_buffer.mmatrix[i]; -#    endif -    } - -#    ifdef BACKLIGHT_ENABLE -    backlight_set(serial_m2s_buffer.backlight_level); -#    endif - -#    ifdef ENCODER_ENABLE -    encoder_state_raw((uint8_t *)serial_s2m_buffer.encoder_state); -#    endif - -#    ifdef WPM_ENABLE -    set_current_wpm(serial_m2s_buffer.current_wpm); -#    endif - -#    ifdef SPLIT_MODS_ENABLE -    set_mods(serial_m2s_buffer.real_mods); -    set_weak_mods(serial_m2s_buffer.weak_mods); -#        ifndef NO_ACTION_ONESHOT -    set_oneshot_mods(serial_m2s_buffer.oneshot_mods); -#        endif -#    endif - -#    ifdef POINTING_DEVICE_ENABLE -    if (!is_keyboard_left()) { -        static uint16_t cpi; -        if (cpi != serial_m2s_buffer.device_cpi) { -            cpi = serial_m2s_buffer.device_cpi; -            pmw_set_cpi(cpi); -        } -        serial_s2m_buffer.mouse_x = split_mouse_x; -        serial_s2m_buffer.mouse_y = split_mouse_y; -    } -#    endif - -    if (layer_state != serial_m2s_buffer.t_layer_state) { -        layer_state = serial_m2s_buffer.t_layer_state; -    } -    if (default_layer_state != serial_m2s_buffer.t_default_layer_state) { -        default_layer_state = serial_m2s_buffer.t_default_layer_state; -    } -#    ifdef OLED_DRIVER_ENABLE -    if (serial_m2s_buffer.oled_on) { -        oled_on(); -    } else { -        oled_off(); -    } -#    endif - -#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT) -    led_matrix_eeconfig = serial_m2s_buffer.led_matrix; -    led_matrix_set_suspend_state(serial_m2s_buffer.led_suspend_state); -#    endif -#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) -    rgb_matrix_config = serial_m2s_buffer.rgb_matrix; -    rgb_matrix_set_suspend_state(serial_m2s_buffer.rgb_suspend_state); -#    endif -} - -#endif diff --git a/users/drashna/oled_stuff.c b/users/drashna/oled_stuff.c index 98e467d930..b2f49a2e7e 100644 --- a/users/drashna/oled_stuff.c +++ b/users/drashna/oled_stuff.c @@ -25,7 +25,7 @@  #endif  uint32_t        oled_timer                       = 0; -static char     keylog_str[KEYLOGGER_LENGTH + 1] = {"\n"}; +static char     keylog_str[KEYLOGGER_LENGTH + 1] = {0};  static uint16_t log_timer                        = 0;  // clang-format off @@ -57,12 +57,12 @@ void add_keylog(uint16_t keycode) {          keycode = 0;      } -    for (uint8_t i = (KEYLOGGER_LENGTH - 1); i > 0; --i) { -        keylog_str[i] = keylog_str[i - 1]; +    for (uint8_t i = 1; i < KEYLOGGER_LENGTH; i++) { +        keylog_str[i - 1] = keylog_str[i];      }      if (keycode < (sizeof(code_to_name) / sizeof(char))) { -        keylog_str[0] = pgm_read_byte(&code_to_name[keycode]); +        keylog_str[(KEYLOGGER_LENGTH - 1)] = pgm_read_byte(&code_to_name[keycode]);      }      log_timer = timer_read(); @@ -95,27 +95,15 @@ void render_default_layer_state(void) {          case _QWERTY:              oled_write_P(PSTR(OLED_RENDER_LAYOUT_QWERTY), false);              break; +        case _COLEMAK_DH: +            oled_write_P(PSTR(OLED_RENDER_LAYOUT_COLEMAK_DH), false); +            break;          case _COLEMAK:              oled_write_P(PSTR(OLED_RENDER_LAYOUT_COLEMAK), false);              break;          case _DVORAK:              oled_write_P(PSTR(OLED_RENDER_LAYOUT_DVORAK), false);              break; -        case _WORKMAN: -            oled_write_P(PSTR(OLED_RENDER_LAYOUT_WORKMAN), false); -            break; -        case _NORMAN: -            oled_write_P(PSTR(OLED_RENDER_LAYOUT_NORMAN), false); -            break; -        case _MALTRON: -            oled_write_P(PSTR(OLED_RENDER_LAYOUT_MALTRON), false); -            break; -        case _EUCALYN: -            oled_write_P(PSTR(OLED_RENDER_LAYOUT_EUCALYN), false); -            break; -        case _CARPLAX: -            oled_write_P(PSTR(OLED_RENDER_LAYOUT_CARPLAX), false); -            break;      }  #ifdef OLED_DISPLAY_128X64      oled_advance_page(true); @@ -159,12 +147,12 @@ void render_keylock_status(uint8_t led_usb_state) {  }  void render_matrix_scan_rate(void) {  #ifdef DEBUG_MATRIX_SCAN_RATE -    char matrix_rate[5]; -    uint16_t n = get_matrix_scan_rate(); +    char     matrix_rate[5]; +    uint16_t n     = get_matrix_scan_rate();      matrix_rate[4] = '\0';      matrix_rate[3] = '0' + n % 10; -    matrix_rate[2] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; -    matrix_rate[1] =  n / 10 ? '0' + n / 10 : ' '; +    matrix_rate[2] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; +    matrix_rate[1] = n / 10 ? '0' + n / 10 : ' ';      matrix_rate[0] = ' ';      oled_write_P(PSTR("MS:"), false);      oled_write(matrix_rate, false); @@ -284,6 +272,10 @@ void render_user_status(void) {      oled_write_P(rgb_layer_status[userspace_config.rgb_layer_change], false);      static const char PROGMEM nukem_good[2][3] = {{0xF8, 0xF9, 0}, {0xF6, 0xF7, 0}};      oled_write_P(nukem_good[0], userspace_config.nuke_switch); +#if defined(UNICODE_ENABLE) +    static const char PROGMEM uc_mod_status[5][3] = {{0xEA, 0xEB, 0}, {0xEC, 0xED, 0}}; +    oled_write_P(uc_mod_status[get_unicode_input_mode() == UC_MAC], false); +#endif  #if defined(OLED_DISPLAY_128X64)      oled_advance_page(true);  #endif @@ -306,34 +298,34 @@ void render_wpm(void) {      char wpm_counter[4];      wpm_counter[3] = '\0';      wpm_counter[2] = '0' + n % 10; -    wpm_counter[1] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; +    wpm_counter[1] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';      wpm_counter[0] = n / 10 ? '0' + n / 10 : ' ';  #    else      char wpm_counter[6];      wpm_counter[5] = '\0';      wpm_counter[4] = '0' + n % 10; -    wpm_counter[3] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; +    wpm_counter[3] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';      wpm_counter[2] = n / 10 ? '0' + n / 10 : ' ';      wpm_counter[1] = ' ';      wpm_counter[0] = ' '; -    #    endif +#    endif      oled_write_P(PSTR(OLED_RENDER_WPM_COUNTER), false);      oled_write(wpm_counter, false);  #endif  } -#ifdef KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball +#if defined(KEYBOARD_handwired_tractyl_manuform_5x6_right)  extern keyboard_config_t keyboard_config;  extern uint16_t          dpi_array[];  void render_pointing_dpi_status(void) { -    char dpi_status[6]; -    uint16_t n = dpi_array[keyboard_config.dpi_config]; +    char     dpi_status[6]; +    uint16_t n    = dpi_array[keyboard_config.dpi_config];      dpi_status[5] = '\0';      dpi_status[4] = '0' + n % 10; -    dpi_status[3] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; -    dpi_status[2] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; -    dpi_status[1] =  n / 10 ? '0' + n / 10 : ' '; +    dpi_status[3] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; +    dpi_status[2] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' '; +    dpi_status[1] = n / 10 ? '0' + n / 10 : ' ';      dpi_status[0] = ' ';      oled_write_P(PSTR("  DPI: "), false);      oled_write(dpi_status, false); @@ -348,8 +340,8 @@ void render_status_secondary(void) {      render_default_layer_state();      render_layer_state();      render_mod_status(get_mods() | get_oneshot_mods()); -    // render_keylogger_status(); -    render_keylock_status(host_keyboard_leds()); + +    // render_keylock_status(host_keyboard_leds());  }  void render_status_main(void) { @@ -360,7 +352,7 @@ void render_status_main(void) {  #    else      render_wpm();  #    endif -#    ifdef KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball +#    if defined(KEYBOARD_handwired_tractyl_manuform_5x6_right)      render_pointing_dpi_status();  #    endif      oled_write_P(PSTR("\n"), false); @@ -372,7 +364,16 @@ void render_status_main(void) {      render_bootmagic_status();      render_user_status(); -    render_keylogger_status(); +    // render_keylogger_status(); +} + +__attribute__((weak)) oled_rotation_t oled_init_keymap(oled_rotation_t rotation) { return rotation; } + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { +    for (uint8_t i = 0; i < (KEYLOGGER_LENGTH - 1); i++) { +        add_keylog(0); +    } +    return oled_init_keymap(rotation);  }  void oled_task_user(void) { @@ -385,8 +386,15 @@ void oled_task_user(void) {          } else {              oled_on();          } +    } +    if (is_keyboard_left()) {          render_status_main();  // Renders the current keyboard state (layer, lock, caps, scroll, etc)      } else {          render_status_secondary();      } +    if (is_keyboard_master()) { +        render_keylogger_status(); +    } else { +        render_keylock_status(host_keyboard_leds()); +    }  } diff --git a/users/drashna/oled_stuff.h b/users/drashna/oled_stuff.h index 1f4440bd42..bba3f39cbc 100644 --- a/users/drashna/oled_stuff.h +++ b/users/drashna/oled_stuff.h @@ -19,97 +19,100 @@  #include "quantum.h"  #include "oled_driver.h" -void oled_driver_render_logo(void); -bool process_record_user_oled(uint16_t keycode, keyrecord_t *record); +void            oled_driver_render_logo(void); +bool            process_record_user_oled(uint16_t keycode, keyrecord_t *record); +oled_rotation_t oled_init_keymap(oled_rotation_t rotation);  extern uint32_t oled_timer;  #ifdef OLED_DISPLAY_128X64 -#    define OLED_RENDER_KEYLOGGER "Keylogger: " - -#    define OLED_RENDER_LAYOUT_NAME    "Layout: " -#    define OLED_RENDER_LAYOUT_QWERTY  "Qwerty" -#    define OLED_RENDER_LAYOUT_COLEMAK "Colemak" -#    define OLED_RENDER_LAYOUT_DVORAK  "Dvorak" -#    define OLED_RENDER_LAYOUT_WORKMAN "Workman" -#    define OLED_RENDER_LAYOUT_NORMAN  "Norman" -#    define OLED_RENDER_LAYOUT_MALTRON "Matron" -#    define OLED_RENDER_LAYOUT_EUCALYN "Eucalyn" -#    define OLED_RENDER_LAYOUT_CARPLAX "Carplax" - -#    define OLED_RENDER_LAYER_NAME   "Layer:" -#    define OLED_RENDER_LAYER_LOWER  "Lower" -#    define OLED_RENDER_LAYER_RAISE  "Raise" -#    define OLED_RENDER_LAYER_ADJUST "Adjust" -#    define OLED_RENDER_LAYER_MODS   "Mods" - -#    define OLED_RENDER_LOCK_NAME "Lock: " -#    define OLED_RENDER_LOCK_NUML "NUML" -#    define OLED_RENDER_LOCK_CAPS "CAPS" -#    define OLED_RENDER_LOCK_SCLK "SCLK" - -#    define OLED_RENDER_MODS_NAME "Mods:" -#    define OLED_RENDER_MODS_SFT  "Sft" -#    define OLED_RENDER_MODS_CTL  "Ctl" -#    define OLED_RENDER_MODS_ALT  "Alt" -#    define OLED_RENDER_MODS_GUI  "GUI" - -#    define OLED_RENDER_BOOTMAGIC_NAME  "Boot  " -#    define OLED_RENDER_BOOTMAGIC_NKRO  "NKRO" -#    define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI" -#    define OLED_RENDER_BOOTMAGIC_GRV   "GRV" +#    define OLED_RENDER_KEYLOGGER         "Keylogger: " + +#    define OLED_RENDER_LAYOUT_NAME       "Layout: " +#    define OLED_RENDER_LAYOUT_QWERTY     "Qwerty" +#    define OLED_RENDER_LAYOUT_COLEMAK_DH "Colemak-DH" +#    define OLED_RENDER_LAYOUT_COLEMAK    "Colemak" +#    define OLED_RENDER_LAYOUT_DVORAK     "Dvorak" +#    define OLED_RENDER_LAYOUT_WORKMAN    "Workman" +#    define OLED_RENDER_LAYOUT_NORMAN     "Norman" +#    define OLED_RENDER_LAYOUT_MALTRON    "Matron" +#    define OLED_RENDER_LAYOUT_EUCALYN    "Eucalyn" +#    define OLED_RENDER_LAYOUT_CARPLAX    "Carplax" + +#    define OLED_RENDER_LAYER_NAME        "Layer:" +#    define OLED_RENDER_LAYER_LOWER       "Lower" +#    define OLED_RENDER_LAYER_RAISE       "Raise" +#    define OLED_RENDER_LAYER_ADJUST      "Adjust" +#    define OLED_RENDER_LAYER_MODS        "Mods" + +#    define OLED_RENDER_LOCK_NAME         "Lock: " +#    define OLED_RENDER_LOCK_NUML         "NUML" +#    define OLED_RENDER_LOCK_CAPS         "CAPS" +#    define OLED_RENDER_LOCK_SCLK         "SCLK" + +#    define OLED_RENDER_MODS_NAME         "Mods:" +#    define OLED_RENDER_MODS_SFT          "Sft" +#    define OLED_RENDER_MODS_CTL          "Ctl" +#    define OLED_RENDER_MODS_ALT          "Alt" +#    define OLED_RENDER_MODS_GUI          "GUI" + +#    define OLED_RENDER_BOOTMAGIC_NAME    "Boot  " +#    define OLED_RENDER_BOOTMAGIC_NKRO    "NKRO" +#    define OLED_RENDER_BOOTMAGIC_NOGUI   "nGUI" +#    define OLED_RENDER_BOOTMAGIC_GRV     "GRV"  #    define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT" -#    define OLED_RENDER_BOOTMAGIC_SWAP "SWAP" -#    define OLED_RENDER_BOOTMAGIC_CAPS  "CAPS" +#    define OLED_RENDER_BOOTMAGIC_SWAP    "SWAP" +#    define OLED_RENDER_BOOTMAGIC_CAPS    "CAPS" -#    define OLED_RENDER_USER_NAME "USER:" -#    define OLED_RENDER_USER_ANIM "Anim" -#    define OLED_RENDER_USER_LAYR "Layr" -#    define OLED_RENDER_USER_NUKE "Nuke" +#    define OLED_RENDER_USER_NAME         "USER:" +#    define OLED_RENDER_USER_ANIM         "Anim" +#    define OLED_RENDER_USER_LAYR         "Layr" +#    define OLED_RENDER_USER_NUKE         "Nuke" -#    define OLED_RENDER_WPM_COUNTER "WPM: " +#    define OLED_RENDER_WPM_COUNTER       "WPM: "  #else -#    define OLED_RENDER_KEYLOGGER "KLogr" - -#    define OLED_RENDER_LAYOUT_NAME    "Lyout" -#    define OLED_RENDER_LAYOUT_QWERTY  " QRTY" -#    define OLED_RENDER_LAYOUT_COLEMAK " COLE" -#    define OLED_RENDER_LAYOUT_DVORAK  " DVRK" -#    define OLED_RENDER_LAYOUT_WORKMAN " WKMN" -#    define OLED_RENDER_LAYOUT_NORMAN  " NORM" -#    define OLED_RENDER_LAYOUT_MALTRON " MLTN" -#    define OLED_RENDER_LAYOUT_EUCALYN " ECLN" -#    define OLED_RENDER_LAYOUT_CARPLAX " CRPX" - -#    define OLED_RENDER_LAYER_NAME   "LAYER" -#    define OLED_RENDER_LAYER_LOWER  "Lower" -#    define OLED_RENDER_LAYER_RAISE  "Raise" -#    define OLED_RENDER_LAYER_ADJUST "Adjst" -#    define OLED_RENDER_LAYER_MODS   " Mods" - -#    define OLED_RENDER_LOCK_NAME "Lock:" -#    define OLED_RENDER_LOCK_NUML "NumL" -#    define OLED_RENDER_LOCK_CAPS "CapL" -#    define OLED_RENDER_LOCK_SCLK "ScrL" - -#    define OLED_RENDER_MODS_NAME "Mods: " -#    define OLED_RENDER_MODS_SFT  "Shft" -#    define OLED_RENDER_MODS_CTL  "Ctrl" -#    define OLED_RENDER_MODS_ALT  "Alt\n" -#    define OLED_RENDER_MODS_GUI  "GUI\n" - -#    define OLED_RENDER_BOOTMAGIC_NAME  "BTMGK" -#    define OLED_RENDER_BOOTMAGIC_NKRO  "NKRO" -#    define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI" -#    define OLED_RENDER_BOOTMAGIC_GRV   "GRV" +#    define OLED_RENDER_KEYLOGGER         "KLogr" + +#    define OLED_RENDER_LAYOUT_NAME       "Lyout" +#    define OLED_RENDER_LAYOUT_QWERTY     " QRTY" +#    define OLED_RENDER_LAYOUT_COLEMAK_DH " cmDH" +#    define OLED_RENDER_LAYOUT_COLEMAK    " COLE" +#    define OLED_RENDER_LAYOUT_DVORAK     " DVRK" +#    define OLED_RENDER_LAYOUT_WORKMAN    " WKMN" +#    define OLED_RENDER_LAYOUT_NORMAN     " NORM" +#    define OLED_RENDER_LAYOUT_MALTRON    " MLTN" +#    define OLED_RENDER_LAYOUT_EUCALYN    " ECLN" +#    define OLED_RENDER_LAYOUT_CARPLAX    " CRPX" + +#    define OLED_RENDER_LAYER_NAME        "LAYER" +#    define OLED_RENDER_LAYER_LOWER       "Lower" +#    define OLED_RENDER_LAYER_RAISE       "Raise" +#    define OLED_RENDER_LAYER_ADJUST      "Adjst" +#    define OLED_RENDER_LAYER_MODS        " Mods" + +#    define OLED_RENDER_LOCK_NAME         "Lock:" +#    define OLED_RENDER_LOCK_NUML         "NumL" +#    define OLED_RENDER_LOCK_CAPS         "CapL" +#    define OLED_RENDER_LOCK_SCLK         "ScrL" + +#    define OLED_RENDER_MODS_NAME         "Mods: " +#    define OLED_RENDER_MODS_SFT          "Shft" +#    define OLED_RENDER_MODS_CTL          "Ctrl" +#    define OLED_RENDER_MODS_ALT          "Alt\n" +#    define OLED_RENDER_MODS_GUI          "GUI\n" + +#    define OLED_RENDER_BOOTMAGIC_NAME    "BTMGK" +#    define OLED_RENDER_BOOTMAGIC_NKRO    "NKRO" +#    define OLED_RENDER_BOOTMAGIC_NOGUI   "nGUI" +#    define OLED_RENDER_BOOTMAGIC_GRV     "GRV"  #    define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT" -#    define OLED_RENDER_BOOTMAGIC_SWAP "SWAP" -#    define OLED_RENDER_BOOTMAGIC_CAPS  "CAPS" +#    define OLED_RENDER_BOOTMAGIC_SWAP    "SWAP" +#    define OLED_RENDER_BOOTMAGIC_CAPS    "CAPS" -#    define OLED_RENDER_USER_NAME "USER:" -#    define OLED_RENDER_USER_ANIM "Anim" -#    define OLED_RENDER_USER_LAYR "Layr" -#    define OLED_RENDER_USER_NUKE "Nuke" +#    define OLED_RENDER_USER_NAME         "USER:" +#    define OLED_RENDER_USER_ANIM         "Anim" +#    define OLED_RENDER_USER_LAYR         "Layr" +#    define OLED_RENDER_USER_NUKE         "Nuke" -#    define OLED_RENDER_WPM_COUNTER "WPM: " +#    define OLED_RENDER_WPM_COUNTER       "WPM: "  #endif diff --git a/users/drashna/pimoroni_trackball.c b/users/drashna/pimoroni_trackball.c deleted file mode 100644 index a6ca6c9966..0000000000 --- a/users/drashna/pimoroni_trackball.c +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright 2020 Christopher Courtney, aka Drashna Jael're  (@drashna) <[email protected]> - * - * 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 "pimoroni_trackball.h" -#include "i2c_master.h" - -static uint8_t scrolling      = 0; -static int16_t x_offset       = 0; -static int16_t y_offset       = 0; -static int16_t h_offset       = 0; -static int16_t v_offset       = 0; -static float   precisionSpeed = 1; - -#ifndef I2C_TIMEOUT -#    define I2C_TIMEOUT 100 -#endif -#ifndef MOUSE_DEBOUNCE -#    define MOUSE_DEBOUNCE 5 -#endif - -void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) { -    uint8_t data[] = {0x00, red, green, blue, white}; -    i2c_transmit(TRACKBALL_ADDRESS << 1, data, sizeof(data), I2C_TIMEOUT); -} - -int16_t mouse_offset(uint8_t positive, uint8_t negative, int16_t scale) { -    int16_t offset    = (int16_t)positive - (int16_t)negative; -    int16_t magnitude = (int16_t)(scale * offset * offset * precisionSpeed); -    return offset < 0 ? -magnitude : magnitude; -} - -void update_member(int8_t* member, int16_t* offset) { -    if (*offset > 127) { -        *member = 127; -        *offset -= 127; -    } else if (*offset < -127) { -        *member = -127; -        *offset += 127; -    } else { -        *member = *offset; -        *offset = 0; -    } -} - -__attribute__((weak)) void trackball_check_click(bool pressed, report_mouse_t* mouse) { -    if (pressed) { -        mouse->buttons |= MOUSE_BTN1; -    } else { -        mouse->buttons &= ~MOUSE_BTN1; -    } -} - -void trackball_register_button(bool pressed, enum mouse_buttons button) { -    report_mouse_t currentReport = pointing_device_get_report(); -    if (pressed) { -        currentReport.buttons |= button; -    } else { -        currentReport.buttons &= ~button; -    } -    pointing_device_set_report(currentReport); -} - -float trackball_get_precision(void) { return precisionSpeed; } -void  trackball_set_precision(float precision) { precisionSpeed = precision; } -bool  trackball_is_scrolling(void) { return scrolling; } -void  trackball_set_scrolling(bool scroll) { scrolling = scroll; } - -bool has_report_changed (report_mouse_t first, report_mouse_t second) { -    return !( -        (!first.buttons && first.buttons == second.buttons) && -        (!first.x && first.x == second.x) && -        (!first.y && first.y == second.y) && -        (!first.h && first.h == second.h) && -        (!first.v && first.v == second.v) ); -} - - -__attribute__((weak)) void pointing_device_init(void) { trackball_set_rgbw(0x00, 0x00, 0x00, 0x4F); } - -void pointing_device_task(void) { -    static bool     debounce; -    static uint16_t debounce_timer; -    uint8_t         state[5] = {}; -    if (i2c_readReg(TRACKBALL_ADDRESS << 1, 0x04, state, 5, I2C_TIMEOUT) == I2C_STATUS_SUCCESS) { -        if (!state[4] && !debounce) { -            if (scrolling) { -#ifdef PIMORONI_TRACKBALL_INVERT_X -                h_offset += mouse_offset(state[2], state[3], 1); -#else -                h_offset -= mouse_offset(state[2], state[3], 1); -#endif -#ifdef PIMORONI_TRACKBALL_INVERT_Y -                v_offset += mouse_offset(state[1], state[0], 1); -#else -                v_offset -= mouse_offset(state[1], state[0], 1); -#endif -            } else { -#ifdef PIMORONI_TRACKBALL_INVERT_X -                x_offset -= mouse_offset(state[2], state[3], 5); -#else -                x_offset += mouse_offset(state[2], state[3], 5); -#endif -#ifdef PIMORONI_TRACKBALL_INVERT_Y -                y_offset -= mouse_offset(state[1], state[0], 5); -#else -                y_offset += mouse_offset(state[1], state[0], 5); -#endif -            } -        } else { -            if (state[4]) { -                debounce       = true; -                debounce_timer = timer_read(); -            } -        } -    } - -    if (timer_elapsed(debounce_timer) > MOUSE_DEBOUNCE) debounce = false; - -    report_mouse_t mouse = pointing_device_get_report(); - -    trackball_check_click(state[4] & (1 << 7), &mouse); - -#ifndef PIMORONI_TRACKBALL_ROTATE -    update_member(&mouse.x, &x_offset); -    update_member(&mouse.y, &y_offset); -    update_member(&mouse.h, &h_offset); -    update_member(&mouse.v, &v_offset); -#else -    update_member(&mouse.x, &y_offset); -    update_member(&mouse.y, &x_offset); -    update_member(&mouse.h, &v_offset); -    update_member(&mouse.v, &h_offset); -#endif -    pointing_device_set_report(mouse); -    if (has_report_changed(mouse, pointing_device_get_report())) { -        pointing_device_send(); -    } -} diff --git a/users/drashna/process_records.c b/users/drashna/process_records.c index ef901226e0..1e6ecc1d6c 100644 --- a/users/drashna/process_records.c +++ b/users/drashna/process_records.c @@ -46,15 +46,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {      }      switch (keycode) { -        case KC_QWERTY ... KC_WORKMAN: +        case FIRST_DEFAULT_LAYER_KEYCODE ... LAST_DEFAULT_LAYER_KEYCODE:              if (record->event.pressed) {                  uint8_t mods = mod_config(get_mods() | get_oneshot_mods());                  if (!mods) { -                    set_single_persistent_default_layer(keycode - KC_QWERTY); +                    set_single_persistent_default_layer(keycode - FIRST_DEFAULT_LAYER_KEYCODE); +#if LAST_DEFAULT_LAYER_KEYCODE > (FIRST_DEFAULT_LAYER_KEYCODE + 3)                  } else if (mods & MOD_MASK_SHIFT) { -                    set_single_persistent_default_layer(keycode - KC_QWERTY + 4); +                    set_single_persistent_default_layer(keycode - FIRST_DEFAULT_LAYER_KEYCODE + 4); +#    if LAST_DEFAULT_LAYER_KEYCODE > (FIRST_DEFAULT_LAYER_KEYCODE + 7) +                  } else if (mods & MOD_MASK_CTRL) { -                    set_single_persistent_default_layer(keycode - KC_QWERTY + 8); +                    set_single_persistent_default_layer(keycode - FIRST_DEFAULT_LAYER_KEYCODE + 8); +#    endif +#endif                  }              }              break; @@ -79,15 +84,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {  #endif                  }                  send_string_with_delay_P(PSTR("-kb " QMK_KEYBOARD " -km " QMK_KEYMAP), TAP_CODE_DELAY); -#ifdef RGB_MATRIX_SPLIT_RIGHT -                send_string_with_delay_P(PSTR(" RGB_MATRIX_SPLIT_RIGHT=yes"), TAP_CODE_DELAY); -#    ifndef OLED_DRIVER_ENABLE -                send_string_with_delay_P(PSTR(" OLED_DRIVER_ENABLE=no"), TAP_CODE_DELAY); -#    endif +#ifdef CONVERT_TO_PROTON_C +                send_string_with_delay_P(PSTR(" -e CTPC=yes"), TAP_CODE_DELAY);  #endif                  send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), TAP_CODE_DELAY);              } -              break;          case VRSN:  // Prints firmware version diff --git a/users/drashna/process_records.h b/users/drashna/process_records.h index f60e6d7ebc..460d41d4df 100644 --- a/users/drashna/process_records.h +++ b/users/drashna/process_records.h @@ -17,58 +17,77 @@  #pragma once  #include "drashna.h" -#if defined(KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball) +#if defined(KEYBOARD_handwired_tractyl_manuform_5x6_right)  #    define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE  #else  #    define PLACEHOLDER_SAFE_RANGE SAFE_RANGE  #endif  enum userspace_custom_keycodes { -    VRSN = PLACEHOLDER_SAFE_RANGE,  // Prints QMK Firmware and board info -    KC_QWERTY,                      // Sets default layer to QWERTY -    KC_COLEMAK,                     // Sets default layer to COLEMAK -    KC_DVORAK,                      // Sets default layer to DVORAK -    KC_WORKMAN,                     // Sets default layer to WORKMAN -    KC_DIABLO_CLEAR,                // Clears all Diablo Timers -    KC_MAKE,                        // Run keyboard's customized make command -    KC_RGB_T,                       // Toggles RGB Layer Indication mode -    RGB_IDL,                        // RGB Idling animations -    KC_SECRET_1,                    // test1 -    KC_SECRET_2,                    // test2 -    KC_SECRET_3,                    // test3 -    KC_SECRET_4,                    // test4 -    KC_SECRET_5,                    // test5 -    KC_CCCV,                        // Hold to copy, tap to paste -    KC_NUKE,                        // NUCLEAR LAUNCH DETECTED!!! -    UC_FLIP,                        // (ಠ痊ಠ)┻━┻ -    UC_TABL,                        // ┬─┬ノ( º _ ºノ) -    UC_SHRG,                        // ¯\_(ツ)_/¯ -    UC_DISA,                        // ಠ_ಠ -    NEW_SAFE_RANGE                  // use "NEWPLACEHOLDER for keymap specific codes +    VRSN = PLACEHOLDER_SAFE_RANGE,            // Prints QMK Firmware and board info +    KC_QWERTY,                                // Sets default layer to QWERTY +    FIRST_DEFAULT_LAYER_KEYCODE = KC_QWERTY,  // Sets default layer to QWERTY +    KC_COLEMAK_DH,                            // Sets default layer to COLEMAK +    KC_COLEMAK,                               // Sets default layer to COLEMAK +    KC_DVORAK,                                // Sets default layer to DVORAK +    LAST_DEFAULT_LAYER_KEYCODE = KC_DVORAK,   // Sets default layer to WORKMAN +    KC_DIABLO_CLEAR,                          // Clears all Diablo Timers +    KC_MAKE,                                  // Run keyboard's customized make command +    KC_RGB_T,                                 // Toggles RGB Layer Indication mode +    RGB_IDL,                                  // RGB Idling animations +    KC_SECRET_1,                              // test1 +    KC_SECRET_2,                              // test2 +    KC_SECRET_3,                              // test3 +    KC_SECRET_4,                              // test4 +    KC_SECRET_5,                              // test5 +    KC_CCCV,                                  // Hold to copy, tap to paste +    KC_NUKE,                                  // NUCLEAR LAUNCH DETECTED!!! +    UC_FLIP,                                  // (ಠ痊ಠ)┻━┻ +    UC_TABL,                                  // ┬─┬ノ( º _ ºノ) +    UC_SHRG,                                  // ¯\_(ツ)_/¯ +    UC_DISA,                                  // ಠ_ಠ +    NEW_SAFE_RANGE                            // use "NEWPLACEHOLDER for keymap specific codes  };  bool process_record_secrets(uint16_t keycode, keyrecord_t *record);  bool process_record_keymap(uint16_t keycode, keyrecord_t *record); -#define LOWER   MO(_LOWER) -#define RAISE   MO(_RAISE) -#define ADJUST  MO(_ADJUST) -#define TG_MODS OS_TOGG -#define TG_GAME TG(_GAMEPAD) -#define TG_DBLO TG(_DIABLO) -#define OS_LWR  OSL(_LOWER) -#define OS_RSE  OSL(_RAISE) - -#define KC_SEC1 KC_SECRET_1 -#define KC_SEC2 KC_SECRET_2 -#define KC_SEC3 KC_SECRET_3 -#define KC_SEC4 KC_SECRET_4 -#define KC_SEC5 KC_SECRET_5 - -#define QWERTY  KC_QWERTY -#define DVORAK  KC_DVORAK -#define COLEMAK KC_COLEMAK -#define WORKMAN KC_WORKMAN +#define LOWER     MO(_LOWER) +#define RAISE     MO(_RAISE) +#define ADJUST    MO(_ADJUST) +#define TG_MODS   OS_TOGG +#define TG_GAME   TG(_GAMEPAD) +#define TG_DBLO   TG(_DIABLO) +#define OS_LWR    OSL(_LOWER) +#define OS_RSE    OSL(_RAISE) + +#define KC_SEC1   KC_SECRET_1 +#define KC_SEC2   KC_SECRET_2 +#define KC_SEC3   KC_SECRET_3 +#define KC_SEC4   KC_SECRET_4 +#define KC_SEC5   KC_SECRET_5 + +#define QWERTY    KC_QWERTY +#define DVORAK    KC_DVORAK +#define COLEMAK   KC_COLEMAK +#define COLEMAKDH KC_COLEMAK_DH + +#define DEFLYR1   FIRST_DEFAULT_LAYER_KEYCODE +#define DEFLYR2   (FIRST_DEFAULT_LAYER_KEYCODE + 1) +#define DEFLYR3   (FIRST_DEFAULT_LAYER_KEYCODE + 2) +#define DEFLYR4   (FIRST_DEFAULT_LAYER_KEYCODE + 3) +#if LAST_DEFAULT_LAYER_KEYCODE > (FIRST_DEFAULT_LAYER_KEYCODE + 3) +#    define DEFLYR5 (FIRST_DEFAULT_LAYER_KEYCODE + 4) +#    define DEFLYR6 (FIRST_DEFAULT_LAYER_KEYCODE + 5) +#    define DEFLYR7 (FIRST_DEFAULT_LAYER_KEYCODE + 6) +#    define DEFLYR8 (FIRST_DEFAULT_LAYER_KEYCODE + 7) +#    if LAST_DEFAULT_LAYER_KEYCODE > (FIRST_DEFAULT_LAYER_KEYCODE + 7) +#        define DEFLYR9  (FIRST_DEFAULT_LAYER_KEYCODE + 8) +#        define DEFLYR10 (FIRST_DEFAULT_LAYER_KEYCODE + 9) +#        define DEFLYR11 (FIRST_DEFAULT_LAYER_KEYCODE + 10) +#        define DEFLYR12 (FIRST_DEFAULT_LAYER_KEYCODE + 11) +#    endif +#endif  #define KC_RESET RESET  #define KC_RST   KC_RESET diff --git a/users/drashna/rgb_matrix_stuff.c b/users/drashna/rgb_matrix_stuff.c index 9e9e1e4279..5adbd8ab1b 100644 --- a/users/drashna/rgb_matrix_stuff.c +++ b/users/drashna/rgb_matrix_stuff.c @@ -34,27 +34,27 @@ void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode      switch (mode) {          case 1:  // breathing -        { -            uint16_t time = scale16by8(g_rgb_timer, speed / 8); -            hsv.v         = scale8(abs8(sin8(time) - 128) * 2, hsv.v); -            RGB rgb       = hsv_to_rgb(hsv); -            for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { -                if (HAS_FLAGS(g_led_config.flags[i], led_type)) { -                    RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b); +            { +                uint16_t time = scale16by8(g_rgb_timer, speed / 8); +                hsv.v         = scale8(abs8(sin8(time) - 128) * 2, hsv.v); +                RGB rgb       = hsv_to_rgb(hsv); +                for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { +                    if (HAS_FLAGS(g_led_config.flags[i], led_type)) { +                        RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b); +                    }                  } +                break;              } -            break; -        }          default:  // Solid Color -        { -            RGB rgb = hsv_to_rgb(hsv); -            for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { -                if (HAS_FLAGS(g_led_config.flags[i], led_type)) { -                    RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b); +            { +                RGB rgb = hsv_to_rgb(hsv); +                for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { +                    if (HAS_FLAGS(g_led_config.flags[i], led_type)) { +                        RGB_MATRIX_INDICATOR_SET_COLOR(i, rgb.r, rgb.g, rgb.b); +                    }                  } +                break;              } -            break; -        }      }  } diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c index 6723ad4bf5..8a0866539e 100644 --- a/users/drashna/rgb_stuff.c +++ b/users/drashna/rgb_stuff.c @@ -178,9 +178,13 @@ layer_state_t layer_state_set_rgb_light(layer_state_t state) {  #    ifdef RGBLIGHT_ENABLE      if (userspace_config.rgb_layer_change) {          switch (get_highest_layer(state | default_layer_state)) { -            case _MACROS: // mouse +            case _MOUSE:  // mouse                  if (!layer_state_cmp(state, _GAMEPAD) && !layer_state_cmp(state, _DIABLO)) { +#        if defined(RGBLIGHT_EFFECT_TWINKLE) +                    rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_TWINKLE + 5); +#        else                      rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_BREATHING + 3); +#        endif                  }                  break;              case _MEDIA: @@ -201,29 +205,17 @@ layer_state_t layer_state_set_rgb_light(layer_state_t state) {              case _ADJUST:                  rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2);                  break; -            case _COLEMAK: -                rgblight_set_hsv_and_mode(HSV_MAGENTA, RGBLIGHT_MODE_STATIC_LIGHT); +            case _DEFAULT_LAYER_1: +                rgblight_set_hsv_and_mode(DEFAULT_LAYER_1_HSV, RGBLIGHT_MODE_STATIC_LIGHT);                  break; -            case _DVORAK: -                rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, RGBLIGHT_MODE_STATIC_LIGHT); +            case _DEFAULT_LAYER_2: +                rgblight_set_hsv_and_mode(DEFAULT_LAYER_2_HSV, RGBLIGHT_MODE_STATIC_LIGHT);                  break; -            case _WORKMAN: -                rgblight_set_hsv_and_mode(HSV_GOLDENROD, RGBLIGHT_MODE_STATIC_LIGHT); +            case _DEFAULT_LAYER_3: +                rgblight_set_hsv_and_mode(DEFAULT_LAYER_3_HSV, RGBLIGHT_MODE_STATIC_LIGHT);                  break; -            case _NORMAN: -                rgblight_set_hsv_and_mode(HSV_CORAL, RGBLIGHT_MODE_STATIC_LIGHT); -                break; -            case _MALTRON: -                rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_STATIC_LIGHT); -                break; -            case _EUCALYN: -                rgblight_set_hsv_and_mode(HSV_PINK, RGBLIGHT_MODE_STATIC_LIGHT); -                break; -            case _CARPLAX: -                rgblight_set_hsv_and_mode(HSV_BLUE, RGBLIGHT_MODE_STATIC_LIGHT); -                break; -            default: -                rgblight_set_hsv_and_mode(HSV_CYAN, RGBLIGHT_MODE_STATIC_LIGHT); +            case _DEFAULT_LAYER_4: +                rgblight_set_hsv_and_mode(DEFAULT_LAYER_4_HSV, RGBLIGHT_MODE_STATIC_LIGHT);                  break;          }      } diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk index b79051508b..1ccc51ecf1 100644 --- a/users/drashna/rules.mk +++ b/users/drashna/rules.mk @@ -68,40 +68,19 @@ CUSTOM_OLED_DRIVER ?= yes  ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes)      ifeq ($(strip $(CUSTOM_OLED_DRIVER)), yes)          SRC += oled_stuff.c +        OPT_DEFS += -DCUSTOM_OLED_DRIVER_CODE      endif  endif  ifeq ($(strip $(PIMORONI_TRACKBALL_ENABLE)), yes)      POINTING_DEVICE_ENABLE := yes      OPT_DEFS += -DPIMORONI_TRACKBALL_ENABLE -    SRC += pimoroni_trackball.c +    SRC += drivers/sensors/pimoroni_trackball.c      QUANTUM_LIB_SRC += i2c_master.c  endif -CUSTOM_SPLIT_TRANSPORT ?= yes  ifeq ($(strip $(SPLIT_KEYBOARD)), yes) -    ifneq ($(strip $(SPLIT_TRANSPORT)), custom) -        ifeq ($(strip $(CUSTOM_SPLIT_TRANSPORT)), yes) -            SPLIT_TRANSPORT = custom -            QUANTUM_LIB_SRC += drashna_transport.c -            OPT_DEFS += -DDRASHNA_CUSTOM_TRANSPORT -            # Unused functions are pruned away, which is why we can add multiple drivers here without bloat. -            ifeq ($(PLATFORM),AVR) -                ifneq ($(NO_I2C),yes) -                    QUANTUM_LIB_SRC += i2c_master.c \ -                                    i2c_slave.c -                endif -            endif - -            SERIAL_DRIVER ?= bitbang -            OPT_DEFS += -DSERIAL_DRIVER_$(strip $(shell echo $(SERIAL_DRIVER) | tr '[:lower:]' '[:upper:]')) -            ifeq ($(strip $(SERIAL_DRIVER)), bitbang) -                QUANTUM_LIB_SRC += serial.c -            else -                QUANTUM_LIB_SRC += serial_$(strip $(SERIAL_DRIVER)).c -            endif -        endif -    endif +    QUANTUM_LIB_SRC += transport_sync.c  endif  # DEBUG_MATRIX_SCAN_RATE_ENABLE = api diff --git a/users/drashna/tap_dances.h b/users/drashna/tap_dances.h index 7f73f28036..81e462ce29 100644 --- a/users/drashna/tap_dances.h +++ b/users/drashna/tap_dances.h @@ -35,12 +35,10 @@ extern diablo_timer_t diablo_timer[];  void run_diablo_macro_check(void);  #ifdef TAP_DANCE_ENABLE -// clang-format off  enum {      TD_D3_1 = 0,      TD_D3_2,      TD_D3_3, -    TD_D3_4 +    TD_D3_4,  }; -// clang-format on  #endif  // TAP_DANCE_ENABLE diff --git a/users/drashna/transport_sync.c b/users/drashna/transport_sync.c new file mode 100644 index 0000000000..8a3e6d1bfa --- /dev/null +++ b/users/drashna/transport_sync.c @@ -0,0 +1,79 @@ +#ifdef SPLIT_TRANSACTION_IDS_USER +#    include "transport_sync.h" +#    include "transactions.h" +#    include <string.h> + +typedef struct { +    bool     oled_on; +    uint16_t keymap_config; +} user_runtime_config_t; + +user_runtime_config_t user_state; + +void user_sync(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) { +    if (initiator2target_buffer_size == sizeof(user_state)) { +        memcpy(&user_state, initiator2target_buffer, initiator2target_buffer_size); +    } +} + +void keyboard_post_init_transport_sync(void) { +    // Register keyboard state sync split transaction +    transaction_register_rpc(RPC_ID_USER_STATE_SYNC, user_sync); +} + +void user_state_update(void) { +    if (is_keyboard_master()) { +#    ifdef OLED_DRIVER_ENABLE +        user_state.oled_on = is_oled_on(); +#    endif + +        user_state.keymap_config = keymap_config.raw; +    } else { +#    ifdef OLED_DRIVER_ENABLE +        if (user_state.oled_on) { +            oled_on(); +        } else { +            oled_off(); +        } +#    endif +        if (keymap_config.raw != user_state.keymap_config) { +            keymap_config.raw = user_state.keymap_config; +        } +    } +} + +void user_state_sync(void) { +    if (is_keyboard_master()) { +        // Keep track of the last state, so that we can tell if we need to propagate to slave +        static user_runtime_config_t last_user_state; +        static uint32_t              last_sync; +        bool                         needs_sync = false; + +        // Check if the state values are different +        if (memcmp(&user_state, &last_user_state, sizeof(user_state))) { +            needs_sync = true; +            memcpy(&last_user_state, &user_state, sizeof(user_state)); +        } + +        // Send to slave every 500ms regardless of state change +        if (timer_elapsed32(last_sync) > 250) { +            needs_sync = true; +        } + +        // Perform the sync if requested +        if (needs_sync) { +            if (transaction_rpc_send(RPC_ID_USER_STATE_SYNC, sizeof(user_state), &user_state)) { +                last_sync = timer_read32(); +            } +        } +    } +} + +void housekeeping_task_user(void) { +    // Update kb_state so we can send to slave +    user_state_update(); + +    // Data sync from master to slave +    user_state_sync(); +} +#endif diff --git a/users/drashna/pimoroni_trackball.h b/users/drashna/transport_sync.h index a30fb0bb8c..e2b3eae76b 100644 --- a/users/drashna/pimoroni_trackball.h +++ b/users/drashna/transport_sync.h @@ -1,3 +1,4 @@ +  /* Copyright 2020 Christopher Courtney, aka Drashna Jael're  (@drashna) <[email protected]>   *   * This program is free software: you can redistribute it and/or modify @@ -16,20 +17,6 @@  #pragma once -#include "quantum.h" -#include "pointing_device.h" - -#ifndef TRACKBALL_ADDRESS -#    define TRACKBALL_ADDRESS 0x0A -#endif -#define TRACKBALL_WRITE ((TRACKBALL_ADDRESS << 1) | I2C_WRITE) -#define TRACKBALL_READ ((TRACKBALL_ADDRESS << 1) | I2C_READ) - -void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white); -void trackball_check_click(bool pressed, report_mouse_t *mouse); -void trackball_register_button(bool pressed, enum mouse_buttons button); +#include "drashna.h" -float trackball_get_precision(void); -void  trackball_set_precision(float precision); -bool  trackball_is_scrolling(void); -void  trackball_set_scrolling(bool scroll); +void keyboard_post_init_transport_sync(void); diff --git a/users/drashna/wrappers.h b/users/drashna/wrappers.h index be8162dfa3..8ac252926e 100644 --- a/users/drashna/wrappers.h +++ b/users/drashna/wrappers.h @@ -60,120 +60,120 @@ NOTE: These are all the same length.  If you do a search/replace  #define ______________COLEMAK_MOD_DH_R3____________       KC_K,    KC_H,    KC_COMM, KC_DOT,  KC_SLASH -#define _________________DVORAK_L1_________________        KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y -#define _________________DVORAK_L2_________________        KC_A,    KC_O,    KC_E,   KC_U,     KC_I -#define _________________DVORAK_L3_________________        KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X +#define _________________DVORAK_L1_________________       KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y +#define _________________DVORAK_L2_________________       KC_A,    KC_O,    KC_E,   KC_U,     KC_I +#define _________________DVORAK_L3_________________       KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X -#define _________________DVORAK_R1_________________        KC_F,    KC_G,    KC_C,    KC_R,    KC_L -#define _________________DVORAK_R2_________________        KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH -#define _________________DVORAK_R3_________________        KC_B,    KC_M,    KC_W,    KC_V,    KC_Z +#define _________________DVORAK_R1_________________       KC_F,    KC_G,    KC_C,    KC_R,    KC_L +#define _________________DVORAK_R2_________________       KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH +#define _________________DVORAK_R3_________________       KC_B,    KC_M,    KC_W,    KC_V,    KC_Z -#define ________________DVORAK_AU_L1_______________        KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y -#define ________________DVORAK_AU_L2_______________        KC_O,    KC_A,    KC_E,   KC_I,     KC_U -#define ________________DVORAK_AU_L3_______________        KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X +#define ________________DVORAK_AU_L1_______________       KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y +#define ________________DVORAK_AU_L2_______________       KC_O,    KC_A,    KC_E,   KC_I,     KC_U +#define ________________DVORAK_AU_L3_______________       KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X -#define ________________DVORAK_AU_R1_______________        KC_F,    KC_G,    KC_C,    KC_R,    KC_L -#define ________________DVORAK_AU_R2_______________        KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH -#define ________________DVORAK_AU_R3_______________        KC_B,    KC_M,    KC_W,    KC_V,    KC_Z +#define ________________DVORAK_AU_R1_______________       KC_F,    KC_G,    KC_C,    KC_R,    KC_L +#define ________________DVORAK_AU_R2_______________       KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH +#define ________________DVORAK_AU_R3_______________       KC_B,    KC_M,    KC_W,    KC_V,    KC_Z -#define _________________WORKMAN_L1________________        KC_Q,    KC_D,    KC_R,   KC_W,     KC_B -#define _________________WORKMAN_L2________________        KC_A,    KC_S,    KC_H,   KC_T,     KC_G -#define _________________WORKMAN_L3________________        KC_Z,    KC_X,    KC_M,   KC_C,     KC_V +#define _________________WORKMAN_L1________________       KC_Q,    KC_D,    KC_R,   KC_W,     KC_B +#define _________________WORKMAN_L2________________       KC_A,    KC_S,    KC_H,   KC_T,     KC_G +#define _________________WORKMAN_L3________________       KC_Z,    KC_X,    KC_M,   KC_C,     KC_V -#define _________________WORKMAN_R1________________        KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN -#define _________________WORKMAN_R2________________        KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    KC_QUOT -#define _________________WORKMAN_R3________________        KC_K,    KC_L,    KC_COMM, KC_DOT,  KC_SLSH +#define _________________WORKMAN_R1________________       KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN +#define _________________WORKMAN_R2________________       KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    KC_QUOT +#define _________________WORKMAN_R3________________       KC_K,    KC_L,    KC_COMM, KC_DOT,  KC_SLSH -#define _________________NORMAN_L1_________________        KC_Q,    KC_W,    KC_D,    KC_F,    KC_K -#define _________________NORMAN_L2_________________        KC_A,    KC_S,    KC_E,    KC_T,    KC_G -#define _________________NORMAN_L3_________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_B +#define _________________NORMAN_L1_________________       KC_Q,    KC_W,    KC_D,    KC_F,    KC_K +#define _________________NORMAN_L2_________________       KC_A,    KC_S,    KC_E,    KC_T,    KC_G +#define _________________NORMAN_L3_________________       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_Y,    KC_N,    KC_I,    KC_O,    KC_U,    KC_QUOT -#define _________________NORMAN_R3_________________        KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH +#define _________________NORMAN_R1_________________       KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN +#define _________________NORMAN_R2_________________       KC_Y,    KC_N,    KC_I,    KC_O,    KC_U,    KC_QUOT +#define _________________NORMAN_R3_________________       KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH -#define _________________MALTRON_L1________________        KC_Q,    KC_P,    KC_Y,    KC_C,    KC_B -#define _________________MALTRON_L2________________        KC_A,    KC_N,    KC_I,    KC_S,    KC_F -#define _________________MALTRON_L3________________        KC_SCLN, KC_SLSH, KC_J,    KC_G,    KC_COMM +#define _________________MALTRON_L1________________       KC_Q,    KC_P,    KC_Y,    KC_C,    KC_B +#define _________________MALTRON_L2________________       KC_A,    KC_N,    KC_I,    KC_S,    KC_F +#define _________________MALTRON_L3________________       KC_SCLN, KC_SLSH, KC_J,    KC_G,    KC_COMM -#define _________________MALTRON_R1________________        KC_V,    KC_M,    KC_U,    KC_Z,    KC_L -#define _________________MALTRON_R2________________        KC_D,    KC_T,    KC_D,    KC_O,    KC_R,    KC_QUOT -#define _________________MALTRON_R3________________        KC_DOT,  KC_W,    KC_K,    KC_MINS, KC_X +#define _________________MALTRON_R1________________       KC_V,    KC_M,    KC_U,    KC_Z,    KC_L +#define _________________MALTRON_R2________________       KC_D,    KC_T,    KC_D,    KC_O,    KC_R,    KC_QUOT +#define _________________MALTRON_R3________________       KC_DOT,  KC_W,    KC_K,    KC_MINS, KC_X -#define _________________EUCALYN_L1________________        KC_Q,    KC_W,    KC_COMM, KC_DOT,  KC_SCLN -#define _________________EUCALYN_L2________________        KC_A,    KC_O,    KC_E,    KC_I,    KC_U -#define _________________EUCALYN_L3________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_F +#define _________________EUCALYN_L1________________       KC_Q,    KC_W,    KC_COMM, KC_DOT,  KC_SCLN +#define _________________EUCALYN_L2________________       KC_A,    KC_O,    KC_E,    KC_I,    KC_U +#define _________________EUCALYN_L3________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_F -#define _________________EUCALYN_R1________________        KC_M,    KC_R,    KC_D,    KC_Y,    KC_P -#define _________________EUCALYN_R2________________        KC_G,    KC_T,    KC_K,    KC_S,    KC_N,    KC_QUOT -#define _________________EUCALYN_R3________________        KC_B,    KC_H,    KC_J,    KC_L,    KC_SLSH +#define _________________EUCALYN_R1________________       KC_M,    KC_R,    KC_D,    KC_Y,    KC_P +#define _________________EUCALYN_R2________________       KC_G,    KC_T,    KC_K,    KC_S,    KC_N,    KC_QUOT +#define _________________EUCALYN_R3________________       KC_B,    KC_H,    KC_J,    KC_L,    KC_SLSH  // Qwerty-like -#define _____________CARPLAX_QFMLWY_L1_____________        KC_Q,    KC_F,    KC_M,    KC_L,    KC_W -#define _____________CARPLAX_QFMLWY_L2_____________        KC_D,    KC_S,    KC_T,    KC_N,    KC_R -#define _____________CARPLAX_QFMLWY_L3_____________        KC_Z,    KC_V,    KC_G,    KC_C,    KC_X +#define _____________CARPLAX_QFMLWY_L1_____________       KC_Q,    KC_F,    KC_M,    KC_L,    KC_W +#define _____________CARPLAX_QFMLWY_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R +#define _____________CARPLAX_QFMLWY_L3_____________       KC_Z,    KC_V,    KC_G,    KC_C,    KC_X -#define _____________CARPLAX_QFMLWY_R1_____________        KC_Y,    KC_U,    KC_O,    KC_B,    KC_J -#define _____________CARPLAX_QFMLWY_R2_____________        KC_I,    KC_A,    KC_E,    KC_H,    KC_SCLN, KC_QUOT -#define _____________CARPLAX_QFMLWY_R3_____________        KC_P,    KC_K,    KC_COMM, KC_DOT,  KC_SLSH +#define _____________CARPLAX_QFMLWY_R1_____________       KC_Y,    KC_U,    KC_O,    KC_B,    KC_J +#define _____________CARPLAX_QFMLWY_R2_____________       KC_I,    KC_A,    KC_E,    KC_H,    KC_SCLN, KC_QUOT +#define _____________CARPLAX_QFMLWY_R3_____________       KC_P,    KC_K,    KC_COMM, KC_DOT,  KC_SLSH  // Colemak like -#define _____________CARPLAX_QGMLWB_L1_____________        KC_Q,    KC_G,    KC_M,    KC_L,    KC_W -#define _____________CARPLAX_QGMLWB_L2_____________        KC_D,    KC_S,    KC_T,    KC_N,    KC_R -#define _____________CARPLAX_QGMLWB_L3_____________        KC_Z,    KC_X,    KC_C,    KC_F,    KC_J +#define _____________CARPLAX_QGMLWB_L1_____________       KC_Q,    KC_G,    KC_M,    KC_L,    KC_W +#define _____________CARPLAX_QGMLWB_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R +#define _____________CARPLAX_QGMLWB_L3_____________       KC_Z,    KC_X,    KC_C,    KC_F,    KC_J -#define _____________CARPLAX_QGMLWB_R1_____________        KC_B,    KC_Y,    KC_U,    KC_V,    KC_SCLN -#define _____________CARPLAX_QGMLWB_R2_____________        KC_I,    KC_A,    KC_E,    KC_O,    KC_H,    KC_QUOT -#define _____________CARPLAX_QGMLWB_R3_____________        KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH +#define _____________CARPLAX_QGMLWB_R1_____________       KC_B,    KC_Y,    KC_U,    KC_V,    KC_SCLN +#define _____________CARPLAX_QGMLWB_R2_____________       KC_I,    KC_A,    KC_E,    KC_O,    KC_H,    KC_QUOT +#define _____________CARPLAX_QGMLWB_R3_____________       KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH  // colemak like, zxcv fixed -#define _____________CARPLAX_QGMLWY_L1_____________        KC_Q,    KC_G,    KC_M,    KC_L,    KC_W -#define _____________CARPLAX_QGMLWY_L2_____________        KC_D,    KC_S,    KC_T,    KC_N,    KC_R -#define _____________CARPLAX_QGMLWY_L3_____________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_J +#define _____________CARPLAX_QGMLWY_L1_____________       KC_Q,    KC_G,    KC_M,    KC_L,    KC_W +#define _____________CARPLAX_QGMLWY_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R +#define _____________CARPLAX_QGMLWY_L3_____________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_J -#define _____________CARPLAX_QGMLWY_R1_____________        KC_Y,    KC_F,    KC_U,    KC_B,    KC_SCLN -#define _____________CARPLAX_QGMLWY_R2_____________        KC_I,    KC_A,    KC_E,    KC_O,    KC_H,    KC_QUOT -#define _____________CARPLAX_QGMLWY_R3_____________        KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH +#define _____________CARPLAX_QGMLWY_R1_____________       KC_Y,    KC_F,    KC_U,    KC_B,    KC_SCLN +#define _____________CARPLAX_QGMLWY_R2_____________       KC_I,    KC_A,    KC_E,    KC_O,    KC_H,    KC_QUOT +#define _____________CARPLAX_QGMLWY_R3_____________       KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH  // teeheehee -#define _____________CARPLAX_TNWCLR_L1_____________        KC_T,    KC_N,    KC_W,    KC_C,    KC_L -#define _____________CARPLAX_TNWCLR_L2_____________        KC_S,    KC_K,    KC_J,    KC_X,    KC_G -#define _____________CARPLAX_TNWCLR_L3_____________        KC_E,    KC_O,    KC_D,    KC_I,    KC_A +#define _____________CARPLAX_TNWCLR_L1_____________       KC_T,    KC_N,    KC_W,    KC_C,    KC_L +#define _____________CARPLAX_TNWCLR_L2_____________       KC_S,    KC_K,    KC_J,    KC_X,    KC_G +#define _____________CARPLAX_TNWCLR_L3_____________       KC_E,    KC_O,    KC_D,    KC_I,    KC_A -#define _____________CARPLAX_TNWCLR_R1_____________        KC_R,    KC_B,    KC_F,    KC_M,    KC_H -#define _____________CARPLAX_TNWCLR_R2_____________        KC_P,    KC_Q,    KC_Z,    KC_V,    KC_SCLN, KC_QUOT -#define _____________CARPLAX_TNWCLR_R3_____________        KC_U,    KC_Y,    KC_COMM, KC_DOT,  KC_SLSH +#define _____________CARPLAX_TNWCLR_R1_____________       KC_R,    KC_B,    KC_F,    KC_M,    KC_H +#define _____________CARPLAX_TNWCLR_R2_____________       KC_P,    KC_Q,    KC_Z,    KC_V,    KC_SCLN, KC_QUOT +#define _____________CARPLAX_TNWCLR_R3_____________       KC_U,    KC_Y,    KC_COMM, KC_DOT,  KC_SLSH -#define _________________WHITE_R1__________________        KC_V,    KC_Y,    KC_D,    KC_COMM, KC_QUOT -#define _________________WHITE_R2__________________        KC_A,    KC_T,    KC_H,    KC_E,    KC_B -#define _________________WHITE_R3__________________        KC_P,    KC_K,    KC_G,    KC_W,    KC_Q +#define _________________WHITE_R1__________________       KC_V,    KC_Y,    KC_D,    KC_COMM, KC_QUOT +#define _________________WHITE_R2__________________       KC_A,    KC_T,    KC_H,    KC_E,    KC_B +#define _________________WHITE_R3__________________       KC_P,    KC_K,    KC_G,    KC_W,    KC_Q -#define _________________WHITE_L1__________________        KC_INT1, KC_J,    KC_M,    KC_L,    KC_U -#define _________________WHITE_L2__________________        KC_MINS, KC_C,    KC_S,    KC_N,    KC_O,    KC_I -#define _________________WHITE_L3__________________        KC_X,    KC_R,    KC_F,    KC_DOT,  KC_Z +#define _________________WHITE_L1__________________       KC_INT1, KC_J,    KC_M,    KC_L,    KC_U +#define _________________WHITE_L2__________________       KC_MINS, KC_C,    KC_S,    KC_N,    KC_O,    KC_I +#define _________________WHITE_L3__________________       KC_X,    KC_R,    KC_F,    KC_DOT,  KC_Z -#define _________________HALMAK_L1_________________        KC_W,    KC_L,    KC_R,    KC_B,    KC_Z -#define _________________HALMAK_L2_________________        KC_S,    KC_H,    KC_N,    KC_T,    KC_COMM -#define _________________HALMAK_L3_________________        KC_F,    KC_M,    KC_V,    KC_V,    KC_SLASH +#define _________________HALMAK_L1_________________       KC_W,    KC_L,    KC_R,    KC_B,    KC_Z +#define _________________HALMAK_L2_________________       KC_S,    KC_H,    KC_N,    KC_T,    KC_COMM +#define _________________HALMAK_L3_________________       KC_F,    KC_M,    KC_V,    KC_V,    KC_SLASH -#define _________________HALMAK_R1_________________        KC_SCLN, KC_Q,    KC_U,    KC_D,    KC_J -#define _________________HALMAK_R2_________________        KC_DOT,  KC_A,    KC_E,    KC_O,    KC_I,    KC_QUOTE -#define _________________HALMAK_R3_________________        KC_G,    KC_P,    KC_X,    KC_K,    KC_Y +#define _________________HALMAK_R1_________________       KC_SCLN, KC_Q,    KC_U,    KC_D,    KC_J +#define _________________HALMAK_R2_________________       KC_DOT,  KC_A,    KC_E,    KC_O,    KC_I,    KC_QUOTE +#define _________________HALMAK_R3_________________       KC_G,    KC_P,    KC_X,    KC_K,    KC_Y -#define _________________HALMAK_L1_________________        KC_W,    KC_L,    KC_R,    KC_B,    KC_Z -#define _________________HALMAK_L2_________________        KC_S,    KC_H,    KC_N,    KC_T,    KC_COMM -#define _________________HALMAK_L3_________________        KC_F,    KC_M,    KC_V,    KC_V,    KC_SLASH +#define _________________HALMAK_L1_________________       KC_W,    KC_L,    KC_R,    KC_B,    KC_Z +#define _________________HALMAK_L2_________________       KC_S,    KC_H,    KC_N,    KC_T,    KC_COMM +#define _________________HALMAK_L3_________________       KC_F,    KC_M,    KC_V,    KC_V,    KC_SLASH -#define _________________HALMAK_R1_________________        KC_SCLN, KC_Q,    KC_U,    KC_D,    KC_J -#define _________________HALMAK_R2_________________        KC_DOT,  KC_A,    KC_E,    KC_O,    KC_I,    KC_QUOTE -#define _________________HALMAK_R3_________________        KC_G,    KC_P,    KC_X,    KC_K,    KC_Y +#define _________________HALMAK_R1_________________       KC_SCLN, KC_Q,    KC_U,    KC_D,    KC_J +#define _________________HALMAK_R2_________________       KC_DOT,  KC_A,    KC_E,    KC_O,    KC_I,    KC_QUOTE +#define _________________HALMAK_R3_________________       KC_G,    KC_P,    KC_X,    KC_K,    KC_Y  #define ________________NUMBER_LEFT________________       KC_1,    KC_2,    KC_3,    KC_4,    KC_5 @@ -181,35 +181,35 @@ NOTE: These are all the same length.  If you do a search/replace  #define _________________FUNC_LEFT_________________       KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5  #define _________________FUNC_RIGHT________________       KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10 -#define ___________________BLANK___________________        _______, _______, _______, _______, _______ +#define ___________________BLANK___________________       _______, _______, _______, _______, _______ -#define _________________LOWER_L1__________________        KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC -#define _________________LOWER_L2__________________        _________________FUNC_LEFT_________________ -#define _________________LOWER_L3__________________        _________________FUNC_RIGHT________________ +#define _________________LOWER_L1__________________       KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC +#define _________________LOWER_L2__________________       _________________FUNC_LEFT_________________ +#define _________________LOWER_L3__________________       _________________FUNC_RIGHT________________ -#define _________________LOWER_R1__________________        KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN -#define _________________LOWER_R2__________________        _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR -#define _________________LOWER_R3__________________        _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END +#define _________________LOWER_R1__________________       KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN +#define _________________LOWER_R2__________________       _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR +#define _________________LOWER_R3__________________       _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END -#define _________________RAISE_L1__________________        ________________NUMBER_LEFT________________ -#define _________________RAISE_L2__________________        ___________________BLANK___________________ -#define _________________RAISE_L3__________________        ___________________BLANK___________________ +#define _________________RAISE_L1__________________       ________________NUMBER_LEFT________________ +#define _________________RAISE_L2__________________       ___________________BLANK___________________ +#define _________________RAISE_L3__________________       ___________________BLANK___________________ -#define _________________RAISE_R1__________________        ________________NUMBER_RIGHT_______________ -#define _________________RAISE_R2__________________        _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC -#define _________________RAISE_R3__________________        _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT +#define _________________RAISE_R1__________________       ________________NUMBER_RIGHT_______________ +#define _________________RAISE_R2__________________       _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC +#define _________________RAISE_R3__________________       _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT -#define _________________ADJUST_L1_________________        RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG -#define _________________ADJUST_L2_________________        MU_TOG , CK_TOGG, AU_ON,   AU_OFF,  CG_NORM -#define _________________ADJUST_L3_________________        RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T +#define _________________ADJUST_L1_________________       RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG +#define _________________ADJUST_L2_________________       MU_TOG , CK_TOGG, AU_ON,   AU_OFF,  CG_NORM +#define _________________ADJUST_L3_________________       RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T -#define _________________ADJUST_R1_________________        KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5 -#define _________________ADJUST_R2_________________        CG_SWAP, QWERTY,  COLEMAK, DVORAK,  WORKMAN -#define _________________ADJUST_R3_________________        MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT +#define _________________ADJUST_R1_________________       KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5 +#define _________________ADJUST_R2_________________       CG_SWAP, DEFLYR1, DEFLYR2, DEFLYR3, DEFLYR4 +#define _________________ADJUST_R3_________________       MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT  // clang-format on | 
