diff options
author | Joshua T <[email protected]> | 2017-01-07 14:01:21 -0600 |
---|---|---|
committer | Joshua T <[email protected]> | 2017-01-07 14:01:21 -0600 |
commit | 8f8d10475956a17953f6db4db3f3b50bd795c0d8 (patch) | |
tree | 90c80474baa080e5743ee745ec98254e1a2faadd /quantum/keymap_common.c | |
parent | b7b44dc481430438552d91b7069d5e37a5e3a649 (diff) | |
parent | e7df488a92da56cf160ac64c8cc7302ab717e145 (diff) | |
download | qmk_firmware-8f8d10475956a17953f6db4db3f3b50bd795c0d8.tar.gz qmk_firmware-8f8d10475956a17953f6db4db3f3b50bd795c0d8.zip |
Merged from upstream
Diffstat (limited to 'quantum/keymap_common.c')
-rw-r--r-- | quantum/keymap_common.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 833e5a8f8d..eced3d2bba 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -48,12 +48,10 @@ action_t action_for_key(uint8_t layer, keypos_t key) action_t action; uint8_t action_layer, when, mod; - // The arm-none-eabi compiler generates out of bounds warnings when using the fn_actions directly for some reason - const uint16_t* actions = fn_actions; switch (keycode) { case KC_FN0 ... KC_FN31: - action.code = pgm_read_word(&actions[FN_INDEX(keycode)]); + action.code = keymap_function_id_to_action(FN_INDEX(keycode)); break; case KC_A ... KC_EXSEL: case KC_LCTRL ... KC_RGUI: @@ -79,7 +77,7 @@ action_t action_for_key(uint8_t layer, keypos_t key) case QK_FUNCTION ... QK_FUNCTION_MAX: ; // Is a shortcut for function action_layer, pull last 12bits // This means we have 4,096 FN macros at our disposal - action.code = pgm_read_word(&actions[(int)keycode & 0xFFF]); + action.code = keymap_function_id_to_action( (int)keycode & 0xFFF ); break; case QK_MACRO ... QK_MACRO_MAX: action.code = ACTION_MACRO(keycode & 0xFF); @@ -163,9 +161,17 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } -/* translates key to keycode */ +// translates key to keycode +__attribute__ ((weak)) uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key) { // Read entire word (16bits) return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]); } + +// translates function id to action +__attribute__ ((weak)) +uint16_t keymap_function_id_to_action( uint16_t function_id ) +{ + return pgm_read_word(&fn_actions[function_id]); +} |