diff options
| author | Ilya Zhuravlev <whatever@xyz.is> | 2020-12-06 19:23:57 -0500 |
|---|---|---|
| committer | Ilya Zhuravlev <whatever@xyz.is> | 2020-12-18 22:35:41 -0500 |
| commit | 10e15c09a4c7ad13f4d47dc0dd5b5a0695d170e7 (patch) | |
| tree | b7549f991ee57294e844b6a47a1f2f588bc0f8e4 /quantum/vial.c | |
| parent | 71280fe884f7c5ecd043052e99f89cff43071649 (diff) | |
vial: initial encoder support
Diffstat (limited to 'quantum/vial.c')
| -rw-r--r-- | quantum/vial.c | 42 |
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 |
