diff options
| -rw-r--r-- | quantum/command.c | 2 | ||||
| -rw-r--r-- | quantum/quantum.c | 8 | ||||
| -rw-r--r-- | tmk_core/common/action_layer.c | 12 | ||||
| -rw-r--r-- | tmk_core/common/action_layer.h | 29 |
4 files changed, 38 insertions, 13 deletions
diff --git a/quantum/command.c b/quantum/command.c index 34c4b36b1..3a7dc0f8c 100644 --- a/quantum/command.c +++ b/quantum/command.c | |||
| @@ -781,6 +781,6 @@ uint8_t numkey2num(uint8_t code) { | |||
| 781 | 781 | ||
| 782 | static void switch_default_layer(uint8_t layer) { | 782 | static void switch_default_layer(uint8_t layer) { |
| 783 | xprintf("L%d\n", layer); | 783 | xprintf("L%d\n", layer); |
| 784 | default_layer_set(1UL << layer); | 784 | default_layer_set((layer_state_t)1 << layer); |
| 785 | clear_keyboard(); | 785 | clear_keyboard(); |
| 786 | } | 786 | } |
diff --git a/quantum/quantum.c b/quantum/quantum.c index 8ccdb774b..b4cfa28d7 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c | |||
| @@ -340,13 +340,13 @@ void set_single_persistent_default_layer(uint8_t default_layer) { | |||
| 340 | #if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS) | 340 | #if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS) |
| 341 | PLAY_SONG(default_layer_songs[default_layer]); | 341 | PLAY_SONG(default_layer_songs[default_layer]); |
| 342 | #endif | 342 | #endif |
| 343 | eeconfig_update_default_layer(1U << default_layer); | 343 | eeconfig_update_default_layer((layer_state_t)1 << default_layer); |
| 344 | default_layer_set(1U << default_layer); | 344 | default_layer_set((layer_state_t)1 << default_layer); |
| 345 | } | 345 | } |
| 346 | 346 | ||
| 347 | layer_state_t update_tri_layer_state(layer_state_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) { | 347 | layer_state_t update_tri_layer_state(layer_state_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) { |
| 348 | layer_state_t mask12 = (1UL << layer1) | (1UL << layer2); | 348 | layer_state_t mask12 = ((layer_state_t)1 << layer1) | ((layer_state_t)1 << layer2); |
| 349 | layer_state_t mask3 = 1UL << layer3; | 349 | layer_state_t mask3 = (layer_state_t)1 << layer3; |
| 350 | return (state & mask12) == mask12 ? (state | mask3) : (state & ~mask3); | 350 | return (state & mask12) == mask12 ? (state | mask3) : (state & ~mask3); |
| 351 | } | 351 | } |
| 352 | 352 | ||
diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c index af2d7d964..ed1a4bd20 100644 --- a/tmk_core/common/action_layer.c +++ b/tmk_core/common/action_layer.c | |||
| @@ -131,32 +131,32 @@ bool layer_state_cmp(layer_state_t cmp_layer_state, uint8_t layer) { | |||
| 131 | if (!cmp_layer_state) { | 131 | if (!cmp_layer_state) { |
| 132 | return layer == 0; | 132 | return layer == 0; |
| 133 | } | 133 | } |
| 134 | return (cmp_layer_state & (1UL << layer)) != 0; | 134 | return (cmp_layer_state & ((layer_state_t)1 << layer)) != 0; |
| 135 | } | 135 | } |
| 136 | 136 | ||
| 137 | /** \brief Layer move | 137 | /** \brief Layer move |
| 138 | * | 138 | * |
| 139 | * Turns on the given layer and turn off all other layers | 139 | * Turns on the given layer and turn off all other layers |
| 140 | */ | 140 | */ |
| 141 | void layer_move(uint8_t layer) { layer_state_set(1UL << layer); } | 141 | void layer_move(uint8_t layer) { layer_state_set((layer_state_t)1 << layer); } |
| 142 | 142 | ||
| 143 | /** \brief Layer on | 143 | /** \brief Layer on |
| 144 | * | 144 | * |
| 145 | * Turns on given layer | 145 | * Turns on given layer |
| 146 | */ | 146 | */ |
| 147 | void layer_on(uint8_t layer) { layer_state_set(layer_state | (1UL << layer)); } | 147 | void layer_on(uint8_t layer) { layer_state_set(layer_state | ((layer_state_t)1 << layer)); } |
| 148 | 148 | ||
| 149 | /** \brief Layer off | 149 | /** \brief Layer off |
| 150 | * | 150 | * |
| 151 | * Turns off given layer | 151 | * Turns off given layer |
| 152 | */ | 152 | */ |
| 153 | void layer_off(uint8_t layer) { layer_state_set(layer_state & ~(1UL << layer)); } | 153 | void layer_off(uint8_t layer) { layer_state_set(layer_state & ~((layer_state_t)1 << layer)); } |
| 154 | 154 | ||
| 155 | /** \brief Layer invert | 155 | /** \brief Layer invert |
| 156 | * | 156 | * |
| 157 | * Toggle the given layer (set it if it's unset, or unset it if it's set) | 157 | * Toggle the given layer (set it if it's unset, or unset it if it's set) |
| 158 | */ | 158 | */ |
| 159 | void layer_invert(uint8_t layer) { layer_state_set(layer_state ^ (1UL << layer)); } | 159 | void layer_invert(uint8_t layer) { layer_state_set(layer_state ^ ((layer_state_t)1 << layer)); } |
| 160 | 160 | ||
| 161 | /** \brief Layer or | 161 | /** \brief Layer or |
| 162 | * | 162 | * |
| @@ -258,7 +258,7 @@ uint8_t layer_switch_get_layer(keypos_t key) { | |||
| 258 | layer_state_t layers = layer_state | default_layer_state; | 258 | layer_state_t layers = layer_state | default_layer_state; |
| 259 | /* check top layer first */ | 259 | /* check top layer first */ |
| 260 | for (int8_t i = MAX_LAYER - 1; i >= 0; i--) { | 260 | for (int8_t i = MAX_LAYER - 1; i >= 0; i--) { |
| 261 | if (layers & (1UL << i)) { | 261 | if (layers & ((layer_state_t)1 << i)) { |
| 262 | action = action_for_key(i, key); | 262 | action = action_for_key(i, key); |
| 263 | if (action.code != ACTION_TRANSPARENT) { | 263 | if (action.code != ACTION_TRANSPARENT) { |
| 264 | return i; | 264 | return i; |
diff --git a/tmk_core/common/action_layer.h b/tmk_core/common/action_layer.h index d72cd3e3a..b87d096ee 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/>. | |||
| 21 | #include "keyboard.h" | 21 | #include "keyboard.h" |
| 22 | #include "action.h" | 22 | #include "action.h" |
| 23 | 23 | ||
| 24 | #ifdef DYNAMIC_KEYMAP_ENABLE | ||
| 25 | # ifndef DYNAMIC_KEYMAP_LAYER_COUNT | ||
| 26 | # define DYNAMIC_KEYMAP_LAYER_COUNT 4 | ||
| 27 | # endif | ||
| 28 | # if DYNAMIC_KEYMAP_LAYER_COUNT <= 8 | ||
| 29 | # ifndef LAYER_STATE_8BIT | ||
| 30 | # define LAYER_STATE_8BIT | ||
| 31 | # endif | ||
| 32 | # elif DYNAMIC_KEYMAP_LAYER_COUNT <= 16 | ||
| 33 | # ifndef LAYER_STATE_16BIT | ||
| 34 | # define LAYER_STATE_16BIT | ||
| 35 | # endif | ||
| 36 | # else | ||
| 37 | # ifndef LAYER_STATE_32BIT | ||
| 38 | # define LAYER_STATE_32BIT | ||
| 39 | # endif | ||
| 40 | # endif | ||
| 41 | #endif | ||
| 42 | |||
| 43 | #if !defined(LAYER_STATE_8BIT) && !defined(LAYER_STATE_16BIT) && !defined(LAYER_STATE_32BIT) | ||
| 44 | # define LAYER_STATE_32BIT | ||
| 45 | #endif | ||
| 46 | |||
| 24 | #if defined(LAYER_STATE_8BIT) | 47 | #if defined(LAYER_STATE_8BIT) |
| 25 | typedef uint8_t layer_state_t; | 48 | typedef uint8_t layer_state_t; |
| 26 | # define MAX_LAYER_BITS 3 | 49 | # define MAX_LAYER_BITS 3 |
| @@ -35,13 +58,15 @@ typedef uint16_t layer_state_t; | |||
| 35 | # define MAX_LAYER 16 | 58 | # define MAX_LAYER 16 |
| 36 | # endif | 59 | # endif |
| 37 | # define get_highest_layer(state) biton16(state) | 60 | # define get_highest_layer(state) biton16(state) |
| 38 | #else | 61 | #elif defined(LAYER_STATE_32BIT) |
| 39 | typedef uint32_t layer_state_t; | 62 | typedef uint32_t layer_state_t; |
| 40 | # define MAX_LAYER_BITS 5 | 63 | # define MAX_LAYER_BITS 5 |
| 41 | # ifndef MAX_LAYER | 64 | # ifndef MAX_LAYER |
| 42 | # define MAX_LAYER 32 | 65 | # define MAX_LAYER 32 |
| 43 | # endif | 66 | # endif |
| 44 | # define get_highest_layer(state) biton32(state) | 67 | # define get_highest_layer(state) biton32(state) |
| 68 | #else | ||
| 69 | # error Layer Mask size not specified. HOW?! | ||
| 45 | #endif | 70 | #endif |
| 46 | 71 | ||
| 47 | /* | 72 | /* |
| @@ -92,7 +117,7 @@ layer_state_t layer_state_set_kb(layer_state_t state); | |||
| 92 | 117 | ||
| 93 | # define layer_state_set(layer) | 118 | # define layer_state_set(layer) |
| 94 | # define layer_state_is(layer) (layer == 0) | 119 | # define layer_state_is(layer) (layer == 0) |
| 95 | # define layer_state_cmp(state, layer) (state == 0 ? layer == 0 : (state & 1UL << layer) != 0) | 120 | # define layer_state_cmp(state, layer) (state == 0 ? layer == 0 : (state & (layer_state_t)1 << layer) != 0) |
| 96 | 121 | ||
| 97 | # define layer_debug() | 122 | # define layer_debug() |
| 98 | # define layer_clear() | 123 | # define layer_clear() |
