X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=tmk_core%2Fcommon%2Faction_layer.c;h=f3cd381ab0b32bc956db42252ce1b4d535e1306b;hb=7c9d5ace143d3cc6d767a354acde814926d566fd;hp=a3c7579642770620542924557072f3ffbf5acd50;hpb=4b682ea63e2b3dd0bc1132917be7985ce0da57a6;p=qmk_firmware.git diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c index a3c757964..f3cd381ab 100644 --- a/tmk_core/common/action_layer.c +++ b/tmk_core/common/action_layer.c @@ -11,13 +11,26 @@ #endif -/* - * Default Layer State +/** \brief Default Layer State */ uint32_t default_layer_state = 0; +/** \brief Default Layer State Set At Keyboard Level + * + * FIXME: Needs docs + */ +__attribute__((weak)) +uint32_t default_layer_state_set_kb(uint32_t state) { + return state; +} + +/** \brief Default Layer State Set + * + * FIXME: Needs docs + */ static void default_layer_state_set(uint32_t state) { + state = default_layer_state_set_kb(state); debug("default_layer_state: "); default_layer_debug(); debug(" to "); default_layer_state = state; @@ -25,25 +38,45 @@ static void default_layer_state_set(uint32_t state) clear_keyboard_but_mods(); // To avoid stuck keys } +/** \brief Default Layer Print + * + * FIXME: Needs docs + */ void default_layer_debug(void) { dprintf("%08lX(%u)", default_layer_state, biton32(default_layer_state)); } +/** \brief Default Layer Set + * + * FIXME: Needs docs + */ void default_layer_set(uint32_t state) { default_layer_state_set(state); } #ifndef NO_ACTION_LAYER +/** \brief Default Layer Or + * + * FIXME: Needs docs + */ void default_layer_or(uint32_t state) { default_layer_state_set(default_layer_state | state); } +/** \brief Default Layer And + * + * FIXME: Needs docs + */ void default_layer_and(uint32_t state) { default_layer_state_set(default_layer_state & state); } +/** \brief Default Layer Xor + * + * FIXME: Needs docs + */ void default_layer_xor(uint32_t state) { default_layer_state_set(default_layer_state ^ state); @@ -52,13 +85,35 @@ void default_layer_xor(uint32_t state) #ifndef NO_ACTION_LAYER -/* - * Keymap Layer State +/** \brief Keymap Layer State */ uint32_t layer_state = 0; -static void layer_state_set(uint32_t state) +/** \brief Layer state set user + * + * FIXME: Needs docs + */ +__attribute__((weak)) +uint32_t layer_state_set_user(uint32_t state) { + return state; +} + +/** \brief Layer state set keyboard + * + * FIXME: Needs docs + */ +__attribute__((weak)) +uint32_t layer_state_set_kb(uint32_t state) { + return layer_state_set_user(state); +} + +/** \brief Layer state set + * + * FIXME: Needs docs + */ +void layer_state_set(uint32_t state) { + state = layer_state_set_kb(state); dprint("layer_state: "); layer_debug(); dprint(" to "); layer_state = state; @@ -66,44 +121,98 @@ static void layer_state_set(uint32_t state) clear_keyboard_but_mods(); // To avoid stuck keys } +/** \brief Layer clear + * + * FIXME: Needs docs + */ void layer_clear(void) { layer_state_set(0); } +/** \brief Layer state is + * + * FIXME: Needs docs + */ +bool layer_state_is(uint8_t layer) +{ + return layer_state_cmp(layer_state, layer); +} + +/** \brief Layer state compare + * + * FIXME: Needs docs + */ +bool layer_state_cmp(uint32_t cmp_layer_state, uint8_t layer) { + if (!cmp_layer_state) { return layer == 0; } + return (cmp_layer_state & (1UL<= 0; i--) { @@ -197,6 +311,10 @@ int8_t layer_switch_get_layer(keypos_t key) #endif } +/** \brief Layer switch get layer + * + * FIXME: Needs docs + */ action_t layer_switch_get_action(keypos_t key) { return action_for_key(layer_switch_get_layer(key), key);