From 8da8aabbe5796232c0f17f849badd455d42b0277 Mon Sep 17 00:00:00 2001
From: Drashna Jaelre <drashna@live.com>
Date: Sat, 3 Jul 2021 00:19:52 -0700
Subject: Improve layer mask handling (#13065)

---
 tmk_core/common/action_layer.h | 29 +++++++++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

(limited to 'tmk_core/common/action_layer.h')

diff --git a/tmk_core/common/action_layer.h b/tmk_core/common/action_layer.h
index d72cd3e3a5..b87d096eed 100644
--- a/tmk_core/common/action_layer.h
+++ b/tmk_core/common/action_layer.h
@@ -21,6 +21,29 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keyboard.h"
 #include "action.h"
 
+#ifdef DYNAMIC_KEYMAP_ENABLE
+#    ifndef DYNAMIC_KEYMAP_LAYER_COUNT
+#        define DYNAMIC_KEYMAP_LAYER_COUNT 4
+#    endif
+#    if DYNAMIC_KEYMAP_LAYER_COUNT <= 8
+#        ifndef LAYER_STATE_8BIT
+#            define LAYER_STATE_8BIT
+#        endif
+#    elif DYNAMIC_KEYMAP_LAYER_COUNT <= 16
+#        ifndef LAYER_STATE_16BIT
+#            define LAYER_STATE_16BIT
+#        endif
+#    else
+#        ifndef LAYER_STATE_32BIT
+#            define LAYER_STATE_32BIT
+#        endif
+#    endif
+#endif
+
+#if !defined(LAYER_STATE_8BIT) && !defined(LAYER_STATE_16BIT) && !defined(LAYER_STATE_32BIT)
+#    define LAYER_STATE_32BIT
+#endif
+
 #if defined(LAYER_STATE_8BIT)
 typedef uint8_t layer_state_t;
 #    define MAX_LAYER_BITS 3
@@ -35,13 +58,15 @@ typedef uint16_t layer_state_t;
 #        define MAX_LAYER 16
 #    endif
 #    define get_highest_layer(state) biton16(state)
-#else
+#elif defined(LAYER_STATE_32BIT)
 typedef uint32_t layer_state_t;
 #    define MAX_LAYER_BITS 5
 #    ifndef MAX_LAYER
 #        define MAX_LAYER 32
 #    endif
 #    define get_highest_layer(state) biton32(state)
+#else
+#    error Layer Mask size not specified.  HOW?!
 #endif
 
 /*
@@ -92,7 +117,7 @@ layer_state_t layer_state_set_kb(layer_state_t state);
 
 #    define layer_state_set(layer)
 #    define layer_state_is(layer) (layer == 0)
-#    define layer_state_cmp(state, layer) (state == 0 ? layer == 0 : (state & 1UL << layer) != 0)
+#    define layer_state_cmp(state, layer) (state == 0 ? layer == 0 : (state & (layer_state_t)1 << layer) != 0)
 
 #    define layer_debug()
 #    define layer_clear()
-- 
cgit v1.2.3


From b8e913c8db73ebf890e4604ee41991a34354a600 Mon Sep 17 00:00:00 2001
From: Joel Challis <git@zvecr.com>
Date: Wed, 18 Aug 2021 00:18:58 +0100
Subject: Migrate platform independent code from tmk_core -> quantum (#13673)

* Migrate action|keyboard|keycode|eeconfig from tmk_core -> quantum
---
 tmk_core/common/action_layer.h | 147 -----------------------------------------
 1 file changed, 147 deletions(-)
 delete mode 100644 tmk_core/common/action_layer.h

(limited to 'tmk_core/common/action_layer.h')

diff --git a/tmk_core/common/action_layer.h b/tmk_core/common/action_layer.h
deleted file mode 100644
index b87d096eed..0000000000
--- a/tmk_core/common/action_layer.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-Copyright 2013 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include <stdint.h>
-#include "keyboard.h"
-#include "action.h"
-
-#ifdef DYNAMIC_KEYMAP_ENABLE
-#    ifndef DYNAMIC_KEYMAP_LAYER_COUNT
-#        define DYNAMIC_KEYMAP_LAYER_COUNT 4
-#    endif
-#    if DYNAMIC_KEYMAP_LAYER_COUNT <= 8
-#        ifndef LAYER_STATE_8BIT
-#            define LAYER_STATE_8BIT
-#        endif
-#    elif DYNAMIC_KEYMAP_LAYER_COUNT <= 16
-#        ifndef LAYER_STATE_16BIT
-#            define LAYER_STATE_16BIT
-#        endif
-#    else
-#        ifndef LAYER_STATE_32BIT
-#            define LAYER_STATE_32BIT
-#        endif
-#    endif
-#endif
-
-#if !defined(LAYER_STATE_8BIT) && !defined(LAYER_STATE_16BIT) && !defined(LAYER_STATE_32BIT)
-#    define LAYER_STATE_32BIT
-#endif
-
-#if defined(LAYER_STATE_8BIT)
-typedef uint8_t layer_state_t;
-#    define MAX_LAYER_BITS 3
-#    ifndef MAX_LAYER
-#        define MAX_LAYER 8
-#    endif
-#    define get_highest_layer(state) biton(state)
-#elif defined(LAYER_STATE_16BIT)
-typedef uint16_t layer_state_t;
-#    define MAX_LAYER_BITS 4
-#    ifndef MAX_LAYER
-#        define MAX_LAYER 16
-#    endif
-#    define get_highest_layer(state) biton16(state)
-#elif defined(LAYER_STATE_32BIT)
-typedef uint32_t layer_state_t;
-#    define MAX_LAYER_BITS 5
-#    ifndef MAX_LAYER
-#        define MAX_LAYER 32
-#    endif
-#    define get_highest_layer(state) biton32(state)
-#else
-#    error Layer Mask size not specified.  HOW?!
-#endif
-
-/*
- * Default Layer
- */
-extern layer_state_t default_layer_state;
-void                 default_layer_debug(void);
-void                 default_layer_set(layer_state_t state);
-
-__attribute__((weak)) layer_state_t default_layer_state_set_kb(layer_state_t state);
-__attribute__((weak)) layer_state_t default_layer_state_set_user(layer_state_t state);
-
-#ifndef NO_ACTION_LAYER
-/* bitwise operation */
-void default_layer_or(layer_state_t state);
-void default_layer_and(layer_state_t state);
-void default_layer_xor(layer_state_t state);
-#else
-#    define default_layer_or(state)
-#    define default_layer_and(state)
-#    define default_layer_xor(state)
-#endif
-
-/*
- * Keymap Layer
- */
-#ifndef NO_ACTION_LAYER
-extern layer_state_t layer_state;
-
-void layer_state_set(layer_state_t state);
-bool layer_state_is(uint8_t layer);
-bool layer_state_cmp(layer_state_t layer1, uint8_t layer2);
-
-void layer_debug(void);
-void layer_clear(void);
-void layer_move(uint8_t layer);
-void layer_on(uint8_t layer);
-void layer_off(uint8_t layer);
-void layer_invert(uint8_t layer);
-/* bitwise operation */
-void          layer_or(layer_state_t state);
-void          layer_and(layer_state_t state);
-void          layer_xor(layer_state_t state);
-layer_state_t layer_state_set_user(layer_state_t state);
-layer_state_t layer_state_set_kb(layer_state_t state);
-#else
-#    define layer_state 0
-
-#    define layer_state_set(layer)
-#    define layer_state_is(layer) (layer == 0)
-#    define layer_state_cmp(state, layer) (state == 0 ? layer == 0 : (state & (layer_state_t)1 << layer) != 0)
-
-#    define layer_debug()
-#    define layer_clear()
-#    define layer_move(layer) (void)layer
-#    define layer_on(layer) (void)layer
-#    define layer_off(layer) (void)layer
-#    define layer_invert(layer) (void)layer
-#    define layer_or(state) (void)state
-#    define layer_and(state) (void)state
-#    define layer_xor(state) (void)state
-#    define layer_state_set_kb(state) (void)state
-#    define layer_state_set_user(state) (void)state
-#endif
-
-/* pressed actions cache */
-#if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE)
-
-void    update_source_layers_cache(keypos_t key, uint8_t layer);
-uint8_t read_source_layers_cache(keypos_t key);
-#endif
-action_t store_or_get_action(bool pressed, keypos_t key);
-
-/* return the topmost non-transparent layer currently associated with key */
-uint8_t layer_switch_get_layer(keypos_t key);
-
-/* return action depending on current layer status */
-action_t layer_switch_get_action(keypos_t key);
-- 
cgit v1.2.3