#include #include "keyboard.h" #include "action.h" #include "util.h" #include "action_layer.h" #ifdef DEBUG_ACTION #include "debug.h" #else #include "nodebug.h" #endif /** \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; default_layer_debug(); debug("\n"); 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); } #endif #ifndef NO_ACTION_LAYER /** \brief Keymap Layer State */ uint32_t layer_state = 0; /** \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; layer_debug(); dprintln(); 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--) { if (layers & (1UL<