diff options
-rw-r--r-- | common.mk | 2 | ||||
-rw-r--r-- | common/action.c | 378 | ||||
-rw-r--r-- | common/action.h | 319 | ||||
-rw-r--r-- | common/action_code.h | 289 | ||||
-rw-r--r-- | common/action_layer.c | 135 | ||||
-rw-r--r-- | common/action_layer.h | 77 | ||||
-rw-r--r-- | common/action_tapping.h | 3 | ||||
-rw-r--r-- | common/command.c | 6 | ||||
-rw-r--r-- | common/keymap.c | 2 | ||||
-rw-r--r-- | common/layer_switch.c | 209 | ||||
-rw-r--r-- | common/layer_switch.h | 110 | ||||
-rw-r--r-- | common/util.c | 19 | ||||
-rw-r--r-- | common/util.h | 3 | ||||
-rw-r--r-- | converter/pc98_usb/keymap.c | 32 | ||||
-rw-r--r-- | converter/pc98_usb/matrix.c | 4 | ||||
-rw-r--r-- | doc/keymap.md | 340 | ||||
-rw-r--r-- | keyboard/gh60/config.h | 3 | ||||
-rw-r--r-- | keyboard/gh60/keymap.c | 45 | ||||
-rw-r--r-- | keyboard/gh60/keymap_plain.h | 3 | ||||
-rw-r--r-- | keyboard/gh60/keymap_poker.h | 28 | ||||
-rw-r--r-- | keyboard/gh60/keymap_poker_bit.h | 24 | ||||
-rw-r--r-- | keyboard/gh60/keymap_poker_set.h | 37 | ||||
-rw-r--r-- | keyboard/hhkb/config.h | 3 | ||||
-rw-r--r-- | keyboard/hhkb/keymap.c | 19 | ||||
-rw-r--r-- | keyboard/hid_liber/keymap.c | 29 |
25 files changed, 880 insertions, 1239 deletions
@@ -5,7 +5,7 @@ SRC += $(COMMON_DIR)/host.c \ $(COMMON_DIR)/action_tapping.c \ $(COMMON_DIR)/action_oneshot.c \ $(COMMON_DIR)/action_macro.c \ - $(COMMON_DIR)/layer_switch.c \ + $(COMMON_DIR)/action_layer.c \ $(COMMON_DIR)/keymap.c \ $(COMMON_DIR)/timer.c \ $(COMMON_DIR)/print.c \ diff --git a/common/action.c b/common/action.c index 07a3a64d6c..0651887444 100644 --- a/common/action.c +++ b/common/action.c @@ -21,7 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "command.h" #include "debug.h" #include "led.h" -#include "layer_switch.h" +#include "action_layer.h" #include "action_tapping.h" #include "action_oneshot.h" #include "action_macro.h" @@ -50,15 +50,19 @@ void action_exec(keyevent_t event) void process_action(keyrecord_t *record) { keyevent_t event = record->event; +#ifndef NO_ACTION_TAPPING uint8_t tap_count = record->tap.count; +#endif if (IS_NOEVENT(event)) { return; } action_t action = layer_switch_get_action(event.key); debug("ACTION: "); debug_action(action); - debug(" overlays: "); overlay_debug(); - debug(" keymaps: "); keymap_debug(); - debug(" default_layer: "); debug_dec(default_layer); debug("\n"); +#ifndef NO_ACTION_LAYER + debug(" layer_state: "); layer_debug(); + debug(" default_layer_state: "); default_layer_debug(); +#endif + debug("\n"); switch (action.kind.id) { /* Key and Mods */ @@ -68,22 +72,17 @@ void process_action(keyrecord_t *record) uint8_t mods = (action.kind.id == ACT_LMODS) ? action.key.mods : action.key.mods<<4; if (event.pressed) { - uint8_t tmp_mods = host_get_mods(); if (mods) { host_add_mods(mods); host_send_keyboard_report(); } register_code(action.key.code); - if (mods && action.key.code) { - host_set_mods(tmp_mods); - host_send_keyboard_report(); - } } else { - if (mods && !action.key.code) { + unregister_code(action.key.code); + if (mods) { host_del_mods(mods); host_send_keyboard_report(); } - unregister_code(action.key.code); } } break; @@ -93,7 +92,7 @@ void process_action(keyrecord_t *record) { uint8_t mods = (action.kind.id == ACT_LMODS_TAP) ? action.key.mods : action.key.mods<<4; - switch (action.layer.code) { + switch (action.layer_tap.code) { #ifndef NO_ACTION_ONESHOT case 0x00: // Oneshot modifier @@ -199,323 +198,88 @@ void process_action(keyrecord_t *record) } break; #endif -#ifndef NO_ACTION_KEYMAP - case ACT_KEYMAP: - switch (action.layer.code) { - /* Keymap clear */ - case OP_RESET: - switch (action.layer.val & 0x03) { - case 0: - // NOTE: reserved - overlay_clear(); - keymap_clear(); - break; - case ON_PRESS: - if (event.pressed) { - overlay_clear(); - keymap_clear(); - } - break; - case ON_RELEASE: - if (!event.pressed) { - overlay_clear(); - keymap_clear(); - } - break; - case ON_BOTH: - overlay_clear(); - keymap_clear(); - break; - /* NOTE: 4-7 rserved */ +#ifndef NO_ACTION_LAYER + case ACT_LAYER: + if (action.layer_bitop.on == 0) { + /* Default Layer Bitwise Operation */ + if (!event.pressed) { + uint8_t shift = action.layer_bitop.part*4; + uint32_t bits = ((uint32_t)action.layer_bitop.bits)<<shift; + uint32_t mask = (action.layer_bitop.xbit) ? ~(((uint32_t)0xf)<<shift) : 0; + switch (action.layer_bitop.op) { + case OP_BIT_AND: default_layer_and(bits | mask); break; + case OP_BIT_OR: default_layer_or(bits | mask); break; + case OP_BIT_XOR: default_layer_xor(bits | mask); break; + case OP_BIT_SET: default_layer_and(mask); default_layer_or(bits); break; } - break; - /* Keymap Reset default layer */ - case (OP_RESET | ON_PRESS): - if (event.pressed) { - default_layer_set(action.layer.val); - } - break; - case (OP_RESET | ON_RELEASE): - if (!event.pressed) { - default_layer_set(action.layer.val); + } + } else { + /* Layer Bitwise Operation */ + if (event.pressed ? (action.layer_bitop.on & ON_PRESS) : + (action.layer_bitop.on & ON_RELEASE)) { + uint8_t shift = action.layer_bitop.part*4; + uint32_t bits = ((uint32_t)action.layer_bitop.bits)<<shift; + uint32_t mask = (action.layer_bitop.xbit) ? ~(((uint32_t)0xf)<<shift) : 0; + switch (action.layer_bitop.op) { + case OP_BIT_AND: layer_and(bits | mask); break; + case OP_BIT_OR: layer_or(bits | mask); break; + case OP_BIT_XOR: layer_xor(bits | mask); break; + case OP_BIT_SET: layer_and(mask); layer_or(bits); break; } - break; - case (OP_RESET | ON_BOTH): - default_layer_set(action.layer.val); - break; - - /* Keymap Bit invert */ - case OP_INV: - /* with tap toggle */ + } + } + break; + #ifndef NO_ACTION_TAPPING + case ACT_LAYER_TAP: + case ACT_LAYER_TAP1: + switch (action.layer_tap.code) { + case OP_TAP_TOGGLE: + /* tap toggle */ if (event.pressed) { if (tap_count < TAPPING_TOGGLE) { - debug("KEYMAP_INV: tap toggle(press).\n"); - keymap_invert(action.layer.val); + layer_invert(action.layer_tap.val); } } else { if (tap_count <= TAPPING_TOGGLE) { - debug("KEYMAP_INV: tap toggle(release).\n"); - keymap_invert(action.layer.val); + layer_invert(action.layer_tap.val); } } break; - case (OP_INV | ON_PRESS): - if (event.pressed) { - keymap_invert(action.layer.val); - } - break; - case (OP_INV | ON_RELEASE): - if (!event.pressed) { - keymap_invert(action.layer.val); - } + case OP_ON_OFF: + event.pressed ? layer_on(action.layer_tap.val) : + layer_off(action.layer_tap.val); break; - case (OP_INV | ON_BOTH): - keymap_invert(action.layer.val); + case OP_OFF_ON: + event.pressed ? layer_off(action.layer_tap.val) : + layer_on(action.layer_tap.val); break; - - /* Keymap Bit on */ - case OP_ON: - if (event.pressed) { - keymap_on(action.layer.val); - } else { - keymap_off(action.layer.val); - } - break; - case (OP_ON | ON_PRESS): - if (event.pressed) { - keymap_on(action.layer.val); - } - break; - case (OP_ON | ON_RELEASE): - if (!event.pressed) { - keymap_on(action.layer.val); - } + case OP_SET_CLEAR: + event.pressed ? layer_move(action.layer_tap.val) : + layer_clear(); break; - case (OP_ON | ON_BOTH): - keymap_on(action.layer.val); - break; - - /* Keymap Bit off */ - case OP_OFF: - if (event.pressed) { - keymap_off(action.layer.val); - } else { - keymap_on(action.layer.val); - } - break; - case (OP_OFF | ON_PRESS): - if (event.pressed) { - keymap_off(action.layer.val); - } - break; - case (OP_OFF | ON_RELEASE): - if (!event.pressed) { - keymap_off(action.layer.val); - } - break; - case (OP_OFF | ON_BOTH): - keymap_off(action.layer.val); - break; - - /* Keymap Bit set */ - case OP_SET: - if (event.pressed) { - keymap_set(action.layer.val); - } else { - keymap_clear(); - } - break; - case (OP_SET | ON_PRESS): - if (event.pressed) { - keymap_set(action.layer.val); - } - break; - case (OP_SET | ON_RELEASE): - if (!event.pressed) { - keymap_set(action.layer.val); - } - break; - case (OP_SET | ON_BOTH): - keymap_set(action.layer.val); - break; - - /* Keymap Bit invert with tap key */ default: + /* tap key */ if (event.pressed) { if (tap_count > 0) { debug("KEYMAP_TAP_KEY: Tap: register_code\n"); - register_code(action.layer.code); + register_code(action.layer_tap.code); } else { debug("KEYMAP_TAP_KEY: No tap: On on press\n"); - keymap_on(action.layer.val); + layer_on(action.layer_tap.val); } } else { if (tap_count > 0) { debug("KEYMAP_TAP_KEY: Tap: unregister_code\n"); - unregister_code(action.layer.code); + unregister_code(action.layer_tap.code); } else { debug("KEYMAP_TAP_KEY: No tap: Off on release\n"); - keymap_off(action.layer.val); - } - } - break; - } - break; -#endif -#ifndef NO_ACTION_OVERLAY - case ACT_OVERLAY: - switch (action.layer.code) { - // Overlay Invert bit4 - case OP_INV4 | 0: - if (action.layer.val == 0) { - // NOTE: reserved for future use - overlay_clear(); - } else { - overlay_set(overlay_stat ^ action.layer.val); - } - break; - case OP_INV4 | 1: - if (action.layer.val == 0) { - // on pressed - if (event.pressed) overlay_clear(); - } else { - overlay_set(overlay_stat ^ action.layer.val<<4); - } - break; - case OP_INV4 | 2: - if (action.layer.val == 0) { - // on released - if (!event.pressed) overlay_clear(); - } else { - overlay_set(overlay_stat ^ action.layer.val<<8); - } - break; - case OP_INV4 | 3: - if (action.layer.val == 0) { - // on both - overlay_clear(); - } else { - overlay_set(overlay_stat ^ action.layer.val<<12); - } - break; - - /* Overlay Bit invert */ - case OP_INV: - /* with tap toggle */ - if (event.pressed) { - if (tap_count < TAPPING_TOGGLE) { - debug("OVERLAY_INV: tap toggle(press).\n"); - overlay_invert(action.layer.val); - } - } else { - if (tap_count <= TAPPING_TOGGLE) { - debug("OVERLAY_INV: tap toggle(release).\n"); - overlay_invert(action.layer.val); - } - } - break; - case (OP_INV | ON_PRESS): - if (event.pressed) { - overlay_invert(action.layer.val); - } - break; - case (OP_INV | ON_RELEASE): - if (!event.pressed) { - overlay_invert(action.layer.val); - } - break; - case (OP_INV | ON_BOTH): - overlay_invert(action.layer.val); - break; - - /* Overlay Bit on */ - case OP_ON: - if (event.pressed) { - overlay_on(action.layer.val); - } else { - overlay_off(action.layer.val); - } - break; - case (OP_ON | ON_PRESS): - if (event.pressed) { - overlay_on(action.layer.val); - } - break; - case (OP_ON | ON_RELEASE): - if (!event.pressed) { - overlay_on(action.layer.val); - } - break; - case (OP_ON | ON_BOTH): - overlay_on(action.layer.val); - break; - - /* Overlay Bit off */ - case OP_OFF: - if (event.pressed) { - overlay_off(action.layer.val); - } else { - overlay_on(action.layer.val); - } - break; - case (OP_OFF | ON_PRESS): - if (event.pressed) { - overlay_off(action.layer.val); - } - break; - case (OP_OFF | ON_RELEASE): - if (!event.pressed) { - overlay_off(action.layer.val); - } - break; - case (OP_OFF | ON_BOTH): - overlay_off(action.layer.val); - break; - - /* Overlay Bit set */ - case OP_SET: - if (event.pressed) { - overlay_move(action.layer.val); - } else { - overlay_clear(); - } - break; - case (OP_SET | ON_PRESS): - if (event.pressed) { - overlay_move(action.layer.val); - } - break; - case (OP_SET | ON_RELEASE): - if (!event.pressed) { - overlay_move(action.layer.val); - } - break; - case (OP_SET | ON_BOTH): - overlay_move(action.layer.val); - break; - - /* Overlay Bit invert with tap key */ - default: - if (event.pressed) { - if (tap_count > 0) { - debug("OVERLAY_TAP_KEY: Tap: register_code\n"); - register_code(action.layer.code); - } else { - debug("OVERLAY_TAP_KEY: No tap: On on press\n"); - overlay_on(action.layer.val); - } - } else { - if (tap_count > 0) { - debug("OVERLAY_TAP_KEY: Tap: unregister_code\n"); - unregister_code(action.layer.code); - } else { - debug("OVERLAY_TAP_KEY: No tap: Off on release\n"); - overlay_off(action.layer.val); + layer_off(action.layer_tap.val); } } break; } break; + #endif #endif /* Extentions */ #ifndef NO_ACTION_MACRO @@ -667,16 +431,9 @@ bool is_tap_key(key_t key) switch (action.kind.id) { case ACT_LMODS_TAP: case ACT_RMODS_TAP: + case ACT_LAYER_TAP: + case ACT_LAYER_TAP1: return true; - case ACT_KEYMAP: - case ACT_OVERLAY: - switch (action.layer.code) { - case 0x04 ... 0xEF: /* tap key */ - case OP_INV: - return true; - default: - return false; - } case ACT_MACRO: case ACT_FUNCTION: if (action.func.opt & FUNC_TAP) { return true; } @@ -714,8 +471,9 @@ void debug_action(action_t action) case ACT_RMODS_TAP: debug("ACT_RMODS_TAP"); break; case ACT_USAGE: debug("ACT_USAGE"); break; case ACT_MOUSEKEY: debug("ACT_MOUSEKEY"); break; - case ACT_KEYMAP: debug("ACT_KEYMAP"); break; - case ACT_OVERLAY: debug("ACT_OVERLAY"); break; + case ACT_LAYER: debug("ACT_LAYER"); break; + case ACT_LAYER_TAP: debug("ACT_LAYER_TAP"); break; + case ACT_LAYER_TAP1: debug("ACT_LAYER_TAP1"); break; case ACT_MACRO: debug("ACT_MACRO"); break; case ACT_COMMAND: debug("ACT_COMMAND"); break; case ACT_FUNCTION: debug("ACT_FUNCTION"); break; diff --git a/common/action.h b/common/action.h index a6cb453840..98c4ef81a6 100644 --- a/common/action.h +++ b/common/action.h @@ -21,71 +21,27 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include <stdbool.h> #include "keyboard.h" #include "keycode.h" +#include "action_code.h" #include "action_macro.h" +/* tapping count and state */ +typedef struct { + bool interrupted :1; + bool reserved2 :1; + bool reserved1 :1; + bool reserved0 :1; + uint8_t count :4; +} tap_t; + +/* Key event container for recording */ typedef struct { keyevent_t event; #ifndef NO_ACTION_TAPPING - /* tapping count and state */ - struct { - bool interrupted :1; - bool reserved2 :1; - bool reserved1 :1; - bool reserved0 :1; - uint8_t count :4; - } tap; + tap_t tap; #endif } keyrecord_t; -/* Action struct. - * - * In avr-gcc bit field seems to be assigned from LSB(bit0) to MSB(bit15). - * AVR looks like a little endian in avr-gcc. - * - * NOTE: not portable across compiler/endianness? - * Byte order and bit order of 0x1234: - * Big endian: 15 ... 8 7 ... 210 - * | 0x12 | 0x34 | - * 0001 0010 0011 0100 - * Little endian: 012 ... 7 8 ... 15 - * | 0x34 | 0x12 | - * 0010 1100 0100 1000 - */ -typedef union { - uint16_t code; - struct action_kind { - uint16_t param :12; - uint8_t id :4; - } kind; - struct action_key { - uint8_t code :8; - uint8_t mods :4; - uint8_t kind :4; - } key; - struct action_layer { - uint8_t code :8; - uint8_t val :4; - uint8_t kind :4; - } layer; - struct action_usage { - uint16_t code :10; - uint8_t page :2; - uint8_t kind :4; - } usage; - struct action_command { - uint8_t id :8; - uint8_t opt :4; - uint8_t kind :4; - } command; - struct action_function { - uint8_t id :8; - uint8_t opt :4; - uint8_t kind :4; - } func; -} action_t; - - /* Execute action per keyevent */ void action_exec(keyevent_t event); @@ -117,255 +73,4 @@ void debug_event(keyevent_t event); void debug_record(keyrecord_t record); void debug_action(action_t action); - - -/* - * Action codes - * ============ - * 16bit code: action_kind(4bit) + action_parameter(12bit) - * - * Keyboard Keys(00XX) - * ------------------- - * ACT_LMODS(0000): - * 0000|0000|000000|00 No action - * 0000|0000|000000|01 Transparent - * 0000|0000| keycode Key - * 0000|mods|000000|00 Left mods - * 0000|mods| keycode Key & Left mods - * - * ACT_RMODS(0001): - * 0001|0000|000000|00 No action(not used) - * 0001|0000|000000|01 Transparent(not used) - * 0001|0000| keycode Key(no used) - * 0001|mods|000000|00 Right mods - * 0001|mods| keycode Key & Right mods - * - * ACT_LMODS_TAP(0010): - * 0010|mods|000000|00 Left mods OneShot - * 0010|mods|000000|01 (reserved) - * 0010|mods|000000|10 (reserved) - * 0010|mods|000000|11 (reserved) - * 0010|mods| keycode Left mods + tap Key - * - * ACT_RMODS_TAP(0011): - * 0011|mods|000000|00 Right mods OneShot - * 0011|mods|000000|01 (reserved) - * 0011|mods|000000|10 (reserved) - * 0011|mods|000000|11 (reserved) - * 0011|mods| keycode Right mods + tap Key - * - * - * Other keys(01XX) - * -------------------- - * This action handles other usages than keyboard. - * ACT_USAGE(0100): - * 0100|00| usage(10) System control(0x80) - General Desktop page(0x01) - * 0100|01| usage(10) Consumer control(0x01) - Consumer page(0x0C) - * 0100|10| usage(10) (reserved) - * 0100|11| usage(10) (reserved) - * - * ACT_MOUSEKEY(0110): - * 0101|XXXX| keycode Mouse key - * - * - * Layer Actions(10XX) - * ------------------- - * ACT_KEYMAP: - * 1000|--xx|0000 0000 Clear keyamp and overlay - * 1000|LLLL|0000 00xx Reset default layer and clear keymap and overlay - * 1000|LLLL| keycode Invert with tap key - * 1000|LLLL|1111 0000 Invert with tap toggle - * 1000|LLLL|1111 00xx Invert[^= 1<<L] - * 1000|LLLL|1111 0100 On/Off - * 1000|LLLL|1111 01xx On[|= 1<<L] - * 1000|LLLL|1111 1000 Off/On - * 1000|LLLL|1111 10xx Off[&= ~(1<<L)] - * 1000|LLLL|1111 1100 Set/Clear - * 1000|LLLL|1111 11xx Set[= 1<<L] - * default layer: 0-15(4bit) - * xx: On {00:for special use, 01:press, 10:release, 11:both} - * - * ACT_OVERLAY: - * 1011|0000|0000 0000 Clear overlay - * 1011|LLLL|0000 00ss Invert 4-bit chunk [^= L<<(4*ss)] - * 1011|LLLL| keycode Invert with tap key - * 1011|LLLL|1111 0000 Invert with tap toggle - * 1011|LLLL|1111 00xx Invert[^= 1<<L] - * 1011|LLLL|1111 0100 On/Off(momentary) - * 1011|LLLL|1111 01xx On[|= 1<<L] - * 1011|LLLL|1111 1000 Off/On - * 1011|LLLL|1111 10xx Off[&= ~(1<<L)] - * 1011|LLLL|1111 1100 Set/Clear - * 1011|LLLL|1111 11xx Set[= 1<<L] - * overlays: 16-layer on/off status(16bit) - * xx: On {00:for special use, 01:press, 10:release, 11:both} - * - * - * Extensions(11XX) - * ---------------- - * ACT_MACRO(1100): - * 1100|opt | id(8) Macro play? - * 1100|1111| id(8) Macro record? - * - * ACT_COMMAND(1110): - * 1110|opt | id(8) Built-in Command exec - * - * ACT_FUNCTION(1111): - * 1111| address(12) Function? - * 1111|opt | id(8) Function? - * - */ -enum action_kind_id { - ACT_LMODS = 0b0000, - ACT_RMODS = 0b0001, - ACT_LMODS_TAP = 0b0010, - ACT_RMODS_TAP = 0b0011, - - ACT_USAGE = 0b0100, - ACT_MOUSEKEY = 0b0101, - - ACT_KEYMAP = 0b1000, - ACT_OVERLAY = 0b1001, - - ACT_MACRO = 0b1100, - ACT_COMMAND = 0b1110, - ACT_FUNCTION = 0b1111 -}; - - -/* action utility */ -#define ACTION_NO 0 -#define ACTION_TRANSPARENT 1 -#define ACTION(kind, param) ((kind)<<12 | (param)) -#define MODS4(mods) (((mods)>>4 | (mods)) & 0x0F) - -/* - * Key - */ -#define ACTION_KEY(key) ACTION(ACT_LMODS, key) -/* Mods & key */ -#define ACTION_LMODS(mods) ACTION(ACT_LMODS, MODS4(mods)<<8 | 0x00) -#define ACTION_LMODS_KEY(mods, key) ACTION(ACT_LMODS, MODS4(mods)<<8 | (key)) -#define ACTION_RMODS(mods) ACTION(ACT_RMODS, MODS4(mods)<<8 | 0x00) -#define ACTION_RMODS_KEY(mods, key) ACTION(ACT_RMODS, MODS4(mods)<<8 | (key)) -#define ACTION_LMOD(mod) ACTION(ACT_LMODS, MODS4(MOD_BIT(mod))<<8 | 0x00) -#define ACTION_LMOD_KEY(mod, key) ACTION(ACT_LMODS, MODS4(MOD_BIT(mod))<<8 | (key)) -#define ACTION_RMOD(mod) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | 0x00) -#define ACTION_RMOD_KEY(mod, key) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | (key)) -/* Tap key */ -enum mods_codes { - MODS_ONESHOT = 0x00, -}; -#define ACTION_LMODS_TAP_KEY(mods, key) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | (key)) -#define ACTION_LMODS_ONESHOT(mods) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | MODS_ONESHOT) -#define ACTION_RMODS_TAP_KEY(mods, key) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | (key)) -#define ACTION_RMODS_ONESHOT(mods) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | MODS_ONESHOT) -#define ACTION_LMOD_TAP_KEY(mod, key) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) -#define ACTION_LMOD_ONESHOT(mod) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | MODS_ONESHOT) -#define ACTION_RMOD_TAP_KEY(mod, key) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) -#define ACTION_RMOD_ONESHOT(mod) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | MODS_ONESHOT) - -/* HID Usage */ -enum usage_pages { - PAGE_SYSTEM, - PAGE_CONSUMER -}; -#define ACTION_USAGE_SYSTEM(id) ACTION(ACT_USAGE, PAGE_SYSTEM<<10 | (id)) -#define ACTION_USAGE_CONSUMER(id) ACTION(ACT_USAGE, PAGE_CONSUMER<<10 | (id)) - -/* Mousekey */ -#define ACTION_MOUSEKEY(key) ACTION(ACT_MOUSEKEY, key) - - - -/* Layer Actions: - * Invert layer ^= (1<<layer) - * On layer |= (1<<layer) - * Off layer &= ~(1<<layer) - * Set layer = (1<<layer) - * Clear layer = 0 - */ -enum layer_params { - ON_PRESS = 1, - ON_RELEASE = 2, - ON_BOTH = 3, - - OP_RESET = 0x00, - OP_INV4 = 0x00, - OP_INV = 0xF0, - OP_ON = 0xF4, - OP_OFF = 0xF8, - OP_SET = 0xFC, -}; - -/* - * Default Layer - */ -#define ACTION_DEFAULT_LAYER ACTION(ACT_KEYMAP, ON_RELEASE<<8 | OP_RESET | 0) -#define ACTION_DEFAULT_LAYER_SET(layer) ACTION_DEFAULT_LAYER_TO(layer, ON_RELEASE) -#define ACTION_DEFAULT_LAYER_TO(layer, on) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | (on)) -/* - * Keymap Layer - */ -#define ACTION_KEYMAP_MOMENTARY(layer) ACTION_KEYMAP_ON_OFF(layer) -#define ACTION_KEYMAP_TOGGLE(layer) ACTION_KEYMAP_INV(layer, ON_RELEASE) -/* Keymap Invert */ -#define ACTION_KEYMAP_INV(layer, on) ACTION(ACT_KEYMAP, (layer)<<8 | OP_INV | (on)) -#define ACTION_KEYMAP_TAP_TOGGLE(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_INV | 0) -/* Keymap On */ -#define ACTION_KEYMAP_ON(layer, on) ACTION(ACT_KEYMAP, (layer)<<8 | OP_ON | (on)) -#define ACTION_KEYMAP_ON_OFF(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_ON | 0) -/* Keymap Off */ -#define ACTION_KEYMAP_OFF(layer, on) ACTION(ACT_KEYMAP, (layer)<<8 | OP_OFF | (on)) -#define ACTION_KEYMAP_OFF_ON(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_OFF | 0) -/* Keymap Set */ -#define ACTION_KEYMAP_SET(layer, on) ACTION(ACT_KEYMAP, (layer)<<8 | OP_SET | (on)) -#define ACTION_KEYMAP_SET_CLEAR(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_SET | 0) -/* Keymap Invert with tap key */ -#define ACTION_KEYMAP_TAP_KEY(layer, key) ACTION(ACT_KEYMAP, (layer)<<8 | (key)) - -/* - * Overlay Layer - */ -#define ACTION_OVERLAY_MOMENTARY(layer) ACTION_OVERLAY_ON_OFF(layer) -#define ACTION_OVERLAY_TOGGLE(layer) ACTION_OVERLAY_INV(layer, ON_RELEASE) -/* Overlay Clear */ -#define ACTION_OVERLAY_CLEAR(on) ACTION(ACT_OVERLAY, 0<<8 | OP_INV4 | (on)) -/* Overlay Invert 4-bit chunk */ -#define ACTION_OVERLAY_INV4(bits, shift) ACTION(ACT_OVERLAY, (bits)<<8 | OP_INV4 | shift) -/* Overlay Invert */ -#define ACTION_OVERLAY_INV(layer, on) ACTION(ACT_OVERLAY, (layer)<<8 | OP_INV | (on)) -#define ACTION_OVERLAY_TAP_TOGGLE(layer) ACTION(ACT_OVERLAY, (layer)<<8 | OP_INV | 0) -/* Overlay On */ -#define ACTION_OVERLAY_ON(layer, on) ACTION(ACT_OVERLAY, (layer)<<8 | OP_ON | (on)) -#define ACTION_OVERLAY_ON_OFF(layer) ACTION(ACT_OVERLAY, (layer)<<8 | OP_ON | 0) -/* Overlay Off */ -#define ACTION_OVERLAY_OFF(layer, on) ACTION(ACT_OVERLAY, (layer)<<8 |