[Keymap] Drashna Updates - Split+OLED edition (#11968)
This commit is contained in:
		| @@ -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__) | ||||
|   | ||||
| @@ -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, _______                            \ | ||||
|     ) | ||||
|   | ||||
| @@ -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]); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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                           \ | ||||
|   ) | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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( | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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__) | ||||
|   | ||||
							
								
								
									
										32
									
								
								keyboards/splitkb/zima/keymaps/drashna/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								keyboards/splitkb/zima/keymaps/drashna/config.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| /* Copyright 2019 Thomas Baart | ||||
|  * Copyright 2021 Christopher Courtney, aka Drashna Jael're  (@drashna) <drashna@live.com> | ||||
|  * | ||||
|  * 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 | ||||
							
								
								
									
										140
									
								
								keyboards/splitkb/zima/keymaps/drashna/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								keyboards/splitkb/zima/keymaps/drashna/keymap.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,140 @@ | ||||
| /* Copyright 2019 Thomas Baart | ||||
|  * Copyright 2021 Christopher Courtney, aka Drashna Jael're  (@drashna) <drashna@live.com> | ||||
|  * | ||||
|  * 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 | ||||
| } | ||||
							
								
								
									
										7
									
								
								keyboards/splitkb/zima/keymaps/drashna/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								keyboards/splitkb/zima/keymaps/drashna/readme.md
									
									
									
									
									
										Normal file
									
								
							| @@ -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). | ||||
							
								
								
									
										2
									
								
								keyboards/splitkb/zima/keymaps/drashna/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								keyboards/splitkb/zima/keymaps/drashna/rules.mk
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # is intentional.  won't compile under size, otherwise. | ||||
| USER_NAME := not_drashna | ||||
| @@ -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, | ||||
|   | ||||
| @@ -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  \ | ||||
|   ) | ||||
|   | ||||
| @@ -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________________ | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										9
									
								
								layouts/community/split_3x6_3/drashna/chconf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								layouts/community/split_3x6_3/drashna/chconf.h
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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(); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										1306
									
								
								users/drashna/drashna_font.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1306
									
								
								users/drashna/drashna_font.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										508
									
								
								users/drashna/drashna_transport.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										508
									
								
								users/drashna/drashna_transport.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,508 @@ | ||||
| /* Copyright 2020 Christopher Courtney, aka Drashna Jael're  (@drashna) <drashna@live.com> | ||||
|  * | ||||
|  * 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 | ||||
| @@ -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, | ||||
| }; | ||||
| @@ -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, | ||||
| }; | ||||
| @@ -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); | ||||
|     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_ALT), (modifiers & MOD_MASK_ALT)); | ||||
| #ifdef OLED_DISPLAY_128X64 | ||||
|     oled_write_P(PSTR(" "), false); | ||||
| #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(); | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -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; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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) | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
| bool    has_initialized; | ||||
| #    include "drashna.h" | ||||
| #    include "rgb_stuff.h" | ||||
| #    include "eeprom.h" | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
| #define _________________WORKMAN_R3________________       KC_K,    KC_L,    KC_COMM, KC_DOT,  KC_SLASH | ||||
| #define _________________WORKMAN_R1________________        KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN | ||||
| #define _________________WORKMAN_R2________________        KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    KC_QUOT | ||||
| #define _________________WORKMAN_R3________________        KC_K,    KC_L,    KC_COMM, KC_DOT,  KC_SLSH | ||||
|  | ||||
|  | ||||
| #define _________________NORMAN_L1_________________       KC_Q,    KC_W,    KC_D,    KC_F,    KC_K | ||||
| #define _________________NORMAN_L2_________________       KC_A,    KC_S,    KC_E,    KC_T,    KC_G | ||||
| #define _________________NORMAN_L3_________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B | ||||
| #define _________________NORMAN_L1_________________        KC_Q,    KC_W,    KC_D,    KC_F,    KC_K | ||||
| #define _________________NORMAN_L2_________________        KC_A,    KC_S,    KC_E,    KC_T,    KC_G | ||||
| #define _________________NORMAN_L3_________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_B | ||||
|  | ||||
| #define _________________NORMAN_R1_________________       KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN | ||||
| #define _________________NORMAN_R2_________________       KC_Y,    KC_N,    KC_I,    KC_O,    KC_U | ||||
| #define _________________NORMAN_R3_________________       KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH | ||||
| #define _________________NORMAN_R1_________________        KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN | ||||
| #define _________________NORMAN_R2_________________        KC_Y,    KC_N,    KC_I,    KC_O,    KC_U,    KC_QUOT | ||||
| #define _________________NORMAN_R3_________________        KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH | ||||
|  | ||||
|  | ||||
| #define _________________MALTRON_L1________________       KC_Q,    KC_P,    KC_Y,    KC_C,    KC_B | ||||
| #define _________________MALTRON_L2________________       KC_A,    KC_N,    KC_I,    KC_S,    KC_F | ||||
| #define _________________MALTRON_L3________________       KC_SCLN, KC_SLSH, KC_J,    KC_G,    KC_COMM | ||||
| #define _________________MALTRON_L1________________        KC_Q,    KC_P,    KC_Y,    KC_C,    KC_B | ||||
| #define _________________MALTRON_L2________________        KC_A,    KC_N,    KC_I,    KC_S,    KC_F | ||||
| #define _________________MALTRON_L3________________        KC_SCLN, KC_SLSH, KC_J,    KC_G,    KC_COMM | ||||
|  | ||||
| #define _________________MALTRON_R1________________       KC_V,    KC_M,    KC_U,    KC_Z,    KC_L | ||||
| #define _________________MALTRON_R2________________       KC_D,    KC_T,    KC_D,    KC_O,    KC_R | ||||
| #define _________________MALTRON_R3________________       KC_DOT,  KC_W,    KC_K,    KC_MINS, KC_X | ||||
| #define _________________MALTRON_R1________________        KC_V,    KC_M,    KC_U,    KC_Z,    KC_L | ||||
| #define _________________MALTRON_R2________________        KC_D,    KC_T,    KC_D,    KC_O,    KC_R,    KC_QUOT | ||||
| #define _________________MALTRON_R3________________        KC_DOT,  KC_W,    KC_K,    KC_MINS, KC_X | ||||
|  | ||||
|  | ||||
| #define _________________EUCALYN_L1________________       KC_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 | ||||
| #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 | ||||
| #define _________________EUCALYN_R3________________       KC_B,    KC_H,    KC_J,    KC_L,    KC_SCLN | ||||
| #define _________________EUCALYN_R1________________        KC_M,    KC_R,    KC_D,    KC_Y,    KC_P | ||||
| #define _________________EUCALYN_R2________________        KC_G,    KC_T,    KC_K,    KC_S,    KC_N,    KC_QUOT | ||||
| #define _________________EUCALYN_R3________________        KC_B,    KC_H,    KC_J,    KC_L,    KC_SLSH | ||||
|  | ||||
| // Qwerty-like | ||||
| #define _____________CARPLAX_QFMLWY_L1_____________        KC_Q,    KC_F,    KC_M,    KC_L,    KC_W | ||||
| #define _____________CARPLAX_QFMLWY_L2_____________        KC_D,    KC_S,    KC_T,    KC_N,    KC_R | ||||
| #define _____________CARPLAX_QFMLWY_L3_____________        KC_Z,    KC_V,    KC_G,    KC_C,    KC_X | ||||
|  | ||||
| #define _____________CARPLAX_QFMLWY_R1_____________        KC_Y,    KC_U,    KC_O,    KC_B,    KC_J | ||||
| #define _____________CARPLAX_QFMLWY_R2_____________        KC_I,    KC_A,    KC_E,    KC_H,    KC_SCLN, KC_QUOT | ||||
| #define _____________CARPLAX_QFMLWY_R3_____________        KC_P,    KC_K,    KC_COMM, KC_DOT,  KC_SLSH | ||||
|  | ||||
| // Colemak like | ||||
| #define _____________CARPLAX_QGMLWB_L1_____________        KC_Q,    KC_G,    KC_M,    KC_L,    KC_W | ||||
| #define _____________CARPLAX_QGMLWB_L2_____________        KC_D,    KC_S,    KC_T,    KC_N,    KC_R | ||||
| #define _____________CARPLAX_QGMLWB_L3_____________        KC_Z,    KC_X,    KC_C,    KC_F,    KC_J | ||||
|  | ||||
| #define _____________CARPLAX_QGMLWB_R1_____________        KC_B,    KC_Y,    KC_U,    KC_V,    KC_SCLN | ||||
| #define _____________CARPLAX_QGMLWB_R2_____________        KC_I,    KC_A,    KC_E,    KC_O,    KC_H,    KC_QUOT | ||||
| #define _____________CARPLAX_QGMLWB_R3_____________        KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH | ||||
|  | ||||
| // colemak like, zxcv fixed | ||||
| #define _____________CARPLAX_QGMLWY_L1_____________        KC_Q,    KC_G,    KC_M,    KC_L,    KC_W | ||||
| #define _____________CARPLAX_QGMLWY_L2_____________        KC_D,    KC_S,    KC_T,    KC_N,    KC_R | ||||
| #define _____________CARPLAX_QGMLWY_L3_____________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_J | ||||
|  | ||||
| #define _____________CARPLAX_QGMLWY_R1_____________        KC_Y,    KC_F,    KC_U,    KC_B,    KC_SCLN | ||||
| #define _____________CARPLAX_QGMLWY_R2_____________        KC_I,    KC_A,    KC_E,    KC_O,    KC_H,    KC_QUOT | ||||
| #define _____________CARPLAX_QGMLWY_R3_____________        KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH | ||||
|  | ||||
| // teeheehee | ||||
| #define _____________CARPLAX_TNWCLR_L1_____________        KC_T,    KC_N,    KC_W,    KC_C,    KC_L | ||||
| #define _____________CARPLAX_TNWCLR_L2_____________        KC_S,    KC_K,    KC_J,    KC_X,    KC_G | ||||
| #define _____________CARPLAX_TNWCLR_L3_____________        KC_E,    KC_O,    KC_D,    KC_I,    KC_A | ||||
|  | ||||
| #define _____________CARPLAX_TNWCLR_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_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 _________________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_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 | ||||
| #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 _____________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 _________________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 _____________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 _________________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 _____________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 _________________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 _____________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_R1__________________       KC_V,    KC_Y,    KC_D,    KC_COMM, KC_QUOT | ||||
| #define _________________WHITE_R2__________________       KC_A,    KC_T,    KC_H,    KC_E,    KC_B | ||||
| #define _________________WHITE_R3__________________       KC_P,    KC_K,    KC_G,    KC_W,    KC_Q | ||||
|  | ||||
| #define _________________WHITE_L1__________________       KC_INT1, KC_J,    KC_M,    KC_L,    KC_U | ||||
| #define _________________WHITE_L2__________________       KC_MINS, KC_C,    KC_S,    KC_N,    KC_O  // KC_I | ||||
| #define _________________WHITE_L3__________________       KC_X,    KC_R,    KC_F,    KC_DOT,  KC_Z | ||||
|  | ||||
|  | ||||
| #define _________________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 | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user