diff --git a/common/action.c b/common/action.c index 07a3a64d..ef04851b 100644 --- a/common/action.c +++ b/common/action.c @@ -56,7 +56,6 @@ void process_action(keyrecord_t *record) 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"); @@ -199,31 +198,28 @@ void process_action(keyrecord_t *record) } break; #endif -#ifndef NO_ACTION_KEYMAP - case ACT_KEYMAP: +#ifndef NO_ACTION_LAYER + case ACT_LAYER: + case ACT_LAYER1: 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 */ @@ -361,161 +357,6 @@ void process_action(keyrecord_t *record) 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); - } - } - break; - } - break; #endif /* Extentions */ #ifndef NO_ACTION_MACRO @@ -668,8 +509,7 @@ bool is_tap_key(key_t key) case ACT_LMODS_TAP: case ACT_RMODS_TAP: return true; - case ACT_KEYMAP: - case ACT_OVERLAY: + case ACT_LAYER: switch (action.layer.code) { case 0x04 ... 0xEF: /* tap key */ case OP_INV: @@ -714,8 +554,8 @@ 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_BITOP: debug("ACT_LAYER_BITOP"); 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 a6cb4538..2c4f306a 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<>(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<= 0; i--) { - if (overlay_stat & (1<= 0; i--) { if (keymap_stat & (1<. #include "action.h" -/* overlays are asigned at layer 16-31 */ -#define OVERLAY_BIT 0x10 -#define OVERLAY_MASK 0x0F - - /* * Default Layer */ @@ -38,7 +33,7 @@ void default_layer_set(uint8_t layer); /* * Keymap Layer */ -#ifndef NO_ACTION_KEYMAP +#ifndef NO_ACTION_LAYER extern uint16_t keymap_stat; /* return current active layer */ uint8_t keymap_get_layer(void); @@ -69,41 +64,6 @@ void keymap_debug(void); #endif -/* - * Overlay Layer - */ -#ifndef NO_ACTION_OVERLAY -extern uint16_t overlay_stat; -/* return current active layer */ -uint8_t overlay_get_layer(void); -void overlay_clear(void); -void overlay_set(uint16_t stat); -void overlay_move(uint8_t layer); -void overlay_on(uint8_t layer); -void overlay_off(uint8_t layer); -void overlay_invert(uint8_t layer); -/* bitwise operation */ -void overlay_or(uint16_t stat); -void overlay_and(uint16_t stat); -void overlay_xor(uint16_t stat); -void overlay_debug(void); -#else -#define overlay_stat 0 -#define overlay_get_layer() -#define overlay_clear() -#define overlay_set(stat) -#define overlay_move(layer) -#define overlay_on(layer) -#define overlay_off(layer) -#define overlay_invert(layer) -#define overlay_or(stat) -#define overlay_and(stat) -#define overlay_xor(stat) -#define overlay_debug() -#endif - - - /* return action depending on current layer status */ action_t layer_switch_get_action(key_t key); diff --git a/keyboard/gh60/config.h b/keyboard/gh60/config.h index fbe58708..567b126b 100644 --- a/keyboard/gh60/config.h +++ b/keyboard/gh60/config.h @@ -61,8 +61,7 @@ along with this program. If not, see . //#define NO_PRINT /* disable action features */ -//#define NO_ACTION_KEYMAP -//#define NO_ACTION_OVERLAY +//#define NO_ACTION_LAYER //#define NO_ACTION_TAPPING //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO diff --git a/keyboard/gh60/keymap.c b/keyboard/gh60/keymap.c index d6af1696..2f41ad4f 100644 --- a/keyboard/gh60/keymap.c +++ b/keyboard/gh60/keymap.c @@ -91,7 +91,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \ LCTL,A, S, D, F, G, H, J, K, L, FN2, QUOT, ENT, \ - LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN1, RSFT, \ + LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN1, FN9, \ LCTL,LGUI,LALT, SPC, RALT,FN3, FN3, FN0), /* Keymap 1: colemak */ KEYMAP_ANSI( @@ -198,54 +198,38 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS), }; -static const uint8_t PROGMEM overlays[][MATRIX_ROWS][MATRIX_COLS] = {}; - /* * Fn action definition */ static const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_KEYMAP_MOMENTARY(4), - [1] = ACTION_KEYMAP_TAP_KEY(5, KC_SLASH), - [2] = ACTION_KEYMAP_TAP_KEY(6, KC_SCLN), - [3] = ACTION_KEYMAP_MOMENTARY(6), - [4] = ACTION_KEYMAP_MOMENTARY(7), // to Layout selector + [0] = ACTION_LAYER_MOMENTARY(4), + [1] = ACTION_LAYER_TAP_KEY(5, KC_SLASH), + [2] = ACTION_LAYER_TAP_KEY(6, KC_SCLN), + [3] = ACTION_LAYER_MOMENTARY(6), + [4] = ACTION_LAYER_MOMENTARY(7), // to Layout selector [5] = ACTION_DEFAULT_LAYER_SET(0), // set qwerty layout [6] = ACTION_DEFAULT_LAYER_SET(1), // set colemak layout [7] = ACTION_DEFAULT_LAYER_SET(2), // set dvorak layout [8] = ACTION_DEFAULT_LAYER_SET(3), // set workman layout + [9] = ACTION_RMOD_TAP_KEY(KC_RSFT, KC_GRV), }; #endif #define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0])) -#define OVERLAYS_SIZE (sizeof(overlays) / sizeof(overlays[0])) #define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0])) /* translates key to keycode */ uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) { - /* Overlay: 16-31(OVERLAY_BIT(0x10) | overlay_layer) */ - if (layer & OVERLAY_BIT) { - layer &= OVERLAY_MASK; - if (layer < OVERLAYS_SIZE) { - return pgm_read_byte(&overlays[(layer)][(key.row)][(key.col)]); - } else { - // XXX: this may cuaes bootlaoder_jump incositent fail. - //debug("key_to_keycode: overlay "); debug_dec(layer); debug(" is invalid.\n"); - return KC_TRANSPARENT; - } - } - /* Keymap: 0-15 */ - else { - if (layer < KEYMAPS_SIZE) { - return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); - } else { - // XXX: this may cuaes bootlaoder_jump incositent fail. - //debug("key_to_keycode: base "); debug_dec(layer); debug(" is invalid.\n"); - // fall back to layer 0 - return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]); - } + if (layer < KEYMAPS_SIZE) { + return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); + } else { + // XXX: this may cuaes bootlaoder_jump inconsistent fail. + //debug("key_to_keycode: base "); debug_dec(layer); debug(" is invalid.\n"); + // fall back to layer 0 + return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]); } } diff --git a/keyboard/hhkb/config.h b/keyboard/hhkb/config.h index 6e26edbe..9df86126 100644 --- a/keyboard/hhkb/config.h +++ b/keyboard/hhkb/config.h @@ -74,8 +74,7 @@ along with this program. If not, see . //#define NO_PRINT /* disable action features */ -//#define NO_ACTION_KEYMAP -//#define NO_ACTION_OVERLAY +//#define NO_ACTION_LAYER //#define NO_ACTION_TAPPING //#define NO_ACTION_ONESHOT //#define NO_ACTION_MACRO