diff --git a/right/src/keyboard_layout.c b/right/src/keyboard_layout.c index 0504ae9..2658061 100644 --- a/right/src/keyboard_layout.c +++ b/right/src/keyboard_layout.c @@ -1,21 +1,21 @@ #include "keyboard_layout.h" #include "led_driver.h" +#include "layer.h" static uint8_t keyMasks[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE]; -static uint8_t activeLayer = LAYER_ID_BASE; uint8_t prevKeyStates[SLOT_COUNT][MAX_KEY_COUNT_PER_MODULE]; static inline __attribute__((always_inline)) uhk_key_t getKeycode(uint8_t slotId, uint8_t keyId) { if (keyId < MAX_KEY_COUNT_PER_MODULE) { - if (keyMasks[slotId][keyId]!=0 && keyMasks[slotId][keyId]!=activeLayer) { + if (keyMasks[slotId][keyId]!=0 && keyMasks[slotId][keyId]!=ActiveLayer) { // Mask out key presses after releasing modifier keys return (uhk_key_t){.type = UHK_KEY_NONE}; } - uhk_key_t k = CurrentKeymap[activeLayer][slotId][keyId]; - keyMasks[slotId][keyId] = activeLayer; + uhk_key_t k = CurrentKeymap[ActiveLayer][slotId][keyId]; + keyMasks[slotId][keyId] = ActiveLayer; return k; } else { @@ -55,16 +55,6 @@ bool pressKey(uhk_key_t key, int scancodeIdx, usb_keyboard_report_t *report) { return true; } -bool layerOn(uhk_key_t key) { - activeLayer = key.layer.target; - return false; -} - -bool layerOff(uhk_key_t key) { - activeLayer = LAYER_ID_BASE; - return false; -} - bool key_toggled_on(const uint8_t *prevKeyStates, const uint8_t *currKeyStates, uint8_t keyId) { return (!prevKeyStates[keyId]) && currKeyStates[keyId]; } @@ -86,11 +76,12 @@ bool handleKey(uhk_key_t key, int scancodeIdx, usb_keyboard_report_t *report, co break; case UHK_KEY_LAYER: if (key_toggled_on(prevKeyStates, currKeyStates, keyId)) { - return layerOn(key); + Layer_MoveTo(key.layer.target); } if (key_toggled_off(prevKeyStates, currKeyStates, keyId)) { - return layerOff(key); + Layer_MoveToBase(); } + return false; break; default: break; diff --git a/right/src/layer.c b/right/src/layer.c new file mode 100644 index 0000000..dbb3cad --- /dev/null +++ b/right/src/layer.c @@ -0,0 +1,11 @@ +#include "layer.h" + +uint8_t ActiveLayer = LAYER_ID_BASE; + +void Layer_MoveTo(uint8_t layer) { + ActiveLayer = layer; +} + +void Layer_MoveToBase() { + Layer_MoveTo(LAYER_ID_BASE); +} diff --git a/right/src/layer.h b/right/src/layer.h index 34b9099..73848ae 100644 --- a/right/src/layer.h +++ b/right/src/layer.h @@ -1,6 +1,8 @@ #ifndef __LAYER_H__ #define __LAYER_H__ + #include + // Macros: #define LAYER_ID_BASE 0 @@ -10,4 +12,9 @@ #define LAYER_COUNT 4 + extern uint8_t ActiveLayer; + + void Layer_MoveTo(uint8_t layer); + void Layer_MoveToBase(); + #endif