summaryrefslogtreecommitdiff
path: root/keyboards/kabedon/kabedon98e/kabedon98e.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/kabedon/kabedon98e/kabedon98e.c')
-rw-r--r--keyboards/kabedon/kabedon98e/kabedon98e.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/keyboards/kabedon/kabedon98e/kabedon98e.c b/keyboards/kabedon/kabedon98e/kabedon98e.c
index 5142c5887d..09af36de42 100644
--- a/keyboards/kabedon/kabedon98e/kabedon98e.c
+++ b/keyboards/kabedon/kabedon98e/kabedon98e.c
@@ -14,3 +14,42 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "kabedon98e.h"
+
+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;
+
+void encoder_action_unregister(void) {
+ 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);
+ }
+ }
+}
+
+void encoder_action_register(uint8_t index, bool clockwise) {
+ 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);
+ action_exec(encoder_event);
+}
+
+void matrix_scan_kb(void) {
+ encoder_action_unregister();
+ matrix_scan_user();
+}
+
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) { return false; }
+ encoder_action_register(index, clockwise);
+ return true;
+};