Support for the XpPen ACK05 Remote, dials and buttons
Hi, I open this issue following the comment @whot sent me on my recent blog-post about the ACK05 Remote configuration.
This is a request to study the possibility to remap the buttons (and dial?) to libwacom and then have them exposed to default tablet button mapping interfaces.
Here is under the hid-recorder information, with evtest info too, notes and also a ASCII diagram.
I'll be around if something needs to be tested.
Recordings
/*
* This device exports three HID devices: one as a keyboard and one for pointer only.
* /dev/hidraw1: HANVON UGEE Shortcut Remote
* /dev/hidraw2: HANVON UGEE Shortcut Remote
* /dev/hidraw3: HANVON UGEE Shortcut Remote
*
* Evtest will describe them like that:
* /dev/input/event3: HANVON UGEE Shortcut Remote Mouse
* /dev/input/event4: HANVON UGEE Shortcut Remote Keyboard
* /dev/input/event5: HANVON UGEE Shortcut Remote
*
* $lsusb
* Bus 001 Device 003: ID 28bd:0202 XP-Pen Shortcut Remote
*
* For hid-recorder, the first one sends the events (see below), the second and third one don't send anything.
* For evtest, the middle one "Keyboard" sends the events, the first and third one don't send anything.
*/
First one:
==========
# HANVON UGEE Shortcut Remote
# 0x05, 0x01, // Usage Page (Generic Desktop) 0
# 0x09, 0x02, // Usage (Mouse) 2
# 0xa1, 0x01, // Collection (Application) 4
# 0x85, 0x09, // Report ID (9) 6
# 0x09, 0x01, // Usage (Pointer) 8
# 0xa1, 0x00, // Collection (Physical) 10
# 0x05, 0x09, // Usage Page (Button) 12
# 0x19, 0x01, // Usage Minimum (1) 14
# 0x29, 0x03, // Usage Maximum (3) 16
# 0x15, 0x00, // Logical Minimum (0) 18
# 0x25, 0x01, // Logical Maximum (1) 20
# 0x95, 0x03, // Report Count (3) 22
# 0x75, 0x01, // Report Size (1) 24
# 0x81, 0x02, // Input (Data,Var,Abs) 26
# 0x95, 0x05, // Report Count (5) 28
# 0x81, 0x01, // Input (Cnst,Arr,Abs) 30
# 0x05, 0x01, // Usage Page (Generic Desktop) 32
# 0x09, 0x30, // Usage (X) 34
# 0x09, 0x31, // Usage (Y) 36
# 0x26, 0xff, 0x7f, // Logical Maximum (32767) 38
# 0x95, 0x02, // Report Count (2) 41
# 0x75, 0x10, // Report Size (16) 43
# 0x81, 0x02, // Input (Data,Var,Abs) 45
# 0x05, 0x0d, // Usage Page (Digitizers) 47
# 0x09, 0x30, // Usage (Tip Pressure) 49
# 0x26, 0xff, 0x07, // Logical Maximum (2047) 51
# 0x95, 0x01, // Report Count (1) 54
# 0x75, 0x10, // Report Size (16) 56
# 0x81, 0x02, // Input (Data,Var,Abs) 58
# 0xc0, // End Collection 60
# 0xc0, // End Collection 61
# 0x05, 0x01, // Usage Page (Generic Desktop) 62
# 0x09, 0x06, // Usage (Keyboard) 64
# 0xa1, 0x01, // Collection (Application) 66
# 0x85, 0x06, // Report ID (6) 68
# 0x05, 0x07, // Usage Page (Keyboard) 70
# 0x19, 0xe0, // Usage Minimum (224) 72
# 0x29, 0xe7, // Usage Maximum (231) 74
# 0x15, 0x00, // Logical Minimum (0) 76
# 0x25, 0x01, // Logical Maximum (1) 78
# 0x75, 0x01, // Report Size (1) 80
# 0x95, 0x08, // Report Count (8) 82
# 0x81, 0x02, // Input (Data,Var,Abs) 84
# 0x05, 0x07, // Usage Page (Keyboard) 86
# 0x19, 0x00, // Usage Minimum (0) 88
# 0x29, 0xff, // Usage Maximum (255) 90
# 0x26, 0xff, 0x00, // Logical Maximum (255) 92
# 0x75, 0x08, // Report Size (8) 95
# 0x95, 0x06, // Report Count (6) 97
# 0x81, 0x00, // Input (Data,Arr,Abs) 99
# 0xc0, // End Collection 101
#
R: 102 05 01 09 02 a1 01 85 09 09 01 a1 00 05 09 19 01 29 03 15 00 25 01 95 03 75 01 81 02 95 05 81 01 05 01 09 30 09 31 26 ff 7f 95 02 75 10 81 02 05 0d 09 30 26 ff 07 95 01 75 10 81 02 c0 c0 05 01 09 06 a1 01 85 06 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 05 07 19 00 29 ff 26 ff 00 75 08 95 06 81 00 c0
N: HANVON UGEE Shortcut Remote
I: 3 28bd 0202
Second one:
===========
# HANVON UGEE Shortcut Remote
# 0x05, 0x0d, // Usage Page (Digitizers) 0
# 0x09, 0x02, // Usage (Pen) 2
# 0xa1, 0x01, // Collection (Application) 4
# 0x85, 0x07, // Report ID (7) 6
# 0x09, 0x20, // Usage (Stylus) 8
# 0xa1, 0x00, // Collection (Physical) 10
# 0x09, 0x42, // Usage (Tip Switch) 12
# 0x09, 0x44, // Usage (Barrel Switch) 14
# 0x09, 0x45, // Usage (Eraser) 16
# 0x09, 0x3c, // Usage (Invert) 18
# 0x15, 0x00, // Logical Minimum (0) 20
# 0x25, 0x01, // Logical Maximum (1) 22
# 0x75, 0x01, // Report Size (1) 24
# 0x95, 0x04, // Report Count (4) 26
# 0x81, 0x02, // Input (Data,Var,Abs) 28
# 0x95, 0x01, // Report Count (1) 30
# 0x81, 0x03, // Input (Cnst,Var,Abs) 32
# 0x09, 0x32, // Usage (In Range) 34
# 0x95, 0x01, // Report Count (1) 36
# 0x81, 0x02, // Input (Data,Var,Abs) 38
# 0x95, 0x02, // Report Count (2) 40
# 0x81, 0x03, // Input (Cnst,Var,Abs) 42
# 0x75, 0x10, // Report Size (16) 44
# 0x95, 0x01, // Report Count (1) 46
# 0x35, 0x00, // Physical Minimum (0) 48
# 0xa4, // Push 50
# 0x05, 0x01, // Usage Page (Generic Desktop) 51
# 0x09, 0x30, // Usage (X) 53
# 0x65, 0x13, // Unit (EnglishLinear: in) 55
# 0x55, 0x0d, // Unit Exponent (-3) 57
# 0x46, 0x10, 0x27, // Physical Maximum (10000) 59
# 0x26, 0xff, 0x7f, // Logical Maximum (32767) 62
# 0x81, 0x02, // Input (Data,Var,Abs) 65
# 0x09, 0x31, // Usage (Y) 67
# 0x46, 0x70, 0x17, // Physical Maximum (6000) 69
# 0x26, 0xff, 0x7f, // Logical Maximum (32767) 72
# 0x81, 0x02, // Input (Data,Var,Abs) 75
# 0xb4, // Pop 77
# 0x09, 0x30, // Usage (Tip Pressure) 78
# 0x45, 0x00, // Physical Maximum (0) 80
# 0x26, 0xff, 0x1f, // Logical Maximum (8191) 82
# 0x81, 0x42, // Input (Data,Var,Abs,Null) 85
# 0x09, 0x3d, // Usage (X Tilt) 87
# 0x15, 0x81, // Logical Minimum (-127) 89
# 0x25, 0x7f, // Logical Maximum (127) 91
# 0x75, 0x08, // Report Size (8) 93
# 0x95, 0x01, // Report Count (1) 95
# 0x81, 0x02, // Input (Data,Var,Abs) 97
# 0x09, 0x3e, // Usage (Y Tilt) 99
# 0x15, 0x81, // Logical Minimum (-127) 101
# 0x25, 0x7f, // Logical Maximum (127) 103
# 0x81, 0x02, // Input (Data,Var,Abs) 105
# 0xc0, // End Collection 107
# 0xc0, // End Collection 108
#
R: 109 05 0d 09 02 a1 01 85 07 09 20 a1 00 09 42 09 44 09 45 09 3c 15 00 25 01 75 01 95 04 81 02 95 01 81 03 09 32 95 01 81 02 95 02 81 03 75 10 95 01 35 00 a4 05 01 09 30 65 13 55 0d 46 10 27 26 ff 7f 81 02 09 31 46 70 17 26 ff 7f 81 02 b4 09 30 45 00 26 ff 1f 81 42 09 3d 15 81 25 7f 75 08 95 01 81 02 09 3e 15 81 25 7f 81 02 c0 c0
N: HANVON UGEE Shortcut Remote
I: 3 28bd 0202
Third one:
==========
# HANVON UGEE Shortcut Remote
# 0x06, 0x0a, 0xff, // Usage Page (Vendor Usage Page 0xff0a) 0
# 0x09, 0x01, // Usage (Vendor Usage 0x01) 3
# 0xa1, 0x01, // Collection (Application) 5
# 0x85, 0x02, // Report ID (2) 7
# 0x09, 0x02, // Usage (Vendor Usage 0x02) 9
# 0x75, 0x08, // Report Size (8) 11
# 0x95, 0x1f, // Report Count (31) 13
# 0x15, 0x00, // Logical Minimum (0) 15
# 0x26, 0xff, 0x00, // Logical Maximum (255) 17
# 0x81, 0x02, // Input (Data,Var,Abs) 20
# 0x09, 0x03, // Usage (Vendor Usage 0x03) 22
# 0x75, 0x08, // Report Size (8) 24
# 0x95, 0x1f, // Report Count (31) 26
# 0x15, 0x00, // Logical Minimum (0) 28
# 0x26, 0xff, 0x00, // Logical Maximum (255) 30
# 0x91, 0x02, // Output (Data,Var,Abs) 33
# 0xc0, // End Collection 35
#
R: 36 06 0a ff 09 01 a1 01 85 02 09 02 75 08 95 1f 15 00 26 ff 00 81 02 09 03 75 08 95 1f 15 00 26 ff 00 91 02 c0
N: HANVON UGEE Shortcut Remote
I: 3 28bd 0202
/* XpPen ACK05 Remote: key names:
* ┌────────┐────────────────────────┐
*/ ┌────┐ \ ┌───┐┌───┐┌───┐┌───┐│
*│ │Dial│ │ │K1 ││K2 ││K3 ││ ││
*│ └────┘ │ └───┘└───┘└───┘│K7 ││
*│\________/ ┌───┐┌───┐┌───┐│ ││
*│ │K4 ││K5 ││K6 ││ ││
*│ └───┘└───┘└───┘└───┘│
*│ ┌───┐┌────────┐┌───┐│
*│ │K8 ││ K9 ││K10││
*│ └───┘└────────┘└───┘│
*└──────────────────────────────────┘
*/
/* Dial (Middle Button) */
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 000159.468835 8 06 00 00 00 00 00 00 00
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 000159.598816 8 06 00 00 00 00 00 00 00
/* Dial (clockwise rotation) */
# ReportID: 6 / LeftControl: 1 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['Keypad +', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 000234.217239 8 06 01 57 00 00 00 00 00
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 000234.227238 8 06 00 00 00 00 00 00 00
/* Dial (anti-clockwise rotation) */
# ReportID: 6 / LeftControl: 1 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['Keypad -', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 000273.913174 8 06 01 56 00 00 00 00 00
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 000273.923150 8 06 00 00 00 00 00 00 00
/* Key: K1 */
# ReportID: 6 / LeftControl: 1 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['o and O', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002230.128169 8 06 01 12 00 00 00 00 00
^R
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002230.208159 8 06 00 00 00 00 00 00 00
/* Key: K2 */
# ReportID: 6 / LeftControl: 1 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['n and N', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002433.212405 8 06 01 11 00 00 00 00 00
^T# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002433.287176 8 06 00 00 00 00 00 00 00
/* Key: K3 */
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['F5', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002451.949115 8 06 00 3e 00 00 00 00 00
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002452.009116 8 06 00 00 00 00 00 00 00
/* Key: K4 */
# ReportID: 6 / LeftControl: 0 | LeftShift: 1 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002535.889801 8 06 02 00 00 00 00 00 00
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002535.965803 8 06 00 00 00 00 00 00 00
/* Key: K5 */
# ReportID: 6 / LeftControl: 1 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002586.120981 8 06 01 00 00 00 00 00 00
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002586.210975 8 06 00 00 00 00 00 00 00
/* Key: K6 */
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 1 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002602.345660 8 06 04 00 00 00 00 00 00
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 002602.405652 8 06 00 00 00 00 00 00 00
/* Key: K7 (this one freezes hid-recorder)*/
# ReportID: 6 / LeftControl: 1 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['s and S', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 000083.525843 8 06 01 16 00 00 00 00 00
/* Key: K8 (this one crash hid-recorder or stop it)*/
# ReportID: 6 / LeftControl: 1 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['z and Z', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 000000.000000 8 06 01 1d 00 00 00 00 00
^Z
[2]+ Stopped sudo ./hid-recorder
/* Key: K9 */
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['Spacebar', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 000000.000000 8 06 00 2c 00 00 00 00 00
# ReportID: 6 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['0x70000', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 000000.055028 8 06 00 00 00 00 00 00 00
/* Key: K10 (this one crash hid-recorder or stop it) */
# ReportID: 6 / LeftControl: 1 | LeftShift: 1 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard ['z and Z', '0x70000', '0x70000', '0x70000', '0x70000', '0x70000']
E: 000030.658267 8 06 03 1d 00 00 00 00 00
^Z
[3]+ Stopped sudo ./hid-recorder
Edited by David REVOY