diff options
author | tmk <nobody@nowhere> | 2013-03-31 22:47:19 +0900 |
---|---|---|
committer | tmk <nobody@nowhere> | 2013-03-31 22:47:19 +0900 |
commit | 10f33a3e484e24065ed5eaab1c56c35156bace89 (patch) | |
tree | 8b938962644ad2d04261655bc9487984e86e4996 /common/action.h | |
parent | 353a9b56e6caee853d3f808d2bfedf07056b4518 (diff) |
Remove ACT_KEYMAP and ACT_OVERLAY
- Remove ACT_OVERLAY
- Rename ACT_KEYMAP to ACT_LAYER
- Add ACT_LAYER_BITOP
Diffstat (limited to 'common/action.h')
-rw-r--r-- | common/action.h | 148 |
1 files changed, 77 insertions, 71 deletions
diff --git a/common/action.h b/common/action.h index a6cb453840..2c4f306a44 100644 --- a/common/action.h +++ b/common/action.h @@ -65,8 +65,8 @@ typedef union { } key; struct action_layer { uint8_t code :8; - uint8_t val :4; - uint8_t kind :4; + uint8_t val :5; + uint8_t kind :3; } layer; struct action_usage { uint16_t code :10; @@ -170,35 +170,42 @@ void debug_action(action_t action); * * 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) + * ACT_LAYER: + * 1000|--xx|0000 0000 Clear keyamp + * 100X|LLLL|0000 00xx Reset default layer and clear keymap + * 100X|LLLL| keycode Invert with tap key + * 100X|LLLL|1111 0000 Invert with tap toggle + * 100X|LLLL|1111 00xx Invert[^= 1<<L] + * 100X|LLLL|1111 0100 On/Off + * 100X|LLLL|1111 01xx On[|= 1<<L] + * 100X|LLLL|1111 1000 Off/On + * 100X|LLLL|1111 10xx Off[&= ~(1<<L)] + * 100X|LLLL|1111 1100 Set/Clear + * 100X|LLLL|1111 11xx Set[= 1<<L] + * XLLLL: Layer 0-31 * 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} + * ACT_LAYER_BITOP: + * 101B|Booo|xxxx xxxx bit operation + * BB: operand. which part of layer state bits + * 00: 0-7th bit + * 01: 8-15th bit + * 10: 16-23th bit + * 11: 24-31th bit + * ooo: operation. + * 000: AND + * 001: OR + * 010: XOR + * 011: + * 100: LSHIFT + * 101: RSHIFT + * 110: + * 111: + * bbbb bbbb: bits + * layer_state |= (((layer_state>>(0bBB*8)) & 0xff) BITOP 0bxxxxxxxx)<<(0bBB*8) + * layer_state: 32-bit layer switch state + * + * * * * Extensions(11XX) @@ -216,16 +223,20 @@ void debug_action(action_t action); * */ enum action_kind_id { + ACT_MODS = 0b0000, ACT_LMODS = 0b0000, ACT_RMODS = 0b0001, + ACT_MODS_TAP = 0b0010, ACT_LMODS_TAP = 0b0010, ACT_RMODS_TAP = 0b0011, ACT_USAGE = 0b0100, ACT_MOUSEKEY = 0b0101, - ACT_KEYMAP = 0b1000, - ACT_OVERLAY = 0b1001, + ACT_LAYER = 0b1000, + ACT_LAYER1 = 0b1001, + ACT_LAYER_BITOP = 0b1010, + ACT_LAYER1_BITOP = 0b1011, ACT_MACRO = 0b1100, ACT_COMMAND = 0b1110, @@ -285,12 +296,14 @@ enum usage_pages { * Set layer = (1<<layer) * Clear layer = 0 */ -enum layer_params { +enum layer_param_on { ON_PRESS = 1, ON_RELEASE = 2, ON_BOTH = 3, +}; - OP_RESET = 0x00, +enum layer_pram_op { + OP_RESET = 0x00, OP_INV4 = 0x00, OP_INV = 0xF0, OP_ON = 0xF4, @@ -298,56 +311,49 @@ enum layer_params { OP_SET = 0xFC, }; +enum layer_pram_bitop { + BITOP_AND, + BITOP_OR, + BITOP_XOR, + BITOP_LSHIFT, + BITOP_RSHIFT, +}; + /* * Default Layer */ -#define ACTION_DEFAULT_LAYER ACTION(ACT_KEYMAP, ON_RELEASE<<8 | OP_RESET | 0) +#define ACTION_DEFAULT_LAYER ACTION(ACT_LAYER, 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)) +#define ACTION_DEFAULT_LAYER_TO(layer, on) ACTION(ACT_LAYER, (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) +#define ACTION_LAYER_MOMENTARY(layer) ACTION_LAYER_ON_OFF(layer) +#define ACTION_LAYER_TOGGLE(layer) ACTION_LAYER_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) +#define ACTION_LAYER_INV(layer, on) ACTION(ACT_LAYER, (layer)<<8 | OP_INV | (on)) +#define ACTION_LAYER_TAP_TOGGLE(layer) ACTION(ACT_LAYER, (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) +#define ACTION_LAYER_ON(layer, on) ACTION(ACT_LAYER, (layer)<<8 | OP_ON | (on)) +#define ACTION_LAYER_ON_OFF(layer) ACTION(ACT_LAYER, (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) +#define ACTION_LAYER_OFF(layer, on) ACTION(ACT_LAYER, (layer)<<8 | OP_OFF | (on)) +#define ACTION_LAYER_OFF_ON(layer) ACTION(ACT_LAYER, (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) +#define ACTION_LAYER_SET(layer, on) ACTION(ACT_LAYER, (layer)<<8 | OP_SET | (on)) +#define ACTION_LAYER_SET_CLEAR(layer) ACTION(ACT_LAYER, (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 | OP_OFF | (on)) -#define ACTION_OVERLAY_OFF_ON(layer) ACTION(ACT_OVERLAY, (layer)<<8 | OP_OFF | 0) -/* Overlay Set */ -#define ACTION_OVERLAY_SET(layer, on) ACTION(ACT_OVERLAY, (layer)<<8 | OP_SET | (on)) -#define ACTION_OVERLAY_SET_CLEAR(layer) ACTION(ACT_OVERLAY, (layer)<<8 | OP_SET | 0) -/* Overlay Invert with tap key */ -#define ACTION_OVERLAY_TAP_KEY(layer, key) ACTION(ACT_OVERLAY, (layer)<<8 | (key)) - +#define ACTION_LAYER_TAP_KEY(layer, key) ACTION(ACT_LAYER, (layer)<<8 | (key)) + +/* Layer BitOp: 101|BB|ooo|xxxxxxxx */ +#define ACTION_LAYER_BITOP(op, part, bits) (ACT_LAYER_BITOP<<12 | (part&0x3)<<11 | (op&0x7)<<8 | bits) +#define ACTION_LAYER_AND(part, bits) ACTION_LAYER_BITOP(BITOP_AND, part, bits) +#define ACTION_LAYER_OR(part, bits) ACTION_LAYER_BITOP(BITOP_OR, part, bits) +#define ACTION_LAYER_XOR(part, bits) ACTION_LAYER_BITOP(BITOP_XOR, part, bits) +#define ACTION_LAYER_LSHIFT(part, bits) ACTION_LAYER_BITOP(BITOP_LSHIFT, part, bits) +#define ACTION_LAYER_RSHIFT(part, bits) ACTION_LAYER_BITOP(BITOP_RSHIFT, part, bits) + /* * Extensions |