Browse Source

helper to compare current layer_state to user layer

Performs the same bit comparison that the layer_move
functions perform
Colin T.A. Gray 7 years ago
parent
commit
1620d78e73
2 changed files with 12 additions and 0 deletions
  1. 10 0
      tmk_core/common/action_layer.c
  2. 2 0
      tmk_core/common/action_layer.h

+ 10 - 0
tmk_core/common/action_layer.c

@@ -88,6 +88,16 @@ void layer_clear(void)
     layer_state_set(0);
     layer_state_set(0);
 }
 }
 
 
+bool layer_state_is(uint8_t layer)
+{
+    return layer_state_cmp(layer_state, layer);
+}
+
+bool layer_state_cmp(uint32_t cmp_layer_state, uint8_t layer) {
+    if (layer == 0) { return cmp_layer_state == 0; }
+    return (cmp_layer_state & (1UL<<layer)) > 0;
+}
+
 void layer_move(uint8_t layer)
 void layer_move(uint8_t layer)
 {
 {
     layer_state_set(1UL<<layer);
     layer_state_set(1UL<<layer);

+ 2 - 0
tmk_core/common/action_layer.h

@@ -51,6 +51,8 @@ void default_layer_xor(uint32_t state);
 extern uint32_t layer_state;
 extern uint32_t layer_state;
 void layer_debug(void);
 void layer_debug(void);
 void layer_clear(void);
 void layer_clear(void);
+bool layer_state_is(uint8_t layer);
+bool layer_state_cmp(uint32_t layer1, uint8_t layer2);
 void layer_move(uint8_t layer);
 void layer_move(uint8_t layer);
 void layer_on(uint8_t layer);
 void layer_on(uint8_t layer);
 void layer_off(uint8_t layer);
 void layer_off(uint8_t layer);