diff options
author | QMK Bot <hello@qmk.fm> | 2021-12-27 10:28:33 +0000 |
---|---|---|
committer | QMK Bot <hello@qmk.fm> | 2021-12-27 10:28:33 +0000 |
commit | 2689e360cea0ba6d42cc57134ec28edc69089fce (patch) | |
tree | 1b035fd072d8e98f0e71fd044ec7e8f7a3d1ac67 /keyboards/bandominedoni/bandominedoni.c | |
parent | d3952523fe67ca22defe0d889e6fc77f76c3afd9 (diff) | |
parent | 4e077250d56f7e786af0cdef00f4b41d77e2b85c (diff) |
Merge remote-tracking branch 'origin/master' into develop
Diffstat (limited to 'keyboards/bandominedoni/bandominedoni.c')
-rw-r--r-- | keyboards/bandominedoni/bandominedoni.c | 72 |
1 files changed, 46 insertions, 26 deletions
diff --git a/keyboards/bandominedoni/bandominedoni.c b/keyboards/bandominedoni/bandominedoni.c index 1b0365ac6a..eacbb40fa0 100644 --- a/keyboards/bandominedoni/bandominedoni.c +++ b/keyboards/bandominedoni/bandominedoni.c @@ -119,33 +119,53 @@ static enum { UNKNOWN, LEFT, RIGHT } hand_side = UNKNOWN; } #ifdef ENCODER_ENABLE -const uint16_t rt_matrix[2][2] = { - {5, 5}, {5, 6} -}; - -bool encoder_update_kb(uint8_t index, bool clockwise) { - if (index == 1) { /* An encoder on the right side */ - keypos_t key; - int cw = 0; - cw = clockwise ? 1 : 0; - key.row = rt_matrix[cw][0]; - key.col = rt_matrix[cw][1]; - uint8_t layer = layer_switch_get_layer(key); - uint16_t keycode = keymap_key_to_keycode(layer, key); - keyrecord_t record; - record.event.key = key; +# ifdef ENCODERS +static uint8_t encoder_state[ENCODERS] = {0}; +static keypos_t encoder_cw[ENCODERS] = ENCODERS_CW_KEY; +static keypos_t encoder_ccw[ENCODERS] = ENCODERS_CCW_KEY; +# endif - if (keycode < MI_ON){ - tap_code16(keycode); - } else { - record.event.pressed = true; - process_midi(keycode, &record); - wait_ms(TAP_CODE_DELAY); - record.event.pressed = false; - process_midi(keycode, &record); +void encoder_action_unregister(void) { +# ifdef ENCODERS + for (int index = 0; index < ENCODERS; ++index) { + if (encoder_state[index]) { + keyevent_t encoder_event = (keyevent_t) { + .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], + .pressed = false, + .time = (timer_read() | 1) + }; + encoder_state[index] = 0; + action_exec(encoder_event); } - } - return true; +# endif +} + +void encoder_action_register(uint8_t index, bool clockwise) { +# ifdef ENCODERS + keyevent_t encoder_event = (keyevent_t) { + .key = clockwise ? encoder_cw[index] : encoder_ccw[index], + .pressed = true, + .time = (timer_read() | 1) + }; + encoder_state[index] = (clockwise ^ 1) | (clockwise << 1); +# ifdef CONSOLE_ENABLE + uprintf("encoder_action_register index = %u, clockwise = %u, row = %u, col = %u\n", index, clockwise, encoder_event.key.row, encoder_event.key.col); +# endif + action_exec(encoder_event); +# endif } -#endif // ENCODER_ENABLE + +void matrix_scan_kb(void) { + encoder_action_unregister(); + matrix_scan_user(); +} + +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 |