From e324fa29187dff7868d9d7fd378e0e46d77107a5 Mon Sep 17 00:00:00 2001 From: tmk Date: Sat, 16 Feb 2013 04:05:58 +0900 Subject: Rewrite layer action with layer_switch --- common/layer_switch.c | 66 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 15 deletions(-) (limited to 'common/layer_switch.c') diff --git a/common/layer_switch.c b/common/layer_switch.c index 9bc804e641..22bfb34f65 100644 --- a/common/layer_switch.c +++ b/common/layer_switch.c @@ -2,50 +2,88 @@ #include "keyboard.h" #include "action.h" #include "debug.h" +#include "util.h" #include "layer_switch.h" +uint8_t default_layer = 0; + uint16_t layer_switch_stat = 0; -uint16_t layer_switch_stat_get(void) +uint16_t layer_switch_get_stat(void) { return layer_switch_stat; } -void layer_switch_stat_set(uint16_t stat) +/* return highest layer whose state is on */ +uint8_t layer_switch_get_layer(void) +{ + return biton16(layer_switch_stat); +} + +static inline void stat_set(uint16_t stat) { + debug("layer_switch: "); + layer_switch_debug(); debug(" to "); + layer_switch_stat = stat; - layer_switch_debug(); + + layer_switch_debug(); debug("\n"); + + clear_keyboard_but_mods(); // To avoid stuck keys } void layer_switch_clear(void) { - layer_switch_stat = 0; - layer_switch_debug(); + stat_set(0); +} + + +void layer_switch_set(uint16_t stat) +{ + stat_set(stat); +} + +void layer_switch_move(uint8_t layer) +{ + if (layer) + stat_set(1<