diff options
44 files changed, 2513 insertions, 753 deletions
| diff --git a/keyboards/c39/keymaps/drashna/keymap.c b/keyboards/c39/keymaps/drashna/keymap.c index 3fd3ef35eb..b5d11104d3 100755 --- a/keyboards/c39/keymaps/drashna/keymap.c +++ b/keyboards/c39/keymaps/drashna/keymap.c @@ -24,14 +24,15 @@   * of use. K## is a placeholder to pass through the individual keycodes   */  // clang-format off +#define LAYOUT_wrapper(...)            LAYOUT(__VA_ARGS__)  #define LAYOUT_base( \      K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ -    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ +    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \      K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \    ) \    LAYOUT_wrapper( \      KC_ESC,  K01,    K02,     K03,      K04,     K05,     KC_NO,   K06,     K07,     K08,     K09,     K0A,     KC_DEL, \ -    ALT_T(KC_TAB), K11, K12,  K13,      K14,     K15,     KC_BSPC, K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \ +    ALT_T(KC_TAB), K11, K12,  K13,      K14,     K15,     KC_BSPC, K16,     K17,     K18,     K19,     K1A, RALT_T(K1B), \      KC_MLSF, CTL_T(K21), K22, K23,   K24, LT(_LOWER,K25), KC_SPC, LT(_RAISE,K26), K27, K28,   K29, RCTL_T(K2A), KC_ENT \    )  #define LAYOUT_base_wrapper(...)       LAYOUT_base(__VA_ARGS__) diff --git a/keyboards/gergo/keymaps/drashna/keymap.c b/keyboards/gergo/keymaps/drashna/keymap.c index 7258d350d9..ecf5f39031 100644 --- a/keyboards/gergo/keymaps/drashna/keymap.c +++ b/keyboards/gergo/keymaps/drashna/keymap.c @@ -24,14 +24,15 @@   * of use. K## is a placeholder to pass through the individual keycodes   */  // clang-format off +#define LAYOUT_gergo_wrapper(...)            LAYOUT_gergo(__VA_ARGS__)  #define LAYOUT_gergo_base( \      K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ -    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ +    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \      K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \    ) \    LAYOUT_gergo_wrapper( \      KC_ESC,  K01,    K02,     K03,      K04,     K05,                                                K06,     K07,     K08,     K09,     K0A,    KC_PIPE,      \ -    LALT_T(KC_TAB), K11, K12, K13,      K14,     K15,     _______,                         _______,  K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \ +    LALT_T(KC_TAB), K11, K12, K13,      K14,     K15,     _______,                         _______,  K16,     K17,     K18,     K19,     K1A, RALT_T(K1B), \      OS_LSFT, CTL_T(K21), K22, K23,      K24,     K25,     _______, _______,       _______, _______,  K26,     K27,     K28,     K29, RCTL_T(K2A), OS_RSFT,      \                                         KC_GRV,   KC_SPC,  BK_LWER, OS_LALT,       OS_RGUI, DL_RAIS, KC_ENT, _______                            \      ) diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c index d931fd940d..69f7500957 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c @@ -85,7 +85,11 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) {  #ifdef POINTING_DEVICE_ENABLE      if (keycode == DPI_CONFIG && record->event.pressed) { -        keyboard_config.dpi_config = (keyboard_config.dpi_config + 1) % DPI_OPTION_SIZE; +        if ((get_mods()|get_oneshot_mods()) & MOD_MASK_SHIFT) { +            keyboard_config.dpi_config = (keyboard_config.dpi_config - 1) % DPI_OPTION_SIZE; +        } else { +            keyboard_config.dpi_config = (keyboard_config.dpi_config + 1) % DPI_OPTION_SIZE; +        }          eeconfig_update_kb(keyboard_config.raw);          trackball_set_cpi(dpi_array[keyboard_config.dpi_config]);      } diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h index 6d89314a2c..b9b27f0b73 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h @@ -62,6 +62,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define BOOTMAGIC_LITE_COLUMN_RIGHT 5  #define C6_AUDIO +#define B7_AUDIO  #define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 4095  #define DYNAMIC_KEYMAP_LAYER_COUNT 16 diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h index 73bf32b25e..41b2e07c70 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h @@ -18,9 +18,10 @@  // #define USE_I2C  #define SELECT_SOFT_SERIAL_SPEED 0 -#define SERIAL_USE_MULTI_TRANSACTION - +// #define SERIAL_USE_MULTI_TRANSACTION +#define SPLIT_MODS_ENABLE  #define EE_HANDS +  #define TRACKBALL_DPI_OPTIONS \      { 1200, 1800, 2600, 3400 } @@ -35,8 +36,6 @@  #define SOLENOID_DEFAULT_DWELL 8  #define OLED_DISPLAY_128X64 -#define OLED_TIMEOUT 0  #define OLED_BRIGHTNESS 100 -#define SPLIT_MODS_ENABLE  #define MK_KINETIC_SPEED diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c index f8803edb9c..5a1bb79fe2 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c @@ -16,24 +16,21 @@  #include "drashna.h" -#define TG_DBLO TG(_DIABLO) - -  // clang-format off  #define LAYOUT_5x6_right_trackball_wrapper(...) LAYOUT_5x6_right_trackball(__VA_ARGS__)  #define LAYOUT_5x6_right_trackball_base( \      K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ -    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ +    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \      K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \    ) \    LAYOUT_5x6_right_trackball_wrapper( \ -     KC_GRV,  ________________NUMBER_LEFT________________,            ________________NUMBER_RIGHT_______________, KC_MINS, \ -     KC_ESC,  K01,    K02,      K03,     K04,     K05,                K06,     K07,     K08,     K09,     K0A,     KC_BSLS, \ -     LALT_T(KC_TAB), K11, K12,  K13,     K14,     K15,                K16,     K17,     K18,     K19,     K1A,     RALT_T(KC_QUOT), \ +     KC_ESC,  ________________NUMBER_LEFT________________,            ________________NUMBER_RIGHT_______________, KC_MINS, \ +     SH_TT,   K01,    K02,      K03,     K04,     K05,                K06,     K07,     K08,     K09,     K0A,     SH_TT, \ +     LALT_T(KC_TAB), K11, K12,  K13,     K14,     K15,                K16,     K17,     K18,     K19,     K1A,     RALT_T(K1B), \       OS_LSFT, CTL_T(K21), K22,  K23,     K24,     K25,                K26,     K27,     K28,     K29, RCTL_T(K2A), OS_RSFT, \                         OS_LALT, OS_LGUI,                                                TG_GAME, TG_DBLO, \                                  OS_LGUI, KC_GRV,                                        OS_RGUI,  \ -                                         KC_SPC,  _______,                     KC_ENT,  \ +                                         KC_SPC,  TT(_MOUSE),                     KC_ENT,  \                                           BK_LWER, MO(_MOUSE),      MO(_MOUSE), DL_RAIS  \    )  #define LAYOUT_5x6_right_trackball_base_wrapper(...)       LAYOUT_5x6_right_trackball_base(__VA_ARGS__) @@ -149,13 +146,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {                                                       _______, _______,    KC_NUKE, _______      ),  }; -// clang-format off - +// clang-format on  #ifdef POINTING_DEVICE_ENABLE -static uint16_t mouse_timer = 0; -static uint16_t mouse_debounce_timer = 0; +static uint16_t mouse_timer           = 0; +static uint16_t mouse_debounce_timer  = 0;  static uint8_t  mouse_keycode_tracker = 0; +bool            tap_toggling          = false;  void process_mouse_user(report_mouse_t* mouse_report, int16_t x, int16_t y) {      if ((x || y) && timer_elapsed(mouse_timer) > 125) { @@ -164,29 +161,64 @@ void process_mouse_user(report_mouse_t* mouse_report, int16_t x, int16_t y) {              layer_on(_MOUSE);          }      } -    if (timer_elapsed(mouse_debounce_timer) > 125 || layer_state_is(_GAMEPAD) ) { + +#    ifdef TAPPING_TERM_PER_KEY +    if (timer_elapsed(mouse_debounce_timer) > get_tapping_term(KC_BTN1, NULL) +#    else +    if (timer_elapsed(mouse_debounce_timer) > TAPPING_TERM +#    endif +        || layer_state_is(_GAMEPAD)) {          mouse_report->x = x;          mouse_report->y = y;      } +#    ifdef OLED_DRIVER_ENABLE +    if (x || y) oled_timer = timer_read32(); +#    endif  }  void matrix_scan_keymap(void) { -    if (timer_elapsed(mouse_timer) > 650 && layer_state_is(_MOUSE) && !mouse_keycode_tracker) { +    if (timer_elapsed(mouse_timer) > 650 && layer_state_is(_MOUSE) && !mouse_keycode_tracker && !tap_toggling) {          layer_off(_MOUSE);      } +    if (tap_toggling) { +        if (!layer_state_is(_MOUSE)) { +            layer_on(_MOUSE); +        } +    }  } -bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { -    switch(keycode){ +bool process_record_keymap(uint16_t keycode, keyrecord_t* record) { +    switch (keycode) { +        case TT(_MOUSE): { +            if (record->event.pressed) { +                mouse_keycode_tracker++; +            } else { +#    if TAPPING_TOGGLE != 0 +                if (record->tap.count == TAPPING_TOGGLE) { +                    tap_toggling ^= 1; +#        if TAPPING_TOGGLE == 1 +                    if (!tap_toggling) mouse_keycode_tracker -= record->tap.count + 1; +#        else +                    if (!tap_toggling) mouse_keycode_tracker -= record->tap.count; +#        endif +                } else { +                    mouse_keycode_tracker--; +                } +#    endif +            } +            mouse_timer = timer_read(); +            break; +        }          case MO(_MOUSE):          case DPI_CONFIG: -        case KC_MS_UP...KC_MS_WH_RIGHT: +        case KC_MS_UP ... KC_MS_WH_RIGHT:              record->event.pressed ? mouse_keycode_tracker++ : mouse_keycode_tracker--;              mouse_timer = timer_read();              break;          default:              if (layer_state_is(_MOUSE) && !mouse_keycode_tracker) {                  layer_off(_MOUSE); +                mouse_keycode_tracker = 0;              }              mouse_debounce_timer = timer_read();              break; diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk index be584e8c4d..9999c0ddf4 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk @@ -5,5 +5,5 @@ AUDIO_ENABLE                 = yes  TAP_DANCE_ENABLE             = yes  UNICODE_ENABLE               = yes  OLED_DRIVER_ENABLE           = yes - +WPM_ENABLE                   = yes  # DEBOUNCE_TYPE = sym_eager_pk diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c index 20216a21dd..5df90258bb 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c @@ -77,7 +77,8 @@ typedef struct _I2C_slave_buffer_t {      bool          oled_on;      layer_state_t t_layer_state;      layer_state_t t_default_layer_state; -} I2C_slave_buffer_t; +    bool          is_rgb_matrix_suspended; +} __attribute__((packed)) I2C_slave_buffer_t;  static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; @@ -93,9 +94,10 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re  #    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_buffent, oled_on) -#    define I2C_LAYER_STATE_START offsetof(I2C_slave_buffent, t_layer_state) -#    define I2C_DEFAULT_LAYER_STATE_START offsetof(I2C_slave_buffent, t_default_layer_state) +#    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_RGB_MATRIX_SUSPEND_START offsetof(I2C_slave_buffer_t, is_rgb_matrix_suspended)  #    define TIMEOUT 100 @@ -196,9 +198,19 @@ bool transport_master(matrix_row_t matrix[]) {      }  #    ifdef OLED_DRIVER_ENABLE -    if (is_oled_on() != i2c_buffer->oled_on) { -        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LAYER_STATE_START, (void *)&is_oled_on(), sizeof(bool), TIMEOUT) >= 0) { -            i2c_buffer->oled_on = is_oled_on(); +    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 + +#    ifdef RGB_MATRIX_ENABLE +    bool sus_state = rgb_matrix_get_suspend_state(); +    if (sus_state != i2c_buffer->is_rgb_matrix_suspended) { +        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_SUSPEND_START, (void *)&sus_state, sizeof(sus_state), TIMEOUT) >= 0) { +            i2c_buffer->is_rgb_matrix_suspended = sus_state;          }      }  #    endif @@ -255,10 +267,10 @@ void transport_slave(matrix_row_t matrix[]) {  #    endif      if (layer_state != i2c_buffer->t_layer_state) { -        layer_state_set(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_set(i2c_buffer->t_default_layer_state); +        default_layer_state = i2c_buffer->t_default_layer_state;      }  #    ifdef OLED_DRIVER_ENABLE @@ -268,6 +280,10 @@ void transport_slave(matrix_row_t matrix[]) {          oled_off();      }  #    endif + +#    ifdef RGB_MATRIX_ENABLE +    rgb_matrix_set_suspend_state(i2c_buffer->is_rgb_matrix_suspended); +#    endif  }  void transport_master_init(void) { i2c_init(); } @@ -286,7 +302,7 @@ typedef struct _Serial_s2m_buffer_t {  #    endif      int8_t       mouse_x;      int8_t       mouse_y; -} Serial_s2m_buffer_t; +} __attribute__((packed)) Serial_s2m_buffer_t;  typedef struct _Serial_m2s_buffer_t {  #    ifdef SPLIT_MODS_ENABLE @@ -309,7 +325,8 @@ typedef struct _Serial_m2s_buffer_t {      bool          oled_on;      layer_state_t t_layer_state;      layer_state_t t_default_layer_state; -} Serial_m2s_buffer_t; +    bool          is_rgb_matrix_suspended; +} __attribute__((packed)) Serial_m2s_buffer_t;  #    if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)  // When MCUs on both sides drive their respective RGB LED chains, @@ -434,10 +451,14 @@ bool transport_master(matrix_row_t matrix[]) {      }  #    endif -    serial_m2s_buffer.t_layer_state         = layer_state; -    serial_m2s_buffer.t_default_layer_state = default_layer_state; +    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(); +    serial_m2s_buffer.oled_on                 = is_oled_on(); +#    endif + +#    ifdef RGB_MATRIX_ENABLE +    serial_m2s_buffer.is_rgb_matrix_suspended = rgb_matrix_get_suspend_state();  #    endif      return true; @@ -484,10 +505,10 @@ void transport_slave(matrix_row_t matrix[]) {  #    endif      if (layer_state != serial_m2s_buffer.t_layer_state) { -        layer_state_set(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_set(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) { @@ -496,6 +517,10 @@ void transport_slave(matrix_row_t matrix[]) {          oled_off();      }  #    endif + +#    ifdef RGB_MATRIX_ENABLE +    rgb_matrix_set_suspend_state(serial_m2s_buffer.is_rgb_matrix_suspended); +#    endif  }  #endif diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk index 19b330cdc5..99275c15ae 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk @@ -26,5 +26,5 @@ POINTING_DEVICE_ENABLE = yes  SPLIT_KEYBOARD = yes  SPLIT_TRANSPORT = custom -SRC += pointer_transport.c pmw3360.c -QUANTUM_LIB_SRC += serial.c i2c_master.c i2c_slave.c spi_master.c +SRC += pmw3360.c +QUANTUM_LIB_SRC += pointer_transport.c serial.c i2c_master.c i2c_slave.c spi_master.c diff --git a/keyboards/keebio/iris/keymaps/drashna/keymap.c b/keyboards/keebio/iris/keymaps/drashna/keymap.c index bc34ba822f..1dc6f0e528 100644 --- a/keyboards/keebio/iris/keymaps/drashna/keymap.c +++ b/keyboards/keebio/iris/keymaps/drashna/keymap.c @@ -25,15 +25,16 @@   */  // clang-format off +#define LAYOUT_wrapper(...)            LAYOUT(__VA_ARGS__)  #define LAYOUT_iris_base( \      K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ -    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ +    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \      K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \    ) \    LAYOUT_wrapper( \       KC_ESC,  ________________NUMBER_LEFT________________,                       ________________NUMBER_RIGHT_______________, KC_MINS, \       LALT_T(KC_TAB), K01, K02, K03,      K04,     K05,                           K06,     K07,     K08,     K09,     K0A,     KC_BSLS, \ -     KC_C1R3, K11,    K12,     K13,      K14,     K15,                           K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \ +     KC_C1R3, K11,    K12,     K13,      K14,     K15,                           K16,     K17,     K18,     K19,     K1A, RALT_T(K1B), \       OS_LSFT, CTL_T(K21), K22, K23,      K24,     K25,     OS_LALT,     OS_RGUI, K26,     K27,     K28,     K29, RCTL_T(K2A), OS_RSFT, \                               KC_GRV, KC_SPC,  LT(_LOWER,KC_BSPC),         LT(_RAISE,KC_DEL),  KC_ENT,  RAISE                           \    ) diff --git a/keyboards/keebio/viterbi/keymaps/drashna/keymap.c b/keyboards/keebio/viterbi/keymaps/drashna/keymap.c index 99e06b4def..0c4563e636 100644 --- a/keyboards/keebio/viterbi/keymaps/drashna/keymap.c +++ b/keyboards/keebio/viterbi/keymaps/drashna/keymap.c @@ -17,9 +17,7 @@  #include "drashna.h"  // Fillers to make layering more clear -#define DIABLO TG(_DIABLO) -#define GAMEPAD TG(_GAMEPAD) -#define MEDIA TT(_MEDIA) +#define TT_MDIA TT(_MEDIA)  // enum more_custom_keycodes {  //  KC_P00 = NEW_SAFE_RANGE @@ -29,15 +27,15 @@  const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {    [_NUMLOCK] = LAYOUT_ortho_5x7( -      KC_NO,  DIABLO,  GAMEPAD, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS, -      MEDIA,   KC_CALC, XXXXXXX, KC_P7,   KC_P8,   KC_P9,   KC_PAST, +      KC_NO,   TG_DBLO, TG_GAME, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS, +      TT_MDIA, KC_CALC, XXXXXXX, KC_P7,   KC_P8,   KC_P9,   KC_PAST,        KC_HOME, KC_DEL,  KC_PGUP, KC_P4,   KC_P5,   KC_P6,   KC_PMNS,        KC_END,  KC_UP,   KC_PGDN, KC_P1,   KC_P2,   KC_P3,   KC_PPLS,        KC_LEFT, KC_DOWN, KC_RGHT, KC_P0,   KC_PDOT, KC_COLN, KC_PENT    ),    [_DIABLO] = LAYOUT_ortho_5x7( -      KC_ESC,  DIABLO,  KC_V,    KC_D,    XXXXXXX, XXXXXXX, KC_L, +      KC_ESC,  _______, KC_V,    KC_D,    XXXXXXX, XXXXXXX, KC_L,        KC_TAB,  KC_S,    KC_F,    KC_I,    KC_M,    KC_T,    KC_J,        KC_Q,    KC_1,    KC_2,    KC_3,    KC_4,    KC_G,    KC_F,        KC_LCTL, KC_D3_3, KC_D3_3, KC_D3_3, KC_D3_3, KC_Z,    KC_DIABLO_CLEAR, @@ -45,16 +43,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {    ),    [_GAMEPAD] = LAYOUT_ortho_5x7(  // Game pad layout designed primarily for Overwatch -      KC_NO,  KC_ESC,  GAMEPAD, KC_1,    KC_2,    KC_3,    KC_4, -      MEDIA,   KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T, +      KC_NO,   KC_ESC,  _______, KC_1,    KC_2,    KC_3,    KC_4, +      TT_MDIA, KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,        KC_Z,    KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,        KC_Y,    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,        KC_F1,   KC_U,    KC_I,    KC_Y,    KC_V,    KC_SPC,  KC_V    ),    [_MEDIA] = LAYOUT_ortho_5x7( -      KC_MAKE, KC_RESET,MU_TOG,  AU_ON,   AU_OFF,  CK_TOGG, RGB_SAD, -      MEDIA,   EEP_RST,    KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI, +      KC_MAKE, RESET,   MU_TOG,  AU_ON,   AU_OFF,  CK_TOGG, RGB_SAD, +      _______, EEP_RST, KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI,        RGB_TOG, RGB_MOD, RGB_RMOD,RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_HUD,        KC_MPLY, KC_MPRV, KC_MNXT, RGB_M_X, RGB_M_G, RGB_M_P, RGB_HUI,        KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI diff --git a/keyboards/kyria/keymaps/drashna/config.h b/keyboards/kyria/keymaps/drashna/config.h index d5fcf90889..afd17b4360 100644 --- a/keyboards/kyria/keymaps/drashna/config.h +++ b/keyboards/kyria/keymaps/drashna/config.h @@ -20,8 +20,6 @@  #ifdef OLED_DRIVER_ENABLE  #    define OLED_DISPLAY_128X64 -#    define OLED_FONT_H "font_gmk_bad.h" -#    define OLED_DISABLE_TIMEOUT  #    define OLED_SCROLL_TIMEOUT_RIGHT 60000  #endif diff --git a/keyboards/kyria/keymaps/drashna/keymap.c b/keyboards/kyria/keymaps/drashna/keymap.c index 08f32812e6..ba1b038881 100644 --- a/keyboards/kyria/keymaps/drashna/keymap.c +++ b/keyboards/kyria/keymaps/drashna/keymap.c @@ -31,15 +31,16 @@ uint8_t is_master;   */  // clang-format off +#define LAYOUT_wrapper(...)            LAYOUT(__VA_ARGS__)  #define LAYOUT_kyria_base( \      K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ -    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ +    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \      K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \    ) \    LAYOUT_wrapper( \        KC_ESC,  K01,     K02,     K03,     K04,     K05,                                             K06,     K07,     K08,     K09,     K0A,     KC_MINS, \ -   LALT_T(KC_TAB), K11, K12,     K13,     K14,     K15,                                             K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \ -      OS_LSFT, CTL_T(K21), K22,  K23,     K24,     K25,  TG(_GAMEPAD), MEH(KC_MINS),  TG(_DIABLO), KC_CAPS,  K26,     K27,     K28,     K29, RCTL_T(K2A), OS_RSFT, \ +   LALT_T(KC_TAB), K11, K12,     K13,     K14,     K15,                                             K16,     K17,     K18,     K19,     K1A, RALT_T(K1B), \ +      OS_LSFT, CTL_T(K21), K22,  K23,     K24,     K25,  TG_GAME, MEH(KC_MINS),   TG_DBLO, KC_CAPS, K26,     K27,     K28,     K29, RCTL_T(K2A), OS_RSFT, \                                   KC_MUTE, OS_LALT, KC_GRV,  KC_SPC,  BK_LWER,     DL_RAIS, KC_ENT,  OS_RGUI, UC(0x03A8), UC(0x2E2E) \      )  /* Re-pass though to allow templates to be used */ @@ -112,7 +113,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {      [_DIABLO] = LAYOUT_wrapper(          KC_ESC,  KC_S,    KC_I,    KC_F,    KC_M,    KC_T,                                          KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NO,   KC_NO,          KC_TAB,  KC_1,    KC_2,    KC_3,    KC_4,    KC_G,                                          KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO, -        KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z,    KC_J,    KC_L,      TG(_DIABLO), KC_NO, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO, +        KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z,    KC_J,    KC_L,        TG_DBLO, KC_NO, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,                             KC_DIABLO_CLEAR, KC_J,    KC_NO, SFT_T(KC_SPACE), ALT_T(KC_Q),   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO      ),      [_LOWER] = LAYOUT_wrapper( diff --git a/keyboards/kyria/keymaps/drashna/rules.mk b/keyboards/kyria/keymaps/drashna/rules.mk index 756c044fa4..7a6a86e9fa 100644 --- a/keyboards/kyria/keymaps/drashna/rules.mk +++ b/keyboards/kyria/keymaps/drashna/rules.mk @@ -1,7 +1,7 @@  OLED_DRIVER_ENABLE = yes   # Enables the use of OLED displays  ENCODER_ENABLE = yes       # ENables the use of one or more encoders  RGBLIGHT_ENABLE = yes      # Enable keyboard RGB underglow -RGBLIGHT_STARTUP_ANIMATION = yes +RGBLIGHT_STARTUP_ANIMATION = no  BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration  MOUSEKEY_ENABLE = no       # Mouse keys diff --git a/keyboards/moonlander/keymaps/drashna/keymap.c b/keyboards/moonlander/keymaps/drashna/keymap.c index a12be12eae..57c69df480 100644 --- a/keyboards/moonlander/keymaps/drashna/keymap.c +++ b/keyboards/moonlander/keymaps/drashna/keymap.c @@ -27,13 +27,13 @@ enum more_custom_keycodes { KC_SWAP_NUM = NEW_SAFE_RANGE };  #define LAYOUT_moonlander_base( \      K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ -    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ +    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \      K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \      ) \      LAYOUT_moonlander_wrapper( \          KC_ESC,  ________________NUMBER_LEFT________________, UC_FLIP,        UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, \ -        KC_TAB,  K01,     K02,     K03,     K04,     K05,   TG(_DIABLO),TG(_DIABLO),   K06,     K07,     K08,     K09,     K0A,     KC_BSLS, \ -        KC_C1R3, K11,     K12,     K13,     K14,     K15,  TG(_GAMEPAD),TG(_GAMEPAD),  K16,     K17,     K18,     K19,     K1A,     RALT_T(KC_QUOT), \ +        KC_TAB,  K01,     K02,     K03,     K04,     K05,   TG_DBLO,TG_DBLO,   K06,     K07,     K08,     K09,     K0A,     KC_BSLS, \ +        KC_C1R3, K11,     K12,     K13,     K14,     K15,  TG_GAME,TG_GAME,  K16,     K17,     K18,     K19,     K1A,     RALT_T(K1B), \          KC_MLSF, CTL_T(K21), K22,  K23,     K24,     K25,                              K26,     K27,     K28,     K29,  RCTL_T(K2A),KC_MRSF, \          KC_GRV,  OS_MEH,  OS_HYPR, KC_LBRC, KC_RBRC,          KC_NO,          KC_DEL,           KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, UC(0x2E2E), \                                              KC_SPC,  BK_LWER, OS_LALT,        OS_RGUI, DL_RAIS, KC_ENT \ @@ -105,7 +105,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {      [_GAMEPAD] = LAYOUT_moonlander_wrapper(          KC_ESC,  KC_NO,   KC_1,    KC_2,    KC_3,    KC_4, HYPR(KC_Q),                 KC_TRNS, KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NO,   KC_NO,          KC_F1,   KC_K,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                    UC_SHRG, UC_DISA, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO, -        KC_TAB,  KC_G,    KC_A,    KC_S,    KC_D,    KC_F,    KC_TRNS,            TG(_GAMEPAD), KC_I,    KC_O,    KC_NO,   KC_NO,   KC_NO,   KC_NO, +        KC_TAB,  KC_G,    KC_A,    KC_S,    KC_D,    KC_F,    KC_TRNS,            TG_GAME, KC_I,    KC_O,    KC_NO,   KC_NO,   KC_NO,   KC_NO,          KC_LCTL, KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,                                      KC_N,    KC_M,    KC_NO,   KC_NO,   KC_NO,   KC_NO,          KC_GRV,  KC_U,    KC_I,    KC_Y,    KC_T,             KC_PSCR,                 _______,          KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_NO,                                              KC_V,    KC_SPC,  KC_H,                    KC_NO, KC_NO,  KC_SWAP_NUM diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c index 2dbe186343..32b0dcfeba 100644 --- a/keyboards/orthodox/keymaps/drashna/keymap.c +++ b/keyboards/orthodox/keymaps/drashna/keymap.c @@ -8,14 +8,15 @@   * of use. K## is a placeholder to pass through the individual keycodes   */  // clang-format off +#define LAYOUT_wrapper(...)            LAYOUT(__VA_ARGS__)  #define LAYOUT_orthodox_base( \      K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ -    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ +    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \      K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \    ) \    LAYOUT_wrapper( \      KC_ESC,  K01,    K02,     K03,      K04,     K05,                                                             K06,     K07,     K08,     K09,     K0A,     KC_BSPC, \ -    LALT_T(KC_TAB), K11, K12, K13,      K14,     K15,              OS_LALT, OS_LGUI,   OS_RALT, RAISE,            K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \ +    LALT_T(KC_TAB), K11, K12, K13,      K14,     K15,              OS_LALT, OS_LGUI,   OS_RALT, RAISE,            K16,     K17,     K18,     K19,     K1A, RALT_T(K1B), \      KC_MLSF, CTL_T(K21), K22, K23,      K24,     K25,     LOWER,   KC_SPACE,KC_BSPC,   KC_DEL,  KC_ENT,  RAISE,   K26,     K27,     K28,     K29, RCTL_T(K2A), KC_MRSF  \    )  #define LAYOUT_orthodox_base_wrapper(...)       LAYOUT_orthodox_base(__VA_ARGS__) diff --git a/keyboards/splitkb/zima/keymaps/drashna/config.h b/keyboards/splitkb/zima/keymaps/drashna/config.h new file mode 100644 index 0000000000..91d657eda1 --- /dev/null +++ b/keyboards/splitkb/zima/keymaps/drashna/config.h @@ -0,0 +1,32 @@ +/* Copyright 2019 Thomas Baart + * Copyright 2021 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/>. + */ + +#pragma once + +#define OLED_FONT_H "users/drashna/drashna_font.h" +#define OLED_UPDATE_INTERVAL 15 +#define OLED_DISABLE_TIMEOUT +#define OLED_FONT_END 255 +// #    define OLED_FONT_5X5 +// #    define OLED_FONT_AZTECH +// #    define OLED_FONT_BMPLAIN +#    define OLED_FONT_SUPER_DIGG +// #    define OLED_LOGO_GMK_BAD +// #    define OLED_LOGO_HUE_MANITEE +// #    define OLED_LOGO_CORNE +// #    define OLED_LOGO_GOTHAM +#define OLED_LOGO_SCIFI diff --git a/keyboards/splitkb/zima/keymaps/drashna/keymap.c b/keyboards/splitkb/zima/keymaps/drashna/keymap.c new file mode 100644 index 0000000000..9d3919ee28 --- /dev/null +++ b/keyboards/splitkb/zima/keymaps/drashna/keymap.c @@ -0,0 +1,140 @@ +/* Copyright 2019 Thomas Baart + * Copyright 2021 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 QMK_KEYBOARD_H +#include <stdio.h> + +#ifdef HAPTIC_ENABLE +#    include "haptic.h" +extern haptic_config_t haptic_config; +#endif + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +    [0] = LAYOUT_ortho_4x3( /* Base */ +        KC_MUTE, TG(1),   TG(2), +        KC_P7,   KC_P8,   KC_P9, +        KC_P4,   KC_P5,   KC_P6, +        KC_P1,   KC_P2,   KC_P3 +    ), +    [1] = LAYOUT_ortho_4x3( /* Layer 1 */ +        RESET,   _______, XXXXXXX, +        AU_ON,   AU_OFF,  XXXXXXX, +        CK_TOGG, XXXXXXX, CK_UP, +        CK_RST,  XXXXXXX, CK_DOWN +    ), +    [2] = LAYOUT_ortho_4x3( /* Layer 2*/ +        RGB_TOG, RGB_MOD, _______, +        RGB_HUI, RGB_SAI, RGB_VAI, +        RGB_HUD, RGB_SAD, RGB_VAD, +        HPT_TOG, HPT_FBK, HPT_CONT +    ) +}; + + +static bool is_asleep = false; +static uint32_t oled_timer; + +void render_oled_logo(void) { +        // clang-format off +    static const char PROGMEM qmk_logo[] = { +        0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, +        0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, +        0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0}; +    // clang-format on +    oled_write_ln_P(qmk_logo, false); +} + +void render_user_status(void) { +    static const char PROGMEM audio_status[2][3] = {{0xE0, 0xE1, 0}, {0xE2, 0xE3, 0}}; +    oled_write_P(audio_status[is_audio_on()], false); +    static const char PROGMEM audio_clicky_status[2][3] = {{0xF4, 0xF5, 0}, {0xF6, 0xF7, 0}}; +    oled_write_P(audio_clicky_status[is_clicky_on() && is_audio_on()], false); +    static const char PROGMEM rgb_layer_status[2][3] = {{0xEE, 0xEF, 0}, {0xF0, 0xF1, 0}}; +    oled_write_P(rgb_layer_status[rgblight_is_enabled()], false); +    static const char PROGMEM nukem_good[2][3] = {{0xF8, 0xF9, 0}, {0xF6, 0xF7, 0}}; +    oled_write_P(nukem_good[0], haptic_config.enable); +} + +void keyboard_post_init_user(void) { +    oled_scroll_set_speed(0); +} + +void oled_task_user(void) { +    if (is_asleep) { +        oled_off(); +        return; +    } + +    if (timer_elapsed32(oled_timer) < 30000) { +        oled_on(); +        oled_scroll_off(); +        oled_write_P(PSTR("SplitKB's Zima"), false); +        char layer[2] = {0}; +        snprintf(layer, sizeof(layer), "%d", get_highest_layer(layer_state)); +        oled_write_P(PSTR("   L:"), false); +        oled_write_ln(layer, false); +        oled_write_ln_P(PSTR("--------------"), false); +        if (rgblight_is_enabled()) { +            oled_write_P(PSTR("HSV: "), false); +            char rgbs[14]; +            snprintf(rgbs, sizeof(rgbs), "%3d, %3d, %3d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val()); +            oled_write_ln(rgbs, false); +        } else { +            oled_write_ln_P(PSTR("RGB LIGHT DISABLED"), false); +        } +        render_user_status(); +    } else { +        if (timer_elapsed32(oled_timer) < 120000) { +            oled_on(); +            render_oled_logo(); +            oled_scroll_right(); +        } else { +            oled_off(); +        } +    } +} + +void suspend_power_down_user(void) { +    is_asleep = true; +} + +void suspend_wakeup_init_user(void) { +    is_asleep = false; +} + +bool process_record_user(uint16_t keycode, keyrecord_t* record) { +    oled_timer = timer_read32(); + +    return true; +} + + + void encoder_update_user(uint8_t index, bool clockwise) { +    if (clockwise) { +        tap_code16(KC_VOLU); +    } else { +        tap_code16(KC_VOLD); +    } +#    ifdef OLED_DRIVER_ENABLE +    oled_timer = timer_read32(); +#    endif +#    if defined(AUDIO_ENABLE) && defined(AUDIO_CLICKY) +    if (is_audio_on() && is_clicky_on()) clicky_play(); +#    endif +#    ifdef HAPTIC_ENABLE +    if (haptic_config.enable) haptic_play(); +#    endif +} diff --git a/keyboards/splitkb/zima/keymaps/drashna/readme.md b/keyboards/splitkb/zima/keymaps/drashna/readme.md new file mode 100644 index 0000000000..0f78f4bf18 --- /dev/null +++ b/keyboards/splitkb/zima/keymaps/drashna/readme.md @@ -0,0 +1,7 @@ +# The default keymap for zima + +This includes support for the OLED and Encoder.  However, the actual code is found in the `zima.c` file. This can be replaced by adding your own `oled_task_user(void)` and `encoder_update_user` functinons. These will replace what is in the keyboard, and allow you to customize these features.  + +The reason that this is done this way, is so that this functionality will work on the [QMK Configurator](https://config.qmk.fm/#/splitkb/zima/LAYOUT_ortho_4x3) + +For reference, the code used for the oled and encoder defaults is in [zima.c](https://github.com/qmk/qmk_firmware/tree/master/keyboards/splitkb/zima/zima.c). diff --git a/keyboards/splitkb/zima/keymaps/drashna/rules.mk b/keyboards/splitkb/zima/keymaps/drashna/rules.mk new file mode 100644 index 0000000000..b9a1f7f256 --- /dev/null +++ b/keyboards/splitkb/zima/keymaps/drashna/rules.mk @@ -0,0 +1,2 @@ +# is intentional.  won't compile under size, otherwise. +USER_NAME := not_drashna diff --git a/layouts/community/ergodox/drashna/keymap.c b/layouts/community/ergodox/drashna/keymap.c index fb5bcc6bd7..2bcf672a91 100644 --- a/layouts/community/ergodox/drashna/keymap.c +++ b/layouts/community/ergodox/drashna/keymap.c @@ -40,17 +40,20 @@ bool skip_leds = false;   * ease of use. K## is a placeholder to pass through the individual keycodes   */  // clang-format off +#define LAYOUT_ergodox_wrapper(...)          LAYOUT_ergodox(__VA_ARGS__) +#define LAYOUT_ergodox_pretty_wrapper(...)   LAYOUT_ergodox_pretty(__VA_ARGS__) +  #define LAYOUT_ergodox_pretty_base( \      K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ -    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ +    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \      K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \    ) \    LAYOUT_ergodox_pretty_wrapper( \        KC_ESC,  ________________NUMBER_LEFT________________, UC_FLIP,                 UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, \ -      LALT_T(KC_TAB), K01, K02, K03,      K04,     K05,     TG(_DIABLO),         TG(_DIABLO), K06,     K07,     K08,     K09,     K0A,     KC_BSLS, \ -      KC_C1R3, K11,    K12,     K13,      K14,     K15,                                       K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \ -      KC_MLSF, CTL_T(K21), K22, K23,      K24,     K25,     TG(_GAMEPAD),       TG(_GAMEPAD), K26,     K27,     K28,     K29,  RCTL_T(K2A), KC_MRSF, \ -      KC_GRV,  OS_MEH, OS_HYPR, KC_LBRC, KC_RBRC,                                            KC_BTN1, KC_BTN3, KC_BTN2,   PM_SCROLL, PM_PRECISION,        \ +      LALT_T(KC_TAB), K01, K02, K03,      K04,     K05,     TG_DBLO,         TG_DBLO, K06,     K07,     K08,     K09,     K0A,     KC_BSLS, \ +      KC_C1R3, K11,    K12,     K13,      K14,     K15,                                       K16,     K17,     K18,     K19,     K1A, RALT_T(K1B), \ +      KC_MLSF, CTL_T(K21), K22, K23,      K24,     K25,     TG_GAME,       TG_GAME, K26,     K27,     K28,     K29, RCTL_T(K2A), KC_MRSF, \ +      KC_GRV,  OS_MEH, OS_HYPR, KC_LBRC, KC_RBRC,                                            KC_BTN1, KC_BTN3, KC_BTN2,   PM_SCROLL, PM_PRECISION,  \                                                    OS_LALT, OS_LGUI,                 OS_RGUI, CTL_T(KC_ESCAPE),                                      \                                                             KC_APP,                  KC_MENU,                                                        \                                KC_SPC, LT(_LOWER, KC_BSPC), OS_LWR,                  OS_RSE, LT(_RAISE, KC_DEL), KC_ENT                              \ @@ -235,7 +238,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {               KC_ESC,  KC_NO,   KC_1,    KC_2,    KC_3, HYPR(KC_Q), HYPR(KC_GRV),            KC_TRNS, KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NO,   KC_NO,               KC_F1,   KC_K,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                    UC_SHRG, UC_DISA, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,               KC_TAB,  KC_G,    KC_A,    KC_S,    KC_D,    KC_F,                                      KC_I,    KC_O,    KC_NO,   KC_NO,   KC_NO,   KC_NO, -             KC_LCTL, KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_TRNS,            TG(_GAMEPAD), KC_N,    KC_M,    KC_NO,   KC_NO,   KC_NO,   KC_NO, +             KC_LCTL, KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_TRNS,            TG_GAME, KC_N,    KC_M,    KC_NO,   KC_NO,   KC_NO,   KC_NO,               KC_GRV,  KC_U,    KC_I,    KC_Y,    KC_T,                                                        KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_NO,                                                            KC_O,    KC_P,                    MAGIC_TOGGLE_NKRO, LALT(KC_PSCR),                                                                     KC_LGUI,                 KC_HYPR, diff --git a/layouts/community/ortho_4x12/drashna/keymap.c b/layouts/community/ortho_4x12/drashna/keymap.c index d0df7f5c37..61f22dfe95 100644 --- a/layouts/community/ortho_4x12/drashna/keymap.c +++ b/layouts/community/ortho_4x12/drashna/keymap.c @@ -50,14 +50,15 @@ enum planck_keycodes {   * of use. K## is a placeholder to pass through the individual keycodes   */  // clang-format off +#define LAYOUT_ortho_4x12_wrapper(...)       LAYOUT_ortho_4x12(__VA_ARGS__)  #define LAYOUT_ortho_4x12_base( \      K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ -    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ +    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \      K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \    ) \    LAYOUT_ortho_4x12_wrapper( \      KC_ESC,  K01,    K02,     K03,      K04,     K05,     K06,     K07,     K08,     K09,     K0A,     KC_DEL, \ -    LALT_T(KC_TAB), K11, K12, K13,      K14,     K15,     K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \ +    LALT_T(KC_TAB), K11, K12, K13,      K14,     K15,     K16,     K17,     K18,     K19,     K1A, RALT_T(K1B), \      KC_MLSF, CTL_T(K21), K22, K23,      K24,     K25,     K26,     K27,     K28,     K29, RCTL_T(K2A), KC_ENT,  \      BACKLIT, OS_LCTL, OS_LALT, OS_LGUI, PLNK_1,  PLNK_2,  PLNK_3,  PLNK_4,  KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  \    ) diff --git a/layouts/community/ortho_5x12/drashna/keymap.c b/layouts/community/ortho_5x12/drashna/keymap.c index 98c349b2e8..9f6622c7d5 100644 --- a/layouts/community/ortho_5x12/drashna/keymap.c +++ b/layouts/community/ortho_5x12/drashna/keymap.c @@ -24,17 +24,17 @@   * of use. K## is a placeholder to pass through the individual keycodes   */  // clang-format off +#define LAYOUT_ortho_5x12_wrapper(...)       LAYOUT_ortho_5x12(__VA_ARGS__)  #define LAYOUT_ortho_5x12_base( \      K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ -    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ -    K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A,  \ -    K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A  \ +    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \ +    K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \    ) \    LAYOUT_ortho_5x12_wrapper( \ -    KC_ESC,  K01,    K02,     K03,      K04,     K05,     K06,     K07,     K08,     K09,     K0A,     KC_BSPC, \ -    LALT_T(KC_TAB), K11, K12, K13,      K14,     K15,     K16,     K17,     K18,     K19,     K1A,     KC_BSPC, \ -    KC_C1R3, K21,    K22,     K23,      K24,     K25,     K26,     K27,     K28,     K29,     K2A, RALT_T(KC_QUOT), \ -    KC_MLSF, CTL_T(K31), K32, K33,      K34,     K35,     K36,     K37,     K38,     K39, RCTL_T(K3A), KC_ENT,  \ +    KC_ESC,  ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_BSPC, \ +    LALT_T(KC_TAB), K01, K02, K03,      K04,     K05,     K06,     K07,     K08,     K09,     K0A,     KC_BSPC, \ +    KC_C1R3, K11,    K12,     K13,      K14,     K15,     K16,     K17,     K18,     K19,     K1A, RALT_T(K1B), \ +    KC_MLSF, CTL_T(K21), K22, K23,      K24,     K25,     K26,     K27,     K28,     K29, RCTL_T(K2A), KC_ENT,  \      KC_NO,   OS_LCTL, OS_LALT, OS_LGUI, SP_LWER, BK_LWER, DL_RAIS, ET_RAIS, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  \    ) @@ -44,28 +44,24 @@  const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  [_QWERTY] = LAYOUT_ortho_5x12_base_wrapper( -  ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________,    _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,    _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,    _________________QWERTY_L3_________________, _________________QWERTY_R3_________________  ),  [_COLEMAK] = LAYOUT_ortho_5x12_base_wrapper( -  ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________,    _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,    _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,    _________________COLEMAK_L3________________, _________________COLEMAK_R3________________  ),  [_DVORAK] = LAYOUT_ortho_5x12_base_wrapper( -  ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________,    _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,    _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,    _________________DVORAK_L3_________________, _________________DVORAK_R3_________________  ),  [_WORKMAN] = LAYOUT_ortho_5x12_base_wrapper( -  ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________,    _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,    _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,    _________________WORKMAN_L3________________, _________________WORKMAN_R3________________ diff --git a/layouts/community/ortho_5x12/drashna/rules.mk b/layouts/community/ortho_5x12/drashna/rules.mk index 2c59c614fe..af68e04c01 100644 --- a/layouts/community/ortho_5x12/drashna/rules.mk +++ b/layouts/community/ortho_5x12/drashna/rules.mk @@ -9,6 +9,8 @@ NKRO_ENABLE       = yes  ifeq ($(strip $(KEYBOARD)), fractal)      RGB_MATRIX_ENABLE           = no      AUDIO_ENABLE                = yes +    AUDIO_SUPPORTED             = yes +    RGBLIGHT_SUPPORTED          = yes      RGBLIGHT_ENABLE             = yes      RGBLIGHT_TWINKLE            = yes      RGBLIGHT_STARTUP_ANIMATION  = yes diff --git a/layouts/community/split_3x6_3/drashna/chconf.h b/layouts/community/split_3x6_3/drashna/chconf.h new file mode 100644 index 0000000000..ffcfb19896 --- /dev/null +++ b/layouts/community/split_3x6_3/drashna/chconf.h @@ -0,0 +1,9 @@ + +#define CH_CFG_ST_RESOLUTION                16 +#define CH_CFG_ST_FREQUENCY                 10000 + +#if __has_include("platforms/chibios/common/configs/chconf.h") +#    include_next "platforms/chibios/common/configs/chconf.h" +#else +#    include_next "chconf.h" +#endif diff --git a/layouts/community/split_3x6_3/drashna/config.h b/layouts/community/split_3x6_3/drashna/config.h index b9b1d073d6..6205ededf1 100644 --- a/layouts/community/split_3x6_3/drashna/config.h +++ b/layouts/community/split_3x6_3/drashna/config.h @@ -19,8 +19,10 @@  /* Select hand configuration */  // #define MASTER_LEFT -#define MASTER_RIGHT -// #define EE_HAND +// #define MASTER_RIGHT +#define EE_HANDS +#define SPLIT_MODS_ENABLE +  #undef USE_I2C  #undef SSD1306OLED @@ -40,7 +42,7 @@  #ifdef RGB_MATRIX_ENABLE  #    ifdef CONVERT_TO_PROTON_C  #        undef RGB_DI_PIN -#        define RGB_DI_PIN PAL_LINE(GPIOA, 3) +#        define RGB_DI_PIN A3  #    endif  #    define RGB_MATRIX_KEYPRESSES  // reacts to keypresses  // #   define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) @@ -56,24 +58,23 @@  #endif  #ifdef CONVERT_TO_PROTON_C -#    define WS2812_PWM_DRIVER PWMD15                 // default: PWMD2 -#    define WS2812_PWM_CHANNEL 2                    // default: 2 -#    define WS2812_PWM_PAL_MODE 9                   // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 2 -#    define WS2812_DMA_STREAM STM32_DMA1_STREAM5    // DMA Stream for TIMx_UP, see the respective reference manual for the appropriate values for your MCU. -#    define WS2812_DMA_CHANNEL 5                    // DMA Channel for TIMx_UP, see the respective reference manual for the appropriate values for your MCU. -#    define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM15_UP  // DMAMUX configuration for TIMx_UP -- only required if your MCU has a DMAMUX peripheral, see the respective reference manual for the appropriate values for your MCU. +#    define WS2812_PWM_DRIVER PWMD2                 // default: PWMD2 +#    define WS2812_PWM_CHANNEL 4                    // default: 2 +#    define WS2812_PWM_PAL_MODE 1                   // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 2 +#    define WS2812_DMA_STREAM STM32_DMA1_STREAM2    // DMA Stream for TIMx_UP, see the respective reference manual for the appropriate values for your MCU. +#    define WS2812_DMA_CHANNEL 2                    // DMA Channel for TIMx_UP, see the respective reference manual for the appropriate values for your MCU. +#    define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM2_UP  // DMAMUX configuration for TIMx_UP -- only required if your MCU has a DMAMUX peripheral, see the respective reference manual for the appropriate values for your MCU.  #    undef SOFT_SERIAL_PIN  #    define SOFT_SERIAL_PIN D3  #    define SERIAL_USART_DRIVER SD1     // USART driver of TX pin. default: SD1  #    define SERIAL_USART_TX_PAL_MODE 7  // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7 -  // #define INIT_EE_HANDS_LEFT  // #define INIT_EE_HANDS_RIGHT  #endif -#ifdef AUDIO_ENABLE +#if defined(AUDIO_ENABLE) && !defined(CONVERT_TO_PROTON_C)  #    define B6_AUDIO  #    define NO_MUSIC_MODE  #endif @@ -88,9 +89,5 @@  #else  #    define PRODUCT Drashna Hacked Corne Keyboard  #endif -#define OLED_FONT_H "layouts/community/split_3x6_3/drashna/glcdfont.c" -// #define OLED_FONT_WIDTH 5 -// #define OLED_FONT_HEIGHT 7 -#define OLED_DISABLE_TIMEOUT  #define TAPPING_TERM_PER_KEY diff --git a/layouts/community/split_3x6_3/drashna/keymap.c b/layouts/community/split_3x6_3/drashna/keymap.c index 513cc7f7dc..65e05f64b6 100644 --- a/layouts/community/split_3x6_3/drashna/keymap.c +++ b/layouts/community/split_3x6_3/drashna/keymap.c @@ -27,14 +27,15 @@ enum crkbd_keycodes { RGBRST = NEW_SAFE_RANGE };   */  // clang-format off +#define LAYOUT_split_3x6_3_wrapper(...)      LAYOUT_split_3x6_3(__VA_ARGS__)  #define LAYOUT_split_3x6_3_base( \      K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ -    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ +    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \      K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \    ) \    LAYOUT_split_3x6_3_wrapper( \      KC_ESC,  K01,    K02,     K03,      K04,     K05,                        K06,     K07,     K08,     K09,     K0A,     KC_MINS, \ -    ALT_T(KC_TAB), K11,  K12, K13,      K14,     K15,                        K16,     K17,     K18,     K19,     K1A, RALT_T(KC_QUOT), \ +    ALT_T(KC_TAB), K11,  K12, K13,      K14,     K15,                        K16,     K17,     K18,     K19,     K1A, RALT_T(K1B), \      OS_LSFT, CTL_T(K21), K22, K23,      K24,     K25,                        K26,     K27,     K28,     K29, RCTL_T(K2A), OS_RSFT, \                                          RGB_MOD,  KC_SPC,  BK_LWER, DL_RAIS,  KC_ENT,  OS_RGUI                                      \    ) @@ -121,11 +122,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  #ifdef OLED_DRIVER_ENABLE  oled_rotation_t oled_init_user(oled_rotation_t rotation) { -    if (is_keyboard_master()) { -        return OLED_ROTATION_270; -    } else { -        return rotation; -    } +    return OLED_ROTATION_270;  }  #endif diff --git a/layouts/community/split_3x6_3/drashna/mcuconf.h b/layouts/community/split_3x6_3/drashna/mcuconf.h index 429e4e1cdd..649af5d1f4 100644 --- a/layouts/community/split_3x6_3/drashna/mcuconf.h +++ b/layouts/community/split_3x6_3/drashna/mcuconf.h @@ -19,14 +19,18 @@  // #undef STM32_HSE_ENABLED  // #define STM32_HSE_ENABLED FALSE -#undef STM32_GPT_USE_TIM15 -#define STM32_GPT_USE_TIM15                  FALSE +// #undef STM32_GPT_USE_TIM15 +// #define STM32_GPT_USE_TIM15                  FALSE -#undef STM32_PWM_USE_TIM15 -#define STM32_PWM_USE_TIM15                  TRUE +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2                  TRUE +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3                  FALSE  #undef STM32_SERIAL_USE_USART1  #define STM32_SERIAL_USE_USART1 TRUE -#undef STM32_PWM_TIM15_IRQ_PRIORITY -#define STM32_PWM_TIM15_IRQ_PRIORITY         16 +// #undef STM32_PWM_TIM15_IRQ_PRIORITY +// #define STM32_PWM_TIM15_IRQ_PRIORITY         16 +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 3 diff --git a/layouts/community/split_3x6_3/drashna/rules.mk b/layouts/community/split_3x6_3/drashna/rules.mk index 5358cb0ac8..db284f78dc 100644 --- a/layouts/community/split_3x6_3/drashna/rules.mk +++ b/layouts/community/split_3x6_3/drashna/rules.mk @@ -29,6 +29,6 @@ endif  ifeq ($(strip $(CTPC)), yes)      HAPTIC_ENABLE = no -    WS2812_DRIVER = pwm +    WS2812_DRIVER = pwm # won't work without a patch to the ctpc mk file      SERIAL_DRIVER = usart  endif diff --git a/users/drashna/config.h b/users/drashna/config.h index 8837ca0a56..8081af9cc3 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -22,8 +22,11 @@  /* Set Polling rate to 1000Hz */  #define USB_POLLING_INTERVAL_MS 1 -#if defined(SPLIT_KEYBOAD) +#if defined(SPLIT_KEYBOARD)  #    define SPLIT_MODS_ENABLE +// #    define SPLIT_TRANSPORT_MIRROR +#    define SERIAL_USE_MULTI_TRANSACTION +// #    define SPLIT_NUM_TRANSACTIONS_KB 2  #endif  #ifdef AUDIO_ENABLE @@ -111,6 +114,18 @@  #    else  #        define OLED_UPDATE_INTERVAL 15  #    endif +#    define OLED_DISABLE_TIMEOUT +#    define OLED_FONT_H "drashna_font.h" +#    define OLED_FONT_END 255 +// #    define OLED_FONT_5X5 +// #    define OLED_FONT_AZTECH +// #    define OLED_FONT_BMPLAIN +// #    define OLED_FONT_SUPER_DIGG +// #    define OLED_LOGO_GMK_BAD +// #    define OLED_LOGO_HUE_MANITEE +// #    define OLED_LOGO_CORNE +// #    define OLED_LOGO_GOTHAM +#    define OLED_LOGO_SCIFI  #endif  #ifndef ONESHOT_TAP_TOGGLE @@ -162,3 +177,22 @@  #ifdef LOCKING_RESYNC_ENABLE  #    undef LOCKING_RESYNC_ENABLE  #endif + +#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 A13 PAL_LINE(GPIOA, 13) +#    define A14 PAL_LINE(GPIOA, 14) +#    define A15 PAL_LINE(GPIOA, 15) +#    define B10 PAL_LINE(GPIOB, 10) +#    define B11 PAL_LINE(GPIOB, 11) +#    define B12 PAL_LINE(GPIOB, 12) +#    define C13 PAL_LINE(GPIOC, 13) +#    define C14 PAL_LINE(GPIOC, 14) +#    define C15 PAL_LINE(GPIOC, 15) +#endif diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index 95c9d2f625..6a13f0d9b2 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -111,7 +111,12 @@ void shutdown_user(void) {  __attribute__((weak)) void suspend_power_down_keymap(void) {} -void suspend_power_down_user(void) { suspend_power_down_keymap(); } +void suspend_power_down_user(void) { +#ifdef OLED_DRIVER_ENABLE +    oled_off(); +#endif +    suspend_power_down_keymap(); +}  __attribute__((weak)) void suspend_wakeup_init_keymap(void) {} @@ -146,17 +151,34 @@ void matrix_scan_user(void) {      matrix_scan_keymap();  } +#ifdef AUDIO_ENABLE +float doom_song[][2] = SONG(E1M1_DOOM); +#endif +  __attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state) { return state; }  // on layer change, no matter where the change was initiated  // Then runs keymap's layer change check  layer_state_t layer_state_set_user(layer_state_t state) { -    if (!is_keyboard_master()) { return state; } -     +    if (!is_keyboard_master()) { +        return state; +    } +      state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);  #if defined(RGBLIGHT_ENABLE)      state = layer_state_set_rgb_light(state);  #endif  // RGBLIGHT_ENABLE +#if defined(AUDIO_ENABLE) && !defined(__arm__) +    static bool is_gamepad_on = false; +    if (layer_state_cmp(state, _GAMEPAD) != is_gamepad_on) { +        is_gamepad_on = layer_state_cmp(state, _GAMEPAD); +        if (is_gamepad_on) { +            PLAY_LOOP(doom_song); +        } else { +            stop_all_notes(); +        } +    } +#endif      return layer_state_set_keymap(state);  } @@ -164,7 +186,9 @@ __attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t  // Runs state check and changes underglow color and animation  layer_state_t default_layer_state_set_user(layer_state_t state) { -    if (!is_keyboard_master()) { return state; } +    if (!is_keyboard_master()) { +        return state; +    }      state = default_layer_state_set_keymap(state);  #if 0 @@ -189,6 +213,9 @@ void eeconfig_init_user(void) {      userspace_config.rgb_layer_change = true;      eeconfig_update_user(userspace_config.raw);      eeconfig_init_keymap(); +#ifdef VIA_ENABLE +    via_eeprom_reset(); +#endif      keyboard_init();  } diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index 35d11101d6..9a18a82965 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -105,3 +105,7 @@ We use custom codes here, so we can substitute the right stuff  #    define KC_D3_3 KC_3  #    define KC_D3_4 KC_4  #endif  // TAP_DANCE_ENABLE + +#if defined(DRASHNA_CUSTOM_TRANSPORT) && defined(POINTING_DEVICE_ENABLE) +void master_mouse_send(int8_t x, int8_t y); +#endif diff --git a/users/drashna/drashna_font.h b/users/drashna/drashna_font.h new file mode 100644 index 0000000000..6a3865a44d --- /dev/null +++ b/users/drashna/drashna_font.h @@ -0,0 +1,1306 @@ +#pragma once + +// additional fonts from +// https://github.com/datacute/TinyOLED-Fonts + +#include "progmem.h" + +static const unsigned char font[] PROGMEM = { +    0x00, 0x00, 0x00, 0x00, 0x00, 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 ♥ +    0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, // 0x04 4 ♦ +    0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, // 0x05 5 ♧ +    0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, // 0x06 6 ♤ +    0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, // 0x07 7 +    0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, // 0x08 8 +    0x00, 0x18, 0x24, 0x18, 0x00, 0x00, // 0x09 9 +    0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, // 0x0A 10 +    0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, // 0x0B 11 ♂ +    0x26, 0x29, 0x79, 0x29, 0x26, 0x00, // 0x0C 12 ♀ +    0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, // 0x0D 13 ♪ +    0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, // 0x0E 14 ♫ +    0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, // 0x0F 15 +    0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, // 0x10 16 +    0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, // 0x11 17 +    0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, // 0x12 18 ↕ +    0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, // 0x13 19 ‼ +    0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, // 0x14 20 ¶ +    0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, // 0x15 21 § +    0x60, 0x60, 0x60, 0x60, 0x60, 0x00, // 0x16 22 _ +    0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, // 0x17 23 ↨ +    0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, // 0x18 24 ↑ +    0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, // 0x19 25 ↓ +    0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, // 0x1A 26 → +    0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, // 0x1B 27 ← +    0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, // 0x1C 28 ⌙h +    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) +    0x00,0x00,0x00,0x00,0x00,0x00, // 0x20 32 +    0x5c,0x00,0x00,0x00,0x00,0x00, // 0x21 33 ! +    0x06,0x00,0x06,0x00,0x00,0x00, // 0x22 34 " +    0x28,0x7c,0x28,0x7c,0x28,0x00, // 0x23 35 # +    0x5c,0x54,0xfe,0x54,0x74,0x00, // 0x24 36 $ +    0x44,0x20,0x10,0x08,0x44,0x00, // 0x25 37 % +    0x28,0x54,0x54,0x20,0x50,0x00, // 0x26 38 & +    0x06,0x00,0x00,0x00,0x00,0x00, // 0x27 39 ' +    0x38,0x44,0x00,0x00,0x00,0x00, // 0x28 40 ( +    0x44,0x38,0x00,0x00,0x00,0x00, // 0x29 41 ) +    0x02,0x07,0x02,0x00,0x00,0x00, // 0x2A 42 * +    0x10,0x10,0x7c,0x10,0x10,0x00, // 0x2B 43 + +    0xc0,0x00,0x00,0x00,0x00,0x00, // 0x2C 44 , +    0x10,0x10,0x10,0x10,0x10,0x00, // 0x2D 45 - +    0x40,0x00,0x00,0x00,0x00,0x00, // 0x2E 46 . +    0x60,0x10,0x0c,0x00,0x00,0x00, // 0x2F 47 / +    0x7c,0x64,0x54,0x4c,0x7c,0x00, // 0x30 48 0 +    0x48,0x7c,0x40,0x00,0x00,0x00, // 0x31 49 1 +    0x64,0x54,0x54,0x54,0x48,0x00, // 0x32 50 2 +    0x44,0x54,0x54,0x54,0x6c,0x00, // 0x33 51 3 +    0x3c,0x20,0x70,0x20,0x20,0x00, // 0x34 52 4 +    0x5c,0x54,0x54,0x54,0x24,0x00, // 0x35 53 5 +    0x7c,0x54,0x54,0x54,0x74,0x00, // 0x36 54 6 +    0x04,0x04,0x64,0x14,0x0c,0x00, // 0x37 55 7 +    0x7c,0x54,0x54,0x54,0x7c,0x00, // 0x38 56 8 +    0x5c,0x54,0x54,0x54,0x7c,0x00, // 0x39 57 9 +    0x44,0x00,0x00,0x00,0x00,0x00, // 0x3A 58 : +    0xc4,0x00,0x00,0x00,0x00,0x00, // 0x3B 59 ; +    0x10,0x28,0x44,0x00,0x00,0x00, // 0x3C 60 < +    0x28,0x28,0x28,0x28,0x28,0x00, // 0x3D 61 = +    0x44,0x28,0x10,0x00,0x00,0x00, // 0x3E 62 > +    0x08,0x04,0x54,0x08,0x00,0x00, // 0x3F 63 ? +    0x7c,0x44,0x54,0x54,0x5c,0x00, // 0x40 64 @ +    0x7c,0x24,0x24,0x24,0x7c,0x00, // 0x41 65 A +    0x7c,0x54,0x54,0x54,0x6c,0x00, // 0x42 66 B +    0x7c,0x44,0x44,0x44,0x44,0x00, // 0x43 67 C +    0x7c,0x44,0x44,0x44,0x38,0x00, // 0x44 68 D +    0x7c,0x54,0x54,0x54,0x44,0x00, // 0x45 69 E +    0x7c,0x14,0x14,0x14,0x04,0x00, // 0x46 70 F +    0x7c,0x44,0x44,0x54,0x74,0x00, // 0x47 71 G +    0x7c,0x10,0x10,0x10,0x7c,0x00, // 0x48 72 H +    0x44,0x44,0x7c,0x44,0x44,0x00, // 0x49 73 I +    0x60,0x40,0x40,0x44,0x7c,0x00, // 0x4A 74 J +    0x7c,0x10,0x10,0x28,0x44,0x00, // 0x4B 75 K +    0x7c,0x40,0x40,0x40,0x40,0x00, // 0x4C 76 L +    0x7c,0x08,0x10,0x08,0x7c,0x00, // 0x4D 77 M +    0x7c,0x08,0x10,0x20,0x7c,0x00, // 0x4E 78 N +    0x38,0x44,0x44,0x44,0x38,0x00, // 0x4F 79 O +    0x7c,0x14,0x14,0x14,0x08,0x00, // 0x50 80 P +    0x3c,0x24,0x64,0x24,0x3c,0x00, // 0x51 81 Q +    0x7c,0x14,0x14,0x14,0x68,0x00, // 0x52 82 R +    0x5c,0x54,0x54,0x54,0x74,0x00, // 0x53 83 S +    0x04,0x04,0x7c,0x04,0x04,0x00, // 0x54 84 T +    0x7c,0x40,0x40,0x40,0x7c,0x00, // 0x55 85 U +    0x0c,0x30,0x40,0x30,0x0c,0x00, // 0x56 86 V +    0x3c,0x40,0x30,0x40,0x3c,0x00, // 0x57 87 W +    0x44,0x28,0x10,0x28,0x44,0x00, // 0x58 88 X +    0x0c,0x10,0x60,0x10,0x0c,0x00, // 0x59 89 Y +    0x44,0x64,0x54,0x4c,0x44,0x00, // 0x5A 90 Z +    0x7c,0x44,0x00,0x00,0x00,0x00, // 0x5B 91 [ +    0x0c,0x10,0x60,0x00,0x00,0x00, // 0x5C 92 \ backslash +    0x44,0x7c,0x00,0x00,0x00,0x00, // 0x5D 93 ] +    0x00,0x01,0x00,0x01,0x00,0x00, // 0x5E 94 ^ +    0x40,0x40,0x40,0x40,0x40,0x40, // 0x5F 95 _ +    0x00,0x01,0x00,0x00,0x00,0x00, // 0x60 96 ` +    0x7c,0x24,0x24,0x24,0x7c,0x00, // 0x61 97 a +    0x7c,0x54,0x54,0x54,0x6c,0x00, // 0x62 98 b +    0x7c,0x44,0x44,0x44,0x44,0x00, // 0x63 99 c +    0x7c,0x44,0x44,0x44,0x38,0x00, // 0x64 100 d +    0x7c,0x54,0x54,0x54,0x44,0x00, // 0x65 101 e +    0x7c,0x14,0x14,0x14,0x04,0x00, // 0x66 102 f +    0x7c,0x44,0x44,0x54,0x74,0x00, // 0x67 103 g +    0x7c,0x10,0x10,0x10,0x7c,0x00, // 0x68 104 h +    0x44,0x44,0x7c,0x44,0x44,0x00, // 0x69 105 i +    0x60,0x40,0x40,0x44,0x7c,0x00, // 0x6A 106 j +    0x7c,0x10,0x10,0x28,0x44,0x00, // 0x6B 107 k +    0x7c,0x40,0x40,0x40,0x40,0x00, // 0x6C 108 l +    0x7c,0x08,0x10,0x08,0x7c,0x00, // 0x6D 109 m +    0x7c,0x08,0x10,0x20,0x7c,0x00, // 0x6E 110 n +    0x38,0x44,0x44,0x44,0x38,0x00, // 0x6F 111 o +    0x7c,0x14,0x14,0x14,0x08,0x00, // 0x70 112 p +    0x3c,0x24,0x64,0x24,0x3c,0x00, // 0x71 113 q +    0x7c,0x14,0x14,0x14,0x68,0x00, // 0x72 114 r +    0x5c,0x54,0x54,0x54,0x74,0x00, // 0x73 115 s +    0x04,0x04,0x7c,0x04,0x04,0x00, // 0x74 116 t +    0x7c,0x40,0x40,0x40,0x7c,0x00, // 0x75 117 u +    0x0c,0x30,0x40,0x30,0x0c,0x00, // 0x76 118 v +    0x3c,0x40,0x30,0x40,0x3c,0x00, // 0x77 119 w +    0x44,0x28,0x10,0x28,0x44,0x00, // 0x78 120 x +    0x0c,0x10,0x60,0x10,0x0c,0x00, // 0x79 121 y +    0x44,0x64,0x54,0x4c,0x44,0x00, // 0x7A 122 z +    0x10,0x7c,0x44,0x00,0x00,0x00, // 0x7B 123 { +    0x6c,0x00,0x00,0x00,0x00,0x00, // 0x7C 124 | +    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) +    0x00,0x00,0x00,0x00,0x00,0x00, // 0x20 32 +    0x00,0x2e,0x00,0x00,0x00,0x00, // 0x21 33 ! +    0x00,0x02,0x00,0x02,0x00,0x00, // 0x22 34 " +    0x00,0x0a,0x1e,0x0a,0x1e,0x00, // 0x23 35 # +    0x00,0x0e,0x2a,0x6b,0x2a,0x3a, // 0x24 36 $ +    0x00,0x06,0x06,0x26,0x18,0x06, // 0x25 37 % +    0x38,0x3e,0x2a,0x2a,0x28,0x38, // 0x26 38 & +    0x18,0x02,0x00,0x00,0x00,0x00, // 0x27 39 ' +    0x00,0x3e,0x22,0x00,0x00,0x00, // 0x28 40 ( +    0x00,0x22,0x3e,0x00,0x00,0x00, // 0x29 41 ) +    0x00,0x0e,0x0e,0x0e,0x04,0x00, // 0x2A 42 * +    0x00,0x08,0x1c,0x08,0x00,0x00, // 0x2B 43 + +    0x00,0x20,0x00,0x00,0x00,0x00, // 0x2C 44 , +    0x00,0x08,0x08,0x08,0x00,0x00, // 0x2D 45 - +    0x00,0x20,0x00,0x00,0x00,0x00, // 0x2E 46 . +    0x00,0x20,0x18,0x06,0x00,0x00, // 0x2F 47 / +    0x00,0x3e,0x22,0x2a,0x22,0x3e, // 0x30 48 0 +    0x02,0x3e,0x00,0x00,0x00,0x00, // 0x31 49 1 +    0x00,0x38,0x28,0x2a,0x2a,0x2e, // 0x32 50 2 +    0x00,0x22,0x2a,0x2e,0x38,0x00, // 0x33 51 3 +    0x00,0x0e,0x08,0x08,0x3e,0x08, // 0x34 52 4 +    0x00,0x2e,0x2a,0x2a,0x28,0x38, // 0x35 53 5 +    0x00,0x3e,0x2a,0x2a,0x28,0x38, // 0x36 54 6 +    0x00,0x06,0x02,0x02,0x0a,0x3e, // 0x37 55 7 +    0x00,0x38,0x2e,0x2a,0x2e,0x38, // 0x38 56 8 +    0x00,0x0e,0x0a,0x2a,0x2a,0x3e, // 0x39 57 9 +    0x00,0x28,0x00,0x00,0x00,0x00, // 0x3A 58 : +    0x00,0x28,0x00,0x00,0x00,0x00, // 0x3B 59 ; +    0x00,0x08,0x14,0x22,0x00,0x00, // 0x3C 60 < +    0x00,0x14,0x14,0x14,0x14,0x00, // 0x3D 61 = +    0x00,0x22,0x14,0x08,0x00,0x00, // 0x3E 62 > +    0x00,0x06,0x02,0x2a,0x0a,0x06, // 0x3F 63 ? +    0x00,0x3e,0x02,0x3a,0x2a,0x0a, // 0x40 64 @ +    0x22,0x3e,0x02,0x0a,0x0a,0x3e, // 0x41 65 A +    0x00,0x3e,0x22,0x2a,0x2e,0x38, // 0x42 66 B +    0x00,0x3e,0x22,0x22,0x20,0x30, // 0x43 67 C +    0x00,0x3e,0x22,0x22,0x22,0x3c, // 0x44 68 D +    0x00,0x3e,0x2a,0x22,0x20,0x30, // 0x45 69 E +    0x00,0x3e,0x0a,0x0a,0x06,0x02, // 0x46 70 F +    0x00,0x3e,0x22,0x2a,0x28,0x38, // 0x47 71 G +    0x00,0x3e,0x08,0x08,0x08,0x3e, // 0x48 72 H +    0x00,0x22,0x3e,0x22,0x00,0x00, // 0x49 73 I +    0x00,0x30,0x20,0x20,0x22,0x3e, // 0x4A 74 J +    0x00,0x3e,0x08,0x08,0x0e,0x38, // 0x4B 75 K +    0x00,0x3e,0x20,0x20,0x20,0x30, // 0x4C 76 L +    0x00,0x3e,0x02,0x3e,0x20,0x3e, // 0x4D 77 M +    0x3e,0x3e,0x02,0x3e,0x20,0x3e, // 0x4E 78 N +    0x00,0x3e,0x22,0x22,0x22,0x3e, // 0x4F 79 O +    0x00,0x3e,0x02,0x0a,0x0a,0x0e, // 0x50 80 P +    0x00,0x3e,0x22,0x22,0x22,0x3e, // 0x51 81 Q +    0x00,0x3e,0x02,0x0a,0x0e,0x38, // 0x52 82 R +    0x00,0x0e,0x0a,0x2a,0x2a,0x3a, // 0x53 83 S +    0x00,0x06,0x02,0x3e,0x02,0x06, // 0x54 84 T +    0x00,0x3e,0x20,0x20,0x20,0x3e, // 0x55 85 U +    0x00,0x3e,0x20,0x20,0x3e,0x00, // 0x56 86 V +    0x00,0x3e,0x20,0x3e,0x02,0x3e, // 0x57 87 W +    0x3e,0x3a,0x0e,0x08,0x0e,0x3a, // 0x58 88 X +    0x00,0x0e,0x08,0x08,0x28,0x3e, // 0x59 89 Y +    0x00,0x3a,0x2a,0x2a,0x0a,0x0e, // 0x5A 90 Z +    0x00,0x3e,0x22,0x00,0x00,0x00, // 0x5B 91 [ +    0x00,0x02,0x0c,0x30,0x00,0x00, // 0x5C 92 \ backslash +    0x22,0x3e,0x00,0x00,0x00,0x00, // 0x5D 93 ] +    0x00,0x01,0x00,0x01,0x00,0x00, // 0x5E 94 ^ +    0x00,0x20,0x20,0x20,0x00,0x00, // 0x5F 95 _ +    0x00,0x01,0x00,0x00,0x00,0x00, // 0x60 96 ` +    0x00,0x38,0x28,0x28,0x08,0x38, // 0x61 97 a +    0x00,0x3e,0x20,0x28,0x28,0x38, // 0x62 98 b +    0x00,0x38,0x28,0x28,0x20,0x30, // 0x63 99 c +    0x00,0x38,0x28,0x28,0x20,0x3e, // 0x64 100 d +    0x00,0xf8,0x88,0x28,0x28,0x38, // 0x65 101 e +    0x00,0xf8,0x28,0x28,0x18,0x08, // 0x66 102 f +    0x00,0x38,0x28,0xa8,0x88,0xf8, // 0x67 103 g +    0x00,0x3c,0x08,0x08,0x08,0x38, // 0x68 104 h +    0x00,0x3a,0x00,0x00,0x00,0x00, // 0x69 105 i +    0x80,0xfa,0x00,0x00,0x00,0x00, // 0x6A 106 j +    0x00,0x3e,0x08,0x08,0x38,0x2c, // 0x6B 107 k +    0x00,0x3e,0x20,0x00,0x00,0x00, // 0x6C 108 l +    0x00,0x38,0x08,0x38,0x20,0x38, // 0x6D 109 m +    0x38,0x38,0x08,0x38,0x20,0x38, // 0x6E 110 n +    0x00,0x38,0x28,0x28,0x28,0x38, // 0x6F 111 o +    0x00,0xf8,0x08,0x28,0x28,0x38, // 0x70 112 p +    0x00,0x38,0x28,0x28,0x08,0xf8, // 0x71 113 q +    0x00,0x38,0x08,0x08,0x18,0x08, // 0x72 114 r +    0x00,0x38,0x28,0xa8,0xa8,0xe8, // 0x73 115 s +    0x00,0x3e,0x28,0x28,0x20,0x30, // 0x74 116 t +    0x00,0x38,0x20,0x20,0x20,0x38, // 0x75 117 u +    0x00,0x38,0x20,0x38,0x00,0x00, // 0x76 118 v +    0x00,0x38,0x20,0x38,0x08,0x38, // 0x77 119 w +    0x38,0x28,0x38,0x10,0x38,0x28, // 0x78 120 x +    0x00,0x38,0x20,0xa0,0xa0,0xf8, // 0x79 121 y +    0x00,0xe8,0xa8,0xa8,0x28,0x38, // 0x7A 122 z +    0x08,0x3e,0x22,0x00,0x00,0x00, // 0x7B 123 { +    0x00,0x3f,0x00,0x00,0x00,0x00, // 0x7C 124 | +    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) +    0x00,0x00,0x00,0x00,0x00,0x00, // 0x20 32 +    0x2e,0x00,0x00,0x00,0x00,0x00, // 0x21 33 ! +    0x03,0x00,0x03,0x00,0x00,0x00, // 0x22 34 " +    0x0a,0x1f,0x0a,0x1f,0x0a,0x00, // 0x23 35 # +    0x2e,0x2a,0x6b,0x2a,0x3a,0x00, // 0x24 36 $ +    0x0e,0x2a,0x1e,0x08,0x3c,0x2a, // 0x25 37 % +    0x3e,0x2a,0x2a,0x22,0x38,0x08, // 0x26 38 & +    0x03,0x00,0x00,0x00,0x00,0x00, // 0x27 39 ' +    0x1c,0x22,0x00,0x00,0x00,0x00, // 0x28 40 ( +    0x22,0x1c,0x00,0x00,0x00,0x00, // 0x29 41 ) +    0x15,0x0e,0x04,0x0e,0x15,0x00, // 0x2A 42 * +    0x08,0x08,0x3e,0x08,0x08,0x00, // 0x2B 43 + +    0x60,0x00,0x00,0x00,0x00,0x00, // 0x2C 44 , +    0x08,0x08,0x08,0x08,0x08,0x00, // 0x2D 45 - +    0x20,0x00,0x00,0x00,0x00,0x00, // 0x2E 46 . +    0x20,0x10,0x08,0x04,0x02,0x00, // 0x2F 47 / +    0x3e,0x22,0x2a,0x22,0x3e,0x00, // 0x30 48 0 +    0x04,0x3e,0x00,0x00,0x00,0x00, // 0x31 49 1 +    0x3a,0x2a,0x2a,0x2a,0x2e,0x00, // 0x32 50 2 +    0x2a,0x2a,0x2a,0x2a,0x3e,0x00, // 0x33 51 3 +    0x0e,0x08,0x08,0x08,0x3e,0x00, // 0x34 52 4 +    0x2e,0x2a,0x2a,0x2a,0x3a,0x00, // 0x35 53 5 +    0x3e,0x2a,0x2a,0x2a,0x3a,0x00, // 0x36 54 6 +    0x02,0x02,0x02,0x02,0x3e,0x00, // 0x37 55 7 +    0x3e,0x2a,0x2a,0x2a,0x3e,0x00, // 0x38 56 8 +    0x2e,0x2a,0x2a,0x2a,0x3e,0x00, // 0x39 57 9 +    0x14,0x00,0x00,0x00,0x00,0x00, // 0x3A 58 : +    0x34,0x00,0x00,0x00,0x00,0x00, // 0x3B 59 ; +    0x08,0x14,0x22,0x00,0x00,0x00, // 0x3C 60 < +    0x14,0x14,0x14,0x14,0x14,0x00, // 0x3D 61 = +    0x22,0x14,0x08,0x00,0x00,0x00, // 0x3E 62 > +    0x06,0x02,0x2a,0x0a,0x0e,0x00, // 0x3F 63 ? +    0x3e,0x02,0x3a,0x2a,0x3e,0x00, // 0x40 64 @ +    0x3e,0x12,0x12,0x12,0x3e,0x00, // 0x41 65 A +    0x3e,0x2a,0x2a,0x2a,0x36,0x00, // 0x42 66 B +    0x3e,0x22,0x22,0x22,0x22,0x00, // 0x43 67 C +    0x3e,0x22,0x22,0x22,0x1c,0x00, // 0x44 68 D +    0x3e,0x2a,0x2a,0x2a,0x22,0x00, // 0x45 69 E +    0x3e,0x0a,0x0a,0x0a,0x02,0x00, // 0x46 70 F +    0x3e,0x22,0x2a,0x2a,0x3a,0x00, // 0x47 71 G +    0x3e,0x08,0x08,0x08,0x3e,0x00, // 0x48 72 H +    0x22,0x3e,0x22,0x00,0x00,0x00, // 0x49 73 I +    0x38,0x20,0x20,0x20,0x3e,0x00, // 0x4A 74 J +    0x3e,0x08,0x08,0x14,0x22,0x00, // 0x4B 75 K +    0x3e,0x20,0x20,0x20,0x20,0x00, // 0x4C 76 L +    0x3e,0x04,0x38,0x04,0x3e,0x00, // 0x4D 77 M +    0x3e,0x04,0x08,0x10,0x3e,0x00, // 0x4E 78 N +    0x3e,0x22,0x22,0x22,0x3e,0x00, // 0x4F 79 O +    0x3e,0x0a,0x0a,0x0a,0x0e,0x00, // 0x50 80 P +    0x3e,0x22,0x72,0x22,0x3e,0x00, // 0x51 81 Q +    0x3e,0x0a,0x0a,0x1a,0x2e,0x00, // 0x52 82 R +    0x2e,0x2a,0x2a,0x2a,0x3a,0x00, // 0x53 83 S +    0x02,0x02,0x3e,0x02,0x02,0x00, // 0x54 84 T +    0x1e,0x20,0x20,0x20,0x1e,0x00, // 0x55 85 U +    0x0e,0x10,0x20,0x10,0x0e,0x00, // 0x56 86 V +    0x3e,0x10,0x0e,0x10,0x3e,0x00, // 0x57 87 W +    0x22,0x14,0x08,0x14,0x22,0x00, // 0x58 88 X +    0x02,0x04,0x38,0x04,0x02,0x00, // 0x59 89 Y +    0x3a,0x2a,0x2a,0x2a,0x2e,0x00, // 0x5A 90 Z +    0x3e,0x22,0x00,0x00,0x00,0x00, // 0x5B 91 [ +    0x3f,0x21,0x3f,0x00,0x00,0x00, // 0x5C 92 \ backslash +    0x22,0x3e,0x00,0x00,0x00,0x00, // 0x5D 93 ] +    0x0c,0x1e,0x3c,0x1e,0x0c,0x00, // 0x5E 94 ^ +    0x20,0x20,0x20,0x20,0x20,0x00, // 0x5F 95 _ +    0x1c,0x3e,0x3e,0x3e,0x1c,0x00, // 0x60 96 ` +    0x3c,0x24,0x24,0x24,0x3c,0x20, // 0x61 97 a +    0x3e,0x24,0x24,0x24,0x3c,0x00, // 0x62 98 b +    0x3c,0x24,0x24,0x24,0x24,0x00, // 0x63 99 c +    0x3c,0x24,0x24,0x24,0x3e,0x00, // 0x64 100 d +    0x3c,0x24,0x34,0x2c,0x24,0x00, // 0x65 101 e +    0x08,0x3e,0x0a,0x0a,0x00,0x00, // 0x66 102 f +    0x1c,0x54,0x54,0x54,0x7c,0x00, // 0x67 103 g +    0x3e,0x04,0x04,0x04,0x3c,0x00, // 0x68 104 h +    0x3a,0x00,0x00,0x00,0x00,0x00, // 0x69 105 i +    0x7a,0x00,0x00,0x00,0x00,0x00, // 0x6A 106 j +    0x3e,0x08,0x14,0x22,0x00,0x00, // 0x6B 107 k +    0x02,0x3e,0x00,0x00,0x00,0x00, // 0x6C 108 l +    0x3c,0x04,0x3c,0x04,0x3c,0x00, // 0x6D 109 m +    0x3c,0x04,0x04,0x04,0x3c,0x00, // 0x6E 110 n +    0x3c,0x24,0x24,0x24,0x3c,0x00, // 0x6F 111 o +    0x7c,0x24,0x24,0x24,0x3c,0x00, // 0x70 112 p +    0x3c,0x24,0x24,0x24,0x7c,0x00, // 0x71 113 q +    0x3c,0x04,0x04,0x04,0x00,0x00, // 0x72 114 r +    0x24,0x2c,0x34,0x24,0x00,0x00, // 0x73 115 s +    0x04,0x3e,0x24,0x24,0x00,0x00, // 0x74 116 t +    0x3c,0x20,0x20,0x20,0x3c,0x00, // 0x75 117 u +    0x0c,0x10,0x20,0x10,0x0c,0x00, // 0x76 118 v +    0x3c,0x20,0x3c,0x20,0x3c,0x00, // 0x77 119 w +    0x24,0x24,0x18,0x24,0x24,0x00, // 0x78 120 x +    0x1c,0x50,0x50,0x50,0x7c,0x00, // 0x79 121 y +    0x24,0x34,0x2c,0x24,0x00,0x00, // 0x7A 122 z +    0x08,0x3e,0x22,0x00,0x00,0x00, // 0x7B 123 { +    0x1c,0x22,0x22,0x22,0x1c,0x00, // 0x7C 124 | +    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) +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x20 32 +    0x58, 0x5C, 0x00, 0x00, 0x00, 0x00, // 0x21 33 ! +    0x00, 0x01, 0x00, 0x00, 0x01, 0x00, // 0x22 34 " +    0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, // 0x23 35 # +    0x5C, 0xFE, 0x54, 0xFE, 0x74, 0x00, // 0x24 36 $ +    0x03, 0x63, 0x38, 0x0C, 0x63, 0x60, // 0x25 37 % +    0x70, 0x5C, 0x54, 0x74, 0x7C, 0x50, // 0x26 38 & +    0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // 0x27 39 ' +    0x70, 0x7C, 0x44, 0x00, 0x00, 0x00, // 0x28 40 ( +    0x44, 0x7C, 0x70, 0x00, 0x00, 0x00, // 0x29 41 ) +    0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, // 0x2A 42 * +    0x10, 0x10, 0x70, 0x7C, 0x10, 0x00, // 0x2B 43 + +    0x40, 0xC0, 0x00, 0x00, 0x00, 0x00, // 0x2C 44 , +    0x10, 0x10, 0x10, 0x10, 0x00, 0x00, // 0x2D 45 - +    0x40, 0x40, 0x00, 0x00, 0x00, 0x00, // 0x2E 46 . +    0x70, 0x7C, 0x03, 0x00, 0x00, 0x00, // 0x2F 47 / +    0x7C, 0x44, 0x44, 0x44, 0x7C, 0x1C, // 0x30 48 0 +    0x04, 0x04, 0x7C, 0x1C, 0x00, 0x00, // 0x31 49 1 +    0x74, 0x74, 0x54, 0x54, 0x5C, 0x00, // 0x32 50 2 +    0x44, 0x54, 0x54, 0x54, 0x7C, 0x70, // 0x33 51 3 +    0x1C, 0x10, 0x10, 0x7C, 0x7C, 0x00, // 0x34 52 4 +    0x5C, 0x5C, 0x54, 0x54, 0x74, 0x00, // 0x35 53 5 +    0x70, 0x7C, 0x54, 0x54, 0x74, 0x00, // 0x36 54 6 +    0x04, 0x14, 0x14, 0x14, 0x7C, 0x70, // 0x37 55 7 +    0x70, 0x5C, 0x54, 0x74, 0x7C, 0x00, // 0x38 56 8 +    0x5C, 0x54, 0x54, 0x54, 0x7C, 0x1C, // 0x39 57 9 +    0x50, 0x50, 0x00, 0x00, 0x00, 0x00, // 0x3A 58 : +    0x50, 0xD0, 0x00, 0x00, 0x00, 0x00, // 0x3B 59 ; +    0x18, 0x18, 0x24, 0x42, 0x00, 0x00, // 0x3C 60 < +    0x28, 0x28, 0x28, 0x28, 0x00, 0x00, // 0x3D 61 = +    0x42, 0x24, 0x18, 0x18, 0x00, 0x00, // 0x3E 62 > +    0x04, 0x14, 0x54, 0x54, 0x1C, 0x1C, // 0x3F 63 ? +    0xF8, 0x04, 0x74, 0x74, 0x54, 0x54, // 0x40 64 @ +    0x70, 0x7C, 0x14, 0x14, 0x3C, 0x00, // 0x41 65 A +    0x7C, 0x74, 0x54, 0x54, 0x7C, 0x00, // 0x42 66 B +    0x70, 0x7C, 0x44, 0x44, 0x44, 0x44, // 0x43 67 C +    0x70, 0x7C, 0x44, 0x44, 0x48, 0x70, // 0x44 68 D +    0x70, 0x7C, 0x54, 0x54, 0x54, 0x44, // 0x45 69 E +    0x70, 0x7C, 0x14, 0x14, 0x14, 0x04, // 0x46 70 F +    0x70, 0x7C, 0x44, 0x44, 0x54, 0x74, // 0x47 71 G +    0x70, 0x7C, 0x10, 0x10, 0x7C, 0x00, // 0x48 72 H +    0x70, 0x7C, 0x00, 0x00, 0x00, 0x00, // 0x49 73 I +    0x60, 0x40, 0x40, 0x40, 0x7C, 0x70, // 0x4A 74 J +    0x7C, 0x70, 0x10, 0x1C, 0x70, 0x00, // 0x4B 75 K +    0x70, 0x7C, 0x40, 0x40, 0x40, 0x60, // 0x4C 76 L +    0x70, 0x7C, 0x04, 0x04, 0x7C, 0x04, // 0x4D 77 M +    0x70, 0x7C, 0x04, 0x04, 0x04, 0x7C, // 0x4E 78 N +    0x70, 0x7C, 0x44, 0x44, 0x44, 0x7C, // 0x4F 79 O +    0x70, 0x7C, 0x24, 0x24, 0x3C, 0x00, // 0x50 80 P +    0x7C, 0x44, 0x44, 0x44, 0x7C, 0x00, // 0x51 81 Q +    0x7C, 0x74, 0x14, 0x14, 0x3C, 0x00, // 0x52 82 R +    0x5C, 0x5C, 0x54, 0x54, 0x74, 0x00, // 0x53 83 S +    0x04, 0x04, 0x7C, 0x74, 0x04, 0x00, // 0x54 84 T +    0x70, 0x7C, 0x40, 0x40, 0x40, 0x7C, // 0x55 85 U +    0x70, 0x7C, 0x40, 0x40, 0x20, 0x1C, // 0x56 86 V +    0x70, 0x7C, 0x40, 0x40, 0x7C, 0x40, // 0x57 87 W +    0x70, 0x7C, 0x10, 0x10, 0x3C, 0x00, // 0x58 88 X +    0x1C, 0x10, 0x70, 0x70, 0x1C, 0x00, // 0x59 89 Y +    0x74, 0x74, 0x54, 0x54, 0x5C, 0x00, // 0x5A 90 Z +    0xF0, 0xFE, 0x82, 0x00, 0x00, 0x00, // 0x5B 91 [ +    0x03, 0x7C, 0x70, 0x00, 0x00, 0x00, // 0x5C 92 \ backslash +    0x82, 0xFE, 0xF0, 0x00, 0x00, 0x00, // 0x5D 93 ] +    0x04, 0x02, 0x01, 0x06, 0x04, 0x00, // 0x5E 94 ^ +    0x40, 0x40, 0x40, 0x40, 0x00, 0x00, // 0x5F 95 _ +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x60 96 ` +    0x70, 0x7C, 0x14, 0x14, 0x3C, 0x00, // 0x61 97 a +    0x7C, 0x74, 0x54, 0x54, 0x7C, 0x00, // 0x62 98 b +    0x70, 0x7C, 0x44, 0x44, 0x44, 0x44, // 0x63 99 c +    0x70, 0x7C, 0x44, 0x44, 0x48, 0x70, // 0x64 100 d +    0x70, 0x7C, 0x54, 0x54, 0x54, 0x44, // 0x65 101 e +    0x70, 0x7C, 0x14, 0x14, 0x14, 0x04, // 0x66 102 f +    0x70, 0x7C, 0x44, 0x44, 0x54, 0x74, // 0x67 103 g +    0x70, 0x7C, 0x10, 0x10, 0x7C, 0x00, // 0x68 104 h +    0x70, 0x7C, 0x00, 0x00, 0x00, 0x00, // 0x69 105 i +    0x60, 0x40, 0x40, 0x40, 0x7C, 0x70, // 0x6A 106 j +    0x7C, 0x70, 0x10, 0x1C, 0x70, 0x00, // 0x6B 107 k +    0x70, 0x7C, 0x40, 0x40, 0x40, 0x60, // 0x6C 108 l +    0x70, 0x7C, 0x04, 0x04, 0x7C, 0x04, // 0x6D 109 m +    0x70, 0x7C, 0x04, 0x04, 0x04, 0x7C, // 0x6E 110 n +    0x70, 0x7C, 0x44, 0x44, 0x44, 0x7C, // 0x6F 111 o +    0x70, 0x7C, 0x24, 0x24, 0x3C, 0x00, // 0x70 112 p +    0x7C, 0x44, 0x44, 0x44, 0x7C, 0x00, // 0x71 113 q +    0x7C, 0x74, 0x14, 0x14, 0x3C, 0x00, // 0x72 114 r +    0x5C, 0x5C, 0x54, 0x54, 0x74, 0x00, // 0x73 115 s +    0x04, 0x04, 0x7C, 0x74, 0x04, 0x00, // 0x74 116 t +    0x70, 0x7C, 0x40, 0x40, 0x40, 0x7C, // 0x75 117 u +    0x70, 0x7C, 0x40, 0x40, 0x20, 0x1C, // 0x76 118 v +    0x70, 0x7C, 0x40, 0x40, 0x7C, 0x40, // 0x77 119 w +    0x70, 0x7C, 0x10, 0x10, 0x3C, 0x00, // 0x78 120 x +    0x1C, 0x10, 0x70, 0x70, 0x1C, 0x00, // 0x79 121 y +    0x74, 0x74, 0x54, 0x54, 0x5C, 0x00, // 0x7A 122 z +    0x10, 0xFE, 0xC2, 0x00, 0x00, 0x00, // 0x7B 123 { +    0x00, 0x44, 0x77, 0x00, 0x00, 0x00, // 0x7C 124 | +    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 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x20 32 +    0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, // 0x21 33 ! +    0x00, 0x07, 0x00, 0x07, 0x00, 0x00, // 0x22 34 " +    0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, // 0x23 35 # +    0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, // 0x24 36 $ +    0x23, 0x13, 0x08, 0x64, 0x62, 0x00, // 0x25 37 % +    0x36, 0x49, 0x56, 0x20, 0x50, 0x00, // 0x26 38 & +    0x00, 0x08, 0x07, 0x03, 0x00, 0x00, // 0x27 39 ' +    0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, // 0x28 40 ( +    0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, // 0x29 41 ) +    0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, // 0x2A 42 * +    0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, // 0x2B 43 + +    0x00, 0x80, 0x70, 0x30, 0x00, 0x00, // 0x2C 44 , +    0x08, 0x08, 0x08, 0x08, 0x08, 0x00, // 0x2D 45 - +    0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // 0x2E 46 . +    0x20, 0x10, 0x08, 0x04, 0x02, 0x00, // 0x2F 47 / +    0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, // 0x30 48 0 +    0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, // 0x31 49 1 +    0x72, 0x49, 0x49, 0x49, 0x46, 0x00, // 0x32 50 2 +    0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, // 0x33 51 3 +    0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, // 0x34 52 4 +    0x27, 0x45, 0x45, 0x45, 0x39, 0x00, // 0x35 53 5 +    0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, // 0x36 54 6 +    0x41, 0x21, 0x11, 0x09, 0x07, 0x00, // 0x37 55 7 +    0x36, 0x49, 0x49, 0x49, 0x36, 0x00, // 0x38 56 8 +    0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, // 0x39 57 9 +    0x00, 0x00, 0x14, 0x00, 0x00, 0x00, // 0x3A 58 : +    0x00, 0x40, 0x34, 0x00, 0x00, 0x00, // 0x3B 59 ; +    0x00, 0x08, 0x14, 0x22, 0x41, 0x00, // 0x3C 60 < +    0x14, 0x14, 0x14, 0x14, 0x14, 0x00, // 0x3D 61 = +    0x00, 0x41, 0x22, 0x14, 0x08, 0x00, // 0x3E 62 > +    0x02, 0x01, 0x59, 0x09, 0x06, 0x00, // 0x3F 63 ? +    0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, // 0x40 64 @ +    0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, // 0x41 65 A +    0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, // 0x42 66 B +    0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, // 0x43 67 C +    0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, // 0x44 68 D +    0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, // 0x45 69 E +    0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, // 0x46 70 F +    0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, // 0x47 71 G +    0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, // 0x48 72 H +    0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, // 0x49 73 I +    0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, // 0x4A 74 J +    0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, // 0x4B 75 K +    0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, // 0x4C 76 L +    0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, // 0x4D 77 M +    0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, // 0x4E 78 N +    0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, // 0x4F 79 O +    0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, // 0x50 80 P +    0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, // 0x51 81 Q +    0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, // 0x52 82 R +    0x26, 0x49, 0x49, 0x49, 0x32, 0x00, // 0x53 83 S +    0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, // 0x54 84 T +    0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, // 0x55 85 U +    0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, // 0x56 86 V +    0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, // 0x57 87 W +    0x63, 0x14, 0x08, 0x14, 0x63, 0x00, // 0x58 88 X +    0x03, 0x04, 0x78, 0x04, 0x03, 0x00, // 0x59 89 Y +    0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, // 0x5A 90 Z +    0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, // 0x5B 91 [ +    0x02, 0x04, 0x08, 0x10, 0x20, 0x00, // 0x5C 92 \ backslash +    0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, // 0x5D 93 ] +    0x04, 0x02, 0x01, 0x02, 0x04, 0x00, // 0x5E 94 ^ +    0x40, 0x40, 0x40, 0x40, 0x40, 0x00, // 0x5F 95 _ +    0x00, 0x03, 0x07, 0x08, 0x00, 0x00, // 0x60 96 ` +    0x20, 0x54, 0x54, 0x78, 0x40, 0x00, // 0x61 97 a +    0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, // 0x62 98 b +    0x38, 0x44, 0x44, 0x44, 0x28, 0x00, // 0x63 99 c +    0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, // 0x64 100 d +    0x38, 0x54, 0x54, 0x54, 0x18, 0x00, // 0x65 101 e +    0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, // 0x66 102 f +    0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, // 0x67 103 g +    0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, // 0x68 104 h +    0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, // 0x69 105 i +    0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, // 0x6A 106 j +    0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, // 0x6B 107 k +    0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, // 0x6C 108 l +    0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, // 0x6D 109 m +    0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, // 0x6E 110 n +    0x38, 0x44, 0x44, 0x44, 0x38, 0x00, // 0x6F 111 o +    0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, // 0x70 112 p +    0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, // 0x71 113 q +    0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, // 0x72 114 r +    0x48, 0x54, 0x54, 0x54, 0x24, 0x00, // 0x73 115 s +    0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, // 0x74 116 t +    0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, // 0x75 117 u +    0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, // 0x76 118 v +    0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, // 0x77 119 w +    0x44, 0x28, 0x10, 0x28, 0x44, 0x00, // 0x78 120 x +    0x4C, 0x90, 0x10, 0x90, 0x7C, 0x00, // 0x79 121 y +    0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, // 0x7A 122 z +    0x00, 0x08, 0x36, 0x41, 0x00, 0x00, // 0x7B 123 { +    0x00, 0x00, 0x77, 0x00, 0x00, 0x00, // 0x7C 124 | +    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 + +#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 +    0xE0, 0xE0, 0x80, 0x00, 0x00, 0x00, // 0x83 +    0x00, 0x00, 0x00, 0x80, 0xF0, 0xF8, // 0x84 +    0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, // 0x85 +    0x80, 0xE0, 0xF8, 0xF8, 0xF8, 0xF8, // 0x86 +    0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x87 +    0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x00, // 0x88 +    0x80, 0xE0, 0xF0, 0xF8, 0x78, 0x38, // 0x89 +    0x08, 0x08, 0x00, 0x00, 0x00, 0x00, // 0x8A +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x8B +    0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x38, // 0x8C +    0x38, 0xF8, 0xF0, 0xF0, 0xE0, 0x00, // 0x8D +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x8E +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x8F +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x90 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x91 +    0x00, 0x00, 0x00, 0x80, 0xFC, 0xFC, // 0x92 +    0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00, // 0x93 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x94 +    0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC, // 0x95 +    0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, // 0x96 +    0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, // 0x97 +    0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, // 0x98 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x99 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x9A +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x9B +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x9C +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x9D +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x9E +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x9F +    0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, // 0xA0 +    0xFF, 0xFF, 0xFF, 0xC1, 0x80, 0x00, // 0xA1 +    0x00, 0x38, 0x38, 0xB8, 0xB8, 0xF9, // 0xA2 +    0xF9, 0xF8, 0x38, 0x00, 0x00, 0x00, // 0xA3 +    0x00, 0xC0, 0xF8, 0xFF, 0xFF, 0x1F, // 0xA4 +    0x01, 0x3F, 0xFF, 0xFF, 0xF0, 0xFE, // 0xA5 +    0x7F, 0x0F, 0x03, 0xFF, 0xFF, 0xFF, // 0xA6 +    0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, // 0xA7 +    0xFF, 0xFF, 0xFF, 0x3F, 0x1E, 0x7F, // 0xA8 +    0xFF, 0xFF, 0xF3, 0xC1, 0x80, 0x00, // 0xA9 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xAA +    0x00, 0x00, 0x00, 0x00, 0x00, 0x80, // 0xAB +    0xFF, 0xFF, 0xFF, 0x3F, 0x1C, 0x1C, // 0xAC +    0x9C, 0xFF, 0xFF, 0xF3, 0xE1, 0x00, // 0xAD +    0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, // 0xAE +    0xFF, 0x0F, 0x07, 0x07, 0x8E, 0xFF, // 0xAF +    0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, // 0xB0 +    0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0x8F, // 0xB1 +    0x07, 0x07, 0x8E, 0xFF, 0xFF, 0xFF, // 0xB2 +    0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, // 0xB3 +    0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, // 0xB4 +    0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, // 0xB5 +    0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, // 0xB6 +    0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, // 0xB7 +    0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, // 0xB8 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xB9 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xBA +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xBB +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xBC +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xBD +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xBE +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xBF +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC0 +    0x00, 0x01, 0x03, 0x03, 0x03, 0x07, // 0xC1 +    0x07, 0x07, 0x07, 0x03, 0x03, 0x03, // 0xC2 +    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC3 +    0x06, 0x07, 0x07, 0x07, 0x01, 0x00, // 0xC4 +    0x00, 0x00, 0x07, 0x07, 0x07, 0x01, // 0xC5 +    0x00, 0x00, 0x00, 0x07, 0x07, 0x07, // 0xC6 +    0x07, 0x00, 0x00, 0x00, 0x00, 0x07, // 0xC7 +    0x07, 0x07, 0x07, 0x00, 0x00, 0x00, // 0xC8 +    0x00, 0x03, 0x07, 0x07, 0x07, 0x06, // 0xC9 +    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xCA +    0x00, 0x00, 0x00, 0x00, 0x00, 0x07, // 0xCB +    0x07, 0x07, 0x07, 0x07, 0x07, 0x07, // 0xCC +    0x07, 0x07, 0x03, 0x01, 0x00, 0x00, // 0xCD +    0x00, 0x00, 0x00, 0x00, 0x03, 0x07, // 0xCE +    0x07, 0x07, 0x07, 0x03, 0x07, 0x07, // 0xCF +    0x07, 0x07, 0x00, 0x00, 0x00, 0x00, // 0xD0 +    0x00, 0x00, 0x03, 0x07, 0x07, 0x07, // 0xD1 +    0x07, 0x03, 0x07, 0x07, 0x07, 0x07, // 0xD2 +    0x00, 0x00, 0x00, 0x00, 0x01, 0x07, // 0xD3 +    0x07, 0x07, 0x01, 0x00, 0x00, 0x00, // 0xD4 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD5 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD6 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD7 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD8 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD9 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDA +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDB +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDC +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDD +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDE +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDF +    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, +    #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, +    0xC4, 0xA0, 0xE4, 0xB0, 0xDC, 0xE4, +    0xFC, 0xFC, 0xFC, 0xFC, 0x3C, 0x3C, +    0xFC, 0xF8, 0xF0, 0xF0, 0xE0, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, +    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, +    0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, // 0x90 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0xF0, // 0xA0 +    0xFC, 0xF6, 0xF7, 0xEF, 0xFF, 0x87, +    0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, +    0x1F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, +    0xFF, 0x07, 0x1F, 0x1F, 0x19, 0x15, +    0xF7, 0x16, 0x1A, 0x1B, 0x16, 0x07, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x0C, 0x0C, 0x33, 0x33, +    0x33, 0x33, 0x33, 0x33, 0xC0, 0xC0, +    0x00, 0x00, 0x03, 0x03, 0xFF, 0xFF, +    0x03, 0x03, 0x00, 0x00, 0xC0, 0xC0, +    0x00, 0x00, 0x00, 0xFC, 0xFC, 0x03, +    0x03, 0x03, 0x03, 0x03, 0x03, 0xFC, +    0xFC, 0x00, 0x00, 0x00, 0xFC, 0xFC, +    0x03, 0x03, 0x03, 0x03, 0x03, 0x03, +    0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, +    0xFF, 0xFF, 0x30, 0x30, 0xCC, 0xCC, // 0xB0 +    0x03, 0x03, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 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, +    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, 0x01, // 0xC0 +    0x03, 0x07, 0x07, 0x07, 0x07, 0x01, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x03, 0x07, 0x07, +    0x03, 0x00, 0x00, 0x02, 0x04, 0x00, +    0x07, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x03, 0x03, 0x03, 0x03, +    0x03, 0x03, 0x03, 0x03, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x03, 0x03, 0x03, 0x03, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x03, +    0x03, 0x03, 0x03, 0x03, 0x03, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x03, 0x03, 0x03, 0x03, 0x03, 0x03, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x03, 0x03, 0x00, 0x00, 0x00, 0x00, // 0xD0 +    0x03, 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, 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, // 0xDF +    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, +    #elif defined(OLED_LOGO_CORNE) +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x80 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, +    0xF0, 0xF8, 0xF8, 0x18, 0x00, 0xC0, +    0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, +    0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0, +    0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, +    0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, +    0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, +    0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, +    0x00, 0x00, 0x00, 0xE0, 0xE0, 0xC0, +    0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, +    0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0, +    0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, +    0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, // 0x90 +    0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, +    0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, // 0xA0 +    0x00, 0x00, 0x00, 0xF8, 0xFC, 0xFE, +    0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, +    0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, +    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +    0xFF, 0x1F, 0x07, 0x01, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x81, +    0xC3, 0xC3, 0xC3, 0x00, 0x00, 0xFF, +    0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF, +    0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, +    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, +    0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, +    0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, // 0xB0 +    0x9D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, +    0x1C, 0x9D, 0xDF, 0xDF, 0xDF, 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, // 0xC0 +    0x00, 0x00, 0x00, 0x03, 0x0F, 0x1F, +    0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, +    0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F, +    0x3F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, +    0x7F, 0x7C, 0x78, 0x78, 0x38, 0x1C, +    0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x01, 0x03, 0x07, 0x07, +    0x07, 0x07, 0x07, 0x07, 0x07, 0x07, +    0x03, 0x01, 0x00, 0x00, 0x00, 0x00, +    0x01, 0x03, 0x07, 0x07, 0x07, 0x07, +    0x07, 0x07, 0x07, 0x07, 0x03, 0x01, +    0x00, 0x00, 0x00, 0x07, 0x07, 0x07, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x07, 0x07, 0x07, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x07, 0x07, +    0x07, 0x00, 0x00, 0x00, 0x01, 0x03, // 0xD0 +    0x07, 0x07, 0x07, 0x07, 0x07, 0x07, +    0x07, 0x07, 0x03, 0x01, 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, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDF +    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, + +#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, +    0x06, 0x03, 0x01, 0x01, 0x01, 0x01, +    0x01, 0xC3, 0x7E, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x08, 0x08, 0x08, 0x00, +    0x00, 0x08, 0x08, 0x08, 0x00, 0x1C, +    0x22, 0x41, 0x41, 0x41, 0x22, 0x1C, +    0x00, 0x08, 0x08, 0x08, 0x00, 0x00, +    0x08, 0x08, 0x08, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x20, 0x20, 0xF8, +    0x0C, 0x04, 0xE7, 0xE4, 0xE4, 0x07, +    0x04, 0xE4, 0xE7, 0xE4, 0x04, 0x07, +    0xE4, 0xE4, 0xE7, 0x04, 0x0C, 0xF8, +    0x20, 0x20, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x1C, 0x1C, 0x3E, 0x7F, 0x7F, +    0x00, 0x14, 0x08, 0x14, 0x00, 0x00, // 0x90 +    0x00, 0x1C, 0x1C, 0x3E, 0x7F, 0x7F, +    0x00, 0x22, 0x1C, 0x41, 0x3E, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x30, +    0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, +    0x77, 0x77, 0x77, 0x00, 0x77, 0x77, +    0x77, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x3E, 0x4A, 0x4F, +    0x4A, 0x3E, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x08, 0x00, 0x00, +    0x00, 0x00, 0x08, 0x00, 0x00, 0x60, +    0x70, 0x3E, 0x1F, 0x19, 0x18, 0x0C, +    0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +    0x00, 0x08, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0xF8, 0x0C, 0x06, 0x07, 0xFC, // 0xA0 +    0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, +    0xFF, 0x80, 0xFF, 0x01, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0xF0, 0x1C, +    0x07, 0x01, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, +    0x00, 0x1C, 0x22, 0x00, 0x00, 0x1C, +    0x3E, 0x7F, 0x63, 0x41, 0x22, 0x1C, +    0x00, 0x00, 0x08, 0x00, 0x00, 0x00, +    0x00, 0x08, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x49, 0x49, 0xFF, +    0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x38, +    0x30, 0xFF, 0xFF, 0xFF, 0x30, 0x38, +    0x3F, 0x1F, 0x0F, 0x00, 0x00, 0xFF, +    0x49, 0x49, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x40, 0x60, 0x6A, 0x64, +    0x6A, 0x60, 0x40, 0x00, 0x00, 0x00, // 0xB0 +    0x00, 0x04, 0x42, 0x69, 0x65, 0x65, +    0x65, 0x69, 0x42, 0x04, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x06, 0x06, 0x06, +    0x0C, 0x18, 0x30, 0x66, 0x66, 0x66, +    0x00, 0x00, 0xFC, 0x24, 0x24, 0xFC, +    0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, +    0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, +    0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, +    0x24, 0x24, 0xFC, 0x00, 0x00, 0x00, +    0xF0, 0x90, 0x90, 0xF0, 0x90, 0x90, +    0xF0, 0x98, 0x9C, 0xF2, 0x22, 0x21, +    0xE1, 0x01, 0x01, 0x01, 0xF1, 0x91, +    0x91, 0xFA, 0x4C, 0x4C, 0xF8, 0x48, +    0x48, 0xF8, 0x48, 0x48, 0xF8, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x03, 0x0E, 0x18, 0x30, 0x21, // 0xC0 +    0x21, 0x31, 0x18, 0x10, 0x30, 0x20, +    0x60, 0x41, 0x60, 0x20, 0x30, 0x18, +    0x30, 0x60, 0x40, 0x40, 0x47, 0x4C, +    0x48, 0x68, 0x38, 0x1C, 0x0F, 0x00, +    0x00, 0x00, 0x00, 0x08, 0x00, 0x00, +    0x00, 0x00, 0x08, 0x00, 0x00, 0x1C, +    0x22, 0x41, 0x63, 0x7F, 0x3E, 0x1C, +    0x00, 0x00, 0x22, 0x1C, 0x00, 0x00, +    0x41, 0x22, 0x1C, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x02, 0x02, 0x0F, +    0x18, 0x10, 0x70, 0x10, 0x10, 0x70, +    0x10, 0x13, 0x73, 0x13, 0x10, 0x70, +    0x10, 0x10, 0x70, 0x10, 0x18, 0x0F, +    0x02, 0x02, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x1C, 0x22, 0xC9, 0xD1, +    0xC9, 0x22, 0x1C, 0x00, 0x00, 0x00, // 0xD0 +    0x00, 0x10, 0x02, 0x38, 0xFC, 0xED, +    0xFC, 0x38, 0x02, 0x10, 0x00, 0x00, +    0x08, 0x0C, 0x7E, 0x7F, 0x7E, 0x0C, +    0x08, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x0F, 0x09, 0x09, 0x09, +    0x0F, 0x09, 0x09, 0x0F, 0x09, 0x09, +    0x09, 0x09, 0x09, 0x09, 0x09, 0x09, +    0x09, 0x0F, 0x09, 0x09, 0x0F, 0x09, +    0x09, 0x09, 0x0F, 0x00, 0x00, 0x00, +    0x07, 0x04, 0x04, 0x07, 0x04, 0x04, +    0x07, 0x04, 0x04, 0x0F, 0x09, 0x09, +    0x0F, 0x00, 0x00, 0x00, 0x07, 0x04, +    0x04, 0x07, 0x02, 0x02, 0x03, 0x02, +    0x02, 0x03, 0x02, 0x02, 0x03, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDF +    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, + +#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 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x80 +    0x40, 0x40, 0x40, 0xF0, 0xF8, 0xF8, +    0xFF, 0x38, 0xFF, 0xF8, 0xF8, 0x3F, +    0xF8, 0xF8, 0xFF, 0x38, 0xFF, 0xF8, +    0xF8, 0xF0, 0x40, 0x40, 0x40, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +    0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, +    0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, +    0x80, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, +    0x00, 0x00, 0x80, 0xC0, 0xC0, 0x00, +    0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, +    0xC0, 0xC0, 0xC0, 0x00, 0xC0, 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, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x90 +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, // 0xA0 +    0x49, 0x49, 0x49, 0xFF, 0xFF, 0xFF, +    0xFF, 0xE0, 0xDF, 0xBF, 0xBF, 0x00, +    0xBF, 0xBF, 0xDF, 0xE0, 0xFF, 0xFF, +    0xFF, 0xFF, 0x49, 0x49, 0x49, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, +    0x60, 0x60, 0xE0, 0xBF, 0x1F, 0x00, +    0x7F, 0x7F, 0x07, 0x1E, 0x38, 0x1E, +    0x07, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, +    0x0E, 0x1F, 0x3B, 0x71, 0x60, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, +    0x0C, 0x0C, 0x0C, 0x00, 0x7E, 0x7E, +    0x00, 0x7F, 0x7E, 0x03, 0x03, 0x00, +    0x7F, 0x7E, 0x03, 0x03, 0x7E, 0x7E, +    0x03, 0x03, 0x7F, 0x7E, 0x00, 0x0F, +    0x3E, 0x70, 0x3C, 0x06, 0x3C, 0x70, +    0x3E, 0x0F, 0x00, 0x32, 0x7B, 0x49, // 0xB0 +    0x49, 0x3F, 0x7E, 0x00, 0x7F, 0x7E, +    0x03, 0x03, 0x00, 0x1E, 0x3F, 0x69, +    0x69, 0x6F, 0x26, 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, // 0xC0 +    0x01, 0x01, 0x01, 0x07, 0x0F, 0x0F, +    0x7F, 0x0F, 0x7F, 0x0F, 0x0F, 0x7E, +    0x0F, 0x0F, 0x7F, 0x0F, 0x7F, 0x0F, +    0x0F, 0x07, 0x01, 0x01, 0x01, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x01, 0x01, 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, // 0xD0 +    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, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDF +    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, + +#endif +  }; diff --git a/users/drashna/drashna_transport.c b/users/drashna/drashna_transport.c new file mode 100644 index 0000000000..f0908b4900 --- /dev/null +++ b/users/drashna/drashna_transport.c @@ -0,0 +1,508 @@ +/* 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) + +#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 int8_t split_mouse_x = 0, split_mouse_y = 0; +#endif + +#ifdef OLED_DRIVER_ENABLE +#    include "oled_driver.h" +#endif + +#if defined(USE_I2C) + +#    include "i2c_master.h" +#    include "i2c_slave.h" + +typedef struct _I2C_slave_buffer_t { +    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 +    int8_t        mouse_x; +    int8_t        mouse_y; +    bool          oled_on; +    layer_state_t t_layer_state; +    layer_state_t t_default_layer_state; +    bool          is_rgb_matrix_suspended; +} __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_START offsetof(I2C_slave_buffer_t, smatrix) +#    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_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_RGB_MATRIX_SUSPEND_START offsetof(I2C_slave_buffer_t, is_rgb_matrix_suspended) + +#    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 matrix[]) { +    i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_START, (void *)matrix, sizeof(i2c_buffer->smatrix), TIMEOUT); + +    // 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); +    } +#    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 = is_oled_on(); +    if (is_oled != i2c_buffer->oled_on) { +        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LAYER_STATE_START, (void *)&is_oled, sizeof(is_oled), TIMEOUT) >= 0) { +            i2c_buffer->oled_on = is_oled; +        } +    } +#    endif + +#    ifdef RGB_MATRIX_ENABLE +    bool sus_state = rgb_matrix_get_suspend_state(); +    if (sus_state != i2c_buffer->is_rgb_matrix_suspended) { +        if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_SUSPEND_START, (void *)&sus_state, sizeof(sus_state), TIMEOUT) >= 0) { +            i2c_buffer->is_rgb_matrix_suspended = sus_state; +        } +    } +#    endif + +    return true; +} + +void transport_slave(matrix_row_t matrix[]) { +    // Copy matrix to I2C buffer +    memcpy((void *)i2c_buffer->smatrix, (void *)matrix, sizeof(i2c_buffer->smatrix)); + +// 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()) { +        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 + +#    ifdef RGB_MATRIX_ENABLE +    rgb_matrix_set_suspend_state(i2c_buffer->is_rgb_matrix_suspended); +#    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 +#    ifdef BACKLIGHT_ENABLE +    uint8_t backlight_level; +#    endif +#    ifdef WPM_ENABLE +    uint8_t current_wpm; +#    endif +    bool          oled_on; +    layer_state_t t_layer_state; +    layer_state_t t_default_layer_state; +    bool          is_rgb_matrix_suspended; +} __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 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) { +        matrix[i] = serial_s2m_buffer.smatrix[i]; +    } + +#    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); +    } +#    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 + +#    ifdef RGB_MATRIX_ENABLE +    serial_m2s_buffer.is_rgb_matrix_suspended = rgb_matrix_get_suspend_state(); +#    endif + +    return true; +} + +void transport_slave(matrix_row_t matrix[]) { +    transport_rgblight_slave(); + +    // TODO: if MATRIX_COLS > 8 change to pack() +    for (int i = 0; i < ROWS_PER_HAND; ++i) { +        serial_s2m_buffer.smatrix[i] = matrix[i]; +    } + +#    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()) { +        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 + +#    ifdef RGB_MATRIX_ENABLE +    rgb_matrix_set_suspend_state(serial_m2s_buffer.is_rgb_matrix_suspended); +#    endif +} + +#endif + +#ifdef POINTING_DEVICE_ENABLE +void master_mouse_send(int8_t x, int8_t y) { +    split_mouse_x = x; +    split_mouse_y = y; +} +#endif diff --git a/users/drashna/font_gmk_bad.h b/users/drashna/font_gmk_bad.h deleted file mode 100644 index 2f660d7eb5..0000000000 --- a/users/drashna/font_gmk_bad.h +++ /dev/null @@ -1,234 +0,0 @@ -#pragma once - -#include "progmem.h" - -// Corne 8x6 font with QMK Firmware Logo -// Online editor: https://helixfonteditor.netlify.com/ - -// clang-format off -const unsigned char font[] PROGMEM = { -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, -  0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, -  0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, -  0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, -  0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, -  0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, -  0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, -  0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, -  0x00, 0x18, 0x24, 0x18, 0x00, 0x00, -  0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, -  0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, -  0x26, 0x29, 0x79, 0x29, 0x26, 0x00, -  0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, -  0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, -  0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, -  0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, -  0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, -  0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, -  0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, -  0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, -  0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, -  0x60, 0x60, 0x60, 0x60, 0x60, 0x00, -  0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, -  0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, -  0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, -  0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, -  0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, -  0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, -  0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, -  0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, -  0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, -  0x00, 0x07, 0x00, 0x07, 0x00, 0x00, -  0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, -  0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, -  0x23, 0x13, 0x08, 0x64, 0x62, 0x00, -  0x36, 0x49, 0x56, 0x20, 0x50, 0x00, -  0x00, 0x08, 0x07, 0x03, 0x00, 0x00, -  0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, -  0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, -  0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, -  0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, -  0x00, 0x80, 0x70, 0x30, 0x00, 0x00, -  0x08, 0x08, 0x08, 0x08, 0x08, 0x00, -  0x00, 0x00, 0x60, 0x60, 0x00, 0x00, -  0x20, 0x10, 0x08, 0x04, 0x02, 0x00, -  0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, -  0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, -  0x72, 0x49, 0x49, 0x49, 0x46, 0x00, -  0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, -  0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, -  0x27, 0x45, 0x45, 0x45, 0x39, 0x00, -  0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, -  0x41, 0x21, 0x11, 0x09, 0x07, 0x00, -  0x36, 0x49, 0x49, 0x49, 0x36, 0x00, -  0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, -  0x00, 0x00, 0x14, 0x00, 0x00, 0x00, -  0x00, 0x40, 0x34, 0x00, 0x00, 0x00, -  0x00, 0x08, 0x14, 0x22, 0x41, 0x00, -  0x14, 0x14, 0x14, 0x14, 0x14, 0x00, -  0x00, 0x41, 0x22, 0x14, 0x08, 0x00, -  0x02, 0x01, 0x59, 0x09, 0x06, 0x00, -  0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, -  0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, -  0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, -  0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, -  0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, -  0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, -  0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, -  0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, -  0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, -  0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, -  0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, -  0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, -  0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, -  0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, -  0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, -  0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, -  0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, -  0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, -  0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, -  0x26, 0x49, 0x49, 0x49, 0x32, 0x00, -  0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, -  0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, -  0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, -  0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, -  0x63, 0x14, 0x08, 0x14, 0x63, 0x00, -  0x03, 0x04, 0x78, 0x04, 0x03, 0x00, -  0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, -  0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, -  0x02, 0x04, 0x08, 0x10, 0x20, 0x00, -  0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, -  0x04, 0x02, 0x01, 0x02, 0x04, 0x00, -  0x40, 0x40, 0x40, 0x40, 0x40, 0x00, -  0x00, 0x03, 0x07, 0x08, 0x00, 0x00, -  0x20, 0x54, 0x54, 0x78, 0x40, 0x00, -  0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, -  0x38, 0x44, 0x44, 0x44, 0x28, 0x00, -  0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, -  0x38, 0x54, 0x54, 0x54, 0x18, 0x00, -  0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, -  0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, -  0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, -  0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, -  0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, -  0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, -  0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, -  0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, -  0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, -  0x38, 0x44, 0x44, 0x44, 0x38, 0x00, -  0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, -  0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, -  0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, -  0x48, 0x54, 0x54, 0x54, 0x24, 0x00, -  0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, -  0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, -  0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, -  0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, -  0x44, 0x28, 0x10, 0x28, 0x44, 0x00, -  0x4C, 0x90, 0x10, 0x90, 0x7C, 0x00, -  0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, -  0x00, 0x08, 0x36, 0x41, 0x00, 0x00, -  0x00, 0x00, 0x77, 0x00, 0x00, 0x00, -  0x00, 0x41, 0x36, 0x08, 0x00, 0x00, -  0x02, 0x01, 0x02, 0x04, 0x02, 0x00, -  0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0x70, -  0x38, 0x38, 0x38, 0x78, 0x70, 0xF0, -  0xE0, 0xE0, 0x80, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x80, 0xF0, 0xF8, -  0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, -  0x80, 0xE0, 0xF8, 0xF8, 0xF8, 0xF8, -  0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x00, -  0x80, 0xE0, 0xF0, 0xF8, 0x78, 0x38, -  0x08, 0x08, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x38, -  0x38, 0xF8, 0xF0, 0xF0, 0xE0, 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, 0x80, 0xFC, 0xFC, -  0xFC, 0x1C, 0x00, 0x00, 0x00, 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, 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, 0x3C, -  0xFF, 0xFF, 0xFF, 0xC1, 0x80, 0x00, -  0x00, 0x38, 0x38, 0xB8, 0xB8, 0xF9, -  0xF9, 0xF8, 0x38, 0x00, 0x00, 0x00, -  0x00, 0xC0, 0xF8, 0xFF, 0xFF, 0x1F, -  0x01, 0x3F, 0xFF, 0xFF, 0xF0, 0xFE, -  0x7F, 0x0F, 0x03, 0xFF, 0xFF, 0xFF, -  0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, -  0xFF, 0xFF, 0xFF, 0x3F, 0x1E, 0x7F, -  0xFF, 0xFF, 0xF3, 0xC1, 0x80, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, -  0xFF, 0xFF, 0xFF, 0x3F, 0x1C, 0x1C, -  0x9C, 0xFF, 0xFF, 0xF3, 0xE1, 0x00, -  0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, -  0xFF, 0x0F, 0x07, 0x07, 0x8E, 0xFF, -  0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, -  0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0x8F, -  0x07, 0x07, 0x8E, 0xFF, 0xFF, 0xFF, -  0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, -  0xC0, 0x80, 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, -  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, 0x01, 0x03, 0x03, 0x03, 0x07, -  0x07, 0x07, 0x07, 0x03, 0x03, 0x03, -  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x06, 0x07, 0x07, 0x07, 0x01, 0x00, -  0x00, 0x00, 0x07, 0x07, 0x07, 0x01, -  0x00, 0x00, 0x00, 0x07, 0x07, 0x07, -  0x07, 0x00, 0x00, 0x00, 0x00, 0x07, -  0x07, 0x07, 0x07, 0x00, 0x00, 0x00, -  0x00, 0x03, 0x07, 0x07, 0x07, 0x06, -  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x07, -  0x07, 0x07, 0x07, 0x07, 0x07, 0x07, -  0x07, 0x07, 0x03, 0x01, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x03, 0x07, -  0x07, 0x07, 0x07, 0x03, 0x07, 0x07, -  0x07, 0x07, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x03, 0x07, 0x07, 0x07, -  0x07, 0x03, 0x07, 0x07, 0x07, 0x07, -  0x00, 0x00, 0x00, 0x00, 0x01, 0x07, -  0x07, 0x07, 0x01, 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, -}; diff --git a/users/drashna/hue_manitee_font.h b/users/drashna/hue_manitee_font.h deleted file mode 100644 index 2deb4d32dc..0000000000 --- a/users/drashna/hue_manitee_font.h +++ /dev/null @@ -1,234 +0,0 @@ -#pragma once - -#include "progmem.h" - -// Corne 8x6 font with QMK Firmware Logo -// Online editor: https://helixfonteditor.netlify.com/ - -// clang-format off -const unsigned char font[] PROGMEM = { -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, -  0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, -  0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, -  0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, -  0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, -  0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, -  0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, -  0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, -  0x00, 0x18, 0x24, 0x18, 0x00, 0x00, -  0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, -  0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, -  0x26, 0x29, 0x79, 0x29, 0x26, 0x00, -  0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, -  0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, -  0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, -  0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, -  0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, -  0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, -  0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, -  0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, -  0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, -  0x60, 0x60, 0x60, 0x60, 0x60, 0x00, -  0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, -  0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, -  0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, -  0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, -  0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, -  0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, -  0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, -  0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, -  0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, -  0x00, 0x07, 0x00, 0x07, 0x00, 0x00, -  0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, -  0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, -  0x23, 0x13, 0x08, 0x64, 0x62, 0x00, -  0x36, 0x49, 0x56, 0x20, 0x50, 0x00, -  0x00, 0x08, 0x07, 0x03, 0x00, 0x00, -  0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, -  0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, -  0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, -  0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, -  0x00, 0x80, 0x70, 0x30, 0x00, 0x00, -  0x08, 0x08, 0x08, 0x08, 0x08, 0x00, -  0x00, 0x00, 0x60, 0x60, 0x00, 0x00, -  0x20, 0x10, 0x08, 0x04, 0x02, 0x00, -  0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, -  0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, -  0x72, 0x49, 0x49, 0x49, 0x46, 0x00, -  0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, -  0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, -  0x27, 0x45, 0x45, 0x45, 0x39, 0x00, -  0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, -  0x41, 0x21, 0x11, 0x09, 0x07, 0x00, -  0x36, 0x49, 0x49, 0x49, 0x36, 0x00, -  0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, -  0x00, 0x00, 0x14, 0x00, 0x00, 0x00, -  0x00, 0x40, 0x34, 0x00, 0x00, 0x00, -  0x00, 0x08, 0x14, 0x22, 0x41, 0x00, -  0x14, 0x14, 0x14, 0x14, 0x14, 0x00, -  0x00, 0x41, 0x22, 0x14, 0x08, 0x00, -  0x02, 0x01, 0x59, 0x09, 0x06, 0x00, -  0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, -  0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, -  0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, -  0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, -  0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, -  0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, -  0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, -  0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, -  0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, -  0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, -  0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, -  0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, -  0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, -  0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, -  0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, -  0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, -  0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, -  0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, -  0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, -  0x26, 0x49, 0x49, 0x49, 0x32, 0x00, -  0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, -  0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, -  0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, -  0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, -  0x63, 0x14, 0x08, 0x14, 0x63, 0x00, -  0x03, 0x04, 0x78, 0x04, 0x03, 0x00, -  0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, -  0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, -  0x02, 0x04, 0x08, 0x10, 0x20, 0x00, -  0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, -  0x04, 0x02, 0x01, 0x02, 0x04, 0x00, -  0x40, 0x40, 0x40, 0x40, 0x40, 0x00, -  0x00, 0x03, 0x07, 0x08, 0x00, 0x00, -  0x20, 0x54, 0x54, 0x78, 0x40, 0x00, -  0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, -  0x38, 0x44, 0x44, 0x44, 0x28, 0x00, -  0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, -  0x38, 0x54, 0x54, 0x54, 0x18, 0x00, -  0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, -  0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, -  0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, -  0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, -  0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, -  0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, -  0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, -  0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, -  0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, -  0x38, 0x44, 0x44, 0x44, 0x38, 0x00, -  0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, -  0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, -  0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, -  0x48, 0x54, 0x54, 0x54, 0x24, 0x00, -  0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, -  0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, -  0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, -  0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, -  0x44, 0x28, 0x10, 0x28, 0x44, 0x00, -  0x4C, 0x90, 0x10, 0x90, 0x7C, 0x00, -  0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, -  0x00, 0x08, 0x36, 0x41, 0x00, 0x00, -  0x00, 0x00, 0x77, 0x00, 0x00, 0x00, -  0x00, 0x41, 0x36, 0x08, 0x00, 0x00, -  0x02, 0x01, 0x02, 0x04, 0x02, 0x00, -  0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, -  0x90, 0x70, 0xE8, 0xA8, 0xE4, 0xC4, -  0xC4, 0xA0, 0xE4, 0xB0, 0xDC, 0xE4, -  0xFC, 0xFC, 0xFC, 0xFC, 0x3C, 0x3C, -  0xFC, 0xF8, 0xF0, 0xF0, 0xE0, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, -  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, -  0xF8, 0xF8, 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, -  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, 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, 0xF0, -  0xFC, 0xF6, 0xF7, 0xEF, 0xFF, 0x87, -  0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, -  0x1F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, -  0xFF, 0x07, 0x1F, 0x1F, 0x19, 0x15, -  0xF7, 0x16, 0x1A, 0x1B, 0x16, 0x07, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x0C, 0x0C, 0x33, 0x33, -  0x33, 0x33, 0x33, 0x33, 0xC0, 0xC0, -  0x00, 0x00, 0x03, 0x03, 0xFF, 0xFF, -  0x03, 0x03, 0x00, 0x00, 0xC0, 0xC0, -  0x00, 0x00, 0x00, 0xFC, 0xFC, 0x03, -  0x03, 0x03, 0x03, 0x03, 0x03, 0xFC, -  0xFC, 0x00, 0x00, 0x00, 0xFC, 0xFC, -  0x03, 0x03, 0x03, 0x03, 0x03, 0x03, -  0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, -  0xFF, 0xFF, 0x30, 0x30, 0xCC, 0xCC, -  0x03, 0x03, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 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, -  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, 0x01, -  0x03, 0x07, 0x07, 0x07, 0x07, 0x01, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x03, 0x07, 0x07, -  0x03, 0x00, 0x00, 0x02, 0x04, 0x00, -  0x07, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x00, 0x00, 0x03, 0x03, 0x03, 0x03, -  0x03, 0x03, 0x03, 0x03, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x03, 0x03, 0x03, 0x03, 0x00, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x03, -  0x03, 0x03, 0x03, 0x03, 0x03, 0x00, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x03, 0x03, 0x03, 0x03, 0x03, 0x03, -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -  0x03, 0x03, 0x00, 0x00, 0x00, 0x00, -  0x03, 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, 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, -}; diff --git a/users/drashna/oled_stuff.c b/users/drashna/oled_stuff.c index 30eb068f77..4abf5f05f5 100644 --- a/users/drashna/oled_stuff.c +++ b/users/drashna/oled_stuff.c @@ -15,6 +15,7 @@   */  #include "drashna.h" +#include <stdio.h>  #ifndef KEYLOGGER_LENGTH  // #    ifdef OLED_DISPLAY_128X64 @@ -24,7 +25,7 @@  // #    endif  #endif -static uint32_t oled_timer                       = 0; +uint32_t        oled_timer                       = 0;  static char     keylog_str[KEYLOGGER_LENGTH + 1] = {"\n"};  static uint16_t log_timer                        = 0; @@ -132,28 +133,26 @@ void render_layer_state(void) {      oled_write_P(PSTR(" "), false);  #endif      oled_write_P(PSTR(OLED_RENDER_LAYER_RAISE), layer_state_is(_RAISE)); -#if _MODS -#    ifdef OLED_DISPLAY_128X64 -    oled_write_P(PSTR(" "), false); -#    endif -    oled_write_P(PSTR(OLED_RENDER_LAYER_MODS), layer_state_is(_MODS)); -#endif  #ifdef OLED_DISPLAY_128X64      oled_advance_page(true); +    oled_write_P(PSTR(" "), false); +    oled_write_P(PSTR("GamePad"), layer_state_is(_GAMEPAD)); +    oled_write_P(PSTR(" "), false); +    oled_write_P(PSTR("Diablo"), layer_state_is(_DIABLO)); +    oled_write_P(PSTR(" "), false); +    oled_write_P(PSTR("Mouse"), layer_state_is(_MOUSE));  #endif  }  void render_keylock_status(uint8_t led_usb_state) {      oled_write_P(PSTR(OLED_RENDER_LOCK_NAME), false); +#if !defined(OLED_DISPLAY_128X64)      oled_write_P(PSTR(" "), false); +#endif      oled_write_P(PSTR(OLED_RENDER_LOCK_NUML), led_usb_state & (1 << USB_LED_NUM_LOCK)); -#ifdef OLED_DISPLAY_128X64      oled_write_P(PSTR(" "), false); -#endif      oled_write_P(PSTR(OLED_RENDER_LOCK_CAPS), led_usb_state & (1 << USB_LED_CAPS_LOCK)); -#ifdef OLED_DISPLAY_128X64      oled_write_P(PSTR(" "), false); -#endif      oled_write_P(PSTR(OLED_RENDER_LOCK_SCLK), led_usb_state & (1 << USB_LED_SCROLL_LOCK));  #ifndef OLED_DISPLAY_128X64      oled_advance_page(true); @@ -161,20 +160,18 @@ void render_keylock_status(uint8_t led_usb_state) {  }  void render_mod_status(uint8_t modifiers) { +    static const char PROGMEM mod_status[5][3] = {{0xE8, 0xE9, 0}, {0xE4, 0xE5, 0}, {0xE6, 0xE7, 0}, {0xEA, 0xEB, 0}, {0xEC, 0xED, 0}};      oled_write_P(PSTR(OLED_RENDER_MODS_NAME), false); -    oled_write_P(PSTR(OLED_RENDER_MODS_SFT), (modifiers & MOD_MASK_SHIFT)); -#ifdef OLED_DISPLAY_128X64 +    oled_write_P(mod_status[0], (modifiers & MOD_MASK_SHIFT)); +    oled_write_P(mod_status[!keymap_config.swap_lctl_lgui ? 3 : 4], (modifiers & MOD_MASK_GUI)); +#if !defined(OLED_DISPLAY_128X64)      oled_write_P(PSTR(" "), false);  #endif -    oled_write_P(PSTR(OLED_RENDER_MODS_CTL), (modifiers & MOD_MASK_CTRL)); -#ifdef OLED_DISPLAY_128X64 -    oled_write_P(PSTR(" "), false); -#endif -    oled_write_P(PSTR(OLED_RENDER_MODS_ALT), (modifiers & MOD_MASK_ALT)); -#ifdef OLED_DISPLAY_128X64 -    oled_write_P(PSTR(" "), false); +    oled_write_P(mod_status[2], (modifiers & MOD_MASK_ALT)); +    oled_write_P(mod_status[1], (modifiers & MOD_MASK_CTRL)); +#if defined(OLED_DISPLAY_128X64) +    oled_advance_page(true);  #endif -    oled_write_P(PSTR(OLED_RENDER_MODS_GUI), (modifiers & MOD_MASK_GUI));  }  void render_bootmagic_status(void) { @@ -204,41 +201,71 @@ void render_bootmagic_status(void) {  #endif          oled_write_P(logo[0][0], !is_bootmagic_on);      } +#ifndef OLED_DISPLAY_128X64 +    oled_write_P(PSTR(" "), false); +    oled_write_P(logo[1][1], is_bootmagic_on); +    oled_write_P(logo[0][1], !is_bootmagic_on); +#endif      oled_write_P(PSTR(" "), false); -#ifdef OLED_DISPLAY_128X64      oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NKRO), keymap_config.nkro);      oled_write_P(PSTR(" "), false); -    oled_write_ln_P(PSTR(OLED_RENDER_BOOTMAGIC_NOGUI), !keymap_config.no_gui); -    oled_write_P(PSTR("Magic "), false); -    if (keymap_config.swap_lctl_lgui) -#endif -    { -        oled_write_P(logo[1][1], is_bootmagic_on); +    oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NOGUI), !keymap_config.no_gui);  #ifdef OLED_DISPLAY_128X64 +    oled_advance_page(true); +    oled_write_P(PSTR("Magic"), false); +    oled_write_P(PSTR(" "), false); +    if (keymap_config.swap_lctl_lgui) { +        oled_write_P(logo[1][1], is_bootmagic_on);      } else { -#endif          oled_write_P(logo[0][1], !is_bootmagic_on);      } +#endif      oled_write_P(PSTR(" "), false); -#ifdef OLED_DISPLAY_128X64      oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_GRV), keymap_config.swap_grave_esc); -    oled_write_P(PSTR("  "), false); +    oled_write_P(PSTR(" "), false); +    oled_write_P(PSTR(" "), false);      oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_CAPS), keymap_config.swap_control_capslock); +#ifdef OLED_DISPLAY_128X64      oled_advance_page(true); -#else -    oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NKRO), keymap_config.nkro);  #endif  } +#if defined(POINTING_DEVICE_ENABLE) +extern bool tap_toggling; +#endif +  void render_user_status(void) {      oled_write_P(PSTR(OLED_RENDER_USER_NAME), false); +#if !defined(OLED_DISPLAY_128X64)      oled_write_P(PSTR(" "), false); +#endif +#if defined(RGB_MATRIX_ENABLE)      oled_write_P(PSTR(OLED_RENDER_USER_ANIM), userspace_config.rgb_matrix_idle_anim); +#    if !defined(OLED_DISPLAY_128X64)      oled_write_P(PSTR(" "), false); -    oled_write_P(PSTR(OLED_RENDER_USER_LAYR), userspace_config.rgb_layer_change); +#    endif +#elif defined(POINTING_DEVICE_ENABLE) +    static const char PROGMEM mouse_lock[3] = {0xF2, 0xF3, 0}; +    oled_write_P(mouse_lock, tap_toggling); +#endif +#ifdef AUDIO_ENABLE +    static const char PROGMEM audio_status[2][3] = {{0xE0, 0xE1, 0}, {0xE2, 0xE3, 0}}; +    oled_write_P(audio_status[is_audio_on()], false); + +#    ifdef AUDIO_CLICKY +    static const char PROGMEM audio_clicky_status[2][3] = {{0xF4, 0xF5, 0}, {0xF6, 0xF7, 0}}; +    oled_write_P(audio_clicky_status[is_clicky_on() && is_audio_on()], false); +#        if !defined(OLED_DISPLAY_128X64)      oled_write_P(PSTR(" "), false); -    oled_write_P(PSTR(OLED_RENDER_USER_NUKE), userspace_config.nuke_switch); -#ifdef OLED_DISPLAY_128X64 +#        endif +#    endif +#endif + +    static const char PROGMEM rgb_layer_status[2][3] = {{0xEE, 0xEF, 0}, {0xF0, 0xF1, 0}}; +    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(OLED_DISPLAY_128X64)      oled_advance_page(true);  #endif  } @@ -253,23 +280,55 @@ __attribute__((weak)) void oled_driver_render_logo(void) {      oled_write_P(qmk_logo, false);  } +void render_wpm(void) { +#ifdef WPM_ENABLE +#    ifdef OLED_DISPLAY_128X64 +    char wpm_counter[4]; +#    else +    char wpm_counter[6]; +#    endif +    snprintf(wpm_counter, sizeof(wpm_counter), "%3u", get_current_wpm()); +    oled_write_P(PSTR(OLED_RENDER_WPM_COUNTER), false); +    oled_write(wpm_counter, false); +#endif +} + +#ifdef KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball +extern keyboard_config_t keyboard_config; +extern uint16_t          dpi_array[]; + +void render_pointing_dpi_status(void) { +    char dpi_status[6]; +    snprintf(dpi_status, sizeof(dpi_status), "%5u", dpi_array[keyboard_config.dpi_config]); +    oled_write_P(PSTR("  DPI: "), false); +    oled_write(dpi_status, false); +} +#endif +  void render_status_secondary(void) { -#if !defined(SPLIT_TRANSPORT_MIRROR) || defined(OLED_DISPLAY_128X64) +#if defined(OLED_DISPLAY_128X64)      oled_driver_render_logo();  #endif      /* Show Keyboard Layout  */      render_default_layer_state();      render_layer_state();      render_mod_status(get_mods() | get_oneshot_mods()); -    render_keylogger_status(); - +    // render_keylogger_status(); +    render_keylock_status(host_keyboard_leds());  } -// clang-format on  void render_status_main(void) { +#if defined(OLED_DISPLAY_128X64)      oled_driver_render_logo(); -    /* Show Keyboard Layout  */ +    render_wpm(); +#    ifdef KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball +    render_pointing_dpi_status(); +#    endif +    oled_write_P(PSTR("\n"), false); +#else      render_default_layer_state(); +#endif +    /* Show Keyboard Layout  */      // render_keylock_status(host_keyboard_leds());      render_bootmagic_status();      render_user_status(); diff --git a/users/drashna/oled_stuff.h b/users/drashna/oled_stuff.h index 7f2786d00c..2224cd90ea 100644 --- a/users/drashna/oled_stuff.h +++ b/users/drashna/oled_stuff.h @@ -21,6 +21,7 @@  void oled_driver_render_logo(void);  bool process_record_user_oled(uint16_t keycode, keyrecord_t *record); +extern uint32_t oled_timer;  #ifdef OLED_DISPLAY_128X64  #    define OLED_RENDER_KEYLOGGER "Keylogger: " @@ -35,7 +36,7 @@ bool process_record_user_oled(uint16_t keycode, keyrecord_t *record);  #    define OLED_RENDER_LAYOUT_EUCALYN "Eucalyn"  #    define OLED_RENDER_LAYOUT_CARPLAX "Carplax" -#    define OLED_RENDER_LAYER_NAME   "Layer:\n" +#    define OLED_RENDER_LAYER_NAME   "Layer:"  #    define OLED_RENDER_LAYER_LOWER  "Lower"  #    define OLED_RENDER_LAYER_RAISE  "Raise"  #    define OLED_RENDER_LAYER_ADJUST "Adjust" @@ -46,7 +47,7 @@ bool process_record_user_oled(uint16_t keycode, keyrecord_t *record);  #    define OLED_RENDER_LOCK_CAPS "CAPS"  #    define OLED_RENDER_LOCK_SCLK "SCLK" -#    define OLED_RENDER_MODS_NAME "Mods: " +#    define OLED_RENDER_MODS_NAME "Mods:"  #    define OLED_RENDER_MODS_SFT  "Sft"  #    define OLED_RENDER_MODS_CTL  "Ctl"  #    define OLED_RENDER_MODS_ALT  "Alt" @@ -63,6 +64,7 @@ bool process_record_user_oled(uint16_t keycode, keyrecord_t *record);  #    define OLED_RENDER_USER_LAYR "Layr"  #    define OLED_RENDER_USER_NUKE "Nuke" +#    define OLED_RENDER_WPM_COUNTER "WPM: "  #else  #    define OLED_RENDER_KEYLOGGER "KLogr" @@ -83,15 +85,15 @@ bool process_record_user_oled(uint16_t keycode, keyrecord_t *record);  #    define OLED_RENDER_LAYER_MODS   " Mods"  #    define OLED_RENDER_LOCK_NAME "Lock:" -#    define OLED_RENDER_LOCK_NUML "N" -#    define OLED_RENDER_LOCK_CAPS "C" -#    define OLED_RENDER_LOCK_SCLK "S" +#    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  "S" -#    define OLED_RENDER_MODS_CTL  "C" -#    define OLED_RENDER_MODS_ALT  "A" -#    define OLED_RENDER_MODS_GUI  "G" +#    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" @@ -104,4 +106,6 @@ bool process_record_user_oled(uint16_t keycode, keyrecord_t *record);  #    define OLED_RENDER_USER_LAYR "Layr"  #    define OLED_RENDER_USER_NUKE "Nuke" +#    define OLED_RENDER_WPM_COUNTER "WPM: " +  #endif diff --git a/users/drashna/pimoroni_trackball.h b/users/drashna/pimoroni_trackball.h index 83d248d3ff..a30fb0bb8c 100644 --- a/users/drashna/pimoroni_trackball.h +++ b/users/drashna/pimoroni_trackball.h @@ -23,13 +23,13 @@  #    define TRACKBALL_ADDRESS 0x0A  #endif  #define TRACKBALL_WRITE ((TRACKBALL_ADDRESS << 1) | I2C_WRITE) -#define TRACKBALL_READ  ((TRACKBALL_ADDRESS << 1) | I2C_READ) +#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);  float trackball_get_precision(void); -void    trackball_set_precision(float precision); -bool    trackball_is_scrolling(void); -void    trackball_set_scrolling(bool scroll); +void  trackball_set_precision(float precision); +bool  trackball_is_scrolling(void); +void  trackball_set_scrolling(bool scroll); diff --git a/users/drashna/process_records.c b/users/drashna/process_records.c index 14fda92dea..ef901226e0 100644 --- a/users/drashna/process_records.c +++ b/users/drashna/process_records.c @@ -36,12 +36,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {      if (!(process_record_keymap(keycode, record) && process_record_secrets(keycode, record)  #ifdef RGB_MATRIX_ENABLE -        && process_record_user_rgb_matrix(keycode, record) +          && process_record_user_rgb_matrix(keycode, record)  #endif  #ifdef RGBLIGHT_ENABLE -        && process_record_user_rgb_light(keycode, record) +          && process_record_user_rgb_light(keycode, record)  #endif -    && true)) { +          && true)) {          return false;      } diff --git a/users/drashna/process_records.h b/users/drashna/process_records.h index e59e2242ef..2e24670501 100644 --- a/users/drashna/process_records.h +++ b/users/drashna/process_records.h @@ -55,6 +55,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record);  #define ADJUST  MO(_ADJUST)  #define TG_MODS TG(_MODS)  #define TG_GAME TG(_GAMEPAD) +#define TG_DBLO TG(_DIABLO)  #define OS_LWR  OSL(_LOWER)  #define OS_RSE  OSL(_RAISE) diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c index b67f707b65..c8b2f4c726 100644 --- a/users/drashna/rgb_stuff.c +++ b/users/drashna/rgb_stuff.c @@ -14,15 +14,17 @@   * along with this program.  If not, see <http://www.gnu.org/licenses/>.   */ -#include "drashna.h" -#include "rgb_stuff.h" -#include "eeprom.h" +#ifdef RGBLIGHT_ENABLE + +#    include "drashna.h" +#    include "rgb_stuff.h" +#    include "eeprom.h" -bool    has_initialized; +bool has_initialized;  void rgblight_sethsv_default_helper(uint8_t index) { rgblight_sethsv_at(rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val(), index); } -#ifdef RGBLIGHT_TWINKLE +#    ifdef RGBLIGHT_TWINKLE  static rgblight_fadeout lights[RGBLED_NUM];  /* Handler for fading/twinkling effect */ @@ -91,7 +93,7 @@ void start_rgb_light(void) {      rgblight_sethsv_at(light->hue, 255, light->life, light_index);  } -#endif +#    endif  bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record) {      uint16_t temp_keycode = keycode; @@ -101,7 +103,7 @@ bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record) {      }      switch (temp_keycode) { -#ifdef RGBLIGHT_TWINKLE +#    ifdef RGBLIGHT_TWINKLE          case KC_A ... KC_SLASH:          case KC_F1 ... KC_F12:          case KC_INSERT ... KC_UP: @@ -112,20 +114,20 @@ bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record) {                  start_rgb_light();              }              break; -#endif  // RGBLIGHT_TWINKLE +#    endif  // RGBLIGHT_TWINKLE      }      return true;  } -#if defined(RGBLIGHT_STARTUP_ANIMATION) -static bool is_enabled; -static bool is_rgblight_startup; -static uint8_t old_hue; +#    if defined(RGBLIGHT_STARTUP_ANIMATION) +static bool     is_enabled; +static bool     is_rgblight_startup; +static uint8_t  old_hue;  static uint16_t rgblight_startup_loop_timer; -#endif +#    endif  void keyboard_post_init_rgb_light(void) { -#if defined(RGBLIGHT_STARTUP_ANIMATION) +#    if defined(RGBLIGHT_STARTUP_ANIMATION)      is_enabled = rgblight_is_enabled();      if (userspace_config.rgb_layer_change) {          rgblight_enable_noeeprom(); @@ -136,7 +138,7 @@ void keyboard_post_init_rgb_light(void) {          rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);          is_rgblight_startup = true;      } -#endif +#    endif      layer_state_set_rgb_light(layer_state);  } @@ -145,7 +147,7 @@ void matrix_scan_rgb_light(void) {      scan_rgblight_fadeout();  #    endif  // RGBLIGHT_ENABLE -#if defined(RGBLIGHT_STARTUP_ANIMATION) +#    if defined(RGBLIGHT_STARTUP_ANIMATION)      if (is_rgblight_startup && is_keyboard_master()) {          if (timer_elapsed(rgblight_startup_loop_timer) > 10) {              static uint8_t counter; @@ -163,7 +165,7 @@ void matrix_scan_rgb_light(void) {              }          }      } -#endif +#    endif  }  void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode) { @@ -173,16 +175,16 @@ void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mo  }  layer_state_t layer_state_set_rgb_light(layer_state_t state) { -#ifdef RGBLIGHT_ENABLE +#    ifdef RGBLIGHT_ENABLE      if (userspace_config.rgb_layer_change) { -        uint8_t mode = layer_state_cmp(state,_MODS) ? RGBLIGHT_MODE_BREATHING : RGBLIGHT_MODE_STATIC_LIGHT; -        switch (get_highest_layer(state|default_layer_state)) { +        uint8_t mode = layer_state_cmp(state, _MODS) ? RGBLIGHT_MODE_BREATHING : RGBLIGHT_MODE_STATIC_LIGHT; +        switch (get_highest_layer(state | default_layer_state)) {              case _MACROS: -#    ifdef RGBLIGHT_EFFECT_TWINKLE +#        ifdef RGBLIGHT_EFFECT_TWINKLE                  rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_TWINKLE + 5); -#    else +#        else                  rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_BREATHING + 3); -#    endif +#        endif                  break;              case _MEDIA:                  rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_KNIGHT + 1); @@ -228,7 +230,9 @@ layer_state_t layer_state_set_rgb_light(layer_state_t state) {                  break;          }      } -#endif  // RGBLIGHT_ENABLE +#    endif  // RGBLIGHT_ENABLE      return state;  } + +#endif diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk index b7523a436c..2ae01c62e5 100644 --- a/users/drashna/rules.mk +++ b/users/drashna/rules.mk @@ -66,3 +66,27 @@ ifeq ($(strip $(PIMORONI_TRACKBALL_ENABLE)), yes)      SRC += pimoroni_trackball.c      QUANTUM_LIB_SRC += i2c_master.c  endif + + +ifeq ($(strip $(SPLIT_KEYBOARD)), yes) +    ifneq ($(strip $(SPLIT_TRANSPORT)), custom) +        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 diff --git a/users/drashna/wrappers.h b/users/drashna/wrappers.h index d135f44af3..be8162dfa3 100644 --- a/users/drashna/wrappers.h +++ b/users/drashna/wrappers.h @@ -21,19 +21,6 @@ Since our quirky block definitions are basically a list of comma separated  arguments, we need a wrapper in order for these definitions to be  expanded before being used as arguments to the LAYOUT_xxx macro.  */ -#if (!defined(LAYOUT) && defined(KEYMAP)) -#    define LAYOUT KEYMAP -#endif - -// clang-format off -#define LAYOUT_ergodox_wrapper(...)          LAYOUT_ergodox(__VA_ARGS__) -#define LAYOUT_ergodox_pretty_wrapper(...)   LAYOUT_ergodox_pretty(__VA_ARGS__) -#define KEYMAP_wrapper(...)                  LAYOUT(__VA_ARGS__) -#define LAYOUT_wrapper(...)                  LAYOUT(__VA_ARGS__) -#define LAYOUT_ortho_4x12_wrapper(...)       LAYOUT_ortho_4x12(__VA_ARGS__) -#define LAYOUT_ortho_5x12_wrapper(...)       LAYOUT_ortho_5x12(__VA_ARGS__) -#define LAYOUT_gergo_wrapper(...)            LAYOUT_gergo(__VA_ARGS__) -#define LAYOUT_split_3x6_3_wrapper(...)      LAYOUT_split_3x6_3(__VA_ARGS__)  /*  Blocks for each of the four major keyboard layouts @@ -46,14 +33,14 @@ NOTE: These are all the same length.  If you do a search/replace    then you need to add/remove underscores to keep the    lengths consistent.  */ +// clang-format off +#define _________________QWERTY_L1_________________       KC_Q,    KC_W,    KC_E,    KC_R,    KC_T +#define _________________QWERTY_L2_________________       KC_A,    KC_S,    KC_D,    KC_F,    KC_G +#define _________________QWERTY_L3_________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B -#define _________________QWERTY_L1_________________        KC_Q,    KC_W,    KC_E,    KC_R,    KC_T -#define _________________QWERTY_L2_________________        KC_A,    KC_S,    KC_D,    KC_F,    KC_G -#define _________________QWERTY_L3_________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_B - -#define _________________QWERTY_R1_________________        KC_Y,    KC_U,    KC_I,    KC_O,    KC_P -#define _________________QWERTY_R2_________________        KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN -#define _________________QWERTY_R3_________________        KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH +#define _________________QWERTY_R1_________________       KC_Y,    KC_U,    KC_I,    KC_O,    KC_P +#define _________________QWERTY_R2_________________       KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT +#define _________________QWERTY_R3_________________       KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH  #define _________________COLEMAK_L1________________       KC_Q,    KC_W,    KC_F,    KC_P,    KC_G @@ -61,15 +48,15 @@ NOTE: These are all the same length.  If you do a search/replace  #define _________________COLEMAK_L3________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B  #define _________________COLEMAK_R1________________       KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN -#define _________________COLEMAK_R2________________       KC_H,    KC_N,    KC_E,    KC_I,    KC_O -#define _________________COLEMAK_R3________________       KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH +#define _________________COLEMAK_R2________________       KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT +#define _________________COLEMAK_R3________________       KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH  #define ______________COLEMAK_MOD_DH_L1____________       KC_Q,    KC_W,    KC_F,    KC_P,    KC_B  #define ______________COLEMAK_MOD_DH_L2____________       KC_A,    KC_R,    KC_S,    KC_T,    KC_G  #define ______________COLEMAK_MOD_DH_L3____________       KC_Z,    KC_X,    KC_C,    KC_D,    KC_V  #define ______________COLEMAK_MOD_DH_R1____________       KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN -#define ______________COLEMAK_MOD_DH_R2____________       KC_M,    KC_N,    KC_E,    KC_I,    KC_O +#define ______________COLEMAK_MOD_DH_R2____________       KC_M,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT  #define ______________COLEMAK_MOD_DH_R3____________       KC_K,    KC_H,    KC_COMM, KC_DOT,  KC_SLASH @@ -78,7 +65,7 @@ NOTE: These are all the same length.  If you do a search/replace  #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 +#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 @@ -87,88 +74,106 @@ NOTE: These are all the same length.  If you do a search/replace  #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 +#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 -#define _________________WORKMAN_R3________________       KC_K,    KC_L,    KC_COMM, KC_DOT,  KC_SLASH +#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_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 -#define _________________NORMAN_R3_________________       KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH +#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_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 -#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_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_L1________________       KC_SLSH, KC_COMM, KC_DOT,  KC_F,    KC_Q -#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_W +// 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 _________________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 -#define _________________EUCALYN_R3________________       KC_B,    KC_H,    KC_J,    KC_L,    KC_SCLN +#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_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_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_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 -#define _____________CARPLAX_QFMLWY_R3_____________       KC_P,    KC_K,    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_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_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 +// 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_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 -#define _____________CARPLAX_QGMLWB_R3_____________       KC_K,    KC_P,    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 _____________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 _________________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 _____________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 -#define _____________CARPLAX_QGMLWY_R3_____________       KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH +#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_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 _________________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 _________________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_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 -#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 @@ -185,7 +190,7 @@ NOTE: These are all the same length.  If you do a search/replace  #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_LEFT, KC_DOWN, KC_UP,   KC_RGHT +#define _________________LOWER_R3__________________        _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END @@ -195,7 +200,7 @@ NOTE: These are all the same length.  If you do a search/replace  #define _________________RAISE_R1__________________        ________________NUMBER_RIGHT_______________  #define _________________RAISE_R2__________________        _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC -#define _________________RAISE_R3__________________        _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END +#define _________________RAISE_R3__________________        _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT | 
