diff options
-rw-r--r-- | docs/feature_mouse_keys.md | 3 | ||||
-rw-r--r-- | docs/feature_pointing_device.md | 2 | ||||
-rw-r--r-- | docs/ja/feature_mouse_keys.md | 3 | ||||
-rw-r--r-- | tmk_core/common/action.c | 18 | ||||
-rw-r--r-- | tmk_core/common/keycode.h | 14 | ||||
-rw-r--r-- | tmk_core/common/mousekey.c | 48 | ||||
-rw-r--r-- | tmk_core/common/report.h | 5 | ||||
-rw-r--r-- | tmk_core/protocol/usb_descriptor.c | 12 | ||||
-rw-r--r-- | tmk_core/protocol/vusb/vusb.c | 10 |
9 files changed, 54 insertions, 61 deletions
diff --git a/docs/feature_mouse_keys.md b/docs/feature_mouse_keys.md index a0d02416f..8e2a3a4cd 100644 --- a/docs/feature_mouse_keys.md +++ b/docs/feature_mouse_keys.md | |||
@@ -29,6 +29,9 @@ In your keymap you can use the following keycodes to map key presses to mouse ac | |||
29 | |`KC_MS_BTN3` |`KC_BTN3`|Press button 3 | | 29 | |`KC_MS_BTN3` |`KC_BTN3`|Press button 3 | |
30 | |`KC_MS_BTN4` |`KC_BTN4`|Press button 4 | | 30 | |`KC_MS_BTN4` |`KC_BTN4`|Press button 4 | |
31 | |`KC_MS_BTN5` |`KC_BTN5`|Press button 5 | | 31 | |`KC_MS_BTN5` |`KC_BTN5`|Press button 5 | |
32 | |`KC_MS_BTN6` |`KC_BTN6`|Press button 6 | | ||
33 | |`KC_MS_BTN7` |`KC_BTN7`|Press button 7 | | ||
34 | |`KC_MS_BTN8` |`KC_BTN8`|Press button 8 | | ||
32 | |`KC_MS_WH_UP` |`KC_WH_U`|Move wheel up | | 35 | |`KC_MS_WH_UP` |`KC_WH_U`|Move wheel up | |
33 | |`KC_MS_WH_DOWN` |`KC_WH_D`|Move wheel down | | 36 | |`KC_MS_WH_DOWN` |`KC_WH_D`|Move wheel down | |
34 | |`KC_MS_WH_LEFT` |`KC_WH_L`|Move wheel left | | 37 | |`KC_MS_WH_LEFT` |`KC_WH_L`|Move wheel left | |
diff --git a/docs/feature_pointing_device.md b/docs/feature_pointing_device.md index c9309d697..c6d3560f3 100644 --- a/docs/feature_pointing_device.md +++ b/docs/feature_pointing_device.md | |||
@@ -19,7 +19,7 @@ Keep in mind that a report_mouse_t (here "mouseReport") has the following proper | |||
19 | * `mouseReport.y` - this is a signed int from -127 to 127 (not 128, this is defined in USB HID spec) representing movement (+ upward, - downward) on the y axis. | 19 | * `mouseReport.y` - this is a signed int from -127 to 127 (not 128, this is defined in USB HID spec) representing movement (+ upward, - downward) on the y axis. |
20 | * `mouseReport.v` - this is a signed int from -127 to 127 (not 128, this is defined in USB HID spec) representing vertical scrolling (+ upward, - downward). | 20 | * `mouseReport.v` - this is a signed int from -127 to 127 (not 128, this is defined in USB HID spec) representing vertical scrolling (+ upward, - downward). |
21 | * `mouseReport.h` - this is a signed int from -127 to 127 (not 128, this is defined in USB HID spec) representing horizontal scrolling (+ right, - left). | 21 | * `mouseReport.h` - this is a signed int from -127 to 127 (not 128, this is defined in USB HID spec) representing horizontal scrolling (+ right, - left). |
22 | * `mouseReport.buttons` - this is a uint8_t in which the last 5 bits are used. These bits represent the mouse button state - bit 3 is mouse button 5, and bit 7 is mouse button 1. | 22 | * `mouseReport.buttons` - this is a uint8_t in which all 8 bits are used. These bits represent the mouse button state - bit 0 is mouse button 1, and bit 7 is mouse button 8. |
23 | 23 | ||
24 | Once you have made the necessary changes to the mouse report, you need to send it: | 24 | Once you have made the necessary changes to the mouse report, you need to send it: |
25 | 25 | ||
diff --git a/docs/ja/feature_mouse_keys.md b/docs/ja/feature_mouse_keys.md index 74b09e939..e4fa9dfb4 100644 --- a/docs/ja/feature_mouse_keys.md +++ b/docs/ja/feature_mouse_keys.md | |||
@@ -34,6 +34,9 @@ MOUSEKEY_ENABLE = yes | |||
34 | | `KC_MS_BTN3` | `KC_BTN3` | ボタン3を押す | | 34 | | `KC_MS_BTN3` | `KC_BTN3` | ボタン3を押す | |
35 | | `KC_MS_BTN4` | `KC_BTN4` | ボタン4を押す | | 35 | | `KC_MS_BTN4` | `KC_BTN4` | ボタン4を押す | |
36 | | `KC_MS_BTN5` | `KC_BTN5` | ボタン5を押す | | 36 | | `KC_MS_BTN5` | `KC_BTN5` | ボタン5を押す | |
37 | | `KC_MS_BTN6` | `KC_BTN6` | ボタン6を押す | | ||
38 | | `KC_MS_BTN7` | `KC_BTN7` | ボタン7を押す | | ||
39 | | `KC_MS_BTN8` | `KC_BTN8` | ボタン8を押す | | ||
37 | | `KC_MS_WH_UP` | `KC_WH_U` | ホイールを向こう側に回転 | | 40 | | `KC_MS_WH_UP` | `KC_WH_U` | ホイールを向こう側に回転 | |
38 | | `KC_MS_WH_DOWN` | `KC_WH_D` | ホイールを手前側に回転 | | 41 | | `KC_MS_WH_DOWN` | `KC_WH_D` | ホイールを手前側に回転 | |
39 | | `KC_MS_WH_LEFT` | `KC_WH_L` | ホイールを左に倒す | | 42 | | `KC_MS_WH_LEFT` | `KC_WH_L` | ホイールを左に倒す | |
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 | ||
522 | enum mouse_keys { | 525 | enum 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) |
diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c index 7ea4b2e37..ba7760f28 100644 --- a/tmk_core/protocol/usb_descriptor.c +++ b/tmk_core/protocol/usb_descriptor.c | |||
@@ -116,19 +116,15 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { | |||
116 | # endif | 116 | # endif |
117 | HID_RI_USAGE(8, 0x01), // Pointer | 117 | HID_RI_USAGE(8, 0x01), // Pointer |
118 | HID_RI_COLLECTION(8, 0x00), // Physical | 118 | HID_RI_COLLECTION(8, 0x00), // Physical |
119 | // Buttons (5 bits) | 119 | // Buttons (8 bits) |
120 | HID_RI_USAGE_PAGE(8, 0x09), // Button | 120 | HID_RI_USAGE_PAGE(8, 0x09), // Button |
121 | HID_RI_USAGE_MINIMUM(8, 0x01), // Button 1 | 121 | HID_RI_USAGE_MINIMUM(8, 0x01), // Button 1 |
122 | HID_RI_USAGE_MAXIMUM(8, 0x05), // Button 5 | 122 | HID_RI_USAGE_MAXIMUM(8, 0x08), // Button 8 |
123 | HID_RI_LOGICAL_MINIMUM(8, 0x00), | 123 | HID_RI_LOGICAL_MINIMUM(8, 0x00), |
124 | HID_RI_LOGICAL_MAXIMUM(8, 0x01), | 124 | HID_RI_LOGICAL_MAXIMUM(8, 0x01), |
125 | HID_RI_REPORT_COUNT(8, 0x05), | 125 | HID_RI_REPORT_COUNT(8, 0x08), |
126 | HID_RI_REPORT_SIZE(8, 0x01), | 126 | HID_RI_REPORT_SIZE(8, 0x01), |
127 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), | 127 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), |
128 | // Button padding (3 bits) | ||
129 | HID_RI_REPORT_COUNT(8, 0x01), | ||
130 | HID_RI_REPORT_SIZE(8, 0x03), | ||
131 | HID_RI_INPUT(8, HID_IOF_CONSTANT), | ||
132 | 128 | ||
133 | // X/Y position (2 bytes) | 129 | // X/Y position (2 bytes) |
134 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop | 130 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop |
@@ -356,7 +352,7 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = { | |||
356 | .Type = DTYPE_Device | 352 | .Type = DTYPE_Device |
357 | }, | 353 | }, |
358 | .USBSpecification = VERSION_BCD(1, 1, 0), | 354 | .USBSpecification = VERSION_BCD(1, 1, 0), |
359 | 355 | ||
360 | #if VIRTSER_ENABLE | 356 | #if VIRTSER_ENABLE |
361 | .Class = USB_CSCP_IADDeviceClass, | 357 | .Class = USB_CSCP_IADDeviceClass, |
362 | .SubClass = USB_CSCP_IADDeviceSubclass, | 358 | .SubClass = USB_CSCP_IADDeviceSubclass, |
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c index a422903cc..9362fbde7 100644 --- a/tmk_core/protocol/vusb/vusb.c +++ b/tmk_core/protocol/vusb/vusb.c | |||
@@ -444,19 +444,15 @@ const PROGMEM uchar shared_hid_report[] = { | |||
444 | 0x85, REPORT_ID_MOUSE, // Report ID | 444 | 0x85, REPORT_ID_MOUSE, // Report ID |
445 | 0x09, 0x01, // Usage (Pointer) | 445 | 0x09, 0x01, // Usage (Pointer) |
446 | 0xA1, 0x00, // Collection (Physical) | 446 | 0xA1, 0x00, // Collection (Physical) |
447 | // Buttons (5 bits) | 447 | // Buttons (8 bits) |
448 | 0x05, 0x09, // Usage Page (Button) | 448 | 0x05, 0x09, // Usage Page (Button) |
449 | 0x19, 0x01, // Usage Minimum (Button 1) | 449 | 0x19, 0x01, // Usage Minimum (Button 1) |
450 | 0x29, 0x05, // Usage Maximum (Button 5) | 450 | 0x29, 0x08, // Usage Maximum (Button 8) |
451 | 0x15, 0x00, // Logical Minimum (0) | 451 | 0x15, 0x00, // Logical Minimum (0) |
452 | 0x25, 0x01, // Logical Maximum (1) | 452 | 0x25, 0x01, // Logical Maximum (1) |
453 | 0x95, 0x05, // Report Count (5) | 453 | 0x95, 0x08, // Report Count (8) |
454 | 0x75, 0x01, // Report Size (1) | 454 | 0x75, 0x01, // Report Size (1) |
455 | 0x81, 0x02, // Input (Data, Variable, Absolute) | 455 | 0x81, 0x02, // Input (Data, Variable, Absolute) |
456 | // Button padding (3 bits) | ||
457 | 0x95, 0x01, // Report Count (1) | ||
458 | 0x75, 0x03, // Report Size (3) | ||
459 | 0x81, 0x03, // Input (Constant) | ||
460 | 456 | ||
461 | // X/Y position (2 bytes) | 457 | // X/Y position (2 bytes) |
462 | 0x05, 0x01, // Usage Page (Generic Desktop) | 458 | 0x05, 0x01, // Usage Page (Generic Desktop) |