diff options
| -rw-r--r-- | common/keymap.c | 56 | ||||
| -rw-r--r-- | common/keymap.h | 11 | ||||
| -rw-r--r-- | keyboard/gh60/keymap.c | 60 | ||||
| -rw-r--r-- | keyboard/hhkb/keymap.c | 63 |
4 files changed, 102 insertions, 88 deletions
diff --git a/common/keymap.c b/common/keymap.c index 8302c2704..2782ea9d6 100644 --- a/common/keymap.c +++ b/common/keymap.c | |||
| @@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 17 | #include "keymap.h" | 17 | #include "keymap.h" |
| 18 | #include "report.h" | 18 | #include "report.h" |
| 19 | #include "keycode.h" | 19 | #include "keycode.h" |
| 20 | #include "action.h" | ||
| 20 | 21 | ||
| 21 | 22 | ||
| 22 | /* layer */ | 23 | /* layer */ |
| @@ -24,47 +25,62 @@ uint8_t default_layer = 0; | |||
| 24 | uint8_t current_layer = 0; | 25 | uint8_t current_layer = 0; |
| 25 | 26 | ||
| 26 | 27 | ||
| 27 | #ifndef NO_LEGACY_KEYMAP_SUPPORT | 28 | action_t keymap_keycode_to_action(uint8_t keycode) |
| 28 | /* legacy support with weak reference */ | ||
| 29 | __attribute__ ((weak)) | ||
| 30 | action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col) | ||
| 31 | { | 29 | { |
| 32 | /* convert from legacy keycode to action */ | ||
| 33 | uint8_t key = keymap_get_keycode(layer, row, col); | ||
| 34 | action_t action; | 30 | action_t action; |
| 35 | switch (key) { | 31 | switch (keycode) { |
| 36 | case KC_A ... KC_EXSEL: | 32 | case KC_A ... KC_EXSEL: |
| 37 | action.code = ACTION_KEY(key); | 33 | action.code = ACTION_KEY(keycode); |
| 38 | break; | 34 | break; |
| 39 | case KC_LCTRL ... KC_LGUI: | 35 | case KC_LCTRL ... KC_LGUI: |
| 40 | action.code = ACTION_LMOD(key); | 36 | action.code = ACTION_LMOD(keycode); |
| 41 | break; | 37 | break; |
| 42 | case KC_RCTRL ... KC_RGUI: | 38 | case KC_RCTRL ... KC_RGUI: |
| 43 | action.code = ACTION_RMOD(key); | 39 | action.code = ACTION_RMOD(keycode); |
| 44 | break; | 40 | break; |
| 45 | case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE: | 41 | case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE: |
| 46 | action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(key)); | 42 | action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode)); |
| 47 | break; | 43 | break; |
| 48 | case KC_AUDIO_MUTE ... KC_WWW_FAVORITES: | 44 | case KC_AUDIO_MUTE ... KC_WWW_FAVORITES: |
| 49 | action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(key)); | 45 | action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode)); |
| 50 | break; | 46 | break; |
| 51 | case KC_MS_UP ... KC_MS_ACCEL2: | 47 | case KC_MS_UP ... KC_MS_ACCEL2: |
| 52 | action.code = ACTION_MOUSEKEY(key); | 48 | action.code = ACTION_MOUSEKEY(keycode); |
| 53 | break; | 49 | break; |
| 54 | case KC_FN0 ... KC_FN31: | 50 | case KC_TRNS: |
| 55 | { | 51 | action.code = ACTION_TRANSPARENT; |
| 56 | uint8_t layer = keymap_fn_layer(FN_INDEX(key)); | ||
| 57 | uint8_t code = keymap_fn_keycode(FN_INDEX(key)); | ||
| 58 | action.code = ACTION_LAYER_SET_TAP_KEY(layer, code); | ||
| 59 | } | ||
| 60 | break; | 52 | break; |
| 61 | case KC_NO ... KC_UNDEFINED: | ||
| 62 | default: | 53 | default: |
| 63 | action.code = ACTION_NO; | 54 | action.code = ACTION_NO; |
| 64 | break; | 55 | break; |
| 65 | } | 56 | } |
| 66 | return action; | 57 | return action; |
| 67 | } | 58 | } |
| 59 | |||
| 60 | #ifndef NO_LEGACY_KEYMAP_SUPPORT | ||
| 61 | /* legacy support with weak reference */ | ||
| 62 | __attribute__ ((weak)) | ||
| 63 | action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col) | ||
| 64 | { | ||
| 65 | /* convert from legacy keycode to action */ | ||
| 66 | uint8_t keycode = keymap_get_keycode(layer, row, col); | ||
| 67 | action_t action; | ||
| 68 | switch (keycode) { | ||
| 69 | case KC_FN0 ... KC_FN31: | ||
| 70 | { | ||
| 71 | uint8_t layer = keymap_fn_layer(FN_INDEX(keycode)); | ||
| 72 | uint8_t key = keymap_fn_keycode(FN_INDEX(keycode)); | ||
| 73 | if (key) { | ||
| 74 | action.code = ACTION_LAYER_SET_TAP_KEY(layer, key); | ||
| 75 | } else { | ||
| 76 | action.code = ACTION_LAYER_SET_MOMENTARY(layer); | ||
| 77 | } | ||
| 78 | } | ||
| 79 | return action; | ||
| 80 | default: | ||
| 81 | return keymap_keycode_to_action(keycode); | ||
| 82 | } | ||
| 83 | } | ||
| 68 | #endif | 84 | #endif |
| 69 | 85 | ||
| 70 | __attribute__ ((weak)) | 86 | __attribute__ ((weak)) |
diff --git a/common/keymap.h b/common/keymap.h index 30d73f797..ee36eab83 100644 --- a/common/keymap.h +++ b/common/keymap.h | |||
| @@ -30,14 +30,23 @@ extern uint8_t current_layer; | |||
| 30 | extern uint8_t default_layer; | 30 | extern uint8_t default_layer; |
| 31 | 31 | ||
| 32 | 32 | ||
| 33 | /* translates key_t to keycode */ | ||
| 34 | uint8_t keymap_key_to_keycode(uint8_t layer, key_t key); | ||
| 35 | /* translates keycode to action */ | ||
| 36 | action_t keymap_keycode_to_action(uint8_t keycode); | ||
| 37 | /* translates Fn keycode to action */ | ||
| 38 | action_t keymap_fn_to_action(uint8_t keycode); | ||
| 39 | |||
| 40 | |||
| 33 | /* action for key */ | 41 | /* action for key */ |
| 34 | // TODO: should use struct key_t? | 42 | // TODO: should use struct key_t? move to action.h? |
| 35 | action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col); | 43 | action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col); |
| 36 | 44 | ||
| 37 | /* user defined special function */ | 45 | /* user defined special function */ |
| 38 | void keymap_call_function(keyrecord_t *record, uint8_t id, uint8_t opt); | 46 | void keymap_call_function(keyrecord_t *record, uint8_t id, uint8_t opt); |
| 39 | 47 | ||
| 40 | 48 | ||
| 49 | |||
| 41 | #ifndef NO_LEGACY_KEYMAP_SUPPORT | 50 | #ifndef NO_LEGACY_KEYMAP_SUPPORT |
| 42 | /* keycode of key */ | 51 | /* keycode of key */ |
| 43 | uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col); | 52 | uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col); |
diff --git a/keyboard/gh60/keymap.c b/keyboard/gh60/keymap.c index 39bb474c4..d2da50529 100644 --- a/keyboard/gh60/keymap.c +++ b/keyboard/gh60/keymap.c | |||
| @@ -162,43 +162,35 @@ static const uint16_t PROGMEM fn_actions[] = { | |||
| 162 | 162 | ||
| 163 | 163 | ||
| 164 | 164 | ||
| 165 | /* convert keycode to action */ | 165 | /* translates key to keycode */ |
| 166 | action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col) { | 166 | uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) |
| 167 | uint8_t key = (pgm_read_byte(&keymaps[(layer)][(row)][(col)])); | 167 | { |
| 168 | return pgm_read_byte(&keymaps[(layer)][(key.pos.row)][(key.pos.col)]); | ||
| 169 | } | ||
| 168 | 170 | ||
| 171 | /* translates Fn index to action */ | ||
| 172 | action_t keymap_fn_to_action(uint8_t keycode) | ||
| 173 | { | ||
| 169 | action_t action; | 174 | action_t action; |
| 170 | switch (key) { | 175 | if (FN_INDEX(keycode) < sizeof(fn_actions) / sizeof(fn_actions[0])) { |
| 171 | case KC_A ... KC_EXSEL: | 176 | action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]); |
| 172 | action.code = ACTION_KEY(key); | 177 | } else { |
| 173 | break; | 178 | action.code = ACTION_NO; |
| 174 | case KC_LCTRL ... KC_LGUI: | 179 | } |
| 175 | action.code = ACTION_LMOD(key); | 180 | return action; |
| 176 | break; | 181 | } |
| 177 | case KC_RCTRL ... KC_RGUI: | 182 | |
| 178 | action.code = ACTION_RMOD(key); | 183 | /* convert key to action */ |
| 179 | break; | 184 | action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col) |
| 180 | case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE: | 185 | { |
| 181 | action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(key)); | 186 | key_t key; |
| 182 | break; | 187 | key.pos.row = row; |
| 183 | case KC_AUDIO_MUTE ... KC_WWW_FAVORITES: | 188 | key.pos.col = col; |
| 184 | action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(key)); | 189 | uint8_t keycode = keymap_key_to_keycode(layer, key); |
| 185 | break; | 190 | switch (keycode) { |
| 186 | case KC_MS_UP ... KC_MS_ACCEL2: | ||
| 187 | action.code = ACTION_MOUSEKEY(key); | ||
| 188 | break; | ||
| 189 | case KC_FN0 ... KC_FN31: | 191 | case KC_FN0 ... KC_FN31: |
| 190 | if (FN_INDEX(key) < sizeof(fn_actions) / sizeof(fn_actions[0])) { | 192 | return keymap_fn_to_action(keycode); |
| 191 | action.code = pgm_read_word(&fn_actions[FN_INDEX(key)]); | ||
| 192 | } else { | ||
| 193 | action.code = ACTION_NO; | ||
| 194 | } | ||
| 195 | break; | ||
| 196 | case KC_TRNS: | ||
| 197 | action.code = ACTION_TRANSPARENT; | ||
| 198 | break; | ||
| 199 | default: | 193 | default: |
| 200 | action.code = ACTION_NO; | 194 | return keymap_keycode_to_action(keycode); |
| 201 | break; | ||
| 202 | } | 195 | } |
| 203 | return action; | ||
| 204 | } | 196 | } |
diff --git a/keyboard/hhkb/keymap.c b/keyboard/hhkb/keymap.c index 65ef89ad7..a5b6d3ace 100644 --- a/keyboard/hhkb/keymap.c +++ b/keyboard/hhkb/keymap.c | |||
| @@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 24 | #include "keycode.h" | 24 | #include "keycode.h" |
| 25 | #include "action.h" | 25 | #include "action.h" |
| 26 | #include "action_macro.h" | 26 | #include "action_macro.h" |
| 27 | #include "report.h" | ||
| 27 | #include "host.h" | 28 | #include "host.h" |
| 28 | #include "debug.h" | 29 | #include "debug.h" |
| 29 | #include "keymap.h" | 30 | #include "keymap.h" |
| @@ -48,7 +49,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 48 | } | 49 | } |
| 49 | 50 | ||
| 50 | 51 | ||
| 51 | // TODO: use [1] = KEYMAP(...) to prevent from changing index of element? | ||
| 52 | static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 52 | static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
| 53 | /* Layer 0: Default Layer | 53 | /* Layer 0: Default Layer |
| 54 | * ,-----------------------------------------------------------. | 54 | * ,-----------------------------------------------------------. |
| @@ -309,40 +309,37 @@ void keymap_call_function(keyrecord_t *record, uint8_t id, uint8_t opt) | |||
| 309 | } | 309 | } |
| 310 | } | 310 | } |
| 311 | 311 | ||
| 312 | /* convert keycode to action */ | 312 | |
| 313 | action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col) { | 313 | |
| 314 | uint8_t key = (pgm_read_byte(&keymaps[(layer)][(row)][(col)])); | 314 | /* translates key to keycode */ |
| 315 | uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) | ||
| 316 | { | ||
| 317 | return pgm_read_byte(&keymaps[(layer)][(key.pos.row)][(key.pos.col)]); | ||
| 318 | } | ||
| 319 | |||
| 320 | /* translates Fn index to action */ | ||
| 321 | action_t keymap_fn_to_action(uint8_t keycode) | ||
| 322 | { | ||
| 315 | action_t action; | 323 | action_t action; |
| 316 | switch (key) { | 324 | if (FN_INDEX(keycode) < sizeof(fn_actions) / sizeof(fn_actions[0])) { |
| 317 | case KC_A ... KC_EXSEL: | 325 | action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]); |
| 318 | action.code = ACTION_KEY(key); | 326 | } else { |
| 319 | break; | 327 | action.code = ACTION_NO; |
| 320 | case KC_LCTRL ... KC_LGUI: | 328 | } |
| 321 | action.code = ACTION_LMOD(key); | 329 | return action; |
| 322 | break; | 330 | } |
| 323 | case KC_RCTRL ... KC_RGUI: | 331 | |
| 324 | action.code = ACTION_RMOD(key); | 332 | /* convert key to action */ |
| 325 | break; | 333 | action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col) |
| 326 | case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE: | 334 | { |
| 327 | action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(key)); | 335 | key_t key; |
| 328 | break; | 336 | key.pos.row = row; |
| 329 | case KC_AUDIO_MUTE ... KC_WWW_FAVORITES: | 337 | key.pos.col = col; |
| 330 | action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(key)); | 338 | uint8_t keycode = keymap_key_to_keycode(layer, key); |
| 331 | break; | 339 | switch (keycode) { |
| 332 | case KC_MS_UP ... KC_MS_ACCEL2: | ||
| 333 | action.code = ACTION_MOUSEKEY(key); | ||
| 334 | break; | ||
| 335 | case KC_FN0 ... KC_FN31: | 340 | case KC_FN0 ... KC_FN31: |
| 336 | if (FN_INDEX(key) < sizeof(fn_actions) / sizeof(fn_actions[0])) { | 341 | return keymap_fn_to_action(keycode); |
| 337 | action.code = pgm_read_word(&fn_actions[FN_INDEX(key)]); | ||
| 338 | } else { | ||
| 339 | action.code = ACTION_NO; | ||
| 340 | } | ||
| 341 | break; | ||
| 342 | case KC_NO ... KC_UNDEFINED: | ||
| 343 | default: | 342 | default: |
| 344 | action.code = ACTION_NO; | 343 | return keymap_keycode_to_action(keycode); |
| 345 | break; | ||
| 346 | } | 344 | } |
| 347 | return action; | ||
| 348 | } | 345 | } |
