diff options
author | Wojciech Siewierski <wojciech.siewierski@onet.pl> | 2016-03-27 23:50:07 +0200 |
---|---|---|
committer | Wojciech Siewierski <wojciech.siewierski@onet.pl> | 2016-03-27 23:51:46 +0200 |
commit | b4f442dfeaf4d434ae0d8459dc5199cd8fefc1c7 (patch) | |
tree | 905233e4f29dddde1348b8d9a30ef46ee0b0e775 | |
parent | a5cdc3aab1c430916eae66d4d9d751808613e700 (diff) |
Cut the memory consumption of PREVENT_STUCK_MODIFIERS in half
-rw-r--r-- | tmk_core/common/action.c | 6 | ||||
-rw-r--r-- | tmk_core/common/action.h | 2 | ||||
-rw-r--r-- | tmk_core/common/action_layer.c | 16 | ||||
-rw-r--r-- | tmk_core/common/action_layer.h | 3 |
4 files changed, 16 insertions, 11 deletions
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index fc09383ee0..acc6d11eab 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -55,7 +55,7 @@ void action_exec(keyevent_t event) #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) bool disable_action_cache = false; -action_t pressed_actions_cache[MATRIX_ROWS][MATRIX_COLS]; +int8_t pressed_actions_cache[MATRIX_ROWS][MATRIX_COLS]; void process_action_nocache(keyrecord_t *record) { @@ -84,9 +84,9 @@ action_t store_or_get_action(bool pressed, keypos_t key) } if (pressed) { - pressed_actions_cache[key.row][key.col] = layer_switch_get_action(key); + pressed_actions_cache[key.row][key.col] = layer_switch_get_layer(key); } - return pressed_actions_cache[key.row][key.col]; + return action_for_key(pressed_actions_cache[key.row][key.col], key); #else return layer_switch_get_action(key); #endif diff --git a/tmk_core/common/action.h b/tmk_core/common/action.h index 7a60f320e7..2b43d001e1 100644 --- a/tmk_core/common/action.h +++ b/tmk_core/common/action.h @@ -61,7 +61,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt); /* Utilities for actions. */ #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) extern bool disable_action_cache; -extern action_t pressed_actions_cache[MATRIX_ROWS][MATRIX_COLS]; +extern int8_t pressed_actions_cache[MATRIX_ROWS][MATRIX_COLS]; #endif void process_action_nocache(keyrecord_t *record); void process_action(keyrecord_t *record); diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c index c535615f44..76164adb5d 100644 --- a/tmk_core/common/action_layer.c +++ b/tmk_core/common/action_layer.c @@ -111,8 +111,7 @@ void layer_debug(void) #endif - -action_t layer_switch_get_action(keypos_t key) +int8_t layer_switch_get_layer(keypos_t key) { action_t action; action.code = ACTION_TRANSPARENT; @@ -124,15 +123,18 @@ action_t layer_switch_get_action(keypos_t key) if (layers & (1UL<<i)) { action = action_for_key(i, key); if (action.code != ACTION_TRANSPARENT) { - return action; + return i; } } } /* fall back to layer 0 */ - action = action_for_key(0, key); - return action; + return 0; #else - action = action_for_key(biton32(default_layer_state), key); - return action; + return biton32(default_layer_state); #endif } + +action_t layer_switch_get_action(keypos_t key) +{ + return action_for_key(layer_switch_get_layer(key), key); +} diff --git a/tmk_core/common/action_layer.h b/tmk_core/common/action_layer.h index b6da353cfd..1a313a2590 100644 --- a/tmk_core/common/action_layer.h +++ b/tmk_core/common/action_layer.h @@ -71,6 +71,9 @@ void layer_xor(uint32_t state); #endif +/* return the topmost non-transparent layer currently associated with key */ +int8_t layer_switch_get_layer(keypos_t key); + /* return action depending on current layer status */ action_t layer_switch_get_action(keypos_t key); |