diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/action.c | 213 | ||||
| -rw-r--r-- | common/action.h | 190 |
2 files changed, 152 insertions, 251 deletions
diff --git a/common/action.c b/common/action.c index 301a9b6a0..f6e50032e 100644 --- a/common/action.c +++ b/common/action.c | |||
| @@ -319,14 +319,14 @@ static void process_action(keyrecord_t *record) | |||
| 319 | case ACT_USAGE: | 319 | case ACT_USAGE: |
| 320 | #ifdef EXTRAKEY_ENABLE | 320 | #ifdef EXTRAKEY_ENABLE |
| 321 | switch (action.usage.page) { | 321 | switch (action.usage.page) { |
| 322 | case ACTION_USAGE_PAGE_SYSTEM: | 322 | case PAGE_SYSTEM: |
| 323 | if (event.pressed) { | 323 | if (event.pressed) { |
| 324 | host_system_send(action.usage.code); | 324 | host_system_send(action.usage.code); |
| 325 | } else { | 325 | } else { |
| 326 | host_system_send(0); | 326 | host_system_send(0); |
| 327 | } | 327 | } |
| 328 | break; | 328 | break; |
| 329 | case ACTION_USAGE_PAGE_CONSUMER: | 329 | case PAGE_CONSUMER: |
| 330 | if (event.pressed) { | 330 | if (event.pressed) { |
| 331 | host_consumer_send(action.usage.code); | 331 | host_consumer_send(action.usage.code); |
| 332 | } else { | 332 | } else { |
| @@ -351,20 +351,44 @@ static void process_action(keyrecord_t *record) | |||
| 351 | break; | 351 | break; |
| 352 | 352 | ||
| 353 | /* Layer key */ | 353 | /* Layer key */ |
| 354 | case ACT_LAYER_PRESSED: | 354 | case ACT_LAYER: |
| 355 | // layer action when pressed | ||
| 356 | switch (action.layer.code) { | 355 | switch (action.layer.code) { |
| 357 | case 0x00: | 356 | case LAYER_MOMENTARY: /* momentary */ |
| 358 | if (event.pressed) { | 357 | if (event.pressed) { |
| 359 | layer_switch(action.layer.val); | 358 | layer_switch(action.layer.val); |
| 360 | } | 359 | } |
| 361 | //TODO: this is ok? | ||
| 362 | else { | 360 | else { |
| 363 | layer_switch(default_layer); | 361 | layer_switch(default_layer); |
| 364 | } | 362 | } |
| 365 | break; | 363 | break; |
| 366 | case 0xF0: | 364 | case LAYER_ON_PRESS: |
| 367 | // tap toggle | 365 | if (event.pressed) { |
| 366 | layer_switch(action.layer.val); | ||
| 367 | } | ||
| 368 | break; | ||
| 369 | case LAYER_ON_RELEASE: | ||
| 370 | if (!event.pressed) { | ||
| 371 | layer_switch(action.layer.val); | ||
| 372 | } | ||
| 373 | break; | ||
| 374 | case LAYER_DEFAULT: /* default layer */ | ||
| 375 | switch (action.layer.val) { | ||
| 376 | case DEFAULT_ON_BOTH: | ||
| 377 | layer_switch(default_layer); | ||
| 378 | break; | ||
| 379 | case DEFAULT_ON_PRESS: | ||
| 380 | if (event.pressed) { | ||
| 381 | layer_switch(default_layer); | ||
| 382 | } | ||
| 383 | break; | ||
| 384 | case DEFAULT_ON_RELEASE: | ||
| 385 | if (!event.pressed) { | ||
| 386 | layer_switch(default_layer); | ||
| 387 | } | ||
| 388 | break; | ||
| 389 | } | ||
| 390 | break; | ||
| 391 | case LAYER_TAP_TOGGLE: /* switch on hold and toggle on several taps */ | ||
| 368 | if (event.pressed) { | 392 | if (event.pressed) { |
| 369 | if (tap_count < TAPPING_TOGGLE) { | 393 | if (tap_count < TAPPING_TOGGLE) { |
| 370 | layer_switch(action.layer.val); | 394 | layer_switch(action.layer.val); |
| @@ -376,15 +400,13 @@ static void process_action(keyrecord_t *record) | |||
| 376 | } | 400 | } |
| 377 | } | 401 | } |
| 378 | break; | 402 | break; |
| 379 | case 0xFF: | 403 | case LAYER_CHANGE_DEFAULT: /* change default layer */ |
| 380 | // change default layer | ||
| 381 | if (event.pressed) { | 404 | if (event.pressed) { |
| 382 | default_layer = action.layer.val; | 405 | default_layer = action.layer.val; |
| 383 | layer_switch(default_layer); | 406 | layer_switch(default_layer); |
| 384 | } | 407 | } |
| 385 | break; | 408 | break; |
| 386 | default: | 409 | default: /* switch layer on hold and key on tap*/ |
| 387 | // with tap key | ||
| 388 | if (event.pressed) { | 410 | if (event.pressed) { |
| 389 | if (tap_count > 0) { | 411 | if (tap_count > 0) { |
| 390 | debug("LAYER_PRESSED: Tap: register_code\n"); | 412 | debug("LAYER_PRESSED: Tap: register_code\n"); |
| @@ -407,65 +429,26 @@ static void process_action(keyrecord_t *record) | |||
| 407 | break; | 429 | break; |
| 408 | } | 430 | } |
| 409 | break; | 431 | break; |
| 410 | case ACT_LAYER_RELEASED: | 432 | case ACT_LAYER_BIT: |
| 411 | switch (action.layer.code) { | 433 | switch (action.layer.code) { |
| 412 | case 0x00: | 434 | case LAYER_MOMENTARY: /* momentary */ |
| 413 | if (!event.pressed) { | ||
| 414 | layer_switch(action.layer.val); | ||
| 415 | } | ||
| 416 | break; | ||
| 417 | case 0xF0: | ||
| 418 | // tap toggle | ||
| 419 | if (event.pressed) { | 435 | if (event.pressed) { |
| 420 | if (tap_count >= TAPPING_TOGGLE) { | 436 | layer_switch(current_layer ^ action.layer.val); |
| 421 | debug("LAYER_RELEASED: tap toggle.\n"); | ||
| 422 | layer_switch(action.layer.val); | ||
| 423 | } | ||
| 424 | } else { | 437 | } else { |
| 425 | if (tap_count < TAPPING_TOGGLE) { | 438 | layer_switch(current_layer ^ action.layer.val); |
| 426 | layer_switch(action.layer.val); | ||
| 427 | } | ||
| 428 | } | ||
| 429 | break; | ||
| 430 | case 0xFF: | ||
| 431 | // change default layer | ||
| 432 | if (!event.pressed) { | ||
| 433 | default_layer = action.layer.val; | ||
| 434 | layer_switch(default_layer); | ||
| 435 | } | 439 | } |
| 436 | break; | 440 | break; |
| 437 | default: | 441 | case LAYER_ON_PRESS: |
| 438 | // with tap key | ||
| 439 | if (event.pressed) { | 442 | if (event.pressed) { |
| 440 | if (tap_count > 0) { | 443 | layer_switch(current_layer ^ action.layer.val); |
| 441 | debug("LAYER_RELEASED: Tap: register_code\n"); | ||
| 442 | register_code(action.layer.code); | ||
| 443 | } else { | ||
| 444 | debug("LAYER_RELEASED: No tap: NO ACTION\n"); | ||
| 445 | } | ||
| 446 | } else { | ||
| 447 | if (tap_count > 0) { | ||
| 448 | debug("LAYER_RELEASED: Tap: unregister_code\n"); | ||
| 449 | unregister_code(action.layer.code); | ||
| 450 | } else { | ||
| 451 | debug("LAYER_RELEASED: No tap: layer_switch\n"); | ||
| 452 | layer_switch(action.layer.val); | ||
| 453 | } | ||
| 454 | } | 444 | } |
| 455 | break; | 445 | break; |
| 456 | } | 446 | case LAYER_ON_RELEASE: |
| 457 | break; | 447 | if (!event.pressed) { |
| 458 | case ACT_LAYER_BIT: | ||
| 459 | switch (action.layer.code) { | ||
| 460 | case 0x00: | ||
| 461 | if (event.pressed) { | ||
| 462 | layer_switch(current_layer ^ action.layer.val); | ||
| 463 | } else { | ||
| 464 | layer_switch(current_layer ^ action.layer.val); | 448 | layer_switch(current_layer ^ action.layer.val); |
| 465 | } | 449 | } |
| 466 | break; | 450 | break; |
| 467 | case 0xF0: | 451 | case LAYER_TAP_TOGGLE: /* switch on hold and toggle on several taps */ |
| 468 | // tap toggle | ||
| 469 | if (event.pressed) { | 452 | if (event.pressed) { |
| 470 | if (tap_count < TAPPING_TOGGLE) { | 453 | if (tap_count < TAPPING_TOGGLE) { |
| 471 | debug("LAYER_BIT: tap toggle(press).\n"); | 454 | debug("LAYER_BIT: tap toggle(press).\n"); |
| @@ -510,108 +493,6 @@ static void process_action(keyrecord_t *record) | |||
| 510 | break; | 493 | break; |
| 511 | } | 494 | } |
| 512 | break; | 495 | break; |
| 513 | case ACT_LAYER_EXT: | ||
| 514 | switch (action.layer.val) { | ||
| 515 | case 0x00: | ||
| 516 | // set default layer when pressed | ||
| 517 | switch (action.layer.code) { | ||
| 518 | case 0x00: | ||
| 519 | if (event.pressed) { | ||
| 520 | layer_switch(default_layer); | ||
| 521 | } | ||
| 522 | break; | ||
| 523 | case 0xF0: | ||
| 524 | // tap toggle | ||
| 525 | if (event.pressed) { | ||
| 526 | if (tap_count < TAPPING_TOGGLE) { | ||
| 527 | layer_switch(default_layer); | ||
| 528 | } | ||
| 529 | } else { | ||
| 530 | if (tap_count >= TAPPING_TOGGLE) { | ||
| 531 | debug("LAYER_EXT_PRESSED: tap toggle.\n"); | ||
| 532 | layer_switch(default_layer); | ||
| 533 | } | ||
| 534 | } | ||
| 535 | break; | ||
| 536 | case 0xFF: | ||
| 537 | // change default layer | ||
| 538 | if (event.pressed) { | ||
| 539 | default_layer = current_layer; | ||
| 540 | layer_switch(default_layer); | ||
| 541 | } | ||
| 542 | break; | ||
| 543 | default: | ||
| 544 | // with tap key | ||
| 545 | if (event.pressed) { | ||
| 546 | if (tap_count > 0) { | ||
| 547 | debug("LAYER_EXT_PRESSED: Tap: register_code\n"); | ||
| 548 | register_code(action.layer.code); | ||
| 549 | } else { | ||
| 550 | debug("LAYER_EXT_PRESSED: No tap: layer_switch\n"); | ||
| 551 | layer_switch(default_layer); | ||
| 552 | } | ||
| 553 | } else { | ||
| 554 | if (tap_count > 0) { | ||
| 555 | debug("LAYER_EXT_PRESSED: Tap: unregister_code\n"); | ||
| 556 | unregister_code(action.layer.code); | ||
| 557 | } else { | ||
| 558 | debug("LAYER_EXT_PRESSED: No tap: NO ACTION\n"); | ||
| 559 | } | ||
| 560 | } | ||
| 561 | break; | ||
| 562 | } | ||
| 563 | break; | ||
| 564 | case 0x01: | ||
| 565 | // set default layer when released | ||
| 566 | switch (action.layer.code) { | ||
| 567 | case 0x00: | ||
| 568 | if (!event.pressed) { | ||
| 569 | layer_switch(default_layer); | ||
| 570 | } | ||
| 571 | break; | ||
| 572 | case 0xF0: | ||
| 573 | // tap toggle | ||
| 574 | if (event.pressed) { | ||
| 575 | if (tap_count >= TAPPING_TOGGLE) { | ||
| 576 | debug("LAYER_EXT_RELEASED: tap toggle.\n"); | ||
| 577 | layer_switch(default_layer); | ||
| 578 | } | ||
| 579 | } else { | ||
| 580 | if (tap_count < TAPPING_TOGGLE) { | ||
| 581 | layer_switch(default_layer); | ||
| 582 | } | ||
| 583 | } | ||
| 584 | break; | ||
| 585 | case 0xFF: | ||
| 586 | // change default layer | ||
| 587 | if (!event.pressed) { | ||
| 588 | default_layer = current_layer; | ||
| 589 | layer_switch(default_layer); | ||
| 590 | } | ||
| 591 | break; | ||
| 592 | default: | ||
| 593 | // with tap key | ||
| 594 | if (event.pressed) { | ||
| 595 | if (tap_count > 0) { | ||
| 596 | debug("LAYER_EXT_RELEASED: Tap: register_code\n"); | ||
| 597 | register_code(action.layer.code); | ||
| 598 | } else { | ||
| 599 | debug("LAYER_EXT_RELEASED: No tap: NO ACTION\n"); | ||
| 600 | } | ||
| 601 | } else { | ||
| 602 | if (tap_count > 0) { | ||
| 603 | debug("LAYER_EXT_RELEASED: Tap: unregister_code\n"); | ||
| 604 | unregister_code(action.layer.code); | ||
| 605 | } else { | ||
| 606 | debug("LAYER_EXT_RELEASED: No tap: layer_switch\n"); | ||
| 607 | layer_switch(default_layer); | ||
| 608 | } | ||
| 609 | } | ||
| 610 | break; | ||
| 611 | } | ||
| 612 | break; | ||
| 613 | } | ||
| 614 | break; | ||
| 615 | 496 | ||
| 616 | /* Extentions */ | 497 | /* Extentions */ |
| 617 | case ACT_MACRO: | 498 | case ACT_MACRO: |
| @@ -932,7 +813,7 @@ bool is_tap_key(key_t key) | |||
| 932 | case ACT_LMODS_TAP: | 813 | case ACT_LMODS_TAP: |
| 933 | case ACT_RMODS_TAP: | 814 | case ACT_RMODS_TAP: |
| 934 | return true; | 815 | return true; |
| 935 | case ACT_LAYER_PRESSED: | 816 | case ACT_LAYER: |
| 936 | case ACT_LAYER_BIT: | 817 | case ACT_LAYER_BIT: |
| 937 | switch (action.layer.code) { | 818 | switch (action.layer.code) { |
| 938 | case 0x00: | 819 | case 0x00: |
| @@ -944,7 +825,7 @@ bool is_tap_key(key_t key) | |||
| 944 | } | 825 | } |
| 945 | return false; | 826 | return false; |
| 946 | case ACT_FUNCTION: | 827 | case ACT_FUNCTION: |
| 947 | if (action.func.opt & O_TAP) { | 828 | if (action.func.opt & FUNC_TAP) { |
| 948 | return true; | 829 | return true; |
| 949 | } | 830 | } |
| 950 | return false; | 831 | return false; |
| @@ -975,10 +856,8 @@ static void debug_action(action_t action) | |||
| 975 | case ACT_RMODS_TAP: debug("ACT_RMODS_TAP"); break; | 856 | case ACT_RMODS_TAP: debug("ACT_RMODS_TAP"); break; |
| 976 | case ACT_USAGE: debug("ACT_USAGE"); break; | 857 | case ACT_USAGE: debug("ACT_USAGE"); break; |
| 977 | case ACT_MOUSEKEY: debug("ACT_MOUSEKEY"); break; | 858 | case ACT_MOUSEKEY: debug("ACT_MOUSEKEY"); break; |
| 978 | case ACT_LAYER_PRESSED: debug("ACT_LAYER_PRESSED"); break; | 859 | case ACT_LAYER: debug("ACT_LAYER"); break; |
| 979 | case ACT_LAYER_RELEASED: debug("ACT_LAYER_RELEASED"); break; | ||
| 980 | case ACT_LAYER_BIT: debug("ACT_LAYER_BIT"); break; | 860 | case ACT_LAYER_BIT: debug("ACT_LAYER_BIT"); break; |
| 981 | case ACT_LAYER_EXT: debug("ACT_LAYER_EXT"); break; | ||
| 982 | case ACT_MACRO: debug("ACT_MACRO"); break; | 861 | case ACT_MACRO: debug("ACT_MACRO"); break; |
| 983 | case ACT_COMMAND: debug("ACT_COMMAND"); break; | 862 | case ACT_COMMAND: debug("ACT_COMMAND"); break; |
| 984 | case ACT_FUNCTION: debug("ACT_FUNCTION"); break; | 863 | case ACT_FUNCTION: debug("ACT_FUNCTION"); break; |
diff --git a/common/action.h b/common/action.h index b1e958a26..800554eb8 100644 --- a/common/action.h +++ b/common/action.h | |||
| @@ -150,42 +150,26 @@ ACT_MOUSEKEY(0110): | |||
| 150 | 150 | ||
| 151 | Layer Actions | 151 | Layer Actions |
| 152 | ------------- | 152 | ------------- |
| 153 | TODO: reconsider layer methods. | 153 | ACT_LAYER(1000): Set layer |
| 154 | 1 momemtary + tap key up: L, down: default | 154 | ACT_LAYER_BIT(1001): Bit-op layer |
| 155 | 1 bitwise + tap key up: xor B, down: xor B | 155 | |
| 156 | 3 momemtary go + tap key? up: X, down: | 156 | 1000|LLLL|0000 0000 set L to layer on press and set default on release(momentary) |
| 157 | 3 toggle(mementary back) + tap key? up: down: Y | 157 | 1000|LLLL|0000 0001 set L to layer on press |
| 158 | 3 no tap up: X, down: Y | 158 | 1000|LLLL|0000 0010 set L to layer on release |
| 159 | 159 | 1000|----|0000 0011 set default to layer on both(return to default layer) | |
| 160 | ACT_LAYER_PRESSED(1000): Set layer on key pressed | 160 | 1000|LLLL|xxxx xxxx set L to layer while hold and send key on tap |
| 161 | ACT_LAYER_RELEASED(1001): Set layer on key released | 161 | 1000|LLLL|1111 0000 set L to layer while hold and toggle on several taps |
| 162 | ACT_LAYER_BIT(1010): On/Off layer bit | 162 | 1000|LLLL|1111 1111 set L to default and layer(on press) |
| 163 | ACT_LAYER_EXT(1011): Extentions | 163 | |
| 164 | 164 | 1001|BBBB|0000 0000 (not used) | |
| 165 | 1000|LLLL|0000 0000 set layer L when pressed | 165 | 1001|BBBB|0000 0001 bit-xor layer with B on press |
| 166 | 1001|LLLL|0000 0000 set layer L when released | 166 | 1001|BBBB|0000 0010 bit-xor layer with B on release |
| 167 | 1010|BBBB|0000 0000 on/off bit B when pressed/released | 167 | 1001|BBBB|0000 0011 bit-xor layer with B on both(momentary) |
| 168 | 1011|0000|0000 0000 set default layer when pressed | 168 | 1001|BBBB|xxxx xxxx bit-xor layer with B while hold and send key on tap |
| 169 | 1011|0001|0000 0000 set default layer when released | 169 | 1001|BBBB|1111 0000 bit-xor layer with B while hold and toggle on several taps |
| 170 | 170 | 1001|BBBB|1111 1111 bit-xor default with B and set layer(on press) | |
| 171 | 1000|LLLL|1111 0000 set layer L when pressed + tap toggle | 171 | |
| 172 | 1001|LLLL|1111 0000 set layer L when released + tap toggle | 172 | |
| 173 | 1010|BBBB|1111 0000 on/off bit B when pressed/released + tap toggle | ||
| 174 | 1011|0000|1111 0000 set default layer when pressed + tap toggle | ||
| 175 | 1011|0001|1111 0000 set default layer when released + tap toggle | ||
| 176 | |||
| 177 | 1000|LLLL|1111 1111 set L to default layer when pressed | ||
| 178 | 1001|LLLL|1111 1111 set L to default layer when released | ||
| 179 | 1010|BBBB|1111 1111 on/off bit B of default layer when pressed/released | ||
| 180 | 1011|0000|1111 1111 set current to default layer when pressed | ||
| 181 | 1011|0001|1111 1111 set current to default layer when released | ||
| 182 | |||
| 183 | 1000|LLLL| keycode set layer L when pressed + tap key | ||
| 184 | 1001|LLLL| keyocde set layer L when released + tap key | ||
| 185 | 1010|BBBB| keyocde on/off bit B when pressed/released + tap key | ||
| 186 | 1011|0000| keyocde set default layer when pressed + tap key | ||
| 187 | 1011|0001| keyocde set default layer when released + tap key | ||
| 188 | |||
| 189 | 173 | ||
| 190 | Extensions(11XX) | 174 | Extensions(11XX) |
| 191 | ---------------- | 175 | ---------------- |
| @@ -212,24 +196,14 @@ enum action_kind_id { | |||
| 212 | ACT_USAGE = 0b0100, | 196 | ACT_USAGE = 0b0100, |
| 213 | ACT_MOUSEKEY = 0b0101, | 197 | ACT_MOUSEKEY = 0b0101, |
| 214 | 198 | ||
| 215 | ACT_LAYER_PRESSED = 0b1000, | 199 | ACT_LAYER = 0b1000, |
| 216 | ACT_LAYER_RELEASED = 0b1001, | 200 | ACT_LAYER_BIT = 0b1001, |
| 217 | ACT_LAYER_BIT = 0b1010, | ||
| 218 | ACT_LAYER_EXT = 0b1011, | ||
| 219 | 201 | ||
| 220 | ACT_MACRO = 0b1100, | 202 | ACT_MACRO = 0b1100, |
| 221 | ACT_COMMAND = 0b1110, | 203 | ACT_COMMAND = 0b1110, |
| 222 | ACT_FUNCTION = 0b1111 | 204 | ACT_FUNCTION = 0b1111 |
| 223 | }; | 205 | }; |
| 224 | 206 | ||
| 225 | enum params { | ||
| 226 | P_ONESHOT = 0x00, | ||
| 227 | }; | ||
| 228 | |||
| 229 | enum options { | ||
| 230 | O_TAP = 0x8, | ||
| 231 | }; | ||
| 232 | |||
| 233 | 207 | ||
| 234 | /* action utility */ | 208 | /* action utility */ |
| 235 | #define ACTION_NO 0 | 209 | #define ACTION_NO 0 |
| @@ -250,48 +224,93 @@ enum options { | |||
| 250 | #define ACTION_RMOD_KEY(mod, key) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | (key)) | 224 | #define ACTION_RMOD_KEY(mod, key) ACTION(ACT_RMODS, MODS4(MOD_BIT(mod))<<8 | (key)) |
| 251 | 225 | ||
| 252 | /* Mods + Tap key */ | 226 | /* Mods + Tap key */ |
| 227 | enum mods_codes { | ||
| 228 | MODS_ONESHOT = 0x00, | ||
| 229 | }; | ||
| 253 | #define ACTION_LMODS_TAP_KEY(mods, key) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | (key)) | 230 | #define ACTION_LMODS_TAP_KEY(mods, key) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | (key)) |
| 254 | #define ACTION_LMODS_ONESHOT(mods) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | P_ONESHOT) | 231 | #define ACTION_LMODS_ONESHOT(mods) ACTION(ACT_LMODS_TAP, MODS4(mods)<<8 | MODS_ONESHOT) |
| 255 | #define ACTION_RMODS_TAP_KEY(mods, key) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | (key)) | 232 | #define ACTION_RMODS_TAP_KEY(mods, key) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | (key)) |
| 256 | #define ACTION_RMODS_ONESHOT(mods) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | P_ONESHOT) | 233 | #define ACTION_RMODS_ONESHOT(mods) ACTION(ACT_RMODS_TAP, MODS4(mods)<<8 | MODS_ONESHOT) |
| 257 | /* Mod + Tap key */ | 234 | /* Mod + Tap key */ |
| 258 | #define ACTION_LMOD_TAP_KEY(mod, key) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) | 235 | #define ACTION_LMOD_TAP_KEY(mod, key) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) |
| 259 | #define ACTION_LMOD_ONESHOT(mod) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | P_ONESHOT) | 236 | #define ACTION_LMOD_ONESHOT(mod) ACTION(ACT_LMODS_TAP, MODS4(MOD_BIT(mod))<<8 | MODS_ONESHOT) |
| 260 | #define ACTION_RMOD_TAP_KEY(mod, key) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) | 237 | #define ACTION_RMOD_TAP_KEY(mod, key) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | (key)) |
| 261 | #define ACTION_RMOD_ONESHOT(mod) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | P_ONESHOT) | 238 | #define ACTION_RMOD_ONESHOT(mod) ACTION(ACT_RMODS_TAP, MODS4(MOD_BIT(mod))<<8 | MODS_ONESHOT) |
| 262 | 239 | ||
| 263 | // TODO: contemplate about layer action | 240 | |
| 264 | /* Switch current layer */ | 241 | /* |
| 265 | #define ACTION_LAYER_SET(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0x00) | 242 | * Switch layer |
| 266 | #define ACTION_LAYER_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0x00) | 243 | */ |
| 267 | #define ACTION_LAYER_SET_ON_RELEASED(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0x00) | 244 | enum layer_codes { |
| 268 | #define ACTION_LAYER_BIT(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | 0x00) | 245 | LAYER_MOMENTARY = 0, |
| 269 | #define ACTION_LAYER_SET_DEFAULT ACTION(ACT_LAYER_EXT, 0x0<<8 | 0x00) | 246 | LAYER_ON_PRESS = 1, |
| 270 | #define ACTION_LAYER_RETURN_DEFAULT ACTION(ACT_LAYER_EXT, 0x1<<8 | 0x00) | 247 | LAYER_ON_RELEASE = 2, |
| 271 | #define ACTION_LAYER_SET_DEFAULT_ON_PRESSED ACTION(ACT_LAYER_EXT, 0x0<<8 | 0x00) | 248 | LAYER_DEFAULT =3, |
| 272 | #define ACTION_LAYER_SET_DEFAULT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0x00) | 249 | LAYER_TAP_TOGGLE = 0xF0, |
| 273 | /* Switch default layer */ | 250 | LAYER_CHANGE_DEFAULT = 0xFF |
| 274 | #define ACTION_LAYER_DEFAULT_SET(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xFF) | 251 | }; |
| 275 | #define ACTION_LAYER_DEFAULT_SET_ON_PRESSED(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xFF) | 252 | enum layer_vals_default { |
| 276 | #define ACTION_LAYER_DEFAULT_SET_ON_RELEASED(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0xFF) | 253 | DEFAULT_ON_PRESS = 1, |
| 277 | #define ACTION_LAYER_DEFAULT_BIT(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | 0xFF) | 254 | DEFAULT_ON_RELEASE = 2, |
| 278 | #define ACTION_LAYER_DEFAULT_SET_CURRENT_ON_PRESSED ACTION(ACT_LAYER_EXT, 0x0<<8 | 0xFF) | 255 | DEFAULT_ON_BOTH = 3, |
| 279 | #define ACTION_LAYER_DEFAULT_SET_CURRENT_ON_RELEASED ACTION(ACT_LAYER_EXT, 0x1<<8 | 0xFF) | 256 | }; |
| 280 | /* Layer switch with tap key */ | 257 | |
| 281 | #define ACTION_LAYER_SET_TAP_KEY(layer, key) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | (key)) | 258 | /* |
| 282 | #define ACTION_LAYER_BIT_TAP_KEY(bits, key) ACTION(ACT_LAYER_BIT, (bits)<<8 | (key)) | 259 | * return to default layer |
| 283 | #define ACTION_LAYER_DEFAULT_SET_TAP_KEY(key) ACTION(ACT_LAYER_EXT, 0x0<<8 | (key)) | 260 | */ |
| 284 | /* Layer switch with tap toggle */ | 261 | #define ACTION_LAYER_DEFAULT ACTION_LAYER_DEFAULT_R |
| 285 | #define ACTION_LAYER_SET_ON_PRESSED_TAP_TOGGLE(layer) ACTION(ACT_LAYER_PRESSED, (layer)<<8 | 0xF0) | 262 | /* set default layer on press */ |
| 286 | #define ACTION_LAYER_SET_ON_RELEASED_TAP_TOGGLE(layer) ACTION(ACT_LAYER_RELEASED, (layer)<<8 | 0xF0) | 263 | #define ACTION_LAYER_DEFAULT_P ACTION(ACT_LAYER, DEFAULT_ON_PRESS<<8 | LAYER_DEFAULT) |
| 287 | #define ACTION_LAYER_BIT_TAP_TOGGLE(layer) ACTION(ACT_LAYER_BIT, (layer)<<8 | 0xF0) | 264 | /* set default layer on release */ |
| 288 | #define ACTION_LAYER_DEFAULT_TAP_TOGGLE ACTION(ACT_LAYER_EXT, 0x0<<8 | 0xF0) | 265 | #define ACTION_LAYER_DEFAULT_R ACTION(ACT_LAYER, DEFAULT_ON_RELEASE<<8 | LAYER_DEFAULT) |
| 266 | /* change default layer and set layer */ | ||
| 267 | |||
| 268 | /* | ||
| 269 | * Set layer | ||
| 270 | */ | ||
| 271 | /* set layer on press and set default on release */ | ||
| 272 | #define ACTION_LAYER_SET(layer) ACTION_LAYER_SET_MOMENTARY(layer) | ||
| 273 | #define ACTION_LAYER_SET_MOMENTARY(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_MOMENTARY) | ||
| 274 | /* set layer on press and none on release */ | ||
| 275 | #define ACTION_LAYER_SET_TOGGLE(layer) ACTION_LAYER_SET_R(layer) | ||
| 276 | /* set layer while hold and send key on tap */ | ||
| 277 | #define ACTION_LAYER_SET_TAP_KEY(layer, key) ACTION(ACT_LAYER, (layer)<<8 | (key)) | ||
| 278 | /* set layer on press */ | ||
| 279 | #define ACTION_LAYER_SET_P(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_ON_PRESS) | ||
| 280 | /* set layer on release */ | ||
| 281 | #define ACTION_LAYER_SET_R(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_ON_RELEASE) | ||
| 282 | /* set layer on hold and toggle on several taps */ | ||
| 283 | #define ACTION_LAYER_SET_TAP_TOGGLE(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_TAP_TOGGLE) | ||
| 284 | /* set default layer on both press and release */ | ||
| 285 | #define ACTION_LAYER_SET_DEFAULT(layer) ACTION(ACT_LAYER, (layer)<<8 | LAYER_CHANGE_DEFAULT) | ||
| 286 | |||
| 287 | /* | ||
| 288 | * Bit-op layer | ||
| 289 | */ | ||
| 290 | /* bit-xor on both press and release */ | ||
| 291 | #define ACTION_LAYER_BIT(bits) ACTION_LAYER_BIT_MOMENTARY(bits) | ||
| 292 | #define ACTION_LAYER_BIT_MOMENTARY(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_MOMENTARY) | ||
| 293 | /* bit-xor on press */ | ||
| 294 | #define ACTION_LAYER_BIT_TOGGLE(bits) ACTION_LAYER_BIT_R(bits) | ||
| 295 | /* bit-xor while hold and send key on tap */ | ||
| 296 | #define ACTION_LAYER_BIT_TAP_KEY(bits, key) ACTION(ACT_LAYER_BIT, (bits)<<8 | (key)) | ||
| 297 | /* bit-xor on press */ | ||
| 298 | #define ACTION_LAYER_BIT_P(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_ON_PRESS) | ||
| 299 | /* bit-xor on release */ | ||
| 300 | #define ACTION_LAYER_BIT_R(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_ON_RELEASE) | ||
| 301 | /* bit-xor while hold and toggle on several taps */ | ||
| 302 | #define ACTION_LAYER_BIT_TAP_TOGGLE(bits) ACTION(ACT_LAYER_BIT, (bits)<<8 | LAYER_TAP_TOGGLE) | ||
| 303 | /* bit-xor default layer and set layer */ | ||
| 304 | #define ACTION_LAYER_BIT_DEFAULT(bits) ACTION(ACT_LAYER, (bits)<<8 | LAYER_CHANGE_DEFAULT) | ||
| 305 | |||
| 289 | 306 | ||
| 290 | /* HID Usage */ | 307 | /* HID Usage */ |
| 291 | #define ACTION_USAGE_PAGE_SYSTEM 0 | 308 | enum usage_pages { |
| 292 | #define ACTION_USAGE_PAGE_CONSUMER 1 | 309 | PAGE_SYSTEM, |
| 293 | #define ACTION_USAGE_SYSTEM(id) ACTION(ACT_USAGE, ACTION_USAGE_PAGE_SYSTEM<<10 | (id)) | 310 | PAGE_CONSUMER |
| 294 | #define ACTION_USAGE_CONSUMER(id) ACTION(ACT_USAGE, ACTION_USAGE_PAGE_CONSUMER<<10 | (id)) | 311 | }; |
| 312 | #define ACTION_USAGE_SYSTEM(id) ACTION(ACT_USAGE, PAGE_SYSTEM<<10 | (id)) | ||
| 313 | #define ACTION_USAGE_CONSUMER(id) ACTION(ACT_USAGE, PAGE_CONSUMER<<10 | (id)) | ||
| 295 | 314 | ||
| 296 | /* Mousekey */ | 315 | /* Mousekey */ |
| 297 | #define ACTION_MOUSEKEY(key) ACTION(ACT_MOUSEKEY, key) | 316 | #define ACTION_MOUSEKEY(key) ACTION(ACT_MOUSEKEY, key) |
| @@ -303,7 +322,10 @@ enum options { | |||
| 303 | #define ACTION_COMMAND(opt, id) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) | 322 | #define ACTION_COMMAND(opt, id) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) |
| 304 | 323 | ||
| 305 | /* Function */ | 324 | /* Function */ |
| 325 | enum function_opts { | ||
| 326 | FUNC_TAP = 0x8, | ||
| 327 | }; | ||
| 306 | #define ACTION_FUNCTION(id, opt) ACTION(ACT_FUNCTION, (opt)<<8 | id) | 328 | #define ACTION_FUNCTION(id, opt) ACTION(ACT_FUNCTION, (opt)<<8 | id) |
| 307 | #define ACTION_FUNCTION_TAP(id) ACTION(ACT_FUNCTION, O_TAP<<8 | id) | 329 | #define ACTION_FUNCTION_TAP(id) ACTION(ACT_FUNCTION, FUNC_TAP<<8 | id) |
| 308 | 330 | ||
| 309 | #endif /* ACTION_H */ | 331 | #endif /* ACTION_H */ |
