diff options
author | Drashna Jaelre <drashna@live.com> | 2019-08-21 17:07:49 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-21 17:07:49 -0700 |
commit | b62e160a8950f451b08f1fee0109e60a58c5ddaa (patch) | |
tree | 897619679d73edd3a5c62bc528f1bfaaf974b96b | |
parent | d534c72a544454132b3c6c05af85c821f6a93d65 (diff) | |
download | qmk_firmware-b62e160a8950f451b08f1fee0109e60a58c5ddaa.tar.gz qmk_firmware-b62e160a8950f451b08f1fee0109e60a58c5ddaa.zip |
Additional changes for Layer State typedef compatibility (#5906)
* Additional changes for Layer State typedef compatibility
* Replace biton32 with get_highest_layer in docs
* Change additional layer structure code
* Fix uGFX reference issue
* Remove dynamic_keymap check
* Where did all these extra spaces come from
Co-Authored-By: fauxpark <fauxpark@gmail.com>
-rw-r--r-- | docs/custom_quantum_functions.md | 12 | ||||
-rw-r--r-- | docs/feature_oled_driver.md | 2 | ||||
-rw-r--r-- | docs/feature_userspace.md | 4 | ||||
-rw-r--r-- | docs/ref_functions.md | 4 | ||||
-rw-r--r-- | quantum/quantum.c | 6 | ||||
-rw-r--r-- | quantum/quantum.h | 2 | ||||
-rw-r--r-- | quantum/visualizer/visualizer.c | 4 | ||||
-rw-r--r-- | quantum/visualizer/visualizer.h | 7 | ||||
-rw-r--r-- | tmk_core/common/action_layer.h | 5 |
9 files changed, 25 insertions, 21 deletions
diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md index 7be82c650..839d49ca0 100644 --- a/docs/custom_quantum_functions.md +++ b/docs/custom_quantum_functions.md | |||
@@ -297,8 +297,8 @@ This runs code every time that the layers get changed. This can be useful for l | |||
297 | This example shows how to set the [RGB Underglow](feature_rgblight.md) lights based on the layer, using the Planck as an example | 297 | This example shows how to set the [RGB Underglow](feature_rgblight.md) lights based on the layer, using the Planck as an example |
298 | 298 | ||
299 | ```c | 299 | ```c |
300 | uint32_t layer_state_set_user(uint32_t state) { | 300 | layer_state_t layer_state_set_user(layer_state_t state) { |
301 | switch (biton32(state)) { | 301 | switch (get_highest_layer(state)) { |
302 | case _RAISE: | 302 | case _RAISE: |
303 | rgblight_setrgb (0x00, 0x00, 0xFF); | 303 | rgblight_setrgb (0x00, 0x00, 0xFF); |
304 | break; | 304 | break; |
@@ -320,8 +320,8 @@ uint32_t layer_state_set_user(uint32_t state) { | |||
320 | ``` | 320 | ``` |
321 | ### `layer_state_set_*` Function Documentation | 321 | ### `layer_state_set_*` Function Documentation |
322 | 322 | ||
323 | * Keyboard/Revision: `uint32_t layer_state_set_kb(uint32_t state)` | 323 | * Keyboard/Revision: `layer_state_t layer_state_set_kb(layer_state_t state)` |
324 | * Keymap: `uint32_t layer_state_set_user(uint32_t state)` | 324 | * Keymap: `layer_state_t layer_state_set_user(layer_state_t state)` |
325 | 325 | ||
326 | 326 | ||
327 | The `state` is the bitmask of the active layers, as explained in the [Keymap Overview](keymap.md#keymap-layer-status) | 327 | The `state` is the bitmask of the active layers, as explained in the [Keymap Overview](keymap.md#keymap-layer-status) |
@@ -377,8 +377,8 @@ void keyboard_post_init_user(void) { | |||
377 | The above function will use the EEPROM config immediately after reading it, to set the default layer's RGB color. The "raw" value of it is converted in a usable structure based on the "union" that you created above. | 377 | The above function will use the EEPROM config immediately after reading it, to set the default layer's RGB color. The "raw" value of it is converted in a usable structure based on the "union" that you created above. |
378 | 378 | ||
379 | ```c | 379 | ```c |
380 | uint32_t layer_state_set_user(uint32_t state) { | 380 | layer_state_t layer_state_set_user(layer_state_t state) { |
381 | switch (biton32(state)) { | 381 | switch (get_highest_layer(state)) { |
382 | case _RAISE: | 382 | case _RAISE: |
383 | if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_magenta(); rgblight_mode_noeeprom(1); } | 383 | if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_magenta(); rgblight_mode_noeeprom(1); } |
384 | break; | 384 | break; |
diff --git a/docs/feature_oled_driver.md b/docs/feature_oled_driver.md index 503e43828..9d19beedb 100644 --- a/docs/feature_oled_driver.md +++ b/docs/feature_oled_driver.md | |||
@@ -31,7 +31,7 @@ This enables the feature and the `OLED_DRIVER_ENABLE` define. Then in your `keym | |||
31 | void oled_task_user(void) { | 31 | void oled_task_user(void) { |
32 | // Host Keyboard Layer Status | 32 | // Host Keyboard Layer Status |
33 | oled_write_P(PSTR("Layer: "), false); | 33 | oled_write_P(PSTR("Layer: "), false); |
34 | switch (biton32(layer_state)) { | 34 | switch (get_highest_layer(layer_state)) { |
35 | case _QWERTY: | 35 | case _QWERTY: |
36 | oled_write_P(PSTR("Default\n"), false); | 36 | oled_write_P(PSTR("Default\n"), false); |
37 | break; | 37 | break; |
diff --git a/docs/feature_userspace.md b/docs/feature_userspace.md index 2f119c8bd..1cc8ca742 100644 --- a/docs/feature_userspace.md +++ b/docs/feature_userspace.md | |||
@@ -115,11 +115,11 @@ For instance, let's look at the `layer_state_set_user()` function. You can enab | |||
115 | In your `<name.c>` file, you'd want to add this: | 115 | In your `<name.c>` file, you'd want to add this: |
116 | ```c | 116 | ```c |
117 | __attribute__ ((weak)) | 117 | __attribute__ ((weak)) |
118 | uint32_t layer_state_set_keymap (uint32_t state) { | 118 | layer_state_t layer_state_set_keymap (layer_state_t state) { |
119 | return state; | 119 | return state; |
120 | } | 120 | } |
121 | 121 | ||
122 | uint32_t layer_state_set_user (uint32_t state) { | 122 | layer_state_t layer_state_set_user (layer_state_t state) { |
123 | state = update_tri_layer_state(state, 2, 3, 5); | 123 | state = update_tri_layer_state(state, 2, 3, 5); |
124 | return layer_state_set_keymap (state); | 124 | return layer_state_set_keymap (state); |
125 | } | 125 | } |
diff --git a/docs/ref_functions.md b/docs/ref_functions.md index 174d9a95a..1ac83cec4 100644 --- a/docs/ref_functions.md +++ b/docs/ref_functions.md | |||
@@ -50,7 +50,7 @@ The caveat to this method is that you cannot access the `z` layer without having | |||
50 | #### Example | 50 | #### Example |
51 | 51 | ||
52 | ```c | 52 | ```c |
53 | uint32_t layer_state_set_user(uint32_t state) { | 53 | layer_state_t layer_state_set_user(layer_state_t state) { |
54 | return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); | 54 | return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); |
55 | } | 55 | } |
56 | ``` | 56 | ``` |
@@ -58,7 +58,7 @@ uint32_t layer_state_set_user(uint32_t state) { | |||
58 | Alternatively, you don't have to immediately "return" the value. This is useful if you want to add multiple tri layers, or if you want to add additional effects. | 58 | Alternatively, you don't have to immediately "return" the value. This is useful if you want to add multiple tri layers, or if you want to add additional effects. |
59 | 59 | ||
60 | ```c | 60 | ```c |
61 | uint32_t layer_state_set_user(uint32_t state) { | 61 | layer_state_t layer_state_set_user(layer_state_t state) { |
62 | state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); | 62 | state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); |
63 | state = update_tri_layer_state(state, _RAISE, _SYMB, _SPECIAL); | 63 | state = update_tri_layer_state(state, _RAISE, _SYMB, _SPECIAL); |
64 | return state; | 64 | return state; |
diff --git a/quantum/quantum.c b/quantum/quantum.c index f489c9031..665d6fdd9 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c | |||
@@ -931,9 +931,9 @@ void set_single_persistent_default_layer(uint8_t default_layer) { | |||
931 | default_layer_set(1U<<default_layer); | 931 | default_layer_set(1U<<default_layer); |
932 | } | 932 | } |
933 | 933 | ||
934 | uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) { | 934 | layer_state_t update_tri_layer_state(layer_state_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) { |
935 | uint32_t mask12 = (1UL << layer1) | (1UL << layer2); | 935 | layer_state_t mask12 = (1UL << layer1) | (1UL << layer2); |
936 | uint32_t mask3 = 1UL << layer3; | 936 | layer_state_t mask3 = 1UL << layer3; |
937 | return (state & mask12) == mask12 ? (state | mask3) : (state & ~mask3); | 937 | return (state & mask12) == mask12 ? (state | mask3) : (state & ~mask3); |
938 | } | 938 | } |
939 | 939 | ||
diff --git a/quantum/quantum.h b/quantum/quantum.h index 56f30624c..221462567 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h | |||
@@ -213,7 +213,7 @@ void send_char(char ascii_code); | |||
213 | 213 | ||
214 | // For tri-layer | 214 | // For tri-layer |
215 | void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3); | 215 | void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3); |
216 | uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3); | 216 | layer_state_t update_tri_layer_state(layer_state_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3); |
217 | 217 | ||
218 | void set_single_persistent_default_layer(uint8_t default_layer); | 218 | void set_single_persistent_default_layer(uint8_t default_layer); |
219 | 219 | ||
diff --git a/quantum/visualizer/visualizer.c b/quantum/visualizer/visualizer.c index 5b4d8d603..516cf2a84 100644 --- a/quantum/visualizer/visualizer.c +++ b/quantum/visualizer/visualizer.c | |||
@@ -437,7 +437,7 @@ uint8_t visualizer_get_mods() { | |||
437 | if (!has_oneshot_mods_timed_out()) { | 437 | if (!has_oneshot_mods_timed_out()) { |
438 | mods |= get_oneshot_mods(); | 438 | mods |= get_oneshot_mods(); |
439 | } | 439 | } |
440 | #endif | 440 | #endif |
441 | return mods; | 441 | return mods; |
442 | } | 442 | } |
443 | 443 | ||
@@ -447,7 +447,7 @@ void visualizer_set_user_data(void* u) { | |||
447 | } | 447 | } |
448 | #endif | 448 | #endif |
449 | 449 | ||
450 | void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uint32_t leds) { | 450 | void visualizer_update(layer_state_t default_state, layer_state_t state, uint8_t mods, uint32_t leds) { |
451 | // Note that there's a small race condition here, the thread could read | 451 | // Note that there's a small race condition here, the thread could read |
452 | // a state where one of these are set but not the other. But this should | 452 | // a state where one of these are set but not the other. But this should |
453 | // not really matter as it will be fixed during the next loop step. | 453 | // not really matter as it will be fixed during the next loop step. |
diff --git a/quantum/visualizer/visualizer.h b/quantum/visualizer/visualizer.h index 90ecdcbae..56ea1fd98 100644 --- a/quantum/visualizer/visualizer.h +++ b/quantum/visualizer/visualizer.h | |||
@@ -30,6 +30,7 @@ SOFTWARE. | |||
30 | 30 | ||
31 | #include "config.h" | 31 | #include "config.h" |
32 | #include "gfx.h" | 32 | #include "gfx.h" |
33 | #include "action_layer.h" | ||
33 | 34 | ||
34 | #ifdef LCD_BACKLIGHT_ENABLE | 35 | #ifdef LCD_BACKLIGHT_ENABLE |
35 | #include "lcd_backlight.h" | 36 | #include "lcd_backlight.h" |
@@ -45,7 +46,7 @@ uint8_t visualizer_get_mods(void); | |||
45 | // This need to be called once at the start | 46 | // This need to be called once at the start |
46 | void visualizer_init(void); | 47 | void visualizer_init(void); |
47 | // This should be called at every matrix scan | 48 | // This should be called at every matrix scan |
48 | void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uint32_t leds); | 49 | void visualizer_update(layer_state_t default_state, layer_state_t state, uint8_t mods, uint32_t leds); |
49 | 50 | ||
50 | // This should be called when the keyboard goes to suspend state | 51 | // This should be called when the keyboard goes to suspend state |
51 | void visualizer_suspend(void); | 52 | void visualizer_suspend(void); |
@@ -68,8 +69,8 @@ void draw_emulator(void); | |||
68 | struct keyframe_animation_t; | 69 | struct keyframe_animation_t; |
69 | 70 | ||
70 | typedef struct { | 71 | typedef struct { |
71 | uint32_t layer; | 72 | layer_state_t layer; |
72 | uint32_t default_layer; | 73 | layer_state_t default_layer; |
73 | uint32_t leds; // See led.h for available statuses | 74 | uint32_t leds; // See led.h for available statuses |
74 | uint8_t mods; | 75 | uint8_t mods; |
75 | bool suspended; | 76 | bool suspended; |
diff --git a/tmk_core/common/action_layer.h b/tmk_core/common/action_layer.h index 7fa30c86d..a2734a29e 100644 --- a/tmk_core/common/action_layer.h +++ b/tmk_core/common/action_layer.h | |||
@@ -21,12 +21,15 @@ 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 | #if defined(LAYER_STATE_8BIT) || ( defined(DYNAMIC_KEYMAP_ENABLE) && DYNAMIC_KEYMAP_LAYER_COUNT >= 8 ) | 24 | #if defined(LAYER_STATE_8BIT) |
25 | typedef uint8_t layer_state_t; | 25 | typedef uint8_t layer_state_t; |
26 | #define get_highest_layer(state) biton8(state) | ||
26 | #elif defined(LAYER_STATE_16BIT) | 27 | #elif defined(LAYER_STATE_16BIT) |
27 | typedef uint16_t layer_state_t; | 28 | typedef uint16_t layer_state_t; |
29 | #define get_highest_layer(state) biton16(state) | ||
28 | #else | 30 | #else |
29 | typedef uint32_t layer_state_t; | 31 | typedef uint32_t layer_state_t; |
32 | #define get_highest_layer(state) biton32(state) | ||
30 | #endif | 33 | #endif |
31 | 34 | ||
32 | 35 | ||