diff options
| -rw-r--r-- | common/action.c | 21 | ||||
| -rw-r--r-- | common/action.h | 14 |
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) |
