aboutsummaryrefslogtreecommitdiff
path: root/tmk_core/common
diff options
context:
space:
mode:
authorDrashna Jaelre <drashna@live.com>2021-01-27 09:38:34 -0800
committerGitHub <noreply@github.com>2021-01-28 04:38:34 +1100
commit99f3df28939d89b7fc2d2e7c0ee21b0879c7813f (patch)
tree2d399785f60ddc0bae95c11e7d6f1462a5511ca1 /tmk_core/common
parentbab9849a8bc799f43e4dc18674c07625630cab0d (diff)
downloadqmk_firmware-99f3df28939d89b7fc2d2e7c0ee21b0879c7813f.tar.gz
qmk_firmware-99f3df28939d89b7fc2d2e7c0ee21b0879c7813f.zip
Add support for 8 buttons to mouse report (#10807)
* Add support for 8 buttons to mouse report This includes support for 8 buttons in mousekeys. However, this does move the keys around due to the fact that the last mousekey keycode is already 0xFF, so any past that would not work with register_code and the like, breaking them for tap hold keys, encoders, and other features. * Update mouse key docs * Add changes based on feedback * Fix VUSB report size comment Because drashna red gud * Fix typo in action.c * Fix IS_MOUSE_BUTTON check * Change start range for mousekeys so that the end is 0xFF properly * condense mousekeys check
Diffstat (limited to 'tmk_core/common')
-rw-r--r--tmk_core/common/action.c18
-rw-r--r--tmk_core/common/keycode.h14
-rw-r--r--tmk_core/common/mousekey.c48
-rw-r--r--tmk_core/common/report.h5
4 files changed, 40 insertions, 45 deletions
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c
index a7432bae5..a3830abbf 100644
--- a/tmk_core/common/action.c
+++ b/tmk_core/common/action.c
@@ -443,6 +443,15 @@ void process_action(keyrecord_t *record, action_t action) {
443 case KC_MS_BTN5: 443 case KC_MS_BTN5:
444 register_button(true, MOUSE_BTN5); 444 register_button(true, MOUSE_BTN5);
445 break; 445 break;
446 case KC_MS_BTN6:
447 register_button(true, MOUSE_BTN6);
448 break;
449 case KC_MS_BTN7:
450 register_button(true, MOUSE_BTN7);
451 break;
452 case KC_MS_BTN8:
453 register_button(true, MOUSE_BTN8);
454 break;
446# endif 455# endif
447 default: 456 default:
448 mousekey_send(); 457 mousekey_send();
@@ -469,6 +478,15 @@ void process_action(keyrecord_t *record, action_t action) {
469 case KC_MS_BTN5: 478 case KC_MS_BTN5:
470 register_button(false, MOUSE_BTN5); 479 register_button(false, MOUSE_BTN5);
471 break; 480 break;
481 case KC_MS_BTN6:
482 register_button(false, MOUSE_BTN6);
483 break;
484 case KC_MS_BTN7:
485 register_button(false, MOUSE_BTN7);
486 break;
487 case KC_MS_BTN8:
488 register_button(false, MOUSE_BTN8);
489 break;
472# endif 490# endif
473 default: 491 default:
474 mousekey_send(); 492 mousekey_send();
diff --git a/tmk_core/common/keycode.h b/tmk_core/common/keycode.h
index d35e44d8d..efad92b23 100644
--- a/tmk_core/common/keycode.h
+++ b/tmk_core/common/keycode.h
@@ -39,7 +39,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
39 39
40#define IS_MOUSEKEY(code) (KC_MS_UP <= (code) && (code) <= KC_MS_ACCEL2) 40#define IS_MOUSEKEY(code) (KC_MS_UP <= (code) && (code) <= KC_MS_ACCEL2)
41#define IS_MOUSEKEY_MOVE(code) (KC_MS_UP <= (code) && (code) <= KC_MS_RIGHT) 41#define IS_MOUSEKEY_MOVE(code) (KC_MS_UP <= (code) && (code) <= KC_MS_RIGHT)
42#define IS_MOUSEKEY_BUTTON(code) (KC_MS_BTN1 <= (code) && (code) <= KC_MS_BTN5) 42#define IS_MOUSEKEY_BUTTON(code) (KC_MS_BTN1 <= (code) && (code) <= KC_MS_BTN8)
43#define IS_MOUSEKEY_WHEEL(code) (KC_MS_WH_UP <= (code) && (code) <= KC_MS_WH_RIGHT) 43#define IS_MOUSEKEY_WHEEL(code) (KC_MS_WH_UP <= (code) && (code) <= KC_MS_WH_RIGHT)
44#define IS_MOUSEKEY_ACCEL(code) (KC_MS_ACCEL0 <= (code) && (code) <= KC_MS_ACCEL2) 44#define IS_MOUSEKEY_ACCEL(code) (KC_MS_ACCEL0 <= (code) && (code) <= KC_MS_ACCEL2)
45 45
@@ -205,6 +205,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
205#define KC_BTN3 KC_MS_BTN3 205#define KC_BTN3 KC_MS_BTN3
206#define KC_BTN4 KC_MS_BTN4 206#define KC_BTN4 KC_MS_BTN4
207#define KC_BTN5 KC_MS_BTN5 207#define KC_BTN5 KC_MS_BTN5
208#define KC_BTN6 KC_MS_BTN6
209#define KC_BTN7 KC_MS_BTN7
210#define KC_BTN8 KC_MS_BTN8
208#define KC_WH_U KC_MS_WH_UP 211#define KC_WH_U KC_MS_WH_UP
209#define KC_WH_D KC_MS_WH_DOWN 212#define KC_WH_D KC_MS_WH_DOWN
210#define KC_WH_L KC_MS_WH_LEFT 213#define KC_WH_L KC_MS_WH_LEFT
@@ -521,15 +524,18 @@ enum internal_special_keycodes {
521 524
522enum mouse_keys { 525enum mouse_keys {
523 /* Mouse Buttons */ 526 /* Mouse Buttons */
524 KC_MS_UP = 0xF0, 527 KC_MS_UP = 0xED,
525 KC_MS_DOWN, 528 KC_MS_DOWN,
526 KC_MS_LEFT, 529 KC_MS_LEFT,
527 KC_MS_RIGHT, 530 KC_MS_RIGHT, // 0xF0
528 KC_MS_BTN1, 531 KC_MS_BTN1,
529 KC_MS_BTN2, 532 KC_MS_BTN2,
530 KC_MS_BTN3, 533 KC_MS_BTN3,
531 KC_MS_BTN4, 534 KC_MS_BTN4,
532 KC_MS_BTN5, 535 KC_MS_BTN5,
536 KC_MS_BTN6,
537 KC_MS_BTN7,
538 KC_MS_BTN8,
533 539
534 /* Mouse Wheel */ 540 /* Mouse Wheel */
535 KC_MS_WH_UP, 541 KC_MS_WH_UP,
@@ -540,5 +546,5 @@ enum mouse_keys {
540 /* Acceleration */ 546 /* Acceleration */
541 KC_MS_ACCEL0, 547 KC_MS_ACCEL0,
542 KC_MS_ACCEL1, 548 KC_MS_ACCEL1,
543 KC_MS_ACCEL2 549 KC_MS_ACCEL2 // 0xFF
544}; 550};
diff --git a/tmk_core/common/mousekey.c b/tmk_core/common/mousekey.c
index 6c9df6723..d8cf63f77 100644
--- a/tmk_core/common/mousekey.c
+++ b/tmk_core/common/mousekey.c
@@ -278,16 +278,8 @@ void mousekey_on(uint8_t code) {
278 mouse_report.h = wheel_unit() * -1; 278 mouse_report.h = wheel_unit() * -1;
279 else if (code == KC_MS_WH_RIGHT) 279 else if (code == KC_MS_WH_RIGHT)
280 mouse_report.h = wheel_unit(); 280 mouse_report.h = wheel_unit();
281 else if (code == KC_MS_BTN1) 281 else if (IS_MOUSEKEY_BUTTON(code))
282 mouse_report.buttons |= MOUSE_BTN1; 282 mouse_report.buttons |= 1 << (code - KC_MS_BTN1);
283 else if (code == KC_MS_BTN2)
284 mouse_report.buttons |= MOUSE_BTN2;
285 else if (code == KC_MS_BTN3)
286 mouse_report.buttons |= MOUSE_BTN3;
287 else if (code == KC_MS_BTN4)
288 mouse_report.buttons |= MOUSE_BTN4;
289 else if (code == KC_MS_BTN5)
290 mouse_report.buttons |= MOUSE_BTN5;
291 else if (code == KC_MS_ACCEL0) 283 else if (code == KC_MS_ACCEL0)
292 mousekey_accel |= (1 << 0); 284 mousekey_accel |= (1 << 0);
293 else if (code == KC_MS_ACCEL1) 285 else if (code == KC_MS_ACCEL1)
@@ -313,16 +305,8 @@ void mousekey_off(uint8_t code) {
313 mouse_report.h = 0; 305 mouse_report.h = 0;
314 else if (code == KC_MS_WH_RIGHT && mouse_report.h > 0) 306 else if (code == KC_MS_WH_RIGHT && mouse_report.h > 0)
315 mouse_report.h = 0; 307 mouse_report.h = 0;
316 else if (code == KC_MS_BTN1) 308 else if (IS_MOUSEKEY_BUTTON(code))
317 mouse_report.buttons &= ~MOUSE_BTN1; 309 mouse_report.buttons &= ~(1 << (code - KC_MS_BTN1));
318 else if (code == KC_MS_BTN2)
319 mouse_report.buttons &= ~MOUSE_BTN2;
320 else if (code == KC_MS_BTN3)
321 mouse_report.buttons &= ~MOUSE_BTN3;
322 else if (code == KC_MS_BTN4)
323 mouse_report.buttons &= ~MOUSE_BTN4;
324 else if (code == KC_MS_BTN5)
325 mouse_report.buttons &= ~MOUSE_BTN5;
326 else if (code == KC_MS_ACCEL0) 310 else if (code == KC_MS_ACCEL0)
327 mousekey_accel &= ~(1 << 0); 311 mousekey_accel &= ~(1 << 0);
328 else if (code == KC_MS_ACCEL1) 312 else if (code == KC_MS_ACCEL1)
@@ -423,16 +407,8 @@ void mousekey_on(uint8_t code) {
423 mouse_report.h = w_offset * -1; 407 mouse_report.h = w_offset * -1;
424 else if (code == KC_MS_WH_RIGHT) 408 else if (code == KC_MS_WH_RIGHT)
425 mouse_report.h = w_offset; 409 mouse_report.h = w_offset;
426 else if (code == KC_MS_BTN1) 410 else if (IS_MOUSEKEY_BUTTON(code))
427 mouse_report.buttons |= MOUSE_BTN1; 411 mouse_report.buttons |= 1 << (code - KC_MS_BTN1);
428 else if (code == KC_MS_BTN2)
429 mouse_report.buttons |= MOUSE_BTN2;
430 else if (code == KC_MS_BTN3)
431 mouse_report.buttons |= MOUSE_BTN3;
432 else if (code == KC_MS_BTN4)
433 mouse_report.buttons |= MOUSE_BTN4;
434 else if (code == KC_MS_BTN5)
435 mouse_report.buttons |= MOUSE_BTN5;
436 else if (code == KC_MS_ACCEL0) 412 else if (code == KC_MS_ACCEL0)
437 mk_speed = mkspd_0; 413 mk_speed = mkspd_0;
438 else if (code == KC_MS_ACCEL1) 414 else if (code == KC_MS_ACCEL1)
@@ -462,16 +438,8 @@ void mousekey_off(uint8_t code) {
462 mouse_report.h = 0; 438 mouse_report.h = 0;
463 else if (code == KC_MS_WH_RIGHT && mouse_report.h > 0) 439 else if (code == KC_MS_WH_RIGHT && mouse_report.h > 0)
464 mouse_report.h = 0; 440 mouse_report.h = 0;
465 else if (code == KC_MS_BTN1) 441 else if (IS_MOUSEKEY_BUTTON(code))
466 mouse_report.buttons &= ~MOUSE_BTN1; 442 mouse_report.buttons &= ~(1 << (code - KC_MS_BTN1));
467 else if (code == KC_MS_BTN2)
468 mouse_report.buttons &= ~MOUSE_BTN2;
469 else if (code == KC_MS_BTN3)
470 mouse_report.buttons &= ~MOUSE_BTN3;
471 else if (code == KC_MS_BTN4)
472 mouse_report.buttons &= ~MOUSE_BTN4;
473 else if (code == KC_MS_BTN5)
474 mouse_report.buttons &= ~MOUSE_BTN5;
475# ifdef MK_MOMENTARY_ACCEL 443# ifdef MK_MOMENTARY_ACCEL
476 else if (code == KC_MS_ACCEL0) 444 else if (code == KC_MS_ACCEL0)
477 mk_speed = mkspd_DEFAULT; 445 mk_speed = mkspd_DEFAULT;
diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h
index 5d7c5b3b2..bcf5cab38 100644
--- a/tmk_core/common/report.h
+++ b/tmk_core/common/report.h
@@ -39,7 +39,10 @@ enum mouse_buttons {
39 MOUSE_BTN2 = (1 << 1), 39 MOUSE_BTN2 = (1 << 1),
40 MOUSE_BTN3 = (1 << 2), 40 MOUSE_BTN3 = (1 << 2),
41 MOUSE_BTN4 = (1 << 3), 41 MOUSE_BTN4 = (1 << 3),
42 MOUSE_BTN5 = (1 << 4) 42 MOUSE_BTN5 = (1 << 4),
43 MOUSE_BTN6 = (1 << 5),
44 MOUSE_BTN7 = (1 << 6),
45 MOUSE_BTN8 = (1 << 7)
43}; 46};
44 47
45/* Consumer Page (0x0C) 48/* Consumer Page (0x0C)