[Keymap] Update to Drashna keymap and user code (based on develop) (#12936)

master
Drashna Jaelre 2021-05-25 09:24:01 -07:00 committed by GitHub
parent cc815c4d83
commit f461adbd1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 475 additions and 321 deletions

View File

@ -28,3 +28,7 @@
#define RGBLED_NUM 15 #define RGBLED_NUM 15
#define SOLENOID_PIN B11 #define SOLENOID_PIN B11
#define AUDIO_PIN A5
#define AUDIO_PIN_ALT A4
#define AUDIO_PIN_ALT_AS_NEGATIVE

View File

@ -87,12 +87,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________ _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
), ),
[_MODS] = LAYOUT_wrapper(
_______, ___________________BLANK___________________, _______, ___________________BLANK___________________, _______,
_______, ___________________BLANK___________________, _______, ___________________BLANK___________________, _______,
KC_LSFT, ___________________BLANK___________________, _______, ___________________BLANK___________________, _______
),
[_LOWER] = LAYOUT_wrapper( [_LOWER] = LAYOUT_wrapper(
KC_TILD, _________________LOWER_L1__________________, _______, _________________LOWER_R1__________________, KC_BSPC, KC_TILD, _________________LOWER_L1__________________, _______, _________________LOWER_R1__________________, KC_BSPC,
KC_DEL, _________________LOWER_L2__________________, _______, _________________LOWER_R2__________________, KC_PIPE, KC_DEL, _________________LOWER_L2__________________, _______, _________________LOWER_R2__________________, KC_PIPE,

View File

@ -87,12 +87,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________ _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
), ),
[_MODS] = LAYOUT_gergo_wrapper(
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
_______, ___________________BLANK___________________, _______, _______, ___________________BLANK___________________, _______,
KC_LSFT, ___________________BLANK___________________, _______, _______, _______, _______, ___________________BLANK___________________, KC_RSFT,
_______, _______, _______, _______, _______, _______, _______, _______
),
[_LOWER] = LAYOUT_gergo_wrapper( [_LOWER] = LAYOUT_gergo_wrapper(
KC_F12, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_F11, KC_F12, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_F11,
_______, _________________LOWER_L2__________________, _______, _______, _________________LOWER_R2__________________, KC_PIPE, _______, _________________LOWER_L2__________________, _______, _______, _________________LOWER_R2__________________, KC_PIPE,

View File

@ -167,8 +167,11 @@ void pointing_device_task(void) {
void eeconfig_init_kb(void) { void eeconfig_init_kb(void) {
keyboard_config.dpi_config = TRACKBALL_DPI_DEFAULT; keyboard_config.dpi_config = TRACKBALL_DPI_DEFAULT;
#ifdef POINTING_DEVICE_ENABLE
trackball_set_cpi(dpi_array[keyboard_config.dpi_config]); trackball_set_cpi(dpi_array[keyboard_config.dpi_config]);
#endif
eeconfig_update_kb(keyboard_config.raw); eeconfig_update_kb(keyboard_config.raw);
eeconfig_init_user();
} }
void matrix_init_kb(void) { void matrix_init_kb(void) {

View File

@ -36,13 +36,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DIODE_DIRECTION COL2ROW #define DIODE_DIRECTION COL2ROW
// WS2812 RGB LED strip input and number of LEDs // WS2812 RGB LED strip input and number of LEDs
#define RGB_DI_PIN D3 #define RGB_DI_PIN E7
#define RGBLED_NUM 8 #define RGBLED_NUM 58
#define RGBLIGHT_SPLIT #define RGBLIGHT_SPLIT
#define RGBLED_SPLIT { 0 , 8 } #define RGBLED_SPLIT { 30 , 28 }
#define RGBLIGHT_SLEEP #define RGBLIGHT_SLEEP
#define RGBW // #define RGBW
#define RGBLIGHT_LIMIT_VAL 150 #define RGBLIGHT_LIMIT_VAL 100
/* define if matrix has ghost */ /* define if matrix has ghost */
//#define MATRIX_HAS_GHOST //#define MATRIX_HAS_GHOST

View File

@ -25,9 +25,7 @@
#define TRACKBALL_DPI_OPTIONS \ #define TRACKBALL_DPI_OPTIONS \
{ 1200, 1800, 2600, 3400 } { 1200, 1800, 2600, 3400 }
#define RGBLIGHT_EFFECT_TWINKLE_LIFE 50 #define RGBLIGHT_MAX_BRIGHTNESS 60
#define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1/63
#define RGBLIGHT_MAX_BRIGHTNESS 100
#undef DEBOUNCE #undef DEBOUNCE
#define DEBOUNCE 10 #define DEBOUNCE 10
@ -36,6 +34,6 @@
#define SOLENOID_DEFAULT_DWELL 8 #define SOLENOID_DEFAULT_DWELL 8
#define OLED_DISPLAY_128X64 #define OLED_DISPLAY_128X64
#define OLED_BRIGHTNESS 100 #define OLED_BRIGHTNESS 50
#define MK_KINETIC_SPEED #define MK_KINETIC_SPEED

View File

@ -30,8 +30,8 @@
OS_LSFT, CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A), OS_RSFT, \ 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_LALT, OS_LGUI, TG_GAME, TG_DBLO, \
OS_LGUI, KC_GRV, OS_RGUI, \ OS_LGUI, KC_GRV, OS_RGUI, \
KC_SPC, TT(_MOUSE), KC_ENT, \ KC_SPC, OS_LGUI, KC_ENT, \
BK_LWER, MO(_MOUSE), MO(_MOUSE), DL_RAIS \ BK_LWER, TT(_MOUSE), TT(_MOUSE), DL_RAIS \
) )
#define LAYOUT_5x6_right_trackball_base_wrapper(...) LAYOUT_5x6_right_trackball_base(__VA_ARGS__) #define LAYOUT_5x6_right_trackball_base_wrapper(...) LAYOUT_5x6_right_trackball_base(__VA_ARGS__)
@ -88,8 +88,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_MOUSE] = LAYOUT_5x6_right_trackball( [_MOUSE] = LAYOUT_5x6_right_trackball(
_______, _______, _______, _______, _______, _______, DPI_CONFIG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DPI_CONFIG, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6, _______,
_______, _______, _______, _______, _______, _______, _______, KC_BTN4, KC_BTN5, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,
@ -97,9 +97,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
), ),
[_GAMEPAD] = LAYOUT_5x6_right_trackball( [_GAMEPAD] = LAYOUT_5x6_right_trackball(
KC_ESC, KC_NO, KC_1, KC_2, KC_3, KC_4, DPI_CONFIG, _______, _______, _______, _______, _______, KC_ESC, KC_NO, KC_1, KC_2, KC_3, KC_4, DPI_CONFIG, _______, _______, _______, _______, _______,
KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_WH_U, _______, _______, _______, _______, _______, KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, _______, _______, _______, _______, _______, _______,
KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, _______, _______, KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, _______, _______, _______, _______, _______, _______,
KC_LCTL, KC_LSFT, KC_Z, KC_X, KC_C, KC_H, _______, KC_BTN4, KC_BTN5, _______, _______, _______, KC_LCTL, KC_LSFT, KC_Z, KC_X, KC_C, KC_H, _______, _______, _______, _______, _______, _______,
KC_I, KC_T, TG_GAME, KC_NO, KC_I, KC_T, TG_GAME, KC_NO,
KC_V, KC_O, _______, KC_V, KC_O, _______,
KC_SPC, KC_P, _______, KC_SPC, KC_P, _______,
@ -107,13 +107,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
), ),
[_DIABLO] = LAYOUT_5x6_right_trackball( [_DIABLO] = LAYOUT_5x6_right_trackball(
KC_ESC, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_ESC, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
KC_TAB, KC_S, KC_I, KC_F, KC_M, KC_T, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TAB, KC_S, KC_I, KC_F, KC_M, KC_T, _______, _______, _______, _______, _______, _______,
KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, _______, _______, _______, _______, _______, _______,
KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z, KC_NO, KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z, _______, _______, _______, _______, _______, _______,
KC_F, KC_L, KC_NO, TG_DBLO, KC_F, KC_L, KC_NO, TG_DBLO,
SFT_T(KC_SPC), KC_F, _______, KC_DIABLO_CLEAR, KC_F, _______,
ALT_T(KC_Q), KC_J, _______, SFT_T(KC_SPC), KC_J, _______,
KC_DIABLO_CLEAR, KC_LGUI, _______, _______ ALT_T(KC_Q), KC_LGUI, _______, _______
), ),
[_LOWER] = LAYOUT_5x6_right_trackball_wrapper( [_LOWER] = LAYOUT_5x6_right_trackball_wrapper(
KC_F12, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, KC_F11, KC_F12, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, KC_F11,
@ -157,7 +157,7 @@ bool tap_toggling = false;
void process_mouse_user(report_mouse_t* mouse_report, int16_t x, int16_t y) { void process_mouse_user(report_mouse_t* mouse_report, int16_t x, int16_t y) {
if ((x || y) && timer_elapsed(mouse_timer) > 125) { if ((x || y) && timer_elapsed(mouse_timer) > 125) {
mouse_timer = timer_read(); mouse_timer = timer_read();
if (!layer_state_is(_MOUSE) && !layer_state_is(_GAMEPAD) && timer_elapsed(mouse_debounce_timer) > 125) { if (!layer_state_is(_MOUSE) && !(layer_state_is(_GAMEPAD) || layer_state_is(_DIABLO)) && timer_elapsed(mouse_debounce_timer) > 125) {
layer_on(_MOUSE); layer_on(_MOUSE);
} }
} }
@ -167,7 +167,7 @@ void process_mouse_user(report_mouse_t* mouse_report, int16_t x, int16_t y) {
# else # else
if (timer_elapsed(mouse_debounce_timer) > TAPPING_TERM if (timer_elapsed(mouse_debounce_timer) > TAPPING_TERM
# endif # endif
|| layer_state_is(_GAMEPAD)) { || (layer_state_is(_GAMEPAD) || layer_state_is(_DIABLO))) {
mouse_report->x = x; mouse_report->x = x;
mouse_report->y = y; mouse_report->y = y;
} }
@ -218,11 +218,33 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t* record) {
default: default:
if (layer_state_is(_MOUSE) && !mouse_keycode_tracker) { if (layer_state_is(_MOUSE) && !mouse_keycode_tracker) {
layer_off(_MOUSE); layer_off(_MOUSE);
mouse_keycode_tracker = 0;
} }
mouse_keycode_tracker = 0;
mouse_debounce_timer = timer_read(); mouse_debounce_timer = timer_read();
break; break;
} }
return true; return true;
} }
layer_state_t layer_state_set_keymap(layer_state_t state) {
if (layer_state_cmp(state, _GAMEPAD) || layer_state_cmp(state, _DIABLO)) {
state |= (1UL << _MOUSE);
}
return state;
}
#endif #endif
void matrix_init_keymap(void) {
#ifdef AUDIO_ENABLE
extern audio_config_t audio_config;
if (!is_keyboard_master()) {
audio_stop_all();
audio_config.enable = false;
}
#endif
}
void keyboard_post_init_keymap(void) {
matrix_init_keymap();
}

View File

@ -1,5 +1,4 @@
RGBLIGHT_STARTUP_ANIMATION = yes RGBLIGHT_STARTUP_ANIMATION = yes
HAPTIC_ENABLE = SOLENOID
COMMAND_ENABLE = no COMMAND_ENABLE = no
AUDIO_ENABLE = yes AUDIO_ENABLE = yes
TAP_DANCE_ENABLE = yes TAP_DANCE_ENABLE = yes

View File

@ -16,6 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifdef POINTING_DEVICE_ENABLE
#include "pmw3360.h" #include "pmw3360.h"
#include "pmw3360_firmware.h" #include "pmw3360_firmware.h"
@ -223,3 +224,5 @@ report_pmw_t pmw_read_burst(void) {
return data; return data;
} }
#endif

View File

@ -21,6 +21,7 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#define ROWS_PER_HAND (MATRIX_ROWS / 2) #define ROWS_PER_HAND (MATRIX_ROWS / 2)
#define SYNC_TIMER_OFFSET 2
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
# include "rgblight.h" # include "rgblight.h"
@ -36,6 +37,13 @@ static pin_t encoders_pad[] = ENCODERS_PAD_A;
# define NUMBER_OF_ENCODERS (sizeof(encoders_pad) / sizeof(pin_t)) # define NUMBER_OF_ENCODERS (sizeof(encoders_pad) / sizeof(pin_t))
#endif #endif
#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
# include "led_matrix.h"
#endif
#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
# include "rgb_matrix.h"
#endif
#ifdef POINTING_DEVICE_ENABLE #ifdef POINTING_DEVICE_ENABLE
static uint16_t device_cpi = 0; static uint16_t device_cpi = 0;
static int8_t split_mouse_x = 0, split_mouse_y = 0; static int8_t split_mouse_x = 0, split_mouse_y = 0;
@ -51,6 +59,12 @@ static int8_t split_mouse_x = 0, split_mouse_y = 0;
# include "i2c_slave.h" # include "i2c_slave.h"
typedef struct _I2C_slave_buffer_t { typedef struct _I2C_slave_buffer_t {
# ifndef DISABLE_SYNC_TIMER
uint32_t sync_timer;
# endif
# ifdef SPLIT_TRANSPORT_MIRROR
matrix_row_t mmatrix[ROWS_PER_HAND];
# endif
matrix_row_t smatrix[ROWS_PER_HAND]; matrix_row_t smatrix[ROWS_PER_HAND];
# ifdef SPLIT_MODS_ENABLE # ifdef SPLIT_MODS_ENABLE
uint8_t real_mods; uint8_t real_mods;
@ -77,14 +91,22 @@ typedef struct _I2C_slave_buffer_t {
bool oled_on; bool oled_on;
layer_state_t t_layer_state; layer_state_t t_layer_state;
layer_state_t t_default_layer_state; layer_state_t t_default_layer_state;
bool is_rgb_matrix_suspended; # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
led_eeconfig_t led_matrix;
bool led_suspend_state;
# endif
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
rgb_config_t rgb_matrix;
bool rgb_suspend_state;
# endif
} __attribute__((packed)) I2C_slave_buffer_t; } __attribute__((packed)) I2C_slave_buffer_t;
static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; 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_BACKLIGHT_START offsetof(I2C_slave_buffer_t, backlight_level)
# define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync) # define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync)
# define I2C_KEYMAP_START offsetof(I2C_slave_buffer_t, mmatrix) # define I2C_KEYMAP_MASTER_START offsetof(I2C_slave_buffer_t, mmatrix)
# define I2C_KEYMAP_SLAVE_START offsetof(I2C_slave_buffer_t, smatrix)
# define I2C_SYNC_TIME_START offsetof(I2C_slave_buffer_t, sync_timer) # define I2C_SYNC_TIME_START offsetof(I2C_slave_buffer_t, sync_timer)
# define I2C_REAL_MODS_START offsetof(I2C_slave_buffer_t, real_mods) # 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_WEAK_MODS_START offsetof(I2C_slave_buffer_t, weak_mods)
@ -97,7 +119,10 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re
# define I2C_OLED_ON_START offsetof(I2C_slave_buffer_t, oled_on) # 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_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_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 I2C_LED_MATRIX_START offsetof(I2C_slave_buffer_t, led_matrix)
# define I2C_LED_SUSPEND_START offsetof(I2C_slave_buffer_t, led_suspend_state)
# define I2C_RGB_MATRIX_START offsetof(I2C_slave_buffer_t, rgb_matrix)
# define I2C_RGB_SUSPEND_START offsetof(I2C_slave_buffer_t, rgb_suspend_state)
# define TIMEOUT 100 # define TIMEOUT 100
@ -106,9 +131,11 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re
# endif # endif
// Get rows from other half over i2c // Get rows from other half over i2c
bool transport_master(matrix_row_t matrix[]) { bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_START, (void *)matrix, sizeof(i2c_buffer->smatrix), TIMEOUT); i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_SLAVE_START, (void *)slave_matrix, sizeof(i2c_buffer->smatrix), TIMEOUT);
# ifdef SPLIT_TRANSPORT_MIRROR
i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_MASTER_START, (void *)master_matrix, sizeof(i2c_buffer->mmatrix), TIMEOUT);
# endif
// write backlight info // write backlight info
# ifdef BACKLIGHT_ENABLE # ifdef BACKLIGHT_ENABLE
uint8_t level = is_backlight_enabled() ? get_backlight_level() : 0; uint8_t level = is_backlight_enabled() ? get_backlight_level() : 0;
@ -206,21 +233,34 @@ bool transport_master(matrix_row_t matrix[]) {
} }
# endif # endif
# ifdef RGB_MATRIX_ENABLE # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
bool sus_state = rgb_matrix_get_suspend_state(); i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_MATRIX_START, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix), TIMEOUT);
if (sus_state != i2c_buffer->is_rgb_matrix_suspended) { bool suspend_state = led_matrix_get_suspend_state();
if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_SUSPEND_START, (void *)&sus_state, sizeof(sus_state), TIMEOUT) >= 0) { i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->led_suspend_state), TIMEOUT);
i2c_buffer->is_rgb_matrix_suspended = sus_state; # endif
} # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
} i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_START, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix), TIMEOUT);
bool suspend_state = rgb_matrix_get_suspend_state();
i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->rgb_suspend_state), TIMEOUT);
# endif
# ifndef DISABLE_SYNC_TIMER
i2c_buffer->sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET;
i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_SYNC_TIME_START, (void *)&i2c_buffer->sync_timer, sizeof(i2c_buffer->sync_timer), TIMEOUT);
# endif # endif
return true; return true;
} }
void transport_slave(matrix_row_t matrix[]) { void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
# ifndef DISABLE_SYNC_TIMER
sync_timer_update(i2c_buffer->sync_timer);
# endif
// Copy matrix to I2C buffer // Copy matrix to I2C buffer
memcpy((void *)i2c_buffer->smatrix, (void *)matrix, sizeof(i2c_buffer->smatrix)); memcpy((void *)i2c_buffer->smatrix, (void *)slave_matrix, sizeof(i2c_buffer->smatrix));
# ifdef SPLIT_TRANSPORT_MIRROR
memcpy((void *)master_matrix, (void *)i2c_buffer->mmatrix, sizeof(i2c_buffer->mmatrix));
# endif
// Read Backlight Info // Read Backlight Info
# ifdef BACKLIGHT_ENABLE # ifdef BACKLIGHT_ENABLE
@ -281,8 +321,13 @@ void transport_slave(matrix_row_t matrix[]) {
} }
# endif # endif
# ifdef RGB_MATRIX_ENABLE # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
rgb_matrix_set_suspend_state(i2c_buffer->is_rgb_matrix_suspended); memcpy((void *)i2c_buffer->led_matrix, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix));
led_matrix_set_suspend_state(i2c_buffer->led_suspend_state);
# endif
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
memcpy((void *)i2c_buffer->rgb_matrix, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix));
rgb_matrix_set_suspend_state(i2c_buffer->rgb_suspend_state);
# endif # endif
} }
@ -313,7 +358,10 @@ typedef struct _Serial_m2s_buffer_t {
# endif # endif
# endif # endif
# ifndef DISABLE_SYNC_TIMER # ifndef DISABLE_SYNC_TIMER
uint32_t sync_timer; uint32_t sync_timer;
# endif
# ifdef SPLIT_TRANSPORT_MIRROR
matrix_row_t mmatrix[ROWS_PER_HAND];
# endif # endif
# ifdef BACKLIGHT_ENABLE # ifdef BACKLIGHT_ENABLE
uint8_t backlight_level; uint8_t backlight_level;
@ -325,7 +373,14 @@ typedef struct _Serial_m2s_buffer_t {
bool oled_on; bool oled_on;
layer_state_t t_layer_state; layer_state_t t_layer_state;
layer_state_t t_default_layer_state; layer_state_t t_default_layer_state;
bool is_rgb_matrix_suspended; # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
led_eeconfig_t led_matrix;
bool led_suspend_state;
# endif
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
rgb_config_t rgb_matrix;
bool rgb_suspend_state;
# endif
} __attribute__((packed)) Serial_m2s_buffer_t; } __attribute__((packed)) Serial_m2s_buffer_t;
# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
@ -402,7 +457,7 @@ void transport_rgblight_slave(void) {
# define transport_rgblight_slave() # define transport_rgblight_slave()
# endif # endif
bool transport_master(matrix_row_t matrix[]) { bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
# ifndef SERIAL_USE_MULTI_TRANSACTION # ifndef SERIAL_USE_MULTI_TRANSACTION
if (soft_serial_transaction() != TRANSACTION_END) { if (soft_serial_transaction() != TRANSACTION_END) {
return false; return false;
@ -416,7 +471,10 @@ bool transport_master(matrix_row_t matrix[]) {
// TODO: if MATRIX_COLS > 8 change to unpack() // TODO: if MATRIX_COLS > 8 change to unpack()
for (int i = 0; i < ROWS_PER_HAND; ++i) { for (int i = 0; i < ROWS_PER_HAND; ++i) {
matrix[i] = serial_s2m_buffer.smatrix[i]; slave_matrix[i] = serial_s2m_buffer.smatrix[i];
# ifdef SPLIT_TRANSPORT_MIRROR
serial_m2s_buffer.mmatrix[i] = master_matrix[i];
# endif
} }
# ifdef BACKLIGHT_ENABLE # ifdef BACKLIGHT_ENABLE
@ -457,19 +515,32 @@ bool transport_master(matrix_row_t matrix[]) {
serial_m2s_buffer.oled_on = is_oled_on(); serial_m2s_buffer.oled_on = is_oled_on();
# endif # endif
# ifdef RGB_MATRIX_ENABLE # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
serial_m2s_buffer.is_rgb_matrix_suspended = rgb_matrix_get_suspend_state(); serial_m2s_buffer.led_matrix = led_matrix_eeconfig;
serial_m2s_buffer.led_suspend_state = led_matrix_get_suspend_state();
# endif
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
serial_m2s_buffer.rgb_matrix = rgb_matrix_config;
serial_m2s_buffer.rgb_suspend_state = rgb_matrix_get_suspend_state();
# endif
# ifndef DISABLE_SYNC_TIMER
serial_m2s_buffer.sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET;
# endif # endif
return true; return true;
} }
void transport_slave(matrix_row_t matrix[]) { void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
transport_rgblight_slave(); transport_rgblight_slave();
# ifndef DISABLE_SYNC_TIMER
sync_timer_update(serial_m2s_buffer.sync_timer);
# endif
// TODO: if MATRIX_COLS > 8 change to pack() // TODO: if MATRIX_COLS > 8 change to pack()
for (int i = 0; i < ROWS_PER_HAND; ++i) { for (int i = 0; i < ROWS_PER_HAND; ++i) {
serial_s2m_buffer.smatrix[i] = matrix[i]; serial_s2m_buffer.smatrix[i] = slave_matrix[i];
# ifdef SPLIT_TRANSPORT_MIRROR
master_matrix[i] = serial_m2s_buffer.mmatrix[i];
# endif
} }
# ifdef BACKLIGHT_ENABLE # ifdef BACKLIGHT_ENABLE
@ -518,8 +589,13 @@ void transport_slave(matrix_row_t matrix[]) {
} }
# endif # endif
# ifdef RGB_MATRIX_ENABLE # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
rgb_matrix_set_suspend_state(serial_m2s_buffer.is_rgb_matrix_suspended); led_matrix_eeconfig = serial_m2s_buffer.led_matrix;
led_matrix_set_suspend_state(serial_m2s_buffer.led_suspend_state);
# endif
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
rgb_matrix_config = serial_m2s_buffer.rgb_matrix;
rgb_matrix_set_suspend_state(serial_m2s_buffer.rgb_suspend_state);
# endif # endif
} }
@ -534,7 +610,7 @@ void trackball_set_cpi(uint16_t cpi) {
if (!is_keyboard_left()) { if (!is_keyboard_left()) {
pmw_set_cpi(cpi); pmw_set_cpi(cpi);
} else { } else {
device_cpi = cpi * 1.5; device_cpi = cpi;
} }
} }
#endif #endif

View File

@ -11,17 +11,18 @@ BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output AUDIO_ENABLE = no # Audio output
SWAP_HANDS_ENABLE = yes SWAP_HANDS_ENABLE = yes
POINTING_DEVICE_ENABLE = yes POINTING_DEVICE_ENABLE = yes
MOUSE_SHARED_EP = no
SPLIT_KEYBOARD = yes SPLIT_KEYBOARD = yes
SPLIT_TRANSPORT = custom SPLIT_TRANSPORT = custom

View File

@ -91,14 +91,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________ _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
), ),
[_MODS] = LAYOUT_wrapper(
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
KC_LSFT, ___________________BLANK___________________, _______, _______, ___________________BLANK___________________, KC_RSFT,
_______, _______, _______, _______, _______, _______
),
[_GAMEPAD] = LAYOUT_wrapper( [_GAMEPAD] = LAYOUT_wrapper(
KC_ESC, KC_NO, KC_1, KC_2, KC_3, KC_4, _______, _______, _______, _______, _______, _______, KC_ESC, KC_NO, KC_1, KC_2, KC_3, KC_4, _______, _______, _______, _______, _______, _______,
KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, _______, _______, _______, _______, _______, _______, KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, _______, _______, _______, _______, _______, _______,

View File

@ -20,7 +20,6 @@
#ifdef OLED_DRIVER_ENABLE #ifdef OLED_DRIVER_ENABLE
# define OLED_DISPLAY_128X64 # define OLED_DISPLAY_128X64
# define OLED_SCROLL_TIMEOUT_RIGHT 60000
#endif #endif
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
@ -30,7 +29,7 @@
# define RGBLIGHT_SAT_STEP 8 # define RGBLIGHT_SAT_STEP 8
# define RGBLIGHT_VAL_STEP 8 # define RGBLIGHT_VAL_STEP 8
# define RGBLIGHT_SPLIT # define RGBLIGHT_SPLIT
# define RGBLIGHT_LAYERS // # define RGBLIGHT_LAYERS
#endif #endif
#define KEYLOGGER_LENGTH 10 #define KEYLOGGER_LENGTH 10

View File

@ -16,12 +16,6 @@
#include "drashna.h" #include "drashna.h"
uint8_t is_master;
#ifndef UNICODE_ENABLE
# define UC(x) KC_NO
#endif
/* /*
* The `LAYOUT_kyria_base` macro is a template to allow the use of identical * The `LAYOUT_kyria_base` macro is a template to allow the use of identical
* modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so
@ -96,13 +90,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________ _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
), ),
[_MODS] = LAYOUT_wrapper(
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
KC_LSFT, ___________________BLANK___________________, _______, _______, _______, _______, ___________________BLANK___________________, KC_RSFT,
_______, _______, KC_LALT, _______, _______, _______, _______, KC_RGUI, _______, _______
),
[_GAMEPAD] = LAYOUT_wrapper( [_GAMEPAD] = LAYOUT_wrapper(
KC_ESC, KC_K, KC_Q, KC_W, KC_E, KC_R, _______, _______, _______, _______, _______, _______, KC_ESC, KC_K, KC_Q, KC_W, KC_E, KC_R, _______, _______, _______, _______, _______, _______,
KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, _______, _______, _______, _______, _______, _______, KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, _______, _______, _______, _______, _______, _______,
@ -143,39 +130,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}; };
// clang-format on // clang-format on
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
#ifndef SPLIT_KEYBOARD
if (keycode == RESET && !is_master) {
return false;
}
#endif
}
return true;
}
void matrix_init_keymap(void) { is_master = (uint8_t)is_keyboard_master(); }
#ifdef OLED_DRIVER_ENABLE #ifdef OLED_DRIVER_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_180; } oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_180; }
// clang-format off
# ifndef SPLIT_TRANSPORT_MIRROR
void oled_driver_render_logo(void) {
static const char PROGMEM kyria_logo[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,224,240,112,120, 56, 60, 28, 30, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 30, 28, 60, 56,120,112,240,224,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,192,224,240,124, 62, 31, 15, 7, 3, 1,128,192,224,240,120, 56, 60, 28, 30, 14, 14, 7, 7,135,231,127, 31,255,255, 31,127,231,135, 7, 7, 14, 14, 30, 28, 60, 56,120,240,224,192,128, 1, 3, 7, 15, 31, 62,124,240,224,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,240,252,255, 31, 7, 1, 0, 0,192,240,252,254,255,247,243,177,176, 48, 48, 48, 48, 48, 48, 48,120,254,135, 1, 0, 0,255,255, 0, 0, 1,135,254,120, 48, 48, 48, 48, 48, 48, 48,176,177,243,247,255,254,252,240,192, 0, 0, 1, 7, 31,255,252,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255, 0, 0, 0, 0, 0,254,255,255, 1, 1, 7, 30,120,225,129,131,131,134,134,140,140,152,152,177,183,254,248,224,255,255,224,248,254,183,177,152,152,140,140,134,134,131,131,129,225,120, 30, 7, 1, 1,255,255,254, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0,255,255, 0, 0,192,192, 48, 48, 0, 0,240,240, 0, 0, 0, 0, 0, 0,240,240, 0, 0,240,240,192,192, 48, 48, 48, 48,192,192, 0, 0, 48, 48,243,243, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,192,192, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255, 0, 0, 0, 0, 0,127,255,255,128,128,224,120, 30,135,129,193,193, 97, 97, 49, 49, 25, 25,141,237,127, 31, 7,255,255, 7, 31,127,237,141, 25, 25, 49, 49, 97, 97,193,193,129,135, 30,120,224,128,128,255,255,127, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0, 63, 63, 3, 3, 12, 12, 48, 48, 0, 0, 0, 0, 51, 51, 51, 51, 51, 51, 15, 15, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 63, 63, 48, 48, 0, 0, 12, 12, 51, 51, 51, 51, 51, 51, 63, 63, 0, 0, 0, 0, 0,
0, 0, 0, 0, 15, 63,255,248,224,128, 0, 0, 3, 15, 63,127,255,239,207,141, 13, 12, 12, 12, 12, 12, 12, 12, 30,127,225,128, 0, 0,255,255, 0, 0,128,225,127, 30, 12, 12, 12, 12, 12, 12, 12, 13,141,207,239,255,127, 63, 15, 3, 0, 0,128,224,248,255, 63, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 62,124,248,240,224,192,128, 1, 3, 7, 15, 30, 28, 60, 56,120,112,112,224,224,225,231,254,248,255,255,248,254,231,225,224,224,112,112,120, 56, 60, 28, 30, 15, 7, 3, 1,128,192,224,240,248,124, 62, 15, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 15, 14, 30, 28, 60, 56,120,112,112,112,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,112,112,112,120, 56, 60, 28, 30, 14, 15, 7, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
oled_write_raw_P(kyria_logo, sizeof(kyria_logo));
}
# endif
#endif #endif
#ifdef ENCODER_ENABLE #ifdef ENCODER_ENABLE

View File

@ -73,13 +73,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________ _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
), ),
[_MODS] = LAYOUT_wrapper(\
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_LOWER] = LAYOUT_wrapper(\ [_LOWER] = LAYOUT_wrapper(\
KC_TILD, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_BSPC, KC_TILD, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_BSPC,
KC_F11, _________________LOWER_L2__________________, _______, _______, _______, _______, _________________LOWER_R2__________________, KC_PIPE, KC_F11, _________________LOWER_L2__________________, _______, _______, _______, _______, _________________LOWER_R2__________________, KC_PIPE,

View File

@ -2,3 +2,4 @@ USER_NAME := not_drashna
RGBLIGHT_ENABLE = yes RGBLIGHT_ENABLE = yes
CONSOLE_ENABLE = no CONSOLE_ENABLE = no
LTO_ENABLE = yes

View File

@ -19,9 +19,6 @@
#ifdef UNICODEMAP_ENABLE #ifdef UNICODEMAP_ENABLE
# include "drashna_unicode.h" # include "drashna_unicode.h"
#endif // UNICODEMAP_ENABLE #endif // UNICODEMAP_ENABLE
#ifndef UNICODE_ENABLE
# define UC(x) KC_NO
#endif
enum more_custom_keycodes { enum more_custom_keycodes {
KC_SWAP_NUM = NEW_SAFE_RANGE, KC_SWAP_NUM = NEW_SAFE_RANGE,
@ -199,20 +196,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________ _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
), ),
// Reverts OSM(Shift) to normal Shifts. However, may not need since we fixed the issue with RDP (LOCAL RESOURCES)
[_MODS] = LAYOUT_ergodox_pretty_wrapper(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______,
_______, _______,
_______, _______, _______, _______, _______, _______
),
/* Keymap 4: Customized Overwatch Layout /* Keymap 4: Customized Overwatch Layout
* *
* ,--------------------------------------------------. ,--------------------------------------------------. * ,--------------------------------------------------. ,--------------------------------------------------.
@ -303,7 +286,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_MAKE, _______, _______, _______, _______, _______, UC_MOD, KC_NUKE, _________________ADJUST_R1_________________, KC_RST, KC_MAKE, _______, _______, _______, _______, _______, UC_MOD, KC_NUKE, _________________ADJUST_R1_________________, KC_RST,
VRSN, _________________ADJUST_L1_________________, _______, _______, _________________ADJUST_R1_________________, EEP_RST, VRSN, _________________ADJUST_L1_________________, _______, _______, _________________ADJUST_R1_________________, EEP_RST,
_______, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, RGB_IDL, _______, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, RGB_IDL,
_______, _________________ADJUST_L3_________________, _______, _______, _________________ADJUST_R3_________________, TG(_MODS), _______, _________________ADJUST_L3_________________, _______, _______, _________________ADJUST_R3_________________, TG_MODS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______,
@ -466,9 +449,12 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
RGB_MATRIX_INDICATOR_SET_COLOR(25, 0x7A, 0x00, 0xFF); // 3 RGB_MATRIX_INDICATOR_SET_COLOR(25, 0x7A, 0x00, 0xFF); // 3
} }
# if defined(RGBLIGHT_ENABLE)
if (userspace_config.rgb_layer_change) { if (!userspace_config.rgb_layer_change)
bool mods_enabled = IS_LAYER_ON(_MODS); # else
if (userspace_config.rgb_layer_change)
# endif
{
switch (get_highest_layer(layer_state|default_layer_state)) { switch (get_highest_layer(layer_state|default_layer_state)) {
case _GAMEPAD: case _GAMEPAD:
rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
@ -486,28 +472,28 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _QWERTY: case _QWERTY:
rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_CYAN, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _COLEMAK: case _COLEMAK:
rgb_matrix_layer_helper(HSV_MAGENTA, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_MAGENTA, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _DVORAK: case _DVORAK:
rgb_matrix_layer_helper(HSV_SPRINGGREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_SPRINGGREEN, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _WORKMAN: case _WORKMAN:
rgb_matrix_layer_helper(HSV_GOLDENROD, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_GOLDENROD, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _NORMAN: case _NORMAN:
rgb_matrix_layer_helper(HSV_CORAL, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_CORAL, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _MALTRON: case _MALTRON:
rgb_matrix_layer_helper(HSV_YELLOW, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_YELLOW, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _EUCALYN: case _EUCALYN:
rgb_matrix_layer_helper(HSV_PINK, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_PINK, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _CARPLAX: case _CARPLAX:
rgb_matrix_layer_helper(HSV_BLUE, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_BLUE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
} }
} }

View File

@ -1,5 +1,5 @@
BOOTMAGIC_ENABLE = lite BOOTMAGIC_ENABLE = lite
TAP_DANCE_ENABLE = yes TAP_DANCE_ENABLE = no
COMMAND_ENABLE = no # Commands for debug and configuration COMMAND_ENABLE = no # Commands for debug and configuration
CONSOLE_ENABLE = no CONSOLE_ENABLE = no
SPACE_CADET_ENABLE = no SPACE_CADET_ENABLE = no

View File

@ -115,13 +115,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________ _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
), ),
[_MODS] = LAYOUT_ortho_4x12_wrapper(
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_LOWER] = LAYOUT_ortho_4x12_wrapper( [_LOWER] = LAYOUT_ortho_4x12_wrapper(
KC_TILD, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_BSPC, KC_TILD, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_BSPC,
KC_DEL, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE, KC_DEL, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE,
@ -262,31 +255,30 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
default: { default: {
bool mods_enabled = IS_LAYER_ON(_MODS);
switch (get_highest_layer(default_layer_state)) { switch (get_highest_layer(default_layer_state)) {
case _QWERTY: case _QWERTY:
rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_CYAN, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _COLEMAK: case _COLEMAK:
rgb_matrix_layer_helper(HSV_MAGENTA, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_MAGENTA, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _DVORAK: case _DVORAK:
rgb_matrix_layer_helper(HSV_SPRINGGREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_SPRINGGREEN, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _WORKMAN: case _WORKMAN:
rgb_matrix_layer_helper(HSV_GOLDENROD, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_GOLDENROD, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _NORMAN: case _NORMAN:
rgb_matrix_layer_helper(HSV_CORAL, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_CORAL, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _MALTRON: case _MALTRON:
rgb_matrix_layer_helper(HSV_YELLOW, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_YELLOW, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _EUCALYN: case _EUCALYN:
rgb_matrix_layer_helper(HSV_PINK, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_PINK, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
case _CARPLAX: case _CARPLAX:
rgb_matrix_layer_helper(HSV_BLUE, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max); rgb_matrix_layer_helper(HSV_BLUE, 0, rgb_matrix_config.speed, LED_FLAG_MODIFIER, led_min, led_max);
break; break;
} }
break; break;

View File

@ -67,14 +67,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_________________WORKMAN_L3________________, _________________WORKMAN_R3________________ _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
), ),
[_MODS] = LAYOUT_ortho_5x12_wrapper(
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* Lower /* Lower
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |

View File

@ -90,13 +90,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________ _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
), ),
[_MODS] = LAYOUT_split_3x6_3_wrapper(
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
_______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, KC_RSFT,
_______, _______, _______, _______, _______, _______
),
[_LOWER] = LAYOUT_split_3x6_3_wrapper( [_LOWER] = LAYOUT_split_3x6_3_wrapper(
KC_F11, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_F11, KC_F11, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_F11,
KC_F12, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE, KC_F12, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE,
@ -179,7 +172,6 @@ void check_default_layer(uint8_t mode, uint8_t type, uint8_t led_min, uint8_t le
} }
void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
if (!is_keyboard_master()) return;
if (userspace_config.rgb_layer_change) { if (userspace_config.rgb_layer_change) {
switch (get_highest_layer(layer_state)) { switch (get_highest_layer(layer_state)) {
case _GAMEPAD: case _GAMEPAD:
@ -198,7 +190,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
rgb_matrix_layer_helper(HSV_RED, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW, led_min, led_max); rgb_matrix_layer_helper(HSV_RED, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW, led_min, led_max);
break; break;
default: { default: {
check_default_layer(IS_LAYER_ON(_MODS), LED_FLAG_UNDERGLOW, led_min, led_max); check_default_layer(0, LED_FLAG_UNDERGLOW, led_min, led_max);
break; break;
} }
} }

View File

@ -3,17 +3,16 @@
# change to "no" to disable the options, or define them in the Makefile in # change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically # the appropriate keymap folder that will get included automatically
# #
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000) BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys(+4700) MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control(+450) EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug(+400) CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID BLUETOOTH_ENABLE = no # Enable Bluetooth
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no # Enable one-hand typing SWAP_HANDS_ENABLE = no # Enable one-hand typing
@ -23,7 +22,7 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifeq ($(strip $(KEYBOARD)), crkbd/rev1) ifeq ($(strip $(KEYBOARD)), crkbd/rev1)
OLED_DRIVER_ENABLE = yes OLED_DRIVER_ENABLE = yes
RGB_MATRIX_ENABLE = yes RGB_MATRIX_ENABLE = yes
HAPTIC_ENABLE = SOLENOID HAPTIC_ENABLE = no
BOOTLOADER = qmk-dfu BOOTLOADER = qmk-dfu
endif endif
@ -31,4 +30,5 @@ ifeq ($(strip $(CTPC)), yes)
HAPTIC_ENABLE = no HAPTIC_ENABLE = no
WS2812_DRIVER = pwm # won't work without a patch to the ctpc mk file WS2812_DRIVER = pwm # won't work without a patch to the ctpc mk file
SERIAL_DRIVER = usart SERIAL_DRIVER = usart
SWAP_HANDS_ENABLE = yes
endif endif

View File

@ -24,7 +24,7 @@
#if defined(SPLIT_KEYBOARD) #if defined(SPLIT_KEYBOARD)
# define SPLIT_MODS_ENABLE # define SPLIT_MODS_ENABLE
// # define SPLIT_TRANSPORT_MIRROR # define SPLIT_TRANSPORT_MIRROR
# define SERIAL_USE_MULTI_TRANSACTION # define SERIAL_USE_MULTI_TRANSACTION
// # define SPLIT_NUM_TRANSACTIONS_KB 2 // # define SPLIT_NUM_TRANSACTIONS_KB 2
#endif #endif
@ -56,6 +56,8 @@
# else # else
# define RGBLIGHT_ANIMATIONS # define RGBLIGHT_ANIMATIONS
# endif # endif
# define RGBLIGHT_EFFECT_TWINKLE_LIFE 250
# define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1/24
#endif // RGBLIGHT_ENABLE #endif // RGBLIGHT_ENABLE
#ifdef RGB_MATRIX_ENABLE #ifdef RGB_MATRIX_ENABLE
@ -115,6 +117,9 @@
# define OLED_UPDATE_INTERVAL 15 # define OLED_UPDATE_INTERVAL 15
# endif # endif
# define OLED_DISABLE_TIMEOUT # define OLED_DISABLE_TIMEOUT
# ifdef OLED_FONT_H
# undef OLED_FONT_H
# endif
# define OLED_FONT_H "drashna_font.h" # define OLED_FONT_H "drashna_font.h"
# define OLED_FONT_END 255 # define OLED_FONT_END 255
// # define OLED_FONT_5X5 // # define OLED_FONT_5X5
@ -149,7 +154,9 @@
#undef PERMISSIVE_HOLD #undef PERMISSIVE_HOLD
//#define TAPPING_FORCE_HOLD //#define TAPPING_FORCE_HOLD
//#define RETRO_TAPPING //#define RETRO_TAPPING
#define TAPPING_TERM_PER_KEY #ifndef KEYBOARD_kyria_rev1
# define TAPPING_TERM_PER_KEY
#endif
#define FORCE_NKRO #define FORCE_NKRO

View File

@ -164,6 +164,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
return state; return state;
} }
state = layer_state_set_keymap(state);
state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST); state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
#if defined(RGBLIGHT_ENABLE) #if defined(RGBLIGHT_ENABLE)
state = layer_state_set_rgb_light(state); state = layer_state_set_rgb_light(state);
@ -179,7 +180,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
} }
} }
#endif #endif
return layer_state_set_keymap(state); return state;
} }
__attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t state) { return state; } __attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t state) { return state; }

View File

@ -47,7 +47,6 @@ enum userspace_layers {
_MALTRON, _MALTRON,
_EUCALYN, _EUCALYN,
_CARPLAX, _CARPLAX,
_MODS, /* layer 8 */
_GAMEPAD, _GAMEPAD,
_DIABLO, _DIABLO,
_MACROS, _MACROS,

View File

@ -21,6 +21,7 @@
#include QMK_KEYBOARD_H #include QMK_KEYBOARD_H
#define ROWS_PER_HAND (MATRIX_ROWS / 2) #define ROWS_PER_HAND (MATRIX_ROWS / 2)
#define SYNC_TIMER_OFFSET 2
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
# include "rgblight.h" # include "rgblight.h"
@ -37,19 +38,33 @@ static pin_t encoders_pad[] = ENCODERS_PAD_A;
#endif #endif
#ifdef POINTING_DEVICE_ENABLE #ifdef POINTING_DEVICE_ENABLE
static int8_t split_mouse_x = 0, split_mouse_y = 0; static uint16_t device_cpi = 0;
static int8_t split_mouse_x = 0, split_mouse_y = 0;
#endif #endif
#ifdef OLED_DRIVER_ENABLE #ifdef OLED_DRIVER_ENABLE
# include "oled_driver.h" # include "oled_driver.h"
#endif #endif
#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
# include "led_matrix.h"
#endif
#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
# include "rgb_matrix.h"
#endif
#if defined(USE_I2C) #if defined(USE_I2C)
# include "i2c_master.h" # include "i2c_master.h"
# include "i2c_slave.h" # include "i2c_slave.h"
typedef struct _I2C_slave_buffer_t { typedef struct _I2C_slave_buffer_t {
# ifndef DISABLE_SYNC_TIMER
uint32_t sync_timer;
# endif
# ifdef SPLIT_TRANSPORT_MIRROR
matrix_row_t mmatrix[ROWS_PER_HAND];
# endif
matrix_row_t smatrix[ROWS_PER_HAND]; matrix_row_t smatrix[ROWS_PER_HAND];
# ifdef SPLIT_MODS_ENABLE # ifdef SPLIT_MODS_ENABLE
uint8_t real_mods; uint8_t real_mods;
@ -69,20 +84,30 @@ typedef struct _I2C_slave_buffer_t {
# endif # endif
# ifdef WPM_ENABLE # ifdef WPM_ENABLE
uint8_t current_wpm; uint8_t current_wpm;
# endif
# if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
led_eeconfig_t led_matrix;
bool led_suspend_state;
# endif
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
rgb_config_t rgb_matrix;
bool rgb_suspend_state;
# endif # endif
int8_t mouse_x; int8_t mouse_x;
int8_t mouse_y; int8_t mouse_y;
uint16_t device_cpi;
bool oled_on; bool oled_on;
layer_state_t t_layer_state; layer_state_t t_layer_state;
layer_state_t t_default_layer_state; layer_state_t t_default_layer_state;
bool is_rgb_matrix_suspended;
} __attribute__((packed)) I2C_slave_buffer_t; } __attribute__((packed)) I2C_slave_buffer_t;
static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; 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_BACKLIGHT_START offsetof(I2C_slave_buffer_t, backlight_level)
# define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync) # define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync)
# define I2C_KEYMAP_START offsetof(I2C_slave_buffer_t, smatrix) # define I2C_KEYMAP_MASTER_START offsetof(I2C_slave_buffer_t, mmatrix)
# define I2C_KEYMAP_SLAVE_START offsetof(I2C_slave_buffer_t, smatrix)
# define I2C_SYNC_TIME_START offsetof(I2C_slave_buffer_t, sync_timer)
# define I2C_REAL_MODS_START offsetof(I2C_slave_buffer_t, real_mods) # define I2C_REAL_MODS_START offsetof(I2C_slave_buffer_t, real_mods)
# define I2C_WEAK_MODS_START offsetof(I2C_slave_buffer_t, weak_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_ONESHOT_MODS_START offsetof(I2C_slave_buffer_t, oneshot_mods)
@ -90,10 +115,14 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re
# define I2C_WPM_START offsetof(I2C_slave_buffer_t, current_wpm) # 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_X_START offsetof(I2C_slave_buffer_t, mouse_x)
# define I2C_MOUSE_Y_START offsetof(I2C_slave_buffer_t, mouse_y) # define I2C_MOUSE_Y_START offsetof(I2C_slave_buffer_t, mouse_y)
# define I2C_MOUSE_DPI_START offsetof(I2C_slave_buffer_t, device_cpi)
# define I2C_OLED_ON_START offsetof(I2C_slave_buffer_t, oled_on) # define I2C_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_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_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 I2C_LED_MATRIX_START offsetof(I2C_slave_buffer_t, led_matrix)
# define I2C_LED_SUSPEND_START offsetof(I2C_slave_buffer_t, led_suspend_state)
# define I2C_RGB_MATRIX_START offsetof(I2C_slave_buffer_t, rgb_matrix)
# define I2C_RGB_SUSPEND_START offsetof(I2C_slave_buffer_t, rgb_suspend_state)
# define TIMEOUT 100 # define TIMEOUT 100
@ -102,9 +131,11 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re
# endif # endif
// Get rows from other half over i2c // Get rows from other half over i2c
bool transport_master(matrix_row_t matrix[]) { bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_START, (void *)matrix, sizeof(i2c_buffer->smatrix), TIMEOUT); i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_SLAVE_START, (void *)slave_matrix, sizeof(i2c_buffer->smatrix), TIMEOUT);
# ifdef SPLIT_TRANSPORT_MIRROR
i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_MASTER_START, (void *)master_matrix, sizeof(i2c_buffer->mmatrix), TIMEOUT);
# endif
// write backlight info // write backlight info
# ifdef BACKLIGHT_ENABLE # ifdef BACKLIGHT_ENABLE
uint8_t level = is_backlight_enabled() ? get_backlight_level() : 0; uint8_t level = is_backlight_enabled() ? get_backlight_level() : 0;
@ -147,6 +178,12 @@ bool transport_master(matrix_row_t matrix[]) {
i2c_readReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_Y_START, (void *)&i2c_buffer->mouse_y, sizeof(i2c_buffer->mouse_y), TIMEOUT); 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; temp_report.y = i2c_buffer->mouse_y;
pointing_device_set_report(temp_report); pointing_device_set_report(temp_report);
if (device_cpi != i2c_buffer->device_cpi) {
if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_DPI_START, (void *)&device_cpi, sizeof(device_cpi), TIMEOUT) >= 0) {
i2c_buffer->device_cpi = device_cpi
}
}
} }
# endif # endif
@ -188,29 +225,42 @@ bool transport_master(matrix_row_t matrix[]) {
} }
# ifdef OLED_DRIVER_ENABLE # ifdef OLED_DRIVER_ENABLE
bool is_oled = is_oled_on(); bool is_oled_on = is_oled_on();
if (is_oled != i2c_buffer->oled_on) { if (is_oled_on != i2c_buffer->oled_on) {
if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LAYER_STATE_START, (void *)&is_oled, sizeof(is_oled), TIMEOUT) >= 0) { 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; i2c_buffer->oled_on = is_oled_on;
} }
} }
# endif # endif
# ifdef RGB_MATRIX_ENABLE # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
bool sus_state = rgb_matrix_get_suspend_state(); i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_MATRIX_START, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix), TIMEOUT);
if (sus_state != i2c_buffer->is_rgb_matrix_suspended) { bool suspend_state = led_matrix_get_suspend_state();
if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_SUSPEND_START, (void *)&sus_state, sizeof(sus_state), TIMEOUT) >= 0) { i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->led_suspend_state), TIMEOUT);
i2c_buffer->is_rgb_matrix_suspended = sus_state; # endif
} # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
} i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_START, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix), TIMEOUT);
bool suspend_state = rgb_matrix_get_suspend_state();
i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->rgb_suspend_state), TIMEOUT);
# endif
# ifndef DISABLE_SYNC_TIMER
i2c_buffer->sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET;
i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_SYNC_TIME_START, (void *)&i2c_buffer->sync_timer, sizeof(i2c_buffer->sync_timer), TIMEOUT);
# endif # endif
return true; return true;
} }
void transport_slave(matrix_row_t matrix[]) { void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
# ifndef DISABLE_SYNC_TIMER
sync_timer_update(i2c_buffer->sync_timer);
# endif
// Copy matrix to I2C buffer // Copy matrix to I2C buffer
memcpy((void *)i2c_buffer->smatrix, (void *)matrix, sizeof(i2c_buffer->smatrix)); memcpy((void *)i2c_buffer->smatrix, (void *)slave_matrix, sizeof(i2c_buffer->smatrix));
# ifdef SPLIT_TRANSPORT_MIRROR
memcpy((void *)master_matrix, (void *)i2c_buffer->mmatrix, sizeof(i2c_buffer->mmatrix));
# endif
// Read Backlight Info // Read Backlight Info
# ifdef BACKLIGHT_ENABLE # ifdef BACKLIGHT_ENABLE
@ -235,6 +285,11 @@ void transport_slave(matrix_row_t matrix[]) {
# ifdef POINTING_DEVICE_ENABLE # ifdef POINTING_DEVICE_ENABLE
if (!is_keyboard_left()) { if (!is_keyboard_left()) {
static uint16_t cpi;
if (cpi != i2c_buffer->device_cpi) {
cpi = i2c_buffer->device_cpi;
pmw_set_cpi(cpi);
}
i2c_buffer->mouse_x = split_mouse_x; i2c_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_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_buffer->mouse_y = split_mouse_y;
@ -266,8 +321,13 @@ void transport_slave(matrix_row_t matrix[]) {
} }
# endif # endif
# ifdef RGB_MATRIX_ENABLE # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
rgb_matrix_set_suspend_state(i2c_buffer->is_rgb_matrix_suspended); memcpy((void *)i2c_buffer->led_matrix, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix));
led_matrix_set_suspend_state(i2c_buffer->led_suspend_state);
# endif
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
memcpy((void *)i2c_buffer->rgb_matrix, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix));
rgb_matrix_set_suspend_state(i2c_buffer->rgb_suspend_state);
# endif # endif
} }
@ -283,30 +343,44 @@ typedef struct _Serial_s2m_buffer_t {
// TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack
matrix_row_t smatrix[ROWS_PER_HAND]; matrix_row_t smatrix[ROWS_PER_HAND];
# ifdef ENCODER_ENABLE # ifdef ENCODER_ENABLE
uint8_t encoder_state[NUMBER_OF_ENCODERS]; uint8_t encoder_state[NUMBER_OF_ENCODERS];
# endif # endif
int8_t mouse_x; int8_t mouse_x;
int8_t mouse_y; int8_t mouse_y;
} __attribute__((packed)) Serial_s2m_buffer_t; } __attribute__((packed)) Serial_s2m_buffer_t;
typedef struct _Serial_m2s_buffer_t { typedef struct _Serial_m2s_buffer_t {
# ifdef SPLIT_MODS_ENABLE # ifdef SPLIT_MODS_ENABLE
uint8_t real_mods; uint8_t real_mods;
uint8_t weak_mods; uint8_t weak_mods;
# ifndef NO_ACTION_ONESHOT # ifndef NO_ACTION_ONESHOT
uint8_t oneshot_mods; uint8_t oneshot_mods;
# endif # endif
# endif # endif
# ifndef DISABLE_SYNC_TIMER
uint32_t sync_timer;
# endif
# ifdef SPLIT_TRANSPORT_MIRROR
matrix_row_t mmatrix[ROWS_PER_HAND];
# endif
# ifdef BACKLIGHT_ENABLE # ifdef BACKLIGHT_ENABLE
uint8_t backlight_level; uint8_t backlight_level;
# endif # endif
# ifdef WPM_ENABLE # ifdef WPM_ENABLE
uint8_t current_wpm; uint8_t current_wpm;
# endif # endif
uint16_t device_cpi;
bool oled_on; bool oled_on;
layer_state_t t_layer_state; layer_state_t t_layer_state;
layer_state_t t_default_layer_state; layer_state_t t_default_layer_state;
bool is_rgb_matrix_suspended; # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
led_eeconfig_t led_matrix;
bool led_suspend_state;
# endif
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
rgb_config_t rgb_matrix;
bool rgb_suspend_state;
# endif
} __attribute__((packed)) Serial_m2s_buffer_t; } __attribute__((packed)) Serial_m2s_buffer_t;
# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
@ -383,7 +457,7 @@ void transport_rgblight_slave(void) {
# define transport_rgblight_slave() # define transport_rgblight_slave()
# endif # endif
bool transport_master(matrix_row_t matrix[]) { bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
# ifndef SERIAL_USE_MULTI_TRANSACTION # ifndef SERIAL_USE_MULTI_TRANSACTION
if (soft_serial_transaction() != TRANSACTION_END) { if (soft_serial_transaction() != TRANSACTION_END) {
return false; return false;
@ -397,7 +471,10 @@ bool transport_master(matrix_row_t matrix[]) {
// TODO: if MATRIX_COLS > 8 change to unpack() // TODO: if MATRIX_COLS > 8 change to unpack()
for (int i = 0; i < ROWS_PER_HAND; ++i) { for (int i = 0; i < ROWS_PER_HAND; ++i) {
matrix[i] = serial_s2m_buffer.smatrix[i]; slave_matrix[i] = serial_s2m_buffer.smatrix[i];
# ifdef SPLIT_TRANSPORT_MIRROR
serial_m2s_buffer.mmatrix[i] = master_matrix[i];
# endif
} }
# ifdef BACKLIGHT_ENABLE # ifdef BACKLIGHT_ENABLE
@ -411,12 +488,12 @@ bool transport_master(matrix_row_t matrix[]) {
# ifdef WPM_ENABLE # ifdef WPM_ENABLE
// Write wpm to slave // Write wpm to slave
serial_m2s_buffer.current_wpm = get_current_wpm(); serial_m2s_buffer.current_wpm = get_current_wpm();
# endif # endif
# ifdef SPLIT_MODS_ENABLE # ifdef SPLIT_MODS_ENABLE
serial_m2s_buffer.real_mods = get_mods(); serial_m2s_buffer.real_mods = get_mods();
serial_m2s_buffer.weak_mods = get_weak_mods(); serial_m2s_buffer.weak_mods = get_weak_mods();
# ifndef NO_ACTION_ONESHOT # ifndef NO_ACTION_ONESHOT
serial_m2s_buffer.oneshot_mods = get_oneshot_mods(); serial_m2s_buffer.oneshot_mods = get_oneshot_mods();
# endif # endif
@ -428,28 +505,43 @@ bool transport_master(matrix_row_t matrix[]) {
temp_report.x = serial_s2m_buffer.mouse_x; temp_report.x = serial_s2m_buffer.mouse_x;
temp_report.y = serial_s2m_buffer.mouse_y; temp_report.y = serial_s2m_buffer.mouse_y;
pointing_device_set_report(temp_report); pointing_device_set_report(temp_report);
serial_m2s_buffer.device_cpi = device_cpi;
} }
# endif # endif
serial_m2s_buffer.t_layer_state = layer_state; serial_m2s_buffer.t_layer_state = layer_state;
serial_m2s_buffer.t_default_layer_state = default_layer_state; serial_m2s_buffer.t_default_layer_state = default_layer_state;
# ifdef OLED_DRIVER_ENABLE # ifdef OLED_DRIVER_ENABLE
serial_m2s_buffer.oled_on = is_oled_on(); serial_m2s_buffer.oled_on = is_oled_on();
# endif # endif
# ifdef RGB_MATRIX_ENABLE # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
serial_m2s_buffer.is_rgb_matrix_suspended = rgb_matrix_get_suspend_state(); serial_m2s_buffer.led_matrix = led_matrix_eeconfig;
serial_m2s_buffer.led_suspend_state = led_matrix_get_suspend_state();
# endif
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
serial_m2s_buffer.rgb_matrix = rgb_matrix_config;
serial_m2s_buffer.rgb_suspend_state = rgb_matrix_get_suspend_state();
# endif # endif
# ifndef DISABLE_SYNC_TIMER
serial_m2s_buffer.sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET;
# endif
return true; return true;
} }
void transport_slave(matrix_row_t matrix[]) { void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
transport_rgblight_slave(); transport_rgblight_slave();
# ifndef DISABLE_SYNC_TIMER
sync_timer_update(serial_m2s_buffer.sync_timer);
# endif
// TODO: if MATRIX_COLS > 8 change to pack() // TODO: if MATRIX_COLS > 8 change to pack()
for (int i = 0; i < ROWS_PER_HAND; ++i) { for (int i = 0; i < ROWS_PER_HAND; ++i) {
serial_s2m_buffer.smatrix[i] = matrix[i]; serial_s2m_buffer.smatrix[i] = slave_matrix[i];
# ifdef SPLIT_TRANSPORT_MIRROR
master_matrix[i] = serial_m2s_buffer.mmatrix[i];
# endif
} }
# ifdef BACKLIGHT_ENABLE # ifdef BACKLIGHT_ENABLE
@ -474,6 +566,11 @@ void transport_slave(matrix_row_t matrix[]) {
# ifdef POINTING_DEVICE_ENABLE # ifdef POINTING_DEVICE_ENABLE
if (!is_keyboard_left()) { if (!is_keyboard_left()) {
static uint16_t cpi;
if (cpi != serial_m2s_buffer.device_cpi) {
cpi = serial_m2s_buffer.device_cpi;
pmw_set_cpi(cpi);
}
serial_s2m_buffer.mouse_x = split_mouse_x; serial_s2m_buffer.mouse_x = split_mouse_x;
serial_s2m_buffer.mouse_y = split_mouse_y; serial_s2m_buffer.mouse_y = split_mouse_y;
} }
@ -493,16 +590,14 @@ void transport_slave(matrix_row_t matrix[]) {
} }
# endif # endif
# ifdef RGB_MATRIX_ENABLE # if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
rgb_matrix_set_suspend_state(serial_m2s_buffer.is_rgb_matrix_suspended); led_matrix_eeconfig = serial_m2s_buffer.led_matrix;
led_matrix_set_suspend_state(serial_m2s_buffer.led_suspend_state);
# endif
# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
rgb_matrix_config = serial_m2s_buffer.rgb_matrix;
rgb_matrix_set_suspend_state(serial_m2s_buffer.rgb_suspend_state);
# endif # endif
} }
#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

View File

@ -15,7 +15,6 @@
*/ */
#include "drashna.h" #include "drashna.h"
#include <stdio.h>
#ifndef KEYLOGGER_LENGTH #ifndef KEYLOGGER_LENGTH
// # ifdef OLED_DISPLAY_128X64 // # ifdef OLED_DISPLAY_128X64
@ -158,6 +157,19 @@ void render_keylock_status(uint8_t led_usb_state) {
oled_advance_page(true); oled_advance_page(true);
#endif #endif
} }
void render_matrix_scan_rate(void) {
#ifdef DEBUG_MATRIX_SCAN_RATE
char matrix_rate[5];
uint16_t n = get_matrix_scan_rate();
matrix_rate[4] = '\0';
matrix_rate[3] = '0' + n % 10;
matrix_rate[2] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
matrix_rate[1] = n / 10 ? '0' + n / 10 : ' ';
matrix_rate[0] = ' ';
oled_write_P(PSTR("MS:"), false);
oled_write(matrix_rate, false);
#endif
}
void render_mod_status(uint8_t modifiers) { 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}}; static const char PROGMEM mod_status[5][3] = {{0xE8, 0xE9, 0}, {0xE4, 0xE5, 0}, {0xE6, 0xE7, 0}, {0xEA, 0xEB, 0}, {0xEC, 0xED, 0}};
@ -169,11 +181,17 @@ void render_mod_status(uint8_t modifiers) {
#endif #endif
oled_write_P(mod_status[2], (modifiers & MOD_MASK_ALT)); oled_write_P(mod_status[2], (modifiers & MOD_MASK_ALT));
oled_write_P(mod_status[1], (modifiers & MOD_MASK_CTRL)); oled_write_P(mod_status[1], (modifiers & MOD_MASK_CTRL));
render_matrix_scan_rate();
#if defined(OLED_DISPLAY_128X64) #if defined(OLED_DISPLAY_128X64)
oled_advance_page(true); oled_advance_page(true);
#endif #endif
} }
#ifdef SWAP_HANDS_ENABLE
extern bool swap_hands;
#endif
void render_bootmagic_status(void) { void render_bootmagic_status(void) {
/* Show Ctrl-Gui Swap options */ /* Show Ctrl-Gui Swap options */
static const char PROGMEM logo[][2][3] = { static const char PROGMEM logo[][2][3] = {
@ -209,7 +227,7 @@ void render_bootmagic_status(void) {
oled_write_P(PSTR(" "), false); oled_write_P(PSTR(" "), false);
oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NKRO), keymap_config.nkro); oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NKRO), keymap_config.nkro);
oled_write_P(PSTR(" "), false); oled_write_P(PSTR(" "), false);
oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NOGUI), !keymap_config.no_gui); oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NOGUI), keymap_config.no_gui);
#ifdef OLED_DISPLAY_128X64 #ifdef OLED_DISPLAY_128X64
oled_advance_page(true); oled_advance_page(true);
oled_write_P(PSTR("Magic"), false); oled_write_P(PSTR("Magic"), false);
@ -221,10 +239,11 @@ void render_bootmagic_status(void) {
} }
#endif #endif
oled_write_P(PSTR(" "), false); oled_write_P(PSTR(" "), false);
oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_GRV), keymap_config.swap_grave_esc); oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_ONESHOT), !is_oneshot_enabled());
#ifdef SWAP_HANDS_ENABLE
oled_write_P(PSTR(" "), false); oled_write_P(PSTR(" "), false);
oled_write_P(PSTR(" "), false); oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_SWAP), swap_hands);
oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_CAPS), keymap_config.swap_control_capslock); #endif
#ifdef OLED_DISPLAY_128X64 #ifdef OLED_DISPLAY_128X64
oled_advance_page(true); oled_advance_page(true);
#endif #endif
@ -282,12 +301,22 @@ __attribute__((weak)) void oled_driver_render_logo(void) {
void render_wpm(void) { void render_wpm(void) {
#ifdef WPM_ENABLE #ifdef WPM_ENABLE
uint8_t n = get_current_wpm();
# ifdef OLED_DISPLAY_128X64 # ifdef OLED_DISPLAY_128X64
char wpm_counter[4]; char wpm_counter[4];
wpm_counter[3] = '\0';
wpm_counter[2] = '0' + n % 10;
wpm_counter[1] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
wpm_counter[0] = n / 10 ? '0' + n / 10 : ' ';
# else # else
char wpm_counter[6]; char wpm_counter[6];
# endif wpm_counter[5] = '\0';
snprintf(wpm_counter, sizeof(wpm_counter), "%3u", get_current_wpm()); wpm_counter[4] = '0' + n % 10;
wpm_counter[3] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
wpm_counter[2] = n / 10 ? '0' + n / 10 : ' ';
wpm_counter[1] = ' ';
wpm_counter[0] = ' ';
# endif
oled_write_P(PSTR(OLED_RENDER_WPM_COUNTER), false); oled_write_P(PSTR(OLED_RENDER_WPM_COUNTER), false);
oled_write(wpm_counter, false); oled_write(wpm_counter, false);
#endif #endif
@ -299,7 +328,13 @@ extern uint16_t dpi_array[];
void render_pointing_dpi_status(void) { void render_pointing_dpi_status(void) {
char dpi_status[6]; char dpi_status[6];
snprintf(dpi_status, sizeof(dpi_status), "%5u", dpi_array[keyboard_config.dpi_config]); uint16_t n = dpi_array[keyboard_config.dpi_config];
dpi_status[5] = '\0';
dpi_status[4] = '0' + n % 10;
dpi_status[3] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
dpi_status[2] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
dpi_status[1] = n / 10 ? '0' + n / 10 : ' ';
dpi_status[0] = ' ';
oled_write_P(PSTR(" DPI: "), false); oled_write_P(PSTR(" DPI: "), false);
oled_write(dpi_status, false); oled_write(dpi_status, false);
} }
@ -320,7 +355,11 @@ void render_status_secondary(void) {
void render_status_main(void) { void render_status_main(void) {
#if defined(OLED_DISPLAY_128X64) #if defined(OLED_DISPLAY_128X64)
oled_driver_render_logo(); oled_driver_render_logo();
# ifdef DEBUG_MATRIX_SCAN_RATE
render_matrix_scan_rate();
# else
render_wpm(); render_wpm();
# endif
# ifdef KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball # ifdef KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball
render_pointing_dpi_status(); render_pointing_dpi_status();
# endif # endif

View File

@ -57,6 +57,8 @@ extern uint32_t oled_timer;
# define OLED_RENDER_BOOTMAGIC_NKRO "NKRO" # define OLED_RENDER_BOOTMAGIC_NKRO "NKRO"
# define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI" # define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI"
# define OLED_RENDER_BOOTMAGIC_GRV "GRV" # define OLED_RENDER_BOOTMAGIC_GRV "GRV"
# define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT"
# define OLED_RENDER_BOOTMAGIC_SWAP "SWAP"
# define OLED_RENDER_BOOTMAGIC_CAPS "CAPS" # define OLED_RENDER_BOOTMAGIC_CAPS "CAPS"
# define OLED_RENDER_USER_NAME "USER:" # define OLED_RENDER_USER_NAME "USER:"
@ -99,6 +101,8 @@ extern uint32_t oled_timer;
# define OLED_RENDER_BOOTMAGIC_NKRO "NKRO" # define OLED_RENDER_BOOTMAGIC_NKRO "NKRO"
# define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI" # define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI"
# define OLED_RENDER_BOOTMAGIC_GRV "GRV" # define OLED_RENDER_BOOTMAGIC_GRV "GRV"
# define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT"
# define OLED_RENDER_BOOTMAGIC_SWAP "SWAP"
# define OLED_RENDER_BOOTMAGIC_CAPS "CAPS" # define OLED_RENDER_BOOTMAGIC_CAPS "CAPS"
# define OLED_RENDER_USER_NAME "USER:" # define OLED_RENDER_USER_NAME "USER:"

View File

@ -33,7 +33,7 @@ static float precisionSpeed = 1;
void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) { void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) {
uint8_t data[] = {0x00, red, green, blue, white}; uint8_t data[] = {0x00, red, green, blue, white};
i2c_transmit(TRACKBALL_WRITE, data, sizeof(data), I2C_TIMEOUT); i2c_transmit(TRACKBALL_ADDRESS << 1, data, sizeof(data), I2C_TIMEOUT);
} }
int16_t mouse_offset(uint8_t positive, uint8_t negative, int16_t scale) { int16_t mouse_offset(uint8_t positive, uint8_t negative, int16_t scale) {
@ -94,7 +94,7 @@ void pointing_device_task(void) {
static bool debounce; static bool debounce;
static uint16_t debounce_timer; static uint16_t debounce_timer;
uint8_t state[5] = {}; uint8_t state[5] = {};
if (i2c_readReg(TRACKBALL_WRITE, 0x04, state, 5, I2C_TIMEOUT) == I2C_STATUS_SUCCESS) { if (i2c_readReg(TRACKBALL_ADDRESS << 1, 0x04, state, 5, I2C_TIMEOUT) == I2C_STATUS_SUCCESS) {
if (!state[4] && !debounce) { if (!state[4] && !debounce) {
if (scrolling) { if (scrolling) {
#ifdef PIMORONI_TRACKBALL_INVERT_X #ifdef PIMORONI_TRACKBALL_INVERT_X

View File

@ -53,7 +53,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
#define LOWER MO(_LOWER) #define LOWER MO(_LOWER)
#define RAISE MO(_RAISE) #define RAISE MO(_RAISE)
#define ADJUST MO(_ADJUST) #define ADJUST MO(_ADJUST)
#define TG_MODS TG(_MODS) #define TG_MODS OS_TOGG
#define TG_GAME TG(_GAMEPAD) #define TG_GAME TG(_GAMEPAD)
#define TG_DBLO TG(_DIABLO) #define TG_DBLO TG(_DIABLO)
#define OS_LWR OSL(_LOWER) #define OS_LWR OSL(_LOWER)

View File

@ -62,7 +62,7 @@ __attribute__((weak)) void rgb_matrix_indicator_keymap(void) {}
void matrix_scan_rgb_matrix(void) { void matrix_scan_rgb_matrix(void) {
#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) #if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && timer_elapsed32(hypno_timer) > 15000) { if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && sync_timer_elapsed32(hypno_timer) > 15000) {
rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE); rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
} }
#endif #endif
@ -79,7 +79,7 @@ void keyboard_post_init_rgb_matrix(void) {
bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record) { bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) #if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
hypno_timer = timer_read32(); hypno_timer = sync_timer_read32();
if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_REST_MODE) { if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_REST_MODE) {
rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP); rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
} }

View File

@ -32,7 +32,7 @@ void scan_rgblight_fadeout(void) { // Don't effing change this function .... rg
bool litup = false; bool litup = false;
for (uint8_t light_index = 0; light_index < RGBLED_NUM; ++light_index) { for (uint8_t light_index = 0; light_index < RGBLED_NUM; ++light_index) {
if (lights[light_index].enabled && timer_elapsed(lights[light_index].timer) > 10) { if (lights[light_index].enabled && sync_timer_elapsed(lights[light_index].timer) > 10) {
rgblight_fadeout *light = &lights[light_index]; rgblight_fadeout *light = &lights[light_index];
litup = true; litup = true;
@ -41,7 +41,7 @@ void scan_rgblight_fadeout(void) { // Don't effing change this function .... rg
if (get_highest_layer(layer_state) == 0) { if (get_highest_layer(layer_state) == 0) {
sethsv(light->hue + rand() % 0xF, 255, light->life, (LED_TYPE *)&led[light_index]); sethsv(light->hue + rand() % 0xF, 255, light->life, (LED_TYPE *)&led[light_index]);
} }
light->timer = timer_read(); light->timer = sync_timer_read();
} else { } else {
if (light->enabled && get_highest_layer(layer_state) == 0) { if (light->enabled && get_highest_layer(layer_state) == 0) {
rgblight_sethsv_default_helper(light_index); rgblight_sethsv_default_helper(light_index);
@ -86,7 +86,7 @@ void start_rgb_light(void) {
rgblight_fadeout *light = &lights[light_index]; rgblight_fadeout *light = &lights[light_index];
light->enabled = true; light->enabled = true;
light->timer = timer_read(); light->timer = sync_timer_read();
light->life = 0xC0 + rand() % 0x40; light->life = 0xC0 + rand() % 0x40;
light->hue = rgblight_get_hue() + (rand() % 0xB4) - 0x54; light->hue = rgblight_get_hue() + (rand() % 0xB4) - 0x54;
@ -149,11 +149,11 @@ void matrix_scan_rgb_light(void) {
# if defined(RGBLIGHT_STARTUP_ANIMATION) # if defined(RGBLIGHT_STARTUP_ANIMATION)
if (is_rgblight_startup && is_keyboard_master()) { if (is_rgblight_startup && is_keyboard_master()) {
if (timer_elapsed(rgblight_startup_loop_timer) > 10) { if (sync_timer_elapsed(rgblight_startup_loop_timer) > 10) {
static uint8_t counter; static uint8_t counter;
counter++; counter++;
rgblight_sethsv_noeeprom((counter + old_hue) % 255, 255, 255); rgblight_sethsv_noeeprom((counter + old_hue) % 255, 255, 255);
rgblight_startup_loop_timer = timer_read(); rgblight_startup_loop_timer = sync_timer_read();
if (counter == 255) { if (counter == 255) {
is_rgblight_startup = false; is_rgblight_startup = false;
if (!is_enabled) { if (!is_enabled) {
@ -177,14 +177,11 @@ 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) { layer_state_t layer_state_set_rgb_light(layer_state_t state) {
# ifdef RGBLIGHT_ENABLE # ifdef RGBLIGHT_ENABLE
if (userspace_config.rgb_layer_change) { 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)) { switch (get_highest_layer(state | default_layer_state)) {
case _MACROS: case _MACROS: // mouse
# ifdef RGBLIGHT_EFFECT_TWINKLE if (!layer_state_cmp(state, _GAMEPAD) && !layer_state_cmp(state, _DIABLO)) {
rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_TWINKLE + 5); rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_BREATHING + 3);
# else }
rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_BREATHING + 3);
# endif
break; break;
case _MEDIA: case _MEDIA:
rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_KNIGHT + 1); rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_KNIGHT + 1);
@ -205,28 +202,28 @@ layer_state_t layer_state_set_rgb_light(layer_state_t state) {
rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2); rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2);
break; break;
case _COLEMAK: case _COLEMAK:
rgblight_set_hsv_and_mode(HSV_MAGENTA, mode); rgblight_set_hsv_and_mode(HSV_MAGENTA, RGBLIGHT_MODE_STATIC_LIGHT);
break; break;
case _DVORAK: case _DVORAK:
rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, mode); rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, RGBLIGHT_MODE_STATIC_LIGHT);
break; break;
case _WORKMAN: case _WORKMAN:
rgblight_set_hsv_and_mode(HSV_GOLDENROD, mode); rgblight_set_hsv_and_mode(HSV_GOLDENROD, RGBLIGHT_MODE_STATIC_LIGHT);
break; break;
case _NORMAN: case _NORMAN:
rgblight_set_hsv_and_mode(HSV_CORAL, mode); rgblight_set_hsv_and_mode(HSV_CORAL, RGBLIGHT_MODE_STATIC_LIGHT);
break; break;
case _MALTRON: case _MALTRON:
rgblight_set_hsv_and_mode(HSV_YELLOW, mode); rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_STATIC_LIGHT);
break; break;
case _EUCALYN: case _EUCALYN:
rgblight_set_hsv_and_mode(HSV_PINK, mode); rgblight_set_hsv_and_mode(HSV_PINK, RGBLIGHT_MODE_STATIC_LIGHT);
break; break;
case _CARPLAX: case _CARPLAX:
rgblight_set_hsv_and_mode(HSV_BLUE, mode); rgblight_set_hsv_and_mode(HSV_BLUE, RGBLIGHT_MODE_STATIC_LIGHT);
break; break;
default: default:
rgblight_set_hsv_and_mode(HSV_CYAN, mode); rgblight_set_hsv_and_mode(HSV_CYAN, RGBLIGHT_MODE_STATIC_LIGHT);
break; break;
} }
} }

View File

@ -16,29 +16,37 @@ ifneq ($(strip $(NO_SECRETS)), yes)
endif endif
endif endif
CUSTOM_TAP_DANCE ?= yes
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
SRC += tap_dances.c ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
SRC += tap_dances.c
endif
endif endif
CUSTOM_RGBLIGHT ?= yes
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
SRC += rgb_stuff.c ifeq ($(strip $(CUSTOM_RGBLIGHT)), yes)
ifeq ($(strip $(RGBLIGHT_TWINKLE)), yes) SRC += rgb_stuff.c
OPT_DEFS += -DRGBLIGHT_TWINKLE ifeq ($(strip $(RGBLIGHT_TWINKLE)), yes)
endif OPT_DEFS += -DRGBLIGHT_TWINKLE
ifeq ($(strip $(RGBLIGHT_NOEEPROM)), yes) endif
OPT_DEFS += -DRGBLIGHT_NOEEPROM ifeq ($(strip $(RGBLIGHT_NOEEPROM)), yes)
endif OPT_DEFS += -DRGBLIGHT_NOEEPROM
ifeq ($(strip $(RGBLIGHT_STARTUP_ANIMATION)), yes) endif
OPT_DEFS += -DRGBLIGHT_STARTUP_ANIMATION ifeq ($(strip $(RGBLIGHT_STARTUP_ANIMATION)), yes)
OPT_DEFS += -DRGBLIGHT_STARTUP_ANIMATION
endif
endif endif
endif endif
RGB_MATRIX_ENABLE ?= no CUSTOM_RGB_MATRIX ?= yes
ifneq ($(strip $(RGB_MATRIX_ENABLE)), no) ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
SRC += rgb_matrix_stuff.c ifeq ($(strip $(CUSTOM_RGB_MATRIX)), yes)
SRC += rgb_matrix_stuff.c
endif
endif endif
KEYLOGGER_ENABLE ?= no
ifdef CONSOLE_ENABLE ifdef CONSOLE_ENABLE
ifeq ($(strip $(KEYLOGGER_ENABLE)), yes) ifeq ($(strip $(KEYLOGGER_ENABLE)), yes)
OPT_DEFS += -DKEYLOGGER_ENABLE OPT_DEFS += -DKEYLOGGER_ENABLE
@ -56,8 +64,11 @@ ifeq ($(strip $(PROTOCOL)), VUSB)
NKRO_ENABLE = no NKRO_ENABLE = no
endif endif
CUSTOM_OLED_DRIVER ?= yes
ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes) ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes)
SRC += oled_stuff.c ifeq ($(strip $(CUSTOM_OLED_DRIVER)), yes)
SRC += oled_stuff.c
endif
endif endif
ifeq ($(strip $(PIMORONI_TRACKBALL_ENABLE)), yes) ifeq ($(strip $(PIMORONI_TRACKBALL_ENABLE)), yes)
@ -67,26 +78,30 @@ ifeq ($(strip $(PIMORONI_TRACKBALL_ENABLE)), yes)
QUANTUM_LIB_SRC += i2c_master.c QUANTUM_LIB_SRC += i2c_master.c
endif endif
CUSTOM_SPLIT_TRANSPORT ?= yes
ifeq ($(strip $(SPLIT_KEYBOARD)), yes) ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
ifneq ($(strip $(SPLIT_TRANSPORT)), custom) ifneq ($(strip $(SPLIT_TRANSPORT)), custom)
SPLIT_TRANSPORT = custom ifeq ($(strip $(CUSTOM_SPLIT_TRANSPORT)), yes)
QUANTUM_LIB_SRC += drashna_transport.c SPLIT_TRANSPORT = custom
OPT_DEFS += -DDRASHNA_CUSTOM_TRANSPORT QUANTUM_LIB_SRC += drashna_transport.c
# Unused functions are pruned away, which is why we can add multiple drivers here without bloat. OPT_DEFS += -DDRASHNA_CUSTOM_TRANSPORT
ifeq ($(PLATFORM),AVR) # Unused functions are pruned away, which is why we can add multiple drivers here without bloat.
ifneq ($(NO_I2C),yes) ifeq ($(PLATFORM),AVR)
QUANTUM_LIB_SRC += i2c_master.c \ ifneq ($(NO_I2C),yes)
i2c_slave.c QUANTUM_LIB_SRC += i2c_master.c \
i2c_slave.c
endif
endif endif
endif
SERIAL_DRIVER ?= bitbang SERIAL_DRIVER ?= bitbang
OPT_DEFS += -DSERIAL_DRIVER_$(strip $(shell echo $(SERIAL_DRIVER) | tr '[:lower:]' '[:upper:]')) OPT_DEFS += -DSERIAL_DRIVER_$(strip $(shell echo $(SERIAL_DRIVER) | tr '[:lower:]' '[:upper:]'))
ifeq ($(strip $(SERIAL_DRIVER)), bitbang) ifeq ($(strip $(SERIAL_DRIVER)), bitbang)
QUANTUM_LIB_SRC += serial.c QUANTUM_LIB_SRC += serial.c
else else
QUANTUM_LIB_SRC += serial_$(strip $(SERIAL_DRIVER)).c QUANTUM_LIB_SRC += serial_$(strip $(SERIAL_DRIVER)).c
endif
endif endif
endif endif
endif endif
# DEBUG_MATRIX_SCAN_RATE_ENABLE = api