From 698dd0485f9c87f8c249807aec9727fc059def62 Mon Sep 17 00:00:00 2001 From: rate Date: Mon, 27 Dec 2021 12:36:33 +0900 Subject: [PATCH] Enable encoder settings VIA. (#14599) * Enable encoder settings VIA. * Apply suggestions from code review Co-authored-by: Drashna Jaelre * Modified to use action_exec. Change keymap. Co-authored-by: Drashna Jaelre --- keyboards/pistachio_mp/keymaps/via/keymap.c | 79 ++++++++++++++++----- 1 file changed, 62 insertions(+), 17 deletions(-) diff --git a/keyboards/pistachio_mp/keymaps/via/keymap.c b/keyboards/pistachio_mp/keymaps/via/keymap.c index e3592ffa6..241b501d1 100644 --- a/keyboards/pistachio_mp/keymaps/via/keymap.c +++ b/keyboards/pistachio_mp/keymaps/via/keymap.c @@ -23,10 +23,29 @@ enum layer_names { _RESERVE_1 }; +static uint8_t encoder_state = 0; +static const keypos_t ENC_CW = {.row = 3, .col = 3}; +static const keypos_t ENC_CCW = {.row = 4, .col = 1}; + +#define LAYOUT_via( \ + ECW,ECCW, K07, \ + K00, K01, K02, K03, \ + K04, K05, K06, \ + K08, K09, K10, K11, \ + K12, K13, K14, \ + K15, K16, K17 ) { \ + { K00, K01, K02, K03 }, \ + { K04, K05, K06, K07 }, \ + { K08, K09, K10, K11 }, \ + { K12, K13, K14, ECCW }, \ + { K15, ECW, K16, K17 }, \ +} + + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Base */ - [_BASE] = LAYOUT( - KC_MPLY, + [_BASE] = LAYOUT_via( + KC_VOLU,KC_VOLD,KC_MPLY, LT(_FN, KC_NLCK), KC_PSLS, KC_PAST, KC_PMNS, KC_P7, KC_P8, KC_P9, KC_P4, KC_P5, KC_P6, KC_PPLS, @@ -34,8 +53,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_P0, KC_PDOT, KC_PENT ), /* Fn */ - [_FN] = LAYOUT( - KC_NO, + [_FN] = LAYOUT_via( + KC_VOLU,KC_VOLD,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, RGB_HUD, RGB_SAD, RGB_VAD, RGB_TOG, @@ -43,8 +62,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_NO, KC_NO, KC_NO ), /* Reserve */ - [_RESERVE_0] = LAYOUT( - KC_TRNS, + [_RESERVE_0] = LAYOUT_via( + KC_VOLU,KC_VOLD,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -52,8 +71,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS ), /* Reserve */ - [_RESERVE_1] = LAYOUT( - KC_TRNS, + [_RESERVE_1] = LAYOUT_via( + KC_VOLU,KC_VOLD,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -61,16 +80,42 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS ), }; + #ifdef ENCODER_ENABLE -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { - // Volume control - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } +void encoder_action_unregister(void) { + if (encoder_state) { + keyevent_t encoder_event = (keyevent_t) { + .key = encoder_state >> 1 ? ENC_CW : ENC_CCW, + .pressed = false, + .time = (timer_read() | 1) + }; + encoder_state = 0; + action_exec(encoder_event); } - return true; + return; } + +void encoder_action_register(uint8_t index, bool clockwise) { + keyevent_t encoder_event = (keyevent_t) { + .key = clockwise ? ENC_CW : ENC_CCW, + .pressed = true, + .time = (timer_read() | 1) + }; + encoder_state = (clockwise ^ 1) | (clockwise << 1); + action_exec(encoder_event); + return; +} + +void matrix_scan_kb(void) { + encoder_action_unregister(); + matrix_scan_user(); + return; +} + +bool encoder_update_kb(uint8_t index, bool clockwise) { + encoder_action_register(index, clockwise); + // don't return user actions, because they are in the keymap + // encoder_update_user(index, clockwise); + return true; +}; #endif