aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/action.c21
-rw-r--r--common/action.h14
2 files changed, 16 insertions, 19 deletions
diff --git a/common/action.c b/common/action.c
index 28d9a95f5..eb8fc2ce2 100644
--- a/common/action.c
+++ b/common/action.c
@@ -452,9 +452,9 @@ static void process_action(keyrecord_t *record)
452 switch (action.layer.code) { 452 switch (action.layer.code) {
453 case 0x00: 453 case 0x00:
454 if (event.pressed) { 454 if (event.pressed) {
455 layer_switch(current_layer | action.layer.opt); 455 layer_switch(current_layer ^ action.layer.opt);
456 } else { 456 } else {
457 layer_switch(current_layer & ~action.layer.opt); 457 layer_switch(current_layer ^ action.layer.opt);
458 } 458 }
459 break; 459 break;
460 case 0xF0: 460 case 0xF0:
@@ -462,25 +462,22 @@ static void process_action(keyrecord_t *record)
462 if (event.pressed) { 462 if (event.pressed) {
463 if (tap_count < TAPPING_TOGGLE) { 463 if (tap_count < TAPPING_TOGGLE) {
464 debug("LAYER_BIT: tap toggle(press).\n"); 464 debug("LAYER_BIT: tap toggle(press).\n");
465 layer_switch(current_layer | action.layer.opt); 465 layer_switch(current_layer ^ action.layer.opt);
466 } 466 }
467 } else { 467 } else {
468 if (tap_count < TAPPING_TOGGLE) { 468 if (tap_count <= TAPPING_TOGGLE) {
469 debug("LAYER_BIT: tap toggle(release).\n"); 469 debug("LAYER_BIT: tap toggle(release).\n");
470 layer_switch(current_layer & ~action.layer.opt); 470 layer_switch(current_layer ^ action.layer.opt);
471 } else {
472 debug("LAYER_BIT: tap toggle.\n");
473 layer_switch(current_layer | action.layer.opt);
474 } 471 }
475 } 472 }
476 break; 473 break;
477 case 0xFF: 474 case 0xFF:
478 // change default layer 475 // change default layer
479 if (event.pressed) { 476 if (event.pressed) {
480 default_layer = current_layer | action.layer.opt; 477 default_layer = current_layer ^ action.layer.opt;
481 layer_switch(default_layer); 478 layer_switch(default_layer);
482 } else { 479 } else {
483 default_layer = current_layer & ~action.layer.opt; 480 default_layer = current_layer ^ action.layer.opt;
484 layer_switch(default_layer); 481 layer_switch(default_layer);
485 } 482 }
486 break; 483 break;
@@ -492,7 +489,7 @@ static void process_action(keyrecord_t *record)
492 register_code(action.layer.code); 489 register_code(action.layer.code);
493 } else { 490 } else {
494 debug("LAYER_BIT: No tap: layer_switch(bit on)\n"); 491 debug("LAYER_BIT: No tap: layer_switch(bit on)\n");
495 layer_switch(current_layer | action.layer.opt); 492 layer_switch(current_layer ^ action.layer.opt);
496 } 493 }
497 } else { 494 } else {
498 if (IS_TAPPING_KEY(event.key) && tap_count > 0) { 495 if (IS_TAPPING_KEY(event.key) && tap_count > 0) {
@@ -500,7 +497,7 @@ static void process_action(keyrecord_t *record)
500 unregister_code(action.layer.code); 497 unregister_code(action.layer.code);
501 } else { 498 } else {
502 debug("LAYER_BIT: No tap: layer_switch(bit off)\n"); 499 debug("LAYER_BIT: No tap: layer_switch(bit off)\n");
503 layer_switch(current_layer & ~action.layer.opt); 500 layer_switch(current_layer ^ action.layer.opt);
504 } 501 }
505 } 502 }
506 break; 503 break;
diff --git a/common/action.h b/common/action.h
index ed3fff6c2..8600e4061 100644
--- a/common/action.h
+++ b/common/action.h
@@ -225,7 +225,6 @@ enum acion_param {
225/* action_t utility */ 225/* action_t utility */
226#define ACTION_NO 0 226#define ACTION_NO 0
227#define ACTION(kind, param) ((kind)<<12 | (param)) 227#define ACTION(kind, param) ((kind)<<12 | (param))
228#define MOD_BITS(mods) (((mods)>>4 | (mods)) & 0x0F)
229 228
230/* Key & Mods */ 229/* Key & Mods */
231#define ACTION_KEY(key) ACTION(ACT_LMODS, key) 230#define ACTION_KEY(key) ACTION(ACT_LMODS, key)
@@ -235,15 +234,16 @@ enum acion_param {
235#define ACTION_RMODS_KEY(mods, key) ACTION(ACT_RMODS, (mods)<<8 | (key)) 234#define ACTION_RMODS_KEY(mods, key) ACTION(ACT_RMODS, (mods)<<8 | (key))
236 235
237/* Mods + Tap key */ 236/* Mods + Tap key */
238#define ACTION_LMODS_TAP(mods, key) ACTION(ACT_LMODS_TAP, MOD_BITS(mods)<<8 | (key)) 237#define MODS4(mods) (((mods)>>4 | (mods)) & 0x0F)
239#define ACTION_LMODS_ONESHOT(mods) ACTION(ACT_LMODS_TAP, MOD_BITS(mods)<<8 | ONE_SHOT) 238#define ACTION_LMODS_TAP(mods, key) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | (key))
240#define ACTION_RMODS_TAP(mods, key) ACTION(ACT_RMODS_TAP, MOD_BITS(mods)<<8 | (key)) 239#define ACTION_LMODS_ONESHOT(mods) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | ONE_SHOT)
241#define ACTION_RMODS_ONESHOT(mods) ACTION(ACT_RMODS_TAP, MOD_BITS(mods)<<8 | ONE_SHOT) 240#define ACTION_RMODS_TAP(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)
242 242
243/* Switch current layer */ 243/* Switch current layer */
244#define ACTION_LAYER_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0x00) 244#define ACTION_LAYER_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0x00)
245#define ACTION_LAYER_SET_ON_RELEASED(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0x00) 245#define ACTION_LAYER_SET_ON_RELEASED(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0x00)
246#define ACTION_LAYER_BIT(bits) ACTION(ACT_LAYER_BIT, (layer)<<8 | 0x00) 246#define ACTION_LAYER_BIT(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | 0x00)
247#define ACTION_LAYER_TO_DEFAULT_ON_PRESSED ACTION(ACT_LAYER_EXT, 0x0<<8 | 0x00) 247#define ACTION_LAYER_TO_DEFAULT_ON_PRESSED ACTION(ACT_LAYER_EXT, 0x0<<8 | 0x00)
248#define ACTION_LAYER_TO_DEFAULT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0x00) 248#define ACTION_LAYER_TO_DEFAULT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0x00)
249/* Switch default layer */ 249/* Switch default layer */
@@ -254,7 +254,7 @@ enum acion_param {
254#define ACTION_LAYER_DEFAULT_SET_CURRENT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0xFF) 254#define ACTION_LAYER_DEFAULT_SET_CURRENT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0xFF)
255/* Layer switch with tap key */ 255/* Layer switch with tap key */
256#define ACTION_LAYER_SET_TAP_KEY(layer, key) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | (key)) 256#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, (layer)<<8 | (key)) 257#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)) 258#define ACTION_LAYER_DEFAULT_SET_TAP_KEY(key) ACTION(ACT_LAYER_EXT, 0x0<<8 | (key))
259/* with tap toggle */ 259/* with tap toggle */
260#define ACTION_LAYER_SET_ON_PRESSED_TAP_TOGGLE(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xF0) 260#define ACTION_LAYER_SET_ON_PRESSED_TAP_TOGGLE(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xF0)