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/keymap.c | 91 +++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 59 insertions(+), 32 deletions(-) (limited to 'common/keymap.c') diff --git a/common/keymap.c b/common/keymap.c index 078615814e..3f13d4497a 100644 --- a/common/keymap.c +++ b/common/keymap.c @@ -14,13 +14,71 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#include #include "keymap.h" #include "report.h" #include "keycode.h" +#include "layer_switch.h" #include "action.h" +#include "debug.h" -action_t keymap_keycode_to_action(uint8_t keycode) +static action_t keycode_to_action(uint8_t keycode); + +#ifdef USE_KEYMAP_V2 +/* converts key to action */ +action_t action_for_key(uint8_t layer, key_t key) +{ + uint8_t keycode = keymap_key_to_keycode(layer, key); + switch (keycode) { + case KC_FN0 ... KC_FN31: + return keymap_fn_to_action(keycode); + default: + return keycode_to_action(keycode); + } +} + +__attribute__ ((weak)) +void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) +{ +} +#else +/* + * legacy keymap support + */ +/* translation for legacy keymap */ +action_t action_for_key(uint8_t layer, key_t key) +{ + /* convert from legacy keycode to action */ + /* layer 16-31 indicate 'overlay' but not supported in legacy keymap */ + uint8_t keycode = keymap_get_keycode((layer & OVERLAY_MASK), key.row, key.col); + action_t action; + switch (keycode) { + case KC_FN0 ... KC_FN31: + { + uint8_t layer = keymap_fn_layer(FN_INDEX(keycode)); + uint8_t key = keymap_fn_keycode(FN_INDEX(keycode)); + if (key) { + action.code = ACTION_KEYMAP_TAP_KEY(layer, key); + } else { + action.code = ACTION_KEYMAP_MOMENTARY(layer); + } + } + return action; + default: + return keycode_to_action(keycode); + } +} +/* not used for legacy keymap */ +void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) +{ +} +#endif + + + +/* translates keycode to action */ +static action_t keycode_to_action(uint8_t keycode) { action_t action; switch (keycode) { @@ -51,34 +109,3 @@ action_t keymap_keycode_to_action(uint8_t keycode) } return action; } - -#ifndef NO_LEGACY_KEYMAP_SUPPORT -/* legacy support with weak reference */ -__attribute__ ((weak)) -action_t action_for_key(uint8_t layer, key_t key) -{ - /* convert from legacy keycode to action */ - uint8_t keycode = keymap_get_keycode(layer, key.row, key.col); - action_t action; - switch (keycode) { - case KC_FN0 ... KC_FN31: - { - uint8_t layer = keymap_fn_layer(FN_INDEX(keycode)); - uint8_t key = keymap_fn_keycode(FN_INDEX(keycode)); - if (key) { - action.code = ACTION_LAYER_SET_TAP_KEY(layer, key); - } else { - action.code = ACTION_LAYER_SET_MOMENTARY(layer); - } - } - return action; - default: - return keymap_keycode_to_action(keycode); - } -} -#endif - -__attribute__ ((weak)) -void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) -{ -} -- cgit v1.2.3 From c3d57b69e02fce40455c96f4a9ac6b68b89ce027 Mon Sep 17 00:00:00 2001 From: tmk Date: Wed, 20 Feb 2013 15:52:32 +0900 Subject: Add keymap clear/reset action --- common/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'common/keymap.c') diff --git a/common/keymap.c b/common/keymap.c index 3f13d4497a..ddc3210524 100644 --- a/common/keymap.c +++ b/common/keymap.c @@ -39,7 +39,7 @@ action_t action_for_key(uint8_t layer, key_t key) } __attribute__ ((weak)) -void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } #else @@ -70,7 +70,7 @@ action_t action_for_key(uint8_t layer, key_t key) } } /* not used for legacy keymap */ -void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } #endif -- cgit v1.2.3 From 23c32d304bcc5146a575e547bba80ee8d86a2856 Mon Sep 17 00:00:00 2001 From: tmk Date: Mon, 25 Feb 2013 15:30:37 +0900 Subject: Add MACRO action --- common/keymap.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'common/keymap.c') diff --git a/common/keymap.c b/common/keymap.c index ddc3210524..f72be57794 100644 --- a/common/keymap.c +++ b/common/keymap.c @@ -20,6 +20,7 @@ along with this program. If not, see . #include "keycode.h" #include "layer_switch.h" #include "action.h" +#include "action_macro.h" #include "debug.h" @@ -39,9 +40,10 @@ action_t action_for_key(uint8_t layer, key_t key) } __attribute__ ((weak)) -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) -{ -} +const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; } + +__attribute__ ((weak)) +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {} #else /* * legacy keymap support -- cgit v1.2.3 From 5808317b694004c43a6e0f76e9715415cce19a25 Mon Sep 17 00:00:00 2001 From: tmk Date: Tue, 5 Mar 2013 15:41:21 +0900 Subject: Fix keymap for new framework --- common/keymap.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'common/keymap.c') diff --git a/common/keymap.c b/common/keymap.c index f72be57794..aa8d944a79 100644 --- a/common/keymap.c +++ b/common/keymap.c @@ -38,12 +38,6 @@ action_t action_for_key(uint8_t layer, key_t key) return keycode_to_action(keycode); } } - -__attribute__ ((weak)) -const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; } - -__attribute__ ((weak)) -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {} #else /* * legacy keymap support @@ -71,13 +65,17 @@ action_t action_for_key(uint8_t layer, key_t key) return keycode_to_action(keycode); } } -/* not used for legacy keymap */ -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) -{ -} #endif +__attribute__ ((weak)) +const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; } + +__attribute__ ((weak)) +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {} + + + /* translates keycode to action */ static action_t keycode_to_action(uint8_t keycode) -- cgit v1.2.3