[Keymap] Update to Drashna keymap and user code (based on develop) (#12936)
This commit is contained in:
		
							parent
							
								
									cc815c4d83
								
							
						
					
					
						commit
						f461adbd1d
					
				
					 34 changed files with 475 additions and 321 deletions
				
			
		| 
						 | 
				
			
			@ -24,7 +24,7 @@
 | 
			
		|||
 | 
			
		||||
#if defined(SPLIT_KEYBOARD)
 | 
			
		||||
#    define SPLIT_MODS_ENABLE
 | 
			
		||||
// #    define SPLIT_TRANSPORT_MIRROR
 | 
			
		||||
#    define SPLIT_TRANSPORT_MIRROR
 | 
			
		||||
#    define SERIAL_USE_MULTI_TRANSACTION
 | 
			
		||||
// #    define SPLIT_NUM_TRANSACTIONS_KB 2
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +56,8 @@
 | 
			
		|||
#    else
 | 
			
		||||
#        define RGBLIGHT_ANIMATIONS
 | 
			
		||||
#    endif
 | 
			
		||||
#    define RGBLIGHT_EFFECT_TWINKLE_LIFE  250
 | 
			
		||||
#    define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1/24
 | 
			
		||||
#endif  // RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
#ifdef RGB_MATRIX_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			@ -115,6 +117,9 @@
 | 
			
		|||
#        define OLED_UPDATE_INTERVAL 15
 | 
			
		||||
#    endif
 | 
			
		||||
#    define OLED_DISABLE_TIMEOUT
 | 
			
		||||
#    ifdef OLED_FONT_H
 | 
			
		||||
#        undef OLED_FONT_H
 | 
			
		||||
#    endif
 | 
			
		||||
#    define OLED_FONT_H "drashna_font.h"
 | 
			
		||||
#    define OLED_FONT_END 255
 | 
			
		||||
// #    define OLED_FONT_5X5
 | 
			
		||||
| 
						 | 
				
			
			@ -149,7 +154,9 @@
 | 
			
		|||
#undef PERMISSIVE_HOLD
 | 
			
		||||
//#define TAPPING_FORCE_HOLD
 | 
			
		||||
//#define RETRO_TAPPING
 | 
			
		||||
#define TAPPING_TERM_PER_KEY
 | 
			
		||||
#ifndef KEYBOARD_kyria_rev1
 | 
			
		||||
#    define TAPPING_TERM_PER_KEY
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define FORCE_NKRO
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -164,6 +164,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
 | 
			
		|||
        return state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    state = layer_state_set_keymap(state);
 | 
			
		||||
    state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
 | 
			
		||||
#if defined(RGBLIGHT_ENABLE)
 | 
			
		||||
    state = layer_state_set_rgb_light(state);
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +180,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
#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; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,6 @@ enum userspace_layers {
 | 
			
		|||
    _MALTRON,
 | 
			
		||||
    _EUCALYN,
 | 
			
		||||
    _CARPLAX,
 | 
			
		||||
    _MODS, /* layer 8 */
 | 
			
		||||
    _GAMEPAD,
 | 
			
		||||
    _DIABLO,
 | 
			
		||||
    _MACROS,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,7 @@
 | 
			
		|||
#include QMK_KEYBOARD_H
 | 
			
		||||
 | 
			
		||||
#define ROWS_PER_HAND (MATRIX_ROWS / 2)
 | 
			
		||||
#define SYNC_TIMER_OFFSET 2
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
#    include "rgblight.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -37,19 +38,33 @@ static pin_t encoders_pad[] = ENCODERS_PAD_A;
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_DRIVER_ENABLE
 | 
			
		||||
#    include "oled_driver.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
 | 
			
		||||
#    include "led_matrix.h"
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
 | 
			
		||||
#    include "rgb_matrix.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(USE_I2C)
 | 
			
		||||
 | 
			
		||||
#    include "i2c_master.h"
 | 
			
		||||
#    include "i2c_slave.h"
 | 
			
		||||
 | 
			
		||||
typedef struct _I2C_slave_buffer_t {
 | 
			
		||||
#    ifndef DISABLE_SYNC_TIMER
 | 
			
		||||
    uint32_t sync_timer;
 | 
			
		||||
#    endif
 | 
			
		||||
#    ifdef SPLIT_TRANSPORT_MIRROR
 | 
			
		||||
    matrix_row_t mmatrix[ROWS_PER_HAND];
 | 
			
		||||
#    endif
 | 
			
		||||
    matrix_row_t smatrix[ROWS_PER_HAND];
 | 
			
		||||
#    ifdef SPLIT_MODS_ENABLE
 | 
			
		||||
    uint8_t real_mods;
 | 
			
		||||
| 
						 | 
				
			
			@ -69,20 +84,30 @@ typedef struct _I2C_slave_buffer_t {
 | 
			
		|||
#    endif
 | 
			
		||||
#    ifdef WPM_ENABLE
 | 
			
		||||
    uint8_t current_wpm;
 | 
			
		||||
#    endif
 | 
			
		||||
#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
 | 
			
		||||
    led_eeconfig_t led_matrix;
 | 
			
		||||
    bool           led_suspend_state;
 | 
			
		||||
#    endif
 | 
			
		||||
#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
 | 
			
		||||
    rgb_config_t rgb_matrix;
 | 
			
		||||
    bool         rgb_suspend_state;
 | 
			
		||||
#    endif
 | 
			
		||||
    int8_t        mouse_x;
 | 
			
		||||
    int8_t        mouse_y;
 | 
			
		||||
    uint16_t      device_cpi;
 | 
			
		||||
    bool          oled_on;
 | 
			
		||||
    layer_state_t t_layer_state;
 | 
			
		||||
    layer_state_t t_default_layer_state;
 | 
			
		||||
    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_KEYMAP_MASTER_START offsetof(I2C_slave_buffer_t, mmatrix)
 | 
			
		||||
#    define I2C_KEYMAP_SLAVE_START offsetof(I2C_slave_buffer_t, smatrix)
 | 
			
		||||
#    define I2C_SYNC_TIME_START offsetof(I2C_slave_buffer_t, sync_timer)
 | 
			
		||||
#    define I2C_REAL_MODS_START offsetof(I2C_slave_buffer_t, real_mods)
 | 
			
		||||
#    define I2C_WEAK_MODS_START offsetof(I2C_slave_buffer_t, weak_mods)
 | 
			
		||||
#    define I2C_ONESHOT_MODS_START offsetof(I2C_slave_buffer_t, oneshot_mods)
 | 
			
		||||
| 
						 | 
				
			
			@ -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_MOUSE_X_START offsetof(I2C_slave_buffer_t, mouse_x)
 | 
			
		||||
#    define I2C_MOUSE_Y_START offsetof(I2C_slave_buffer_t, mouse_y)
 | 
			
		||||
#    define I2C_MOUSE_DPI_START offsetof(I2C_slave_buffer_t, device_cpi)
 | 
			
		||||
#    define I2C_OLED_ON_START offsetof(I2C_slave_buffer_t, oled_on)
 | 
			
		||||
#    define I2C_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_layer_state)
 | 
			
		||||
#    define I2C_DEFAULT_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_default_layer_state)
 | 
			
		||||
#    define I2C_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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -102,9 +131,11 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re
 | 
			
		|||
#    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);
 | 
			
		||||
 | 
			
		||||
bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
 | 
			
		||||
    i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_SLAVE_START, (void *)slave_matrix, sizeof(i2c_buffer->smatrix), TIMEOUT);
 | 
			
		||||
#    ifdef SPLIT_TRANSPORT_MIRROR
 | 
			
		||||
    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_MASTER_START, (void *)master_matrix, sizeof(i2c_buffer->mmatrix), TIMEOUT);
 | 
			
		||||
#    endif
 | 
			
		||||
    // write backlight info
 | 
			
		||||
#    ifdef BACKLIGHT_ENABLE
 | 
			
		||||
    uint8_t level = is_backlight_enabled() ? get_backlight_level() : 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
        temp_report.y = i2c_buffer->mouse_y;
 | 
			
		||||
        pointing_device_set_report(temp_report);
 | 
			
		||||
 | 
			
		||||
        if (device_cpi != i2c_buffer->device_cpi) {
 | 
			
		||||
            if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_DPI_START, (void *)&device_cpi, sizeof(device_cpi), TIMEOUT) >= 0) {
 | 
			
		||||
                i2c_buffer->device_cpi = device_cpi
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#    endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -188,29 +225,42 @@ bool transport_master(matrix_row_t matrix[]) {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
#    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;
 | 
			
		||||
    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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
 | 
			
		||||
    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_MATRIX_START, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix), TIMEOUT);
 | 
			
		||||
    bool suspend_state = led_matrix_get_suspend_state();
 | 
			
		||||
    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LED_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->led_suspend_state), TIMEOUT);
 | 
			
		||||
#    endif
 | 
			
		||||
#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
 | 
			
		||||
    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_START, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix), TIMEOUT);
 | 
			
		||||
    bool suspend_state = rgb_matrix_get_suspend_state();
 | 
			
		||||
    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_SUSPEND_START, (void *)suspend_state, sizeof(i2c_buffer->rgb_suspend_state), TIMEOUT);
 | 
			
		||||
#    endif
 | 
			
		||||
 | 
			
		||||
#    ifndef DISABLE_SYNC_TIMER
 | 
			
		||||
    i2c_buffer->sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET;
 | 
			
		||||
    i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_SYNC_TIME_START, (void *)&i2c_buffer->sync_timer, sizeof(i2c_buffer->sync_timer), TIMEOUT);
 | 
			
		||||
#    endif
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void transport_slave(matrix_row_t 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
 | 
			
		||||
    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
 | 
			
		||||
#    ifdef BACKLIGHT_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			@ -235,6 +285,11 @@ void transport_slave(matrix_row_t matrix[]) {
 | 
			
		|||
 | 
			
		||||
#    ifdef POINTING_DEVICE_ENABLE
 | 
			
		||||
    if (!is_keyboard_left()) {
 | 
			
		||||
        static uint16_t cpi;
 | 
			
		||||
        if (cpi != i2c_buffer->device_cpi) {
 | 
			
		||||
            cpi = i2c_buffer->device_cpi;
 | 
			
		||||
            pmw_set_cpi(cpi);
 | 
			
		||||
        }
 | 
			
		||||
        i2c_buffer->mouse_x = split_mouse_x;
 | 
			
		||||
        i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_MOUSE_X_START, (void *)&i2c_buffer->mouse_x, sizeof(i2c_buffer->mouse_x), TIMEOUT);
 | 
			
		||||
        i2c_buffer->mouse_y = split_mouse_y;
 | 
			
		||||
| 
						 | 
				
			
			@ -266,8 +321,13 @@ void transport_slave(matrix_row_t matrix[]) {
 | 
			
		|||
    }
 | 
			
		||||
#    endif
 | 
			
		||||
 | 
			
		||||
#    ifdef RGB_MATRIX_ENABLE
 | 
			
		||||
    rgb_matrix_set_suspend_state(i2c_buffer->is_rgb_matrix_suspended);
 | 
			
		||||
#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
 | 
			
		||||
    memcpy((void *)i2c_buffer->led_matrix, (void *)led_matrix_eeconfig, sizeof(i2c_buffer->led_matrix));
 | 
			
		||||
    led_matrix_set_suspend_state(i2c_buffer->led_suspend_state);
 | 
			
		||||
#    endif
 | 
			
		||||
#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
 | 
			
		||||
    memcpy((void *)i2c_buffer->rgb_matrix, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix));
 | 
			
		||||
    rgb_matrix_set_suspend_state(i2c_buffer->rgb_suspend_state);
 | 
			
		||||
#    endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -283,30 +343,44 @@ 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];
 | 
			
		||||
    uint8_t      encoder_state[NUMBER_OF_ENCODERS];
 | 
			
		||||
#    endif
 | 
			
		||||
    int8_t mouse_x;
 | 
			
		||||
    int8_t mouse_y;
 | 
			
		||||
    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;
 | 
			
		||||
    uint8_t       real_mods;
 | 
			
		||||
    uint8_t       weak_mods;
 | 
			
		||||
#        ifndef NO_ACTION_ONESHOT
 | 
			
		||||
    uint8_t oneshot_mods;
 | 
			
		||||
    uint8_t       oneshot_mods;
 | 
			
		||||
#        endif
 | 
			
		||||
#    endif
 | 
			
		||||
#    ifndef DISABLE_SYNC_TIMER
 | 
			
		||||
    uint32_t     sync_timer;
 | 
			
		||||
#    endif
 | 
			
		||||
#    ifdef SPLIT_TRANSPORT_MIRROR
 | 
			
		||||
    matrix_row_t mmatrix[ROWS_PER_HAND];
 | 
			
		||||
#    endif
 | 
			
		||||
#    ifdef BACKLIGHT_ENABLE
 | 
			
		||||
    uint8_t backlight_level;
 | 
			
		||||
    uint8_t       backlight_level;
 | 
			
		||||
#    endif
 | 
			
		||||
#    ifdef WPM_ENABLE
 | 
			
		||||
    uint8_t current_wpm;
 | 
			
		||||
    uint8_t       current_wpm;
 | 
			
		||||
#    endif
 | 
			
		||||
    uint16_t      device_cpi;
 | 
			
		||||
    bool          oled_on;
 | 
			
		||||
    layer_state_t t_layer_state;
 | 
			
		||||
    layer_state_t t_default_layer_state;
 | 
			
		||||
    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;
 | 
			
		||||
 | 
			
		||||
#    if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
 | 
			
		||||
| 
						 | 
				
			
			@ -383,7 +457,7 @@ void transport_rgblight_slave(void) {
 | 
			
		|||
#        define transport_rgblight_slave()
 | 
			
		||||
#    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
 | 
			
		||||
    if (soft_serial_transaction() != TRANSACTION_END) {
 | 
			
		||||
        return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -397,7 +471,10 @@ bool transport_master(matrix_row_t matrix[]) {
 | 
			
		|||
 | 
			
		||||
    // TODO:  if MATRIX_COLS > 8 change to unpack()
 | 
			
		||||
    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
 | 
			
		||||
| 
						 | 
				
			
			@ -411,12 +488,12 @@ bool transport_master(matrix_row_t matrix[]) {
 | 
			
		|||
 | 
			
		||||
#    ifdef WPM_ENABLE
 | 
			
		||||
    // Write wpm to slave
 | 
			
		||||
    serial_m2s_buffer.current_wpm = get_current_wpm();
 | 
			
		||||
    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();
 | 
			
		||||
    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
 | 
			
		||||
| 
						 | 
				
			
			@ -428,28 +505,43 @@ bool transport_master(matrix_row_t matrix[]) {
 | 
			
		|||
        temp_report.x              = serial_s2m_buffer.mouse_x;
 | 
			
		||||
        temp_report.y              = serial_s2m_buffer.mouse_y;
 | 
			
		||||
        pointing_device_set_report(temp_report);
 | 
			
		||||
        serial_m2s_buffer.device_cpi = device_cpi;
 | 
			
		||||
    }
 | 
			
		||||
#    endif
 | 
			
		||||
 | 
			
		||||
    serial_m2s_buffer.t_layer_state         = layer_state;
 | 
			
		||||
    serial_m2s_buffer.t_default_layer_state = default_layer_state;
 | 
			
		||||
    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();
 | 
			
		||||
#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
 | 
			
		||||
    serial_m2s_buffer.led_matrix        = led_matrix_eeconfig;
 | 
			
		||||
    serial_m2s_buffer.led_suspend_state = led_matrix_get_suspend_state();
 | 
			
		||||
#    endif
 | 
			
		||||
#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
 | 
			
		||||
    serial_m2s_buffer.rgb_matrix        = rgb_matrix_config;
 | 
			
		||||
    serial_m2s_buffer.rgb_suspend_state = rgb_matrix_get_suspend_state();
 | 
			
		||||
#    endif
 | 
			
		||||
 | 
			
		||||
#    ifndef DISABLE_SYNC_TIMER
 | 
			
		||||
    serial_m2s_buffer.sync_timer   = sync_timer_read32() + SYNC_TIMER_OFFSET;
 | 
			
		||||
#    endif
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void transport_slave(matrix_row_t matrix[]) {
 | 
			
		||||
void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) {
 | 
			
		||||
    transport_rgblight_slave();
 | 
			
		||||
#    ifndef DISABLE_SYNC_TIMER
 | 
			
		||||
    sync_timer_update(serial_m2s_buffer.sync_timer);
 | 
			
		||||
#    endif
 | 
			
		||||
 | 
			
		||||
    // TODO: if MATRIX_COLS > 8 change to pack()
 | 
			
		||||
    for (int i = 0; i < ROWS_PER_HAND; ++i) {
 | 
			
		||||
        serial_s2m_buffer.smatrix[i] = 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
 | 
			
		||||
| 
						 | 
				
			
			@ -474,6 +566,11 @@ void transport_slave(matrix_row_t matrix[]) {
 | 
			
		|||
 | 
			
		||||
#    ifdef POINTING_DEVICE_ENABLE
 | 
			
		||||
    if (!is_keyboard_left()) {
 | 
			
		||||
        static uint16_t cpi;
 | 
			
		||||
        if (cpi != serial_m2s_buffer.device_cpi) {
 | 
			
		||||
            cpi = serial_m2s_buffer.device_cpi;
 | 
			
		||||
            pmw_set_cpi(cpi);
 | 
			
		||||
        }
 | 
			
		||||
        serial_s2m_buffer.mouse_x = split_mouse_x;
 | 
			
		||||
        serial_s2m_buffer.mouse_y = split_mouse_y;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -493,16 +590,14 @@ void transport_slave(matrix_row_t matrix[]) {
 | 
			
		|||
    }
 | 
			
		||||
#    endif
 | 
			
		||||
 | 
			
		||||
#    ifdef RGB_MATRIX_ENABLE
 | 
			
		||||
    rgb_matrix_set_suspend_state(serial_m2s_buffer.is_rgb_matrix_suspended);
 | 
			
		||||
#    if defined(LED_MATRIX_ENABLE) && defined(LED_MATRIX_SPLIT)
 | 
			
		||||
    led_matrix_eeconfig = serial_m2s_buffer.led_matrix;
 | 
			
		||||
    led_matrix_set_suspend_state(serial_m2s_buffer.led_suspend_state);
 | 
			
		||||
#    endif
 | 
			
		||||
#    if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT)
 | 
			
		||||
    rgb_matrix_config = serial_m2s_buffer.rgb_matrix;
 | 
			
		||||
    rgb_matrix_set_suspend_state(serial_m2s_buffer.rgb_suspend_state);
 | 
			
		||||
#    endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef POINTING_DEVICE_ENABLE
 | 
			
		||||
void master_mouse_send(int8_t x, int8_t y) {
 | 
			
		||||
    split_mouse_x = x;
 | 
			
		||||
    split_mouse_y = y;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,6 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
#include "drashna.h"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#ifndef KEYLOGGER_LENGTH
 | 
			
		||||
// #    ifdef OLED_DISPLAY_128X64
 | 
			
		||||
| 
						 | 
				
			
			@ -158,6 +157,19 @@ void render_keylock_status(uint8_t led_usb_state) {
 | 
			
		|||
    oled_advance_page(true);
 | 
			
		||||
#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) {
 | 
			
		||||
    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
 | 
			
		||||
    oled_write_P(mod_status[2], (modifiers & MOD_MASK_ALT));
 | 
			
		||||
    oled_write_P(mod_status[1], (modifiers & MOD_MASK_CTRL));
 | 
			
		||||
 | 
			
		||||
    render_matrix_scan_rate();
 | 
			
		||||
#if defined(OLED_DISPLAY_128X64)
 | 
			
		||||
    oled_advance_page(true);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef SWAP_HANDS_ENABLE
 | 
			
		||||
extern bool swap_hands;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void render_bootmagic_status(void) {
 | 
			
		||||
    /* Show Ctrl-Gui Swap options */
 | 
			
		||||
    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(OLED_RENDER_BOOTMAGIC_NKRO), keymap_config.nkro);
 | 
			
		||||
    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
 | 
			
		||||
    oled_advance_page(true);
 | 
			
		||||
    oled_write_P(PSTR("Magic"), false);
 | 
			
		||||
| 
						 | 
				
			
			@ -221,10 +239,11 @@ void render_bootmagic_status(void) {
 | 
			
		|||
    }
 | 
			
		||||
#endif
 | 
			
		||||
    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(OLED_RENDER_BOOTMAGIC_CAPS), keymap_config.swap_control_capslock);
 | 
			
		||||
    oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_SWAP), swap_hands);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef OLED_DISPLAY_128X64
 | 
			
		||||
    oled_advance_page(true);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -282,12 +301,22 @@ __attribute__((weak)) void oled_driver_render_logo(void) {
 | 
			
		|||
 | 
			
		||||
void render_wpm(void) {
 | 
			
		||||
#ifdef WPM_ENABLE
 | 
			
		||||
    uint8_t n = get_current_wpm();
 | 
			
		||||
#    ifdef OLED_DISPLAY_128X64
 | 
			
		||||
    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
 | 
			
		||||
    char wpm_counter[6];
 | 
			
		||||
#    endif
 | 
			
		||||
    snprintf(wpm_counter, sizeof(wpm_counter), "%3u", get_current_wpm());
 | 
			
		||||
    wpm_counter[5] = '\0';
 | 
			
		||||
    wpm_counter[4] = '0' + n % 10;
 | 
			
		||||
    wpm_counter[3] = ( n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
 | 
			
		||||
    wpm_counter[2] = n / 10 ? '0' + n / 10 : ' ';
 | 
			
		||||
    wpm_counter[1] = ' ';
 | 
			
		||||
    wpm_counter[0] = ' ';
 | 
			
		||||
    #    endif
 | 
			
		||||
    oled_write_P(PSTR(OLED_RENDER_WPM_COUNTER), false);
 | 
			
		||||
    oled_write(wpm_counter, false);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +328,13 @@ 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]);
 | 
			
		||||
    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(dpi_status, false);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -320,7 +355,11 @@ void render_status_secondary(void) {
 | 
			
		|||
void render_status_main(void) {
 | 
			
		||||
#if defined(OLED_DISPLAY_128X64)
 | 
			
		||||
    oled_driver_render_logo();
 | 
			
		||||
#    ifdef DEBUG_MATRIX_SCAN_RATE
 | 
			
		||||
    render_matrix_scan_rate();
 | 
			
		||||
#    else
 | 
			
		||||
    render_wpm();
 | 
			
		||||
#    endif
 | 
			
		||||
#    ifdef KEYBOARD_handwired_dactyl_manuform_5x6_right_trackball
 | 
			
		||||
    render_pointing_dpi_status();
 | 
			
		||||
#    endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,6 +57,8 @@ extern uint32_t oled_timer;
 | 
			
		|||
#    define OLED_RENDER_BOOTMAGIC_NKRO  "NKRO"
 | 
			
		||||
#    define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI"
 | 
			
		||||
#    define OLED_RENDER_BOOTMAGIC_GRV   "GRV"
 | 
			
		||||
#    define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT"
 | 
			
		||||
#    define OLED_RENDER_BOOTMAGIC_SWAP "SWAP"
 | 
			
		||||
#    define OLED_RENDER_BOOTMAGIC_CAPS  "CAPS"
 | 
			
		||||
 | 
			
		||||
#    define OLED_RENDER_USER_NAME "USER:"
 | 
			
		||||
| 
						 | 
				
			
			@ -99,6 +101,8 @@ extern uint32_t oled_timer;
 | 
			
		|||
#    define OLED_RENDER_BOOTMAGIC_NKRO  "NKRO"
 | 
			
		||||
#    define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI"
 | 
			
		||||
#    define OLED_RENDER_BOOTMAGIC_GRV   "GRV"
 | 
			
		||||
#    define OLED_RENDER_BOOTMAGIC_ONESHOT "1SHT"
 | 
			
		||||
#    define OLED_RENDER_BOOTMAGIC_SWAP "SWAP"
 | 
			
		||||
#    define OLED_RENDER_BOOTMAGIC_CAPS  "CAPS"
 | 
			
		||||
 | 
			
		||||
#    define OLED_RENDER_USER_NAME "USER:"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ static float   precisionSpeed = 1;
 | 
			
		|||
 | 
			
		||||
void trackball_set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) {
 | 
			
		||||
    uint8_t data[] = {0x00, red, green, blue, white};
 | 
			
		||||
    i2c_transmit(TRACKBALL_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) {
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +94,7 @@ void pointing_device_task(void) {
 | 
			
		|||
    static bool     debounce;
 | 
			
		||||
    static uint16_t debounce_timer;
 | 
			
		||||
    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 (scrolling) {
 | 
			
		||||
#ifdef PIMORONI_TRACKBALL_INVERT_X
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
 | 
			
		|||
#define LOWER   MO(_LOWER)
 | 
			
		||||
#define RAISE   MO(_RAISE)
 | 
			
		||||
#define ADJUST  MO(_ADJUST)
 | 
			
		||||
#define TG_MODS TG(_MODS)
 | 
			
		||||
#define TG_MODS OS_TOGG
 | 
			
		||||
#define TG_GAME TG(_GAMEPAD)
 | 
			
		||||
#define TG_DBLO TG(_DIABLO)
 | 
			
		||||
#define OS_LWR  OSL(_LOWER)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ __attribute__((weak)) void rgb_matrix_indicator_keymap(void) {}
 | 
			
		|||
 | 
			
		||||
void matrix_scan_rgb_matrix(void) {
 | 
			
		||||
#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);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -79,7 +79,7 @@ void keyboard_post_init_rgb_matrix(void) {
 | 
			
		|||
 | 
			
		||||
bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
#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) {
 | 
			
		||||
        rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ void scan_rgblight_fadeout(void) {  // Don't effing change this function .... rg
 | 
			
		|||
    bool litup = false;
 | 
			
		||||
 | 
			
		||||
    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];
 | 
			
		||||
            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) {
 | 
			
		||||
                    sethsv(light->hue + rand() % 0xF, 255, light->life, (LED_TYPE *)&led[light_index]);
 | 
			
		||||
                }
 | 
			
		||||
                light->timer = timer_read();
 | 
			
		||||
                light->timer = sync_timer_read();
 | 
			
		||||
            } else {
 | 
			
		||||
                if (light->enabled && get_highest_layer(layer_state) == 0) {
 | 
			
		||||
                    rgblight_sethsv_default_helper(light_index);
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +86,7 @@ void start_rgb_light(void) {
 | 
			
		|||
 | 
			
		||||
    rgblight_fadeout *light = &lights[light_index];
 | 
			
		||||
    light->enabled          = true;
 | 
			
		||||
    light->timer            = timer_read();
 | 
			
		||||
    light->timer            = sync_timer_read();
 | 
			
		||||
    light->life             = 0xC0 + rand() % 0x40;
 | 
			
		||||
 | 
			
		||||
    light->hue = rgblight_get_hue() + (rand() % 0xB4) - 0x54;
 | 
			
		||||
| 
						 | 
				
			
			@ -149,11 +149,11 @@ void matrix_scan_rgb_light(void) {
 | 
			
		|||
 | 
			
		||||
#    if defined(RGBLIGHT_STARTUP_ANIMATION)
 | 
			
		||||
    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;
 | 
			
		||||
            counter++;
 | 
			
		||||
            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) {
 | 
			
		||||
                is_rgblight_startup = false;
 | 
			
		||||
                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) {
 | 
			
		||||
#    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)) {
 | 
			
		||||
            case _MACROS:
 | 
			
		||||
#        ifdef RGBLIGHT_EFFECT_TWINKLE
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_TWINKLE + 5);
 | 
			
		||||
#        else
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_BREATHING + 3);
 | 
			
		||||
#        endif
 | 
			
		||||
            case _MACROS: // mouse
 | 
			
		||||
                if (!layer_state_cmp(state, _GAMEPAD) && !layer_state_cmp(state, _DIABLO)) {
 | 
			
		||||
                    rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_BREATHING + 3);
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            case _MEDIA:
 | 
			
		||||
                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);
 | 
			
		||||
                break;
 | 
			
		||||
            case _COLEMAK:
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_MAGENTA, mode);
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_MAGENTA, RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
                break;
 | 
			
		||||
            case _DVORAK:
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, mode);
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
                break;
 | 
			
		||||
            case _WORKMAN:
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_GOLDENROD, mode);
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_GOLDENROD, RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
                break;
 | 
			
		||||
            case _NORMAN:
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_CORAL, mode);
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_CORAL, RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
                break;
 | 
			
		||||
            case _MALTRON:
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_YELLOW, mode);
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
                break;
 | 
			
		||||
            case _EUCALYN:
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_PINK, mode);
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_PINK, RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
                break;
 | 
			
		||||
            case _CARPLAX:
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_BLUE, mode);
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_BLUE, RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_CYAN, mode);
 | 
			
		||||
                rgblight_set_hsv_and_mode(HSV_CYAN, RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,29 +16,37 @@ ifneq ($(strip $(NO_SECRETS)), yes)
 | 
			
		|||
    endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CUSTOM_TAP_DANCE ?= yes
 | 
			
		||||
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
 | 
			
		||||
    SRC += tap_dances.c
 | 
			
		||||
    ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
 | 
			
		||||
        SRC += tap_dances.c
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CUSTOM_RGBLIGHT ?= yes
 | 
			
		||||
ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
 | 
			
		||||
    SRC += rgb_stuff.c
 | 
			
		||||
    ifeq ($(strip $(RGBLIGHT_TWINKLE)), yes)
 | 
			
		||||
        OPT_DEFS += -DRGBLIGHT_TWINKLE
 | 
			
		||||
    endif
 | 
			
		||||
    ifeq ($(strip $(RGBLIGHT_NOEEPROM)), yes)
 | 
			
		||||
        OPT_DEFS += -DRGBLIGHT_NOEEPROM
 | 
			
		||||
    endif
 | 
			
		||||
    ifeq ($(strip $(RGBLIGHT_STARTUP_ANIMATION)), yes)
 | 
			
		||||
        OPT_DEFS += -DRGBLIGHT_STARTUP_ANIMATION
 | 
			
		||||
    ifeq ($(strip $(CUSTOM_RGBLIGHT)), yes)
 | 
			
		||||
        SRC += rgb_stuff.c
 | 
			
		||||
        ifeq ($(strip $(RGBLIGHT_TWINKLE)), yes)
 | 
			
		||||
            OPT_DEFS += -DRGBLIGHT_TWINKLE
 | 
			
		||||
        endif
 | 
			
		||||
        ifeq ($(strip $(RGBLIGHT_NOEEPROM)), yes)
 | 
			
		||||
            OPT_DEFS += -DRGBLIGHT_NOEEPROM
 | 
			
		||||
        endif
 | 
			
		||||
        ifeq ($(strip $(RGBLIGHT_STARTUP_ANIMATION)), yes)
 | 
			
		||||
            OPT_DEFS += -DRGBLIGHT_STARTUP_ANIMATION
 | 
			
		||||
        endif
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
RGB_MATRIX_ENABLE ?= no
 | 
			
		||||
ifneq ($(strip $(RGB_MATRIX_ENABLE)), no)
 | 
			
		||||
    SRC += rgb_matrix_stuff.c
 | 
			
		||||
CUSTOM_RGB_MATRIX ?= yes
 | 
			
		||||
ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
 | 
			
		||||
    ifeq ($(strip $(CUSTOM_RGB_MATRIX)), yes)
 | 
			
		||||
        SRC += rgb_matrix_stuff.c
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
KEYLOGGER_ENABLE ?= no
 | 
			
		||||
ifdef CONSOLE_ENABLE
 | 
			
		||||
    ifeq ($(strip $(KEYLOGGER_ENABLE)), yes)
 | 
			
		||||
        OPT_DEFS += -DKEYLOGGER_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			@ -56,8 +64,11 @@ ifeq ($(strip $(PROTOCOL)), VUSB)
 | 
			
		|||
    NKRO_ENABLE       = no
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CUSTOM_OLED_DRIVER ?= yes
 | 
			
		||||
ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes)
 | 
			
		||||
    SRC += oled_stuff.c
 | 
			
		||||
    ifeq ($(strip $(CUSTOM_OLED_DRIVER)), yes)
 | 
			
		||||
        SRC += oled_stuff.c
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(PIMORONI_TRACKBALL_ENABLE)), yes)
 | 
			
		||||
| 
						 | 
				
			
			@ -67,26 +78,30 @@ ifeq ($(strip $(PIMORONI_TRACKBALL_ENABLE)), yes)
 | 
			
		|||
    QUANTUM_LIB_SRC += i2c_master.c
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CUSTOM_SPLIT_TRANSPORT ?= yes
 | 
			
		||||
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
 | 
			
		||||
        ifeq ($(strip $(CUSTOM_SPLIT_TRANSPORT)), yes)
 | 
			
		||||
            SPLIT_TRANSPORT = custom
 | 
			
		||||
            QUANTUM_LIB_SRC += drashna_transport.c
 | 
			
		||||
            OPT_DEFS += -DDRASHNA_CUSTOM_TRANSPORT
 | 
			
		||||
            # Unused functions are pruned away, which is why we can add multiple drivers here without bloat.
 | 
			
		||||
            ifeq ($(PLATFORM),AVR)
 | 
			
		||||
                ifneq ($(NO_I2C),yes)
 | 
			
		||||
                    QUANTUM_LIB_SRC += i2c_master.c \
 | 
			
		||||
                                    i2c_slave.c
 | 
			
		||||
                endif
 | 
			
		||||
            endif
 | 
			
		||||
        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
 | 
			
		||||
            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
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# DEBUG_MATRIX_SCAN_RATE_ENABLE = api
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue