X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=tmk_core%2Fcommon%2Faction_layer.c;h=b8dcb34f3a04f65b8d0cd087e9f50ef931015726;hb=90f9fb4eee0da25e5408e54ed872c6da2a40c5f3;hp=a3c7579642770620542924557072f3ffbf5acd50;hpb=e5ac0e8369113ddbd5e4b6519269ca7978adca64;p=qmk_firmware.git diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c index a3c757964..b8dcb34f3 100644 --- a/tmk_core/common/action_layer.c +++ b/tmk_core/common/action_layer.c @@ -11,13 +11,35 @@ #endif -/* - * Default Layer State +/** \brief Default Layer State */ uint32_t default_layer_state = 0; +/** \brief Default Layer State Set At user Level + * + * FIXME: Needs docs + */ +__attribute__((weak)) +uint32_t default_layer_state_set_user(uint32_t state) { + return state; +} + +/** \brief Default Layer State Set At Keyboard Level + * + * FIXME: Needs docs + */ +__attribute__((weak)) +uint32_t default_layer_state_set_kb(uint32_t state) { + return default_layer_state_set_user(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 +47,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 +94,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,51 +130,105 @@ 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 +320,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);