summaryrefslogtreecommitdiff
path: root/keyboards/bandominedoni/bandominedoni.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/bandominedoni/bandominedoni.c')
-rw-r--r--keyboards/bandominedoni/bandominedoni.c72
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