diff options
author | Drashna Jaelre <drashna@live.com> | 2023-02-11 15:23:07 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-12 10:23:07 +1100 |
commit | fe02abc47921428fe6eb59ca817bfd082f0de4bf (patch) | |
tree | 5bc3f68ec782969cfed93660c21704df4b530823 /quantum/action_layer.c | |
parent | 40028437971fbca33f49e1d0b683b3b6e2dc9a61 (diff) |
[Core] Tri Layer Keys (#19795)
Co-authored-by: wilba <wilba@wilba.tech>
Co-authored-by: Pablo MartÃnez <58857054+elpekenin@users.noreply.github.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
Diffstat (limited to 'quantum/action_layer.c')
-rw-r--r-- | quantum/action_layer.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/quantum/action_layer.c b/quantum/action_layer.c index 74e8137920..35f494df8f 100644 --- a/quantum/action_layer.c +++ b/quantum/action_layer.c @@ -349,3 +349,13 @@ uint8_t layer_switch_get_layer(keypos_t key) { action_t layer_switch_get_action(keypos_t key) { return action_for_key(layer_switch_get_layer(key), key); } + +layer_state_t update_tri_layer_state(layer_state_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) { + layer_state_t mask12 = ((layer_state_t)1 << layer1) | ((layer_state_t)1 << layer2); + layer_state_t mask3 = (layer_state_t)1 << layer3; + return (state & mask12) == mask12 ? (state | mask3) : (state & ~mask3); +} + +void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) { + layer_state_set(update_tri_layer_state(layer_state, layer1, layer2, layer3)); +} |