aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/action.c9
-rw-r--r--common/action.h87
-rw-r--r--common/keycode.h4
-rw-r--r--common/keymap.c73
-rw-r--r--common/keymap.h16
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
107ACT_LMODS(0000): 108ACT_LMODS(0000):
1080000|0000|000000|00 No action 1090000|0000|000000|00 No action
1090000|0000| keycode Key 1100000|0000| keycode Key
1100010|mods|000000|00 Left mods Momentary 1110000|mods|000000|00 Left mods
1110000|mods| keycode Key+Left mods 1120000|mods| keycode Key & Left mods
112 113
113ACT_RMODS(0001): 114ACT_RMODS(0001):
1140001|0000|000000|00 No action 1150001|0000|000000|00 No action
1150001|0000| keycode Key(no used) 1160001|0000| keycode Key(no used)
1160001|mods|000000|00 Right mods Momentary 1170001|mods|000000|00 Right mods
1170001|mods| keycode Key+Right mods 1180001|mods| keycode Key & Right mods
118 119
119ACT_LMODS_TAP(0010): 120ACT_LMODS_TAP(0010):
1200010|mods|000000|00 Left mods OneShot 1210010|mods|000000|00 Left mods OneShot
1210010|mods|000000|01 (reserved) 1220010|mods|000000|01 (reserved)
1220010|mods|000000|10 (reserved) 1230010|mods|000000|10 (reserved)
1230010|mods|000000|11 (reserved) 1240010|mods|000000|11 (reserved)
1240010|mods| keycode Left mods+tap Key 1250010|mods| keycode Left mods + tap Key
125 126
126ACT_RMODS_TAP(0011): 127ACT_RMODS_TAP(0011):
1270011|mods|000000|00 Right mods OneShot 1280011|mods|000000|00 Right mods OneShot
1280011|mods|000000|01 (reserved) 1290011|mods|000000|01 (reserved)
1290011|mods|000000|10 (reserved) 1300011|mods|000000|10 (reserved)
1300011|mods|000000|11 (reserved) 1310011|mods|000000|11 (reserved)
1310011|mods| keycode Right mods+tap Key 1320011|mods| keycode Right mods + tap Key
132 133
133 134
134Other HID Usage 135Other HID Usage
@@ -143,12 +144,20 @@ ACT_USAGE(0100):
143 144
144Mouse Keys 145Mouse Keys
145---------- 146----------
147TODO: can be combined with 'Other HID Usage'? to save action kind id.
146ACT_MOUSEKEY(0110): 148ACT_MOUSEKEY(0110):
1470101|XXXX| keycode Mouse key 1490101|XXXX| keycode Mouse key
148 150
149 151
150Layer Actions 152Layer Actions
151------------- 153-------------
154TODO: reconsider layer methods.
1551 momemtary + tap key up: L, down: default
1561 bitwise + tap key up: xor B, down: xor B
1573 momemtary go + tap key? up: X, down:
1583 toggle(mementary back) + tap key? up: down: Y
1593 no tap up: X, down: Y
160
152ACT_LAYER_PRESSED(1000): Set layer on key pressed 161ACT_LAYER_PRESSED(1000): Set layer on key pressed
153ACT_LAYER_RELEASED(1001): Set layer on key released 162ACT_LAYER_RELEASED(1001): Set layer on key released
154ACT_LAYER_BIT(1010): On/Off layer bit 163ACT_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/*
2Copyright 2013 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along 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 */
23uint8_t default_layer = 0;
24uint8_t current_layer = 0;
25
26
27#ifndef NO_LEGACY_KEYMAP_SUPPORT
28/* legacy support with weak reference */
29__attribute__ ((weak))
30action_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))
71void 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 */
29extern uint8_t default_layer; 29extern uint8_t default_layer;
30 30
31
31/* 32/*
32 * legacy keymap interface: keycode 33 * new keymap interface: action
33 */ 34 */
35action_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 */
34uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col); 40uint8_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 */
36uint8_t keymap_fn_layer(uint8_t fn_bits); 43uint8_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 */
38uint8_t keymap_fn_keycode(uint8_t fn_bits); 46uint8_t keymap_fn_keycode(uint8_t fn_bits);
39 47#endif
40/*
41 * new keymap interface: action
42 */
43action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col);
44 48
45#endif 49#endif