summaryrefslogtreecommitdiff
path: root/keyboards/kabedon/kabedon98e/kabedon98e.c
diff options
context:
space:
mode:
authorJames Young <18669334+noroadsleft@users.noreply.github.com>2021-10-12 02:40:29 +0000
committerGitHub <noreply@github.com>2021-10-11 19:40:29 -0700
commit78509658e6b76a843dab82e873421e942f7c076f (patch)
tree072dbd286e351f3f87d568aeb66fba49be936d2a /keyboards/kabedon/kabedon98e/kabedon98e.c
parent4b2866dd96545bd11d5b4ae977080b60948850f5 (diff)
KabeDon98E Refactor (#14778)
Co-authored-by: Joel Challis <git@zvecr.com>
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;
+};