From e0f960a576e090808e5cc25c5368441c11f36ea6 Mon Sep 17 00:00:00 2001 From: tmk Date: Wed, 20 Feb 2013 11:16:13 +0900 Subject: Add overlay framework --- common/layer_switch.c | 167 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 132 insertions(+), 35 deletions(-) (limited to 'common/layer_switch.c') diff --git a/common/layer_switch.c b/common/layer_switch.c index 22bfb34f6..19e286f88 100644 --- a/common/layer_switch.c +++ b/common/layer_switch.c @@ -6,84 +6,168 @@ #include "layer_switch.h" +/* + * Default Layer (0-15) + */ uint8_t default_layer = 0; -uint16_t layer_switch_stat = 0; +void default_layer_set(uint8_t layer) +{ + debug("default_layer_set: "); + debug_dec(default_layer); debug(" to "); + + default_layer = layer; + + debug_dec(default_layer); debug("\n"); + + clear_keyboard_but_mods(); // To avoid stuck keys +} + + +/* + * Keymap Layer (0-15) + */ +uint16_t keymap_stat = 0; + +/* return highest layer whose state is on */ +uint8_t keymap_get_layer(void) +{ + return biton16(keymap_stat); +} + +static void keymap_stat_set(uint16_t stat) +{ + debug("keymap: "); + keymap_debug(); debug(" to "); + keymap_stat = stat; + + keymap_debug(); debug("\n"); + + clear_keyboard_but_mods(); // To avoid stuck keys +} + +void keymap_clear(void) +{ + keymap_stat_set(0); +} + + +void keymap_set(uint16_t stat) +{ + keymap_stat_set(stat); +} + +void keymap_move(uint8_t layer) +{ + keymap_stat_set(1<= 0; i--) { - if (layer_switch_stat & (1<= 0; i--) { + if (keymap_stat & (1<