summaryrefslogtreecommitdiff
path: root/quantum/vial.c
diff options
context:
space:
mode:
authorIlya Zhuravlev <whatever@xyz.is>2020-12-06 19:23:57 -0500
committerIlya Zhuravlev <whatever@xyz.is>2020-12-18 22:35:41 -0500
commit10e15c09a4c7ad13f4d47dc0dd5b5a0695d170e7 (patch)
treeb7549f991ee57294e844b6a47a1f2f588bc0f8e4 /quantum/vial.c
parent71280fe884f7c5ecd043052e99f89cff43071649 (diff)
vial: initial encoder support
Diffstat (limited to 'quantum/vial.c')
-rw-r--r--quantum/vial.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/quantum/vial.c b/quantum/vial.c
index d482f16ea8..a071a9b3eb 100644
--- a/quantum/vial.c
+++ b/quantum/vial.c
@@ -20,11 +20,15 @@
#include "protocol/usb_descriptor.h"
#include "vial_generated_keyboard_definition.h"
+#include "dynamic_keymap.h"
+#include "quantum.h"
enum {
vial_get_keyboard_id = 0x00,
vial_get_size = 0x01,
vial_get_def = 0x02,
+ vial_get_encoder = 0x03,
+ vial_set_encoder = 0x04,
};
void vial_handle_cmd(uint8_t *msg, uint8_t length) {
@@ -66,5 +70,43 @@ void vial_handle_cmd(uint8_t *msg, uint8_t length) {
memcpy_P(msg, &keyboard_definition[start], end - start);
break;
}
+#ifdef VIAL_ENCODERS_ENABLE
+ case vial_get_encoder: {
+ uint8_t layer = msg[2];
+ uint8_t idx = msg[3];
+ uint16_t keycode = dynamic_keymap_get_encoder(layer, idx, 0);
+ msg[0] = keycode >> 8;
+ msg[1] = keycode & 0xFF;
+ keycode = dynamic_keymap_get_encoder(layer, idx, 1);
+ msg[2] = keycode >> 8;
+ msg[3] = keycode & 0xFF;
+ break;
+ }
+ case vial_set_encoder: {
+ dynamic_keymap_set_encoder(msg[2], msg[3], msg[4], (msg[5] << 8) | msg[6]);
+ break;
+ }
+#endif
+ }
+}
+
+#ifdef VIAL_ENCODERS_ENABLE
+void vial_encoder_update(uint8_t index, bool clockwise) {
+ uint16_t code;
+
+ layer_state_t layers = layer_state | default_layer_state;
+ /* check top layer first */
+ for (int8_t i = MAX_LAYER - 1; i >= 0; i--) {
+ if (layers & (1UL << i)) {
+ code = dynamic_keymap_get_encoder(i, index, clockwise);
+ if (code != KC_TRNS) {
+ tap_code16(code);
+ return;
+ }
+ }
}
+ /* fall back to layer 0 */
+ code = dynamic_keymap_get_encoder(0, index, clockwise);
+ tap_code16(code);
}
+#endif