aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrashna Jaelre <drashna@live.com>2019-08-21 17:07:49 -0700
committerGitHub <noreply@github.com>2019-08-21 17:07:49 -0700
commitb62e160a8950f451b08f1fee0109e60a58c5ddaa (patch)
tree897619679d73edd3a5c62bc528f1bfaaf974b96b
parentd534c72a544454132b3c6c05af85c821f6a93d65 (diff)
downloadqmk_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.md12
-rw-r--r--docs/feature_oled_driver.md2
-rw-r--r--docs/feature_userspace.md4
-rw-r--r--docs/ref_functions.md4
-rw-r--r--quantum/quantum.c6
-rw-r--r--quantum/quantum.h2
-rw-r--r--quantum/visualizer/visualizer.c4
-rw-r--r--quantum/visualizer/visualizer.h7
-rw-r--r--tmk_core/common/action_layer.h5
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
297This example shows how to set the [RGB Underglow](feature_rgblight.md) lights based on the layer, using the Planck as an example 297This 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
300uint32_t layer_state_set_user(uint32_t state) { 300layer_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
327The `state` is the bitmask of the active layers, as explained in the [Keymap Overview](keymap.md#keymap-layer-status) 327The `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) {
377The 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. 377The 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
380uint32_t layer_state_set_user(uint32_t state) { 380layer_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
31void oled_task_user(void) { 31void 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
115In your `<name.c>` file, you'd want to add this: 115In your `<name.c>` file, you'd want to add this:
116```c 116```c
117__attribute__ ((weak)) 117__attribute__ ((weak))
118uint32_t layer_state_set_keymap (uint32_t state) { 118layer_state_t layer_state_set_keymap (layer_state_t state) {
119 return state; 119 return state;
120} 120}
121 121
122uint32_t layer_state_set_user (uint32_t state) { 122layer_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
53uint32_t layer_state_set_user(uint32_t state) { 53layer_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) {
58Alternatively, 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. 58Alternatively, 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
61uint32_t layer_state_set_user(uint32_t state) { 61layer_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
934uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) { 934layer_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
215void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3); 215void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
216uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3); 216layer_state_t update_tri_layer_state(layer_state_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3);
217 217
218void set_single_persistent_default_layer(uint8_t default_layer); 218void 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
450void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uint32_t leds) { 450void 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
46void visualizer_init(void); 47void visualizer_init(void);
47// This should be called at every matrix scan 48// This should be called at every matrix scan
48void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uint32_t leds); 49void 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
51void visualizer_suspend(void); 52void visualizer_suspend(void);
@@ -68,8 +69,8 @@ void draw_emulator(void);
68struct keyframe_animation_t; 69struct keyframe_animation_t;
69 70
70typedef struct { 71typedef 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)
25typedef uint8_t layer_state_t; 25typedef 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)
27typedef uint16_t layer_state_t; 28typedef uint16_t layer_state_t;
29#define get_highest_layer(state) biton16(state)
28#else 30#else
29typedef uint32_t layer_state_t; 31typedef uint32_t layer_state_t;
32#define get_highest_layer(state) biton32(state)
30#endif 33#endif
31 34
32 35