diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/action.c | 9 | ||||
| -rw-r--r-- | common/action.h | 87 | ||||
| -rw-r--r-- | common/keycode.h | 4 | ||||
| -rw-r--r-- | common/keymap.c | 73 | ||||
| -rw-r--r-- | common/keymap.h | 16 |
5 files changed, 151 insertions, 38 deletions
diff --git a/common/action.c b/common/action.c index 4838ea062..d1f493fe0 100644 --- a/common/action.c +++ b/common/action.c | |||
| @@ -358,6 +358,10 @@ static void process_action(keyrecord_t *record) | |||
| 358 | if (event.pressed) { | 358 | if (event.pressed) { |
| 359 | layer_switch(action.layer.opt); | 359 | layer_switch(action.layer.opt); |
| 360 | } | 360 | } |
| 361 | //TODO: this is ok? | ||
| 362 | else { | ||
| 363 | layer_switch(default_layer); | ||
| 364 | } | ||
| 361 | break; | 365 | break; |
| 362 | case 0xF0: | 366 | case 0xF0: |
| 363 | // tap toggle | 367 | // tap toggle |
| @@ -394,7 +398,10 @@ static void process_action(keyrecord_t *record) | |||
| 394 | debug("LAYER_PRESSED: Tap: unregister_code\n"); | 398 | debug("LAYER_PRESSED: Tap: unregister_code\n"); |
| 395 | unregister_code(action.layer.code); | 399 | unregister_code(action.layer.code); |
| 396 | } else { | 400 | } else { |
| 397 | debug("LAYER_PRESSED: No tap: NO ACTION\n"); | 401 | //debug("LAYER_PRESSED: No tap: NO ACTION\n"); |
| 402 | //TODO: this is ok? | ||
| 403 | debug("LAYER_PRESSED: No tap: return to default layer\n"); | ||
| 404 | layer_switch(default_layer); | ||
| 398 | } | 405 | } |
| 399 | } | 406 | } |
| 400 | break; | 407 | break; |
diff --git a/common/action.h b/common/action.h index 8600e4061..d6530df42 100644 --- a/common/action.h +++ b/common/action.h | |||
| @@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 18 | #define ACTION_H | 18 | #define ACTION_H |
| 19 | 19 | ||
| 20 | #include "keyboard.h" | 20 | #include "keyboard.h" |
| 21 | #include "keycode.h" | ||
| 21 | 22 | ||
| 22 | 23 | ||
| 23 | /* Action struct. | 24 | /* Action struct. |
| @@ -107,28 +108,28 @@ Keyboard Keys | |||
| 107 | ACT_LMODS(0000): | 108 | ACT_LMODS(0000): |
| 108 | 0000|0000|000000|00 No action | 109 | 0000|0000|000000|00 No action |
| 109 | 0000|0000| keycode Key | 110 | 0000|0000| keycode Key |
| 110 | 0010|mods|000000|00 Left mods Momentary | 111 | 0000|mods|000000|00 Left mods |
| 111 | 0000|mods| keycode Key+Left mods | 112 | 0000|mods| keycode Key & Left mods |
| 112 | 113 | ||
| 113 | ACT_RMODS(0001): | 114 | ACT_RMODS(0001): |
| 114 | 0001|0000|000000|00 No action | 115 | 0001|0000|000000|00 No action |
| 115 | 0001|0000| keycode Key(no used) | 116 | 0001|0000| keycode Key(no used) |
| 116 | 0001|mods|000000|00 Right mods Momentary | 117 | 0001|mods|000000|00 Right mods |
| 117 | 0001|mods| keycode Key+Right mods | 118 | 0001|mods| keycode Key & Right mods |
| 118 | 119 | ||
| 119 | ACT_LMODS_TAP(0010): | 120 | ACT_LMODS_TAP(0010): |
| 120 | 0010|mods|000000|00 Left mods OneShot | 121 | 0010|mods|000000|00 Left mods OneShot |
| 121 | 0010|mods|000000|01 (reserved) | 122 | 0010|mods|000000|01 (reserved) |
| 122 | 0010|mods|000000|10 (reserved) | 123 | 0010|mods|000000|10 (reserved) |
| 123 | 0010|mods|000000|11 (reserved) | 124 | 0010|mods|000000|11 (reserved) |
| 124 | 0010|mods| keycode Left mods+tap Key | 125 | 0010|mods| keycode Left mods + tap Key |
| 125 | 126 | ||
| 126 | ACT_RMODS_TAP(0011): | 127 | ACT_RMODS_TAP(0011): |
| 127 | 0011|mods|000000|00 Right mods OneShot | 128 | 0011|mods|000000|00 Right mods OneShot |
| 128 | 0011|mods|000000|01 (reserved) | 129 | 0011|mods|000000|01 (reserved) |
| 129 | 0011|mods|000000|10 (reserved) | 130 | 0011|mods|000000|10 (reserved) |
| 130 | 0011|mods|000000|11 (reserved) | 131 | 0011|mods|000000|11 (reserved) |
| 131 | 0011|mods| keycode Right mods+tap Key | 132 | 0011|mods| keycode Right mods + tap Key |
| 132 | 133 | ||
| 133 | 134 | ||
| 134 | Other HID Usage | 135 | Other HID Usage |
| @@ -143,12 +144,20 @@ ACT_USAGE(0100): | |||
| 143 | 144 | ||
| 144 | Mouse Keys | 145 | Mouse Keys |
| 145 | ---------- | 146 | ---------- |
| 147 | TODO: can be combined with 'Other HID Usage'? to save action kind id. | ||
| 146 | ACT_MOUSEKEY(0110): | 148 | ACT_MOUSEKEY(0110): |
| 147 | 0101|XXXX| keycode Mouse key | 149 | 0101|XXXX| keycode Mouse key |
| 148 | 150 | ||
| 149 | 151 | ||
| 150 | Layer Actions | 152 | Layer Actions |
| 151 | ------------- | 153 | ------------- |
| 154 | TODO: reconsider layer methods. | ||
| 155 | 1 momemtary + tap key up: L, down: default | ||
| 156 | 1 bitwise + tap key up: xor B, down: xor B | ||
| 157 | 3 momemtary go + tap key? up: X, down: | ||
| 158 | 3 toggle(mementary back) + tap key? up: down: Y | ||
| 159 | 3 no tap up: X, down: Y | ||
| 160 | |||
| 152 | ACT_LAYER_PRESSED(1000): Set layer on key pressed | 161 | ACT_LAYER_PRESSED(1000): Set layer on key pressed |
| 153 | ACT_LAYER_RELEASED(1001): Set layer on key released | 162 | ACT_LAYER_RELEASED(1001): Set layer on key released |
| 154 | ACT_LAYER_BIT(1010): On/Off layer bit | 163 | ACT_LAYER_BIT(1010): On/Off layer bit |
| @@ -222,57 +231,77 @@ enum acion_param { | |||
| 222 | }; | 231 | }; |
| 223 | 232 | ||
| 224 | 233 | ||
| 225 | /* action_t utility */ | 234 | /* action utility */ |
| 226 | #define ACTION_NO 0 | 235 | #define ACTION_NO 0 |
| 227 | #define ACTION(kind, param) ((kind)<<12 | (param)) | 236 | #define ACTION(kind, param) ((kind)<<12 | (param)) |
| 237 | #define MODS4(mods) (((mods)>>4 | (mods)) & 0x0F) | ||
| 228 | 238 | ||
| 229 | /* Key & Mods */ | 239 | /* Key */ |
| 230 | #define ACTION_KEY(key) ACTION(ACT_LMODS, key) | 240 | #define ACTION_KEY(key) ACTION(ACT_LMODS, key) |
| 241 | /* Mods & key */ | ||
| 231 | #define ACTION_LMODS(mods) ACTION(ACT_LMODS, (mods)<<8 | 0x00) | 242 | #define ACTION_LMODS(mods) ACTION(ACT_LMODS, (mods)<<8 | 0x00) |
| 232 | #define ACTION_LMODS_KEY(mods, key) ACTION(ACT_LMODS, (mods)<<8 | (key)) | 243 | #define ACTION_LMODS_KEY(mods, key) ACTION(ACT_LMODS, (mods)<<8 | (key)) |
| 233 | #define ACTION_RMODS(mods) ACTION(ACT_RMODS, (mods)<<8 | 0x00) | 244 | #define ACTION_RMODS(mods) ACTION(ACT_RMODS, (mods)<<8 | 0x00) |
| 234 | #define ACTION_RMODS_KEY(mods, key) ACTION(ACT_RMODS, (mods)<<8 | (key)) | 245 | #define ACTION_RMODS_KEY(mods, key) ACTION(ACT_RMODS, (mods)<<8 | (key)) |
| 246 | /* Mod & key */ | ||
| 247 | #define ACTION_LMOD(mod) ACTION(ACT_LMODS, MODS4(MOD_BIT(mod))<<8 | 0x00) | ||
| 248 | #define ACTION_LMOD_KEY(mod, key) ACTION(ACT_LMODS, MODS4(MOD_BIT(mod))<<8 | (key)) | ||
| 249 | #define ACTION_RMOD(mod) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | 0x00) | ||
| 250 | #define ACTION_RMOD_KEY(mod, key) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | (key)) | ||
| 235 | 251 | ||
| 236 | /* Mods + Tap key */ | 252 | /* Mods + Tap key */ |
| 237 | #define MODS4(mods) (((mods)>>4 | (mods)) & 0x0F) | 253 | #define ACTION_LMODS_TAP_KEY(mods, key) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | (key)) |
| 238 | #define ACTION_LMODS_TAP(mods, key) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | (key)) | ||
| 239 | #define ACTION_LMODS_ONESHOT(mods) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | ONE_SHOT) | 254 | #define ACTION_LMODS_ONESHOT(mods) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | ONE_SHOT) |
| 240 | #define ACTION_RMODS_TAP(mods, key) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | (key)) | 255 | #define ACTION_RMODS_TAP_KEY(mods, key) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | (key)) |
| 241 | #define ACTION_RMODS_ONESHOT(mods) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | ONE_SHOT) | 256 | #define ACTION_RMODS_ONESHOT(mods) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | ONE_SHOT) |
| 257 | /* Mod + Tap key */ | ||
| 258 | #define ACTION_LMOD_TAP_KEY(mod, key) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) | ||
| 259 | #define ACTION_LMOD_ONESHOT(mod) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | ONE_SHOT) | ||
| 260 | #define ACTION_RMOD_TAP_KEY(mod, key) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) | ||
| 261 | #define ACTION_RMOD_ONESHOT(mod) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | ONE_SHOT) | ||
| 242 | 262 | ||
| 263 | // TODO: contemplate about layer action | ||
| 243 | /* Switch current layer */ | 264 | /* Switch current layer */ |
| 244 | #define ACTION_LAYER_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0x00) | 265 | #define ACTION_LAYER_SET(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0x00) |
| 245 | #define ACTION_LAYER_SET_ON_RELEASED(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0x00) | 266 | #define ACTION_LAYER_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0x00) |
| 246 | #define ACTION_LAYER_BIT(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | 0x00) | 267 | #define ACTION_LAYER_SET_ON_RELEASED(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0x00) |
| 247 | #define ACTION_LAYER_TO_DEFAULT_ON_PRESSED ACTION(ACT_LAYER_EXT, 0x0<<8 | 0x00) | 268 | #define ACTION_LAYER_BIT(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | 0x00) |
| 248 | #define ACTION_LAYER_TO_DEFAULT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0x00) | 269 | #define ACTION_LAYER_SET_DEFAULT ACTION(ACT_LAYER_EXT, 0x0<<8 | 0x00) |
| 270 | #define ACTION_LAYER_RETURN_DEFAULT ACTION(ACT_LAYER_EXT, 0x1<<8 | 0x00) | ||
| 271 | #define ACTION_LAYER_SET_DEFAULT_ON_PRESSED ACTION(ACT_LAYER_EXT, 0x0<<8 | 0x00) | ||
| 272 | #define ACTION_LAYER_SET_DEFAULT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0x00) | ||
| 249 | /* Switch default layer */ | 273 | /* Switch default layer */ |
| 250 | #define ACTION_LAYER_DEFAULT_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xFF) | 274 | #define ACTION_LAYER_DEFAULT_SET(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xFF) |
| 251 | #define ACTION_LAYER_DEFAULT_SET_ON_RELEASED(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0xFF) | 275 | #define ACTION_LAYER_DEFAULT_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xFF) |
| 252 | #define ACTION_LAYER_DEFAULT_BIT(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | 0xFF) | 276 | #define ACTION_LAYER_DEFAULT_SET_ON_RELEASED(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0xFF) |
| 253 | #define ACTION_LAYER_DEFAULT_SET_CURRENT_ON_PRESSED ACTION(ACT_LAYER_EXT, 0x0<<8 | 0xFF) | 277 | #define ACTION_LAYER_DEFAULT_BIT(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | 0xFF) |
| 254 | #define ACTION_LAYER_DEFAULT_SET_CURRENT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0xFF) | 278 | #define ACTION_LAYER_DEFAULT_SET_CURRENT_ON_PRESSED ACTION(ACT_LAYER_EXT, 0x0<<8 | 0xFF) |
| 279 | #define ACTION_LAYER_DEFAULT_SET_CURRENT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0xFF) | ||
| 255 | /* Layer switch with tap key */ | 280 | /* Layer switch with tap key */ |
| 256 | #define ACTION_LAYER_SET_TAP_KEY(layer, key) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | (key)) | 281 | #define ACTION_LAYER_SET_TAP_KEY(layer, key) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | (key)) |
| 257 | #define ACTION_LAYER_BIT_TAP_KEY(bits, key) ACTION(ACT_LAYER_BIT, (bits)<<8 | (key)) | 282 | #define ACTION_LAYER_BIT_TAP_KEY(bits, key) ACTION(ACT_LAYER_BIT, (bits)<<8 | (key)) |
| 258 | #define ACTION_LAYER_DEFAULT_SET_TAP_KEY(key) ACTION(ACT_LAYER_EXT, 0x0<<8 | (key)) | 283 | #define ACTION_LAYER_DEFAULT_SET_TAP_KEY(key) ACTION(ACT_LAYER_EXT, 0x0<<8 | (key)) |
| 259 | /* with tap toggle */ | 284 | /* Layer switch with tap toggle */ |
| 260 | #define ACTION_LAYER_SET_ON_PRESSED_TAP_TOGGLE(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xF0) | 285 | #define ACTION_LAYER_SET_ON_PRESSED_TAP_TOGGLE(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xF0) |
| 261 | #define ACTION_LAYER_SET_ON_RELEASED_TAP_TOGGLE(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0xF0) | 286 | #define ACTION_LAYER_SET_ON_RELEASED_TAP_TOGGLE(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0xF0) |
| 262 | #define ACTION_LAYER_BIT_TAP_TOGGLE(layer) ACTION(ACT_LAYER_BIT, (layer)<<8 | 0xF0) | 287 | #define ACTION_LAYER_BIT_TAP_TOGGLE(layer) ACTION(ACT_LAYER_BIT, (layer)<<8 | 0xF0) |
| 263 | #define ACTION_LAYER_DEFAULT_TAP_TOGGLE ACTION(ACT_LAYER_EXT, 0x0<<8 | 0xF0) | 288 | #define ACTION_LAYER_DEFAULT_TAP_TOGGLE ACTION(ACT_LAYER_EXT, 0x0<<8 | 0xF0) |
| 264 | 289 | ||
| 265 | /* HID Usage */ | 290 | /* HID Usage */ |
| 266 | #define ACTION_USAGE_PAGE_SYSTEM 0 | 291 | #define ACTION_USAGE_PAGE_SYSTEM 0 |
| 267 | #define ACTION_USAGE_PAGE_CONSUMER 1 | 292 | #define ACTION_USAGE_PAGE_CONSUMER 1 |
| 268 | #define ACTION_USAGE_SYSTEM(id) ACTION(ACT_USAGE, ACTION_USAGE_PAGE_SYSTEM<<10 | (id)) | 293 | #define ACTION_USAGE_SYSTEM(id) ACTION(ACT_USAGE, ACTION_USAGE_PAGE_SYSTEM<<10 | (id)) |
| 269 | #define ACTION_USAGE_CONSUMER(id) ACTION(ACT_USAGE, ACTION_USAGE_PAGE_CONSUMER<<10 | (id)) | 294 | #define ACTION_USAGE_CONSUMER(id) ACTION(ACT_USAGE, ACTION_USAGE_PAGE_CONSUMER<<10 | (id)) |
| 295 | |||
| 270 | /* Mousekey */ | 296 | /* Mousekey */ |
| 271 | #define ACTION_MOUSEKEY(key) ACTION(ACT_MOUSEKEY, key) | 297 | #define ACTION_MOUSEKEY(key) ACTION(ACT_MOUSEKEY, key) |
| 298 | |||
| 272 | /* Macro */ | 299 | /* Macro */ |
| 273 | #define ACTION_MACRO(opt, id) ACTION(ACT_FUNCTION, (opt)<<8 | (addr)) | 300 | #define ACTION_MACRO(opt, id) ACTION(ACT_FUNCTION, (opt)<<8 | (addr)) |
| 301 | |||
| 274 | /* Command */ | 302 | /* Command */ |
| 275 | #define ACTION_COMMAND(opt, id) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) | 303 | #define ACTION_COMMAND(opt, id) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) |
| 304 | |||
| 276 | /* Function */ | 305 | /* Function */ |
| 277 | #define ACTION_FUNCTION(id, opt) ACTION(ACT_FUNCTION, (opt)<<8 | id) | 306 | #define ACTION_FUNCTION(id, opt) ACTION(ACT_FUNCTION, (opt)<<8 | id) |
| 278 | 307 | ||
diff --git a/common/keycode.h b/common/keycode.h index cdd1e9758..341f23161 100644 --- a/common/keycode.h +++ b/common/keycode.h | |||
| @@ -28,14 +28,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 28 | #define IS_KEY(code) (KC_A <= (code) && (code) <= KC_EXSEL) | 28 | #define IS_KEY(code) (KC_A <= (code) && (code) <= KC_EXSEL) |
| 29 | #define IS_MOD(code) (KC_LCTRL <= (code) && (code) <= KC_RGUI) | 29 | #define IS_MOD(code) (KC_LCTRL <= (code) && (code) <= KC_RGUI) |
| 30 | 30 | ||
| 31 | #define IS_FN(code) (KC_FN0 <= (code) && (code) <= KC_FN7) | 31 | #define IS_FN(code) (KC_FN0 <= (code) && (code) <= KC_FN31) |
| 32 | #define IS_MOUSEKEY(code) (KC_MS_UP <= (code) && (code) <= KC_MS_ACCEL2) | 32 | #define IS_MOUSEKEY(code) (KC_MS_UP <= (code) && (code) <= KC_MS_ACCEL2) |
| 33 | #define IS_MOUSEKEY_MOVE(code) (KC_MS_UP <= (code) && (code) <= KC_MS_RIGHT) | 33 | #define IS_MOUSEKEY_MOVE(code) (KC_MS_UP <= (code) && (code) <= KC_MS_RIGHT) |
| 34 | #define IS_MOUSEKEY_BUTTON(code) (KC_MS_BTN1 <= (code) && (code) <= KC_MS_BTN5) | 34 | #define IS_MOUSEKEY_BUTTON(code) (KC_MS_BTN1 <= (code) && (code) <= KC_MS_BTN5) |
| 35 | #define IS_MOUSEKEY_WHEEL(code) (KC_MS_WH_UP <= (code) && (code) <= KC_MS_WH_RIGHT) | 35 | #define IS_MOUSEKEY_WHEEL(code) (KC_MS_WH_UP <= (code) && (code) <= KC_MS_WH_RIGHT) |
| 36 | #define IS_MOUSEKEY_ACCEL(code) (KC_MS_ACCEL0 <= (code) && (code) <= KC_MS_ACCEL2) | 36 | #define IS_MOUSEKEY_ACCEL(code) (KC_MS_ACCEL0 <= (code) && (code) <= KC_MS_ACCEL2) |
| 37 | 37 | ||
| 38 | #define IS_SPECIAL(code) ((0xB0 <= (code) && (code) <= 0xDF) || (0xE8 <= (code) && (code) <= 0xFF)) | 38 | #define IS_SPECIAL(code) ((0xA5 <= (code) && (code) <= 0xDF) || (0xE8 <= (code) && (code) <= 0xFF)) |
| 39 | #define IS_CONSUMER(code) (KC_MUTE <= (code) && (code) <= KC_WFAV) | 39 | #define IS_CONSUMER(code) (KC_MUTE <= (code) && (code) <= KC_WFAV) |
| 40 | #define IS_SYSTEM(code) (KC_POWER <= (code) && (code) <= KC_WAKE) | 40 | #define IS_SYSTEM(code) (KC_POWER <= (code) && (code) <= KC_WAKE) |
| 41 | 41 | ||
diff --git a/common/keymap.c b/common/keymap.c new file mode 100644 index 000000000..415121308 --- /dev/null +++ b/common/keymap.c | |||
| @@ -0,0 +1,73 @@ | |||
| 1 | /* | ||
| 2 | Copyright 2013 Jun Wako <wakojun@gmail.com> | ||
| 3 | |||
| 4 | This program is free software: you can redistribute it and/or modify | ||
| 5 | it under the terms of the GNU General Public License as published by | ||
| 6 | the Free Software Foundation, either version 2 of the License, or | ||
| 7 | (at your option) any later version. | ||
| 8 | |||
| 9 | This program is distributed in the hope that it will be useful, | ||
| 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | GNU General Public License for more details. | ||
| 13 | |||
| 14 | You should have received a copy of the GNU General Public License | ||
| 15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 16 | */ | ||
| 17 | #include "keymap.h" | ||
| 18 | #include "report.h" | ||
| 19 | #include "keycode.h" | ||
| 20 | |||
| 21 | |||
| 22 | /* layer */ | ||
| 23 | uint8_t default_layer = 0; | ||
| 24 | uint8_t current_layer = 0; | ||
| 25 | |||
| 26 | |||
| 27 | #ifndef NO_LEGACY_KEYMAP_SUPPORT | ||
| 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 | { | ||
| 32 | /* convert from legacy keycode to action */ | ||
| 33 | uint8_t key = keymap_get_keycode(layer, row, col); | ||
| 34 | action_t action; | ||
| 35 | switch (key) { | ||
| 36 | case KC_A ... KC_EXSEL: | ||
| 37 | action.code = ACTION_KEY(key); | ||
| 38 | break; | ||
| 39 | case KC_LCTRL ... KC_LGUI: | ||
| 40 | action.code = ACTION_LMOD(key); | ||
| 41 | break; | ||
| 42 | case KC_RCTRL ... KC_RGUI: | ||
| 43 | action.code = ACTION_RMOD(key); | ||
| 44 | break; | ||
| 45 | case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE: | ||
| 46 | action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(key)); | ||
| 47 | break; | ||
| 48 | case KC_AUDIO_MUTE ... KC_WWW_FAVORITES: | ||
| 49 | action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(key)); | ||
| 50 | break; | ||
| 51 | case KC_MS_UP ... KC_MS_ACCEL2: | ||
| 52 | action.code = ACTION_MOUSEKEY(key); | ||
| 53 | break; | ||
| 54 | case KC_FN0 ... KC_FN31: | ||
| 55 | { | ||
| 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; | ||
| 61 | case KC_NO ... KC_UNDEFINED: | ||
| 62 | default: | ||
| 63 | action.code = ACTION_NO; | ||
| 64 | break; | ||
| 65 | } | ||
| 66 | return action; | ||
| 67 | } | ||
| 68 | #endif | ||
| 69 | |||
| 70 | __attribute__ ((weak)) | ||
| 71 | void action_call_function(keyevent_t event, uint8_t id) | ||
| 72 | { | ||
| 73 | } | ||
diff --git a/common/keymap.h b/common/keymap.h index f54fea90d..748761551 100644 --- a/common/keymap.h +++ b/common/keymap.h | |||
| @@ -28,18 +28,22 @@ extern uint8_t current_layer; | |||
| 28 | /* layer to return or start with */ | 28 | /* layer to return or start with */ |
| 29 | extern uint8_t default_layer; | 29 | extern uint8_t default_layer; |
| 30 | 30 | ||
| 31 | |||
| 31 | /* | 32 | /* |
| 32 | * legacy keymap interface: keycode | 33 | * new keymap interface: action |
| 33 | */ | 34 | */ |
| 35 | action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col); | ||
| 36 | |||
| 37 | |||
| 38 | #ifndef NO_LEGACY_KEYMAP_SUPPORT | ||
| 39 | /* keycode of key */ | ||
| 34 | uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col); | 40 | uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col); |
| 41 | |||
| 35 | /* layer to move during press Fn key */ | 42 | /* layer to move during press Fn key */ |
| 36 | uint8_t keymap_fn_layer(uint8_t fn_bits); | 43 | uint8_t keymap_fn_layer(uint8_t fn_bits); |
| 44 | |||
| 37 | /* keycode to send when release Fn key without using */ | 45 | /* keycode to send when release Fn key without using */ |
| 38 | uint8_t keymap_fn_keycode(uint8_t fn_bits); | 46 | uint8_t keymap_fn_keycode(uint8_t fn_bits); |
| 39 | 47 | #endif | |
| 40 | /* | ||
| 41 | * new keymap interface: action | ||
| 42 | */ | ||
| 43 | action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col); | ||
| 44 | 48 | ||
| 45 | #endif | 49 | #endif |
