forked from mfulz_github/qmk_firmware
		
	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>
This commit is contained in:
		
							parent
							
								
									d534c72a54
								
							
						
					
					
						commit
						b62e160a89
					
				@ -297,8 +297,8 @@ This runs code every time that the layers get changed.  This can be useful for l
 | 
				
			|||||||
This example shows how to set the [RGB Underglow](feature_rgblight.md) lights based on the layer, using the Planck as an example
 | 
					This example shows how to set the [RGB Underglow](feature_rgblight.md) lights based on the layer, using the Planck as an example
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```c
 | 
					```c
 | 
				
			||||||
uint32_t layer_state_set_user(uint32_t state) {
 | 
					layer_state_t layer_state_set_user(layer_state_t state) {
 | 
				
			||||||
    switch (biton32(state)) {
 | 
					    switch (get_highest_layer(state)) {
 | 
				
			||||||
    case _RAISE:
 | 
					    case _RAISE:
 | 
				
			||||||
        rgblight_setrgb (0x00,  0x00, 0xFF);
 | 
					        rgblight_setrgb (0x00,  0x00, 0xFF);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@ -320,8 +320,8 @@ uint32_t layer_state_set_user(uint32_t state) {
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
### `layer_state_set_*` Function Documentation
 | 
					### `layer_state_set_*` Function Documentation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Keyboard/Revision: `uint32_t layer_state_set_kb(uint32_t state)`
 | 
					* Keyboard/Revision: `layer_state_t layer_state_set_kb(layer_state_t state)`
 | 
				
			||||||
* Keymap: `uint32_t layer_state_set_user(uint32_t state)`
 | 
					* Keymap: `layer_state_t layer_state_set_user(layer_state_t state)`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The `state` is the bitmask of the active layers, as explained in the [Keymap Overview](keymap.md#keymap-layer-status)
 | 
					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) {
 | 
				
			|||||||
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. 
 | 
					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. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```c
 | 
					```c
 | 
				
			||||||
uint32_t layer_state_set_user(uint32_t state) {
 | 
					layer_state_t layer_state_set_user(layer_state_t state) {
 | 
				
			||||||
    switch (biton32(state)) {
 | 
					    switch (get_highest_layer(state)) {
 | 
				
			||||||
    case _RAISE:
 | 
					    case _RAISE:
 | 
				
			||||||
        if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_magenta(); rgblight_mode_noeeprom(1); }
 | 
					        if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_magenta(); rgblight_mode_noeeprom(1); }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
				
			|||||||
@ -31,7 +31,7 @@ This enables the feature and the `OLED_DRIVER_ENABLE` define. Then in your `keym
 | 
				
			|||||||
void oled_task_user(void) {
 | 
					void oled_task_user(void) {
 | 
				
			||||||
  // Host Keyboard Layer Status
 | 
					  // Host Keyboard Layer Status
 | 
				
			||||||
  oled_write_P(PSTR("Layer: "), false);
 | 
					  oled_write_P(PSTR("Layer: "), false);
 | 
				
			||||||
  switch (biton32(layer_state)) {
 | 
					  switch (get_highest_layer(layer_state)) {
 | 
				
			||||||
    case _QWERTY:
 | 
					    case _QWERTY:
 | 
				
			||||||
      oled_write_P(PSTR("Default\n"), false);
 | 
					      oled_write_P(PSTR("Default\n"), false);
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
				
			|||||||
@ -115,11 +115,11 @@ For instance, let's look at the `layer_state_set_user()` function.  You can enab
 | 
				
			|||||||
In your `<name.c>` file, you'd want to add this: 
 | 
					In your `<name.c>` file, you'd want to add this: 
 | 
				
			||||||
```c
 | 
					```c
 | 
				
			||||||
__attribute__ ((weak))
 | 
					__attribute__ ((weak))
 | 
				
			||||||
uint32_t layer_state_set_keymap (uint32_t state) {
 | 
					layer_state_t layer_state_set_keymap (layer_state_t state) {
 | 
				
			||||||
  return state;
 | 
					  return state;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint32_t layer_state_set_user (uint32_t state) {
 | 
					layer_state_t layer_state_set_user (layer_state_t state) {
 | 
				
			||||||
  state = update_tri_layer_state(state, 2, 3, 5);
 | 
					  state = update_tri_layer_state(state, 2, 3, 5);
 | 
				
			||||||
  return layer_state_set_keymap (state);
 | 
					  return layer_state_set_keymap (state);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -50,7 +50,7 @@ The caveat to this method is that you cannot access the `z` layer without having
 | 
				
			|||||||
#### Example
 | 
					#### Example
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```c
 | 
					```c
 | 
				
			||||||
uint32_t layer_state_set_user(uint32_t state) {
 | 
					layer_state_t layer_state_set_user(layer_state_t state) {
 | 
				
			||||||
  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
 | 
					  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
@ -58,7 +58,7 @@ uint32_t layer_state_set_user(uint32_t state) {
 | 
				
			|||||||
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.
 | 
					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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```c
 | 
					```c
 | 
				
			||||||
uint32_t layer_state_set_user(uint32_t state) {
 | 
					layer_state_t layer_state_set_user(layer_state_t state) {
 | 
				
			||||||
  state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
 | 
					  state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
 | 
				
			||||||
  state = update_tri_layer_state(state, _RAISE, _SYMB, _SPECIAL);
 | 
					  state = update_tri_layer_state(state, _RAISE, _SYMB, _SPECIAL);
 | 
				
			||||||
  return state;
 | 
					  return state;
 | 
				
			||||||
 | 
				
			|||||||
@ -931,9 +931,9 @@ void set_single_persistent_default_layer(uint8_t default_layer) {
 | 
				
			|||||||
  default_layer_set(1U<<default_layer);
 | 
					  default_layer_set(1U<<default_layer);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
 | 
					layer_state_t update_tri_layer_state(layer_state_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
 | 
				
			||||||
  uint32_t mask12 = (1UL << layer1) | (1UL << layer2);
 | 
					  layer_state_t mask12 = (1UL << layer1) | (1UL << layer2);
 | 
				
			||||||
  uint32_t mask3 = 1UL << layer3;
 | 
					  layer_state_t mask3 = 1UL << layer3;
 | 
				
			||||||
  return (state & mask12) == mask12 ? (state | mask3) : (state & ~mask3);
 | 
					  return (state & mask12) == mask12 ? (state | mask3) : (state & ~mask3);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -213,7 +213,7 @@ void send_char(char ascii_code);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// For tri-layer
 | 
					// For tri-layer
 | 
				
			||||||
void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
 | 
					void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
 | 
				
			||||||
uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3);
 | 
					layer_state_t update_tri_layer_state(layer_state_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void set_single_persistent_default_layer(uint8_t default_layer);
 | 
					void set_single_persistent_default_layer(uint8_t default_layer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -447,7 +447,7 @@ void visualizer_set_user_data(void* u) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uint32_t leds) {
 | 
					void visualizer_update(layer_state_t default_state, layer_state_t state, uint8_t mods, uint32_t leds) {
 | 
				
			||||||
    // Note that there's a small race condition here, the thread could read
 | 
					    // Note that there's a small race condition here, the thread could read
 | 
				
			||||||
    // a state where one of these are set but not the other. But this should
 | 
					    // a state where one of these are set but not the other. But this should
 | 
				
			||||||
    // not really matter as it will be fixed during the next loop step.
 | 
					    // not really matter as it will be fixed during the next loop step.
 | 
				
			||||||
 | 
				
			|||||||
@ -30,6 +30,7 @@ SOFTWARE.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "config.h"
 | 
					#include "config.h"
 | 
				
			||||||
#include "gfx.h"
 | 
					#include "gfx.h"
 | 
				
			||||||
 | 
					#include "action_layer.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef LCD_BACKLIGHT_ENABLE
 | 
					#ifdef LCD_BACKLIGHT_ENABLE
 | 
				
			||||||
#include "lcd_backlight.h"
 | 
					#include "lcd_backlight.h"
 | 
				
			||||||
@ -45,7 +46,7 @@ uint8_t visualizer_get_mods(void);
 | 
				
			|||||||
// This need to be called once at the start
 | 
					// This need to be called once at the start
 | 
				
			||||||
void visualizer_init(void);
 | 
					void visualizer_init(void);
 | 
				
			||||||
// This should be called at every matrix scan
 | 
					// This should be called at every matrix scan
 | 
				
			||||||
void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uint32_t leds);
 | 
					void visualizer_update(layer_state_t default_state, layer_state_t state, uint8_t mods, uint32_t leds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This should be called when the keyboard goes to suspend state
 | 
					// This should be called when the keyboard goes to suspend state
 | 
				
			||||||
void visualizer_suspend(void);
 | 
					void visualizer_suspend(void);
 | 
				
			||||||
@ -68,8 +69,8 @@ void draw_emulator(void);
 | 
				
			|||||||
struct keyframe_animation_t;
 | 
					struct keyframe_animation_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
    uint32_t layer;
 | 
					    layer_state_t layer;
 | 
				
			||||||
    uint32_t default_layer;
 | 
					    layer_state_t default_layer;
 | 
				
			||||||
    uint32_t leds; // See led.h for available statuses
 | 
					    uint32_t leds; // See led.h for available statuses
 | 
				
			||||||
    uint8_t mods;
 | 
					    uint8_t mods;
 | 
				
			||||||
    bool suspended;
 | 
					    bool suspended;
 | 
				
			||||||
 | 
				
			|||||||
@ -21,12 +21,15 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
#include "keyboard.h"
 | 
					#include "keyboard.h"
 | 
				
			||||||
#include "action.h"
 | 
					#include "action.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(LAYER_STATE_8BIT) || ( defined(DYNAMIC_KEYMAP_ENABLE) && DYNAMIC_KEYMAP_LAYER_COUNT >= 8 )
 | 
					#if defined(LAYER_STATE_8BIT)
 | 
				
			||||||
typedef uint8_t layer_state_t;
 | 
					typedef uint8_t layer_state_t;
 | 
				
			||||||
 | 
					#define get_highest_layer(state) biton8(state)
 | 
				
			||||||
#elif defined(LAYER_STATE_16BIT)
 | 
					#elif defined(LAYER_STATE_16BIT)
 | 
				
			||||||
typedef uint16_t layer_state_t;
 | 
					typedef uint16_t layer_state_t;
 | 
				
			||||||
 | 
					#define get_highest_layer(state) biton16(state)
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
typedef uint32_t layer_state_t;
 | 
					typedef uint32_t layer_state_t;
 | 
				
			||||||
 | 
					#define get_highest_layer(state) biton32(state)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user