From 0b69e4df818c2515cf4eee3d8b6fd4a07775b887 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Tue, 23 Feb 2021 10:57:24 -0800 Subject: [Keymap] Drashna Updates - Split+OLED edition (#11968) --- .../5x6_right_trackball/5x6_right_trackball.c | 6 +- .../dactyl_manuform/5x6_right_trackball/config.h | 1 + .../5x6_right_trackball/keymaps/drashna/config.h | 7 +-- .../5x6_right_trackball/keymaps/drashna/keymap.c | 66 ++++++++++++++++------ .../5x6_right_trackball/keymaps/drashna/rules.mk | 2 +- .../5x6_right_trackball/pointer_transport.c | 57 +++++++++++++------ .../dactyl_manuform/5x6_right_trackball/rules.mk | 4 +- 7 files changed, 102 insertions(+), 41 deletions(-) (limited to 'keyboards/handwired') diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c index d931fd940d..69f7500957 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/5x6_right_trackball.c @@ -85,7 +85,11 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) { #ifdef POINTING_DEVICE_ENABLE if (keycode == DPI_CONFIG && record->event.pressed) { - keyboard_config.dpi_config = (keyboard_config.dpi_config + 1) % DPI_OPTION_SIZE; + if ((get_mods()|get_oneshot_mods()) & MOD_MASK_SHIFT) { + keyboard_config.dpi_config = (keyboard_config.dpi_config - 1) % DPI_OPTION_SIZE; + } else { + keyboard_config.dpi_config = (keyboard_config.dpi_config + 1) % DPI_OPTION_SIZE; + } eeconfig_update_kb(keyboard_config.raw); trackball_set_cpi(dpi_array[keyboard_config.dpi_config]); } diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h index 6d89314a2c..b9b27f0b73 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/config.h @@ -62,6 +62,7 @@ along with this program. If not, see . #define BOOTMAGIC_LITE_COLUMN_RIGHT 5 #define C6_AUDIO +#define B7_AUDIO #define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 4095 #define DYNAMIC_KEYMAP_LAYER_COUNT 16 diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h index 73bf32b25e..41b2e07c70 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/config.h @@ -18,9 +18,10 @@ // #define USE_I2C #define SELECT_SOFT_SERIAL_SPEED 0 -#define SERIAL_USE_MULTI_TRANSACTION - +// #define SERIAL_USE_MULTI_TRANSACTION +#define SPLIT_MODS_ENABLE #define EE_HANDS + #define TRACKBALL_DPI_OPTIONS \ { 1200, 1800, 2600, 3400 } @@ -35,8 +36,6 @@ #define SOLENOID_DEFAULT_DWELL 8 #define OLED_DISPLAY_128X64 -#define OLED_TIMEOUT 0 #define OLED_BRIGHTNESS 100 -#define SPLIT_MODS_ENABLE #define MK_KINETIC_SPEED diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c index f8803edb9c..5a1bb79fe2 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/keymap.c @@ -16,24 +16,21 @@ #include "drashna.h" -#define TG_DBLO TG(_DIABLO) - - // clang-format off #define LAYOUT_5x6_right_trackball_wrapper(...) LAYOUT_5x6_right_trackball(__VA_ARGS__) #define LAYOUT_5x6_right_trackball_base( \ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ + K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \ ) \ LAYOUT_5x6_right_trackball_wrapper( \ - KC_GRV, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, \ - KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSLS, \ - LALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \ + KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, \ + SH_TT, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, SH_TT, \ + LALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(K1B), \ OS_LSFT, CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A), OS_RSFT, \ OS_LALT, OS_LGUI, TG_GAME, TG_DBLO, \ OS_LGUI, KC_GRV, OS_RGUI, \ - KC_SPC, _______, KC_ENT, \ + KC_SPC, TT(_MOUSE), KC_ENT, \ BK_LWER, MO(_MOUSE), MO(_MOUSE), DL_RAIS \ ) #define LAYOUT_5x6_right_trackball_base_wrapper(...) LAYOUT_5x6_right_trackball_base(__VA_ARGS__) @@ -149,13 +146,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, KC_NUKE, _______ ), }; -// clang-format off - +// clang-format on #ifdef POINTING_DEVICE_ENABLE -static uint16_t mouse_timer = 0; -static uint16_t mouse_debounce_timer = 0; +static uint16_t mouse_timer = 0; +static uint16_t mouse_debounce_timer = 0; static uint8_t mouse_keycode_tracker = 0; +bool tap_toggling = false; void process_mouse_user(report_mouse_t* mouse_report, int16_t x, int16_t y) { if ((x || y) && timer_elapsed(mouse_timer) > 125) { @@ -164,29 +161,64 @@ void process_mouse_user(report_mouse_t* mouse_report, int16_t x, int16_t y) { layer_on(_MOUSE); } } - if (timer_elapsed(mouse_debounce_timer) > 125 || layer_state_is(_GAMEPAD) ) { + +# ifdef TAPPING_TERM_PER_KEY + if (timer_elapsed(mouse_debounce_timer) > get_tapping_term(KC_BTN1, NULL) +# else + if (timer_elapsed(mouse_debounce_timer) > TAPPING_TERM +# endif + || layer_state_is(_GAMEPAD)) { mouse_report->x = x; mouse_report->y = y; } +# ifdef OLED_DRIVER_ENABLE + if (x || y) oled_timer = timer_read32(); +# endif } void matrix_scan_keymap(void) { - if (timer_elapsed(mouse_timer) > 650 && layer_state_is(_MOUSE) && !mouse_keycode_tracker) { + if (timer_elapsed(mouse_timer) > 650 && layer_state_is(_MOUSE) && !mouse_keycode_tracker && !tap_toggling) { layer_off(_MOUSE); } + if (tap_toggling) { + if (!layer_state_is(_MOUSE)) { + layer_on(_MOUSE); + } + } } -bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { - switch(keycode){ +bool process_record_keymap(uint16_t keycode, keyrecord_t* record) { + switch (keycode) { + case TT(_MOUSE): { + if (record->event.pressed) { + mouse_keycode_tracker++; + } else { +# if TAPPING_TOGGLE != 0 + if (record->tap.count == TAPPING_TOGGLE) { + tap_toggling ^= 1; +# if TAPPING_TOGGLE == 1 + if (!tap_toggling) mouse_keycode_tracker -= record->tap.count + 1; +# else + if (!tap_toggling) mouse_keycode_tracker -= record->tap.count; +# endif + } else { + mouse_keycode_tracker--; + } +# endif + } + mouse_timer = timer_read(); + break; + } case MO(_MOUSE): case DPI_CONFIG: - case KC_MS_UP...KC_MS_WH_RIGHT: + case KC_MS_UP ... KC_MS_WH_RIGHT: record->event.pressed ? mouse_keycode_tracker++ : mouse_keycode_tracker--; mouse_timer = timer_read(); break; default: if (layer_state_is(_MOUSE) && !mouse_keycode_tracker) { layer_off(_MOUSE); + mouse_keycode_tracker = 0; } mouse_debounce_timer = timer_read(); break; diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk index be584e8c4d..9999c0ddf4 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/keymaps/drashna/rules.mk @@ -5,5 +5,5 @@ AUDIO_ENABLE = yes TAP_DANCE_ENABLE = yes UNICODE_ENABLE = yes OLED_DRIVER_ENABLE = yes - +WPM_ENABLE = yes # DEBOUNCE_TYPE = sym_eager_pk diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c index 20216a21dd..5df90258bb 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/pointer_transport.c @@ -77,7 +77,8 @@ typedef struct _I2C_slave_buffer_t { bool oled_on; layer_state_t t_layer_state; layer_state_t t_default_layer_state; -} I2C_slave_buffer_t; + bool is_rgb_matrix_suspended; +} __attribute__((packed)) I2C_slave_buffer_t; static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; @@ -93,9 +94,10 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re # define I2C_MOUSE_X_START offsetof(I2C_slave_buffer_t, mouse_x) # define I2C_MOUSE_Y_START offsetof(I2C_slave_buffer_t, mouse_y) # define I2C_MOUSE_DPI_START offsetof(I2C_slave_buffer_t, device_cpi) -# define I2C_OLED_ON_START offsetof(I2C_slave_buffent, oled_on) -# define I2C_LAYER_STATE_START offsetof(I2C_slave_buffent, t_layer_state) -# define I2C_DEFAULT_LAYER_STATE_START offsetof(I2C_slave_buffent, t_default_layer_state) +# define I2C_OLED_ON_START offsetof(I2C_slave_buffer_t, oled_on) +# define I2C_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_layer_state) +# define I2C_DEFAULT_LAYER_STATE_START offsetof(I2C_slave_buffer_t, t_default_layer_state) +# define I2C_RGB_MATRIX_SUSPEND_START offsetof(I2C_slave_buffer_t, is_rgb_matrix_suspended) # define TIMEOUT 100 @@ -196,9 +198,19 @@ bool transport_master(matrix_row_t matrix[]) { } # ifdef OLED_DRIVER_ENABLE - if (is_oled_on() != i2c_buffer->oled_on) { - if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LAYER_STATE_START, (void *)&is_oled_on(), sizeof(bool), TIMEOUT) >= 0) { - i2c_buffer->oled_on = is_oled_on(); + bool is_oled_on = is_oled_on(); + if (is_oled_on != i2c_buffer->oled_on) { + if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_LAYER_STATE_START, (void *)&is_oled_on, sizeof(is_oled_on), TIMEOUT) >= 0) { + i2c_buffer->oled_on = is_oled_on; + } + } +# endif + +# ifdef RGB_MATRIX_ENABLE + bool sus_state = rgb_matrix_get_suspend_state(); + if (sus_state != i2c_buffer->is_rgb_matrix_suspended) { + if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_SUSPEND_START, (void *)&sus_state, sizeof(sus_state), TIMEOUT) >= 0) { + i2c_buffer->is_rgb_matrix_suspended = sus_state; } } # endif @@ -255,10 +267,10 @@ void transport_slave(matrix_row_t matrix[]) { # endif if (layer_state != i2c_buffer->t_layer_state) { - layer_state_set(i2c_buffer->t_layer_state); + layer_state = i2c_buffer->t_layer_state; } if (default_layer_state != i2c_buffer->t_default_layer_state) { - default_layer_state_set(i2c_buffer->t_default_layer_state); + default_layer_state = i2c_buffer->t_default_layer_state; } # ifdef OLED_DRIVER_ENABLE @@ -268,6 +280,10 @@ void transport_slave(matrix_row_t matrix[]) { oled_off(); } # endif + +# ifdef RGB_MATRIX_ENABLE + rgb_matrix_set_suspend_state(i2c_buffer->is_rgb_matrix_suspended); +# endif } void transport_master_init(void) { i2c_init(); } @@ -286,7 +302,7 @@ typedef struct _Serial_s2m_buffer_t { # endif int8_t mouse_x; int8_t mouse_y; -} Serial_s2m_buffer_t; +} __attribute__((packed)) Serial_s2m_buffer_t; typedef struct _Serial_m2s_buffer_t { # ifdef SPLIT_MODS_ENABLE @@ -309,7 +325,8 @@ typedef struct _Serial_m2s_buffer_t { bool oled_on; layer_state_t t_layer_state; layer_state_t t_default_layer_state; -} Serial_m2s_buffer_t; + bool is_rgb_matrix_suspended; +} __attribute__((packed)) Serial_m2s_buffer_t; # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) // When MCUs on both sides drive their respective RGB LED chains, @@ -434,10 +451,14 @@ bool transport_master(matrix_row_t matrix[]) { } # endif - serial_m2s_buffer.t_layer_state = layer_state; - serial_m2s_buffer.t_default_layer_state = default_layer_state; + serial_m2s_buffer.t_layer_state = layer_state; + serial_m2s_buffer.t_default_layer_state = default_layer_state; # ifdef OLED_DRIVER_ENABLE - serial_m2s_buffer.oled_on = is_oled_on(); + serial_m2s_buffer.oled_on = is_oled_on(); +# endif + +# ifdef RGB_MATRIX_ENABLE + serial_m2s_buffer.is_rgb_matrix_suspended = rgb_matrix_get_suspend_state(); # endif return true; @@ -484,10 +505,10 @@ void transport_slave(matrix_row_t matrix[]) { # endif if (layer_state != serial_m2s_buffer.t_layer_state) { - layer_state_set(serial_m2s_buffer.t_layer_state); + layer_state = serial_m2s_buffer.t_layer_state; } if (default_layer_state != serial_m2s_buffer.t_default_layer_state) { - default_layer_set(serial_m2s_buffer.t_default_layer_state); + default_layer_state = serial_m2s_buffer.t_default_layer_state; } # ifdef OLED_DRIVER_ENABLE if (serial_m2s_buffer.oled_on) { @@ -496,6 +517,10 @@ void transport_slave(matrix_row_t matrix[]) { oled_off(); } # endif + +# ifdef RGB_MATRIX_ENABLE + rgb_matrix_set_suspend_state(serial_m2s_buffer.is_rgb_matrix_suspended); +# endif } #endif diff --git a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk index 19b330cdc5..99275c15ae 100644 --- a/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk +++ b/keyboards/handwired/dactyl_manuform/5x6_right_trackball/rules.mk @@ -26,5 +26,5 @@ POINTING_DEVICE_ENABLE = yes SPLIT_KEYBOARD = yes SPLIT_TRANSPORT = custom -SRC += pointer_transport.c pmw3360.c -QUANTUM_LIB_SRC += serial.c i2c_master.c i2c_slave.c spi_master.c +SRC += pmw3360.c +QUANTUM_LIB_SRC += pointer_transport.c serial.c i2c_master.c i2c_slave.c spi_master.c -- cgit v1.2.3