1// Copyright 2017 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <assert.h> 6#include <hid/paradise.h> 7#include <zircon/errors.h> 8#include <stdio.h> 9#include <string.h> 10 11static const uint8_t paradise_touch_report_desc[] = { 12 0x05, 0x0D, // Usage Page (Digitizer) 13 0x09, 0x04, // Usage (Touch Screen) 14 0xA1, 0x01, // Collection (Application) 15 0x85, 0x0C, // Report ID (12) 16 0x95, 0x01, // Report Count (1) 17 0x75, 0x08, // Report Size (8) 18 0x26, 0xFF, 0x00, // Logical Maximum (255) 19 0x15, 0x00, // Logical Minimum (0) 20 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 21 0x09, 0x54, // Usage (0x54) 22 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 23 0x05, 0x0D, // Usage Page (Digitizer) 24 0x09, 0x22, // Usage (Finger) 25 0xA1, 0x02, // Collection (Logical) 26 0x09, 0x42, // Usage (Tip Switch) 27 0x15, 0x00, // Logical Minimum (0) 28 0x25, 0x01, // Logical Maximum (1) 29 0x75, 0x01, // Report Size (1) 30 0x95, 0x01, // Report Count (1) 31 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 32 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 33 0x09, 0x47, // Usage (0x47) 34 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 35 0x95, 0x05, // Report Count (5) 36 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 37 0x75, 0x10, // Report Size (16) 38 0x09, 0x51, // Usage (0x51) 39 0x95, 0x01, // Report Count (1) 40 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 41 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 42 0x75, 0x10, // Report Size (16) 43 0x95, 0x01, // Report Count (1) 44 0x55, 0x0E, // Unit Exponent (-2) 45 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 46 0x09, 0x30, // Usage (X) 47 0x26, 0x80, 0x28, // Logical Maximum (10368) 48 0x35, 0x00, // Physical Minimum (0) 49 0x46, 0x20, 0x0A, // Physical Maximum (2592) 50 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 51 0x46, 0xC0, 0x06, // Physical Maximum (1728) 52 0x09, 0x31, // Usage (Y) 53 0x26, 0x00, 0x1B, // Logical Maximum (6912) 54 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 55 0xC0, // End Collection 56 0x05, 0x0D, // Usage Page (Digitizer) 57 0x09, 0x22, // Usage (Finger) 58 0xA1, 0x02, // Collection (Logical) 59 0x09, 0x42, // Usage (Tip Switch) 60 0x15, 0x00, // Logical Minimum (0) 61 0x25, 0x01, // Logical Maximum (1) 62 0x75, 0x01, // Report Size (1) 63 0x95, 0x01, // Report Count (1) 64 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 65 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 66 0x09, 0x47, // Usage (0x47) 67 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 68 0x95, 0x05, // Report Count (5) 69 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 70 0x75, 0x10, // Report Size (16) 71 0x09, 0x51, // Usage (0x51) 72 0x95, 0x01, // Report Count (1) 73 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 74 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 75 0x75, 0x10, // Report Size (16) 76 0x95, 0x01, // Report Count (1) 77 0x55, 0x0E, // Unit Exponent (-2) 78 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 79 0x09, 0x30, // Usage (X) 80 0x26, 0x80, 0x28, // Logical Maximum (10368) 81 0x35, 0x00, // Physical Minimum (0) 82 0x46, 0x20, 0x0A, // Physical Maximum (2592) 83 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 84 0x46, 0xC0, 0x06, // Physical Maximum (1728) 85 0x09, 0x31, // Usage (Y) 86 0x26, 0x00, 0x1B, // Logical Maximum (6912) 87 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 88 0xC0, // End Collection 89 0x05, 0x0D, // Usage Page (Digitizer) 90 0x09, 0x22, // Usage (Finger) 91 0xA1, 0x02, // Collection (Logical) 92 0x09, 0x42, // Usage (Tip Switch) 93 0x15, 0x00, // Logical Minimum (0) 94 0x25, 0x01, // Logical Maximum (1) 95 0x75, 0x01, // Report Size (1) 96 0x95, 0x01, // Report Count (1) 97 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 98 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 99 0x09, 0x47, // Usage (0x47) 100 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 101 0x95, 0x05, // Report Count (5) 102 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 103 0x75, 0x10, // Report Size (16) 104 0x09, 0x51, // Usage (0x51) 105 0x95, 0x01, // Report Count (1) 106 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 107 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 108 0x75, 0x10, // Report Size (16) 109 0x95, 0x01, // Report Count (1) 110 0x55, 0x0E, // Unit Exponent (-2) 111 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 112 0x09, 0x30, // Usage (X) 113 0x26, 0x80, 0x28, // Logical Maximum (10368) 114 0x35, 0x00, // Physical Minimum (0) 115 0x46, 0x20, 0x0A, // Physical Maximum (2592) 116 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 117 0x46, 0xC0, 0x06, // Physical Maximum (1728) 118 0x09, 0x31, // Usage (Y) 119 0x26, 0x00, 0x1B, // Logical Maximum (6912) 120 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 121 0xC0, // End Collection 122 0x05, 0x0D, // Usage Page (Digitizer) 123 0x09, 0x22, // Usage (Finger) 124 0xA1, 0x02, // Collection (Logical) 125 0x09, 0x42, // Usage (Tip Switch) 126 0x15, 0x00, // Logical Minimum (0) 127 0x25, 0x01, // Logical Maximum (1) 128 0x75, 0x01, // Report Size (1) 129 0x95, 0x01, // Report Count (1) 130 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 131 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 132 0x09, 0x47, // Usage (0x47) 133 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 134 0x95, 0x05, // Report Count (5) 135 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 136 0x75, 0x10, // Report Size (16) 137 0x09, 0x51, // Usage (0x51) 138 0x95, 0x01, // Report Count (1) 139 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 140 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 141 0x75, 0x10, // Report Size (16) 142 0x95, 0x01, // Report Count (1) 143 0x55, 0x0E, // Unit Exponent (-2) 144 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 145 0x09, 0x30, // Usage (X) 146 0x26, 0x80, 0x28, // Logical Maximum (10368) 147 0x35, 0x00, // Physical Minimum (0) 148 0x46, 0x20, 0x0A, // Physical Maximum (2592) 149 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 150 0x46, 0xC0, 0x06, // Physical Maximum (1728) 151 0x09, 0x31, // Usage (Y) 152 0x26, 0x00, 0x1B, // Logical Maximum (6912) 153 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 154 0xC0, // End Collection 155 0x05, 0x0D, // Usage Page (Digitizer) 156 0x09, 0x22, // Usage (Finger) 157 0xA1, 0x02, // Collection (Logical) 158 0x09, 0x42, // Usage (Tip Switch) 159 0x15, 0x00, // Logical Minimum (0) 160 0x25, 0x01, // Logical Maximum (1) 161 0x75, 0x01, // Report Size (1) 162 0x95, 0x01, // Report Count (1) 163 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 164 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 165 0x09, 0x47, // Usage (0x47) 166 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 167 0x95, 0x05, // Report Count (5) 168 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 169 0x75, 0x10, // Report Size (16) 170 0x09, 0x51, // Usage (0x51) 171 0x95, 0x01, // Report Count (1) 172 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 173 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 174 0x75, 0x10, // Report Size (16) 175 0x95, 0x01, // Report Count (1) 176 0x55, 0x0E, // Unit Exponent (-2) 177 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 178 0x09, 0x30, // Usage (X) 179 0x26, 0x80, 0x28, // Logical Maximum (10368) 180 0x35, 0x00, // Physical Minimum (0) 181 0x46, 0x20, 0x0A, // Physical Maximum (2592) 182 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 183 0x46, 0xC0, 0x06, // Physical Maximum (1728) 184 0x09, 0x31, // Usage (Y) 185 0x26, 0x00, 0x1B, // Logical Maximum (6912) 186 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 187 0xC0, // End Collection 188 0x05, 0x0D, // Usage Page (Digitizer) 189 0x27, 0xFF, 0xFF, 0x00, 0x00, // Logical Maximum (65534) 190 0x75, 0x10, // Report Size (16) 191 0x95, 0x01, // Report Count (1) 192 0x09, 0x56, // Usage (0x56) 193 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 194 0x85, 0x0C, // Report ID (12) 195 0x09, 0x55, // Usage (0x55) 196 0x75, 0x08, // Report Size (8) 197 0x95, 0x01, // Report Count (1) 198 0x26, 0xFF, 0x00, // Logical Maximum (255) 199 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 200 0x85, 0x0A, // Report ID (10) 201 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 202 0x09, 0xC5, // Usage (0xC5) 203 0x96, 0x00, 0x01, // Report Count (256) 204 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 205 0xC0, // End Collection 206 0x06, 0x11, 0xFF, // Usage Page (Vendor Defined 0xFF11) 207 0x09, 0x11, // Usage (0x11) 208 0xA1, 0x01, // Collection (Application) 209 0x85, 0x03, // Report ID (3) 210 0xA1, 0x02, // Collection (Logical) 211 0x09, 0x00, // Usage (0x00) 212 0x75, 0x08, // Report Size (8) 213 0x15, 0x00, // Logical Minimum (0) 214 0x26, 0xFF, 0x00, // Logical Maximum (255) 215 0x95, 0x27, // Report Count (39) 216 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 217 0xC0, // End Collection 218 0x85, 0x02, // Report ID (2) 219 0x09, 0x00, // Usage (0x00) 220 0x95, 0x01, // Report Count (1) 221 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 222 0x85, 0x03, // Report ID (3) 223 0x09, 0x00, // Usage (0x00) 224 0x95, 0x3F, // Report Count (63) 225 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 226 0x85, 0x04, // Report ID (4) 227 0x09, 0x00, // Usage (0x00) 228 0x95, 0x0F, // Report Count (15) 229 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 230 0x85, 0x07, // Report ID (7) 231 0x09, 0x00, // Usage (0x00) 232 0x96, 0x00, 0x01, // Report Count (256) 233 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 234 0x85, 0x08, // Report ID (8) 235 0x09, 0x00, // Usage (0x00) 236 0x96, 0x87, 0x00, // Report Count (135) 237 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 238 0x85, 0x09, // Report ID (9) 239 0x09, 0x00, // Usage (0x00) 240 0x96, 0x3F, 0x00, // Report Count (63) 241 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 242 0x85, 0x0D, // Report ID (13) 243 0x09, 0x00, // Usage (0x00) 244 0x95, 0x07, // Report Count (7) 245 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 246 0xC0, // End Collection 247 0x05, 0x0D, // Usage Page (Digitizer) 248 0x09, 0x0E, // Usage (0x0E) 249 0xA1, 0x01, // Collection (Application) 250 0x85, 0x0E, // Report ID (14) 251 0x09, 0x23, // Usage (0x23) 252 0xA1, 0x02, // Collection (Logical) 253 0x09, 0x52, // Usage (0x52) 254 0x09, 0x53, // Usage (0x53) 255 0x15, 0x00, // Logical Minimum (0) 256 0x25, 0x0A, // Logical Maximum (10) 257 0x75, 0x08, // Report Size (8) 258 0x95, 0x02, // Report Count (2) 259 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 260 0xC0, // End Collection 261 0xC0, // End Collection 262 0x05, 0x0D, // Usage Page (Digitizer) 263 0x09, 0x02, // Usage (Pen) 264 0xA1, 0x01, // Collection (Application) 265 0x85, 0x06, // Report ID (6) 266 0xA4, // Push 267 0x09, 0x20, // Usage (Stylus) 268 0xA1, 0x00, // Collection (Physical) 269 0x09, 0x42, // Usage (Tip Switch) 270 0x09, 0x44, // Usage (Barrel Switch) 271 0x09, 0x45, // Usage (Eraser) 272 0x09, 0x3C, // Usage (Invert) 273 0x09, 0x5A, // Usage (0x5A) 274 0x09, 0x32, // Usage (In Range) 275 0x15, 0x00, // Logical Minimum (0) 276 0x25, 0x01, // Logical Maximum (1) 277 0x75, 0x01, // Report Size (1) 278 0x95, 0x06, // Report Count (6) 279 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 280 0x95, 0x02, // Report Count (2) 281 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 282 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 283 0x09, 0x30, // Usage (X) 284 0x27, 0x40, 0x65, 0x00, 0x00, // Logical Maximum (25919) 285 0x47, 0x40, 0x65, 0x00, 0x00, // Physical Maximum (25919) 286 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 287 0x55, 0x0D, // Unit Exponent (-3) 288 0x75, 0x10, // Report Size (16) 289 0x95, 0x01, // Report Count (1) 290 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 291 0x09, 0x31, // Usage (Y) 292 0x27, 0x80, 0x43, 0x00, 0x00, // Logical Maximum (17279) 293 0x47, 0x80, 0x43, 0x00, 0x00, // Physical Maximum (17279) 294 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 295 0x45, 0x00, // Physical Maximum (0) 296 0x65, 0x00, // Unit (None) 297 0x55, 0x00, // Unit Exponent (0) 298 0x05, 0x0D, // Usage Page (Digitizer) 299 0x09, 0x30, // Usage (Tip Pressure) 300 0x26, 0xFF, 0x07, // Logical Maximum (2047) 301 0x75, 0x10, // Report Size (16) 302 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 303 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 304 0x09, 0x5B, // Usage (0x5B) 305 0x16, 0x00, 0x80, // Logical Minimum (-32768) 306 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 307 0x75, 0x10, // Report Size (16) 308 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 309 0x05, 0x0D, // Usage Page (Digitizer) 310 0x09, 0x5B, // Usage (0x5B) 311 0x17, 0x00, 0x00, 0x00, 0x80, // Logical Minimum (-2147483649) 312 0x27, 0xFF, 0xFF, 0xFF, 0x7F, // Logical Maximum (2147483646) 313 0x75, 0x20, // Report Size (32) 314 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 315 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 316 0x09, 0x00, // Usage (0x00) 317 0x75, 0x08, // Report Size (8) 318 0x26, 0xFF, 0x00, // Logical Maximum (255) 319 0x15, 0x00, // Logical Minimum (0) 320 0x81, 0x02, // Input (DVar,Abs,No Wrap,Linear,Preferred State,No Null Position) 321 0x05, 0x0D, // Usage Page (Digitizer) 322 0x09, 0x3B, // Usage (Battery Strength) 323 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 324 0x65, 0x14, // Unit (System: English Rotation, Length: Centimeter) 325 0x55, 0x00, // Unit Exponent (0) 326 0x16, 0xA6, 0xFF, // Logical Minimum (-90) 327 0x26, 0x5A, 0x00, // Logical Maximum (90) 328 0x36, 0xA6, 0xFF, // Physical Minimum (-90) 329 0x46, 0x5A, 0x00, // Physical Maximum (90) 330 0x75, 0x08, // Report Size (8) 331 0x09, 0x3D, // Usage (X Tilt) 332 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 333 0x09, 0x3E, // Usage (Y Tilt) 334 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 335 0x15, 0x00, // Logical Minimum (0) 336 0x27, 0xFF, 0xFF, 0x00, 0x00, // Logical Maximum (65534) 337 0x35, 0x00, // Physical Minimum (0) 338 0x47, 0xFF, 0xFF, 0x00, 0x00, // Physical Maximum (65534) 339 0x66, 0x01, 0x10, // Unit (System: SI Linear, Time: Seconds) 340 0x55, 0x0C, // Unit Exponent (-4) 341 0x75, 0x10, // Report Size (16) 342 0x09, 0x56, // Usage (0x56) 343 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 344 0xC0, // End Collection 345 0xB4, // Pop 346 0x85, 0x13, // Report ID (19) 347 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 348 0x09, 0xC5, // Usage (0xC5) 349 0x96, 0x00, 0x01, // Report Count (256) 350 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 351 0xC0, // End Collection 352 0x06, 0x11, 0xFF, // Usage Page (Vendor Defined 0xFF11) 353 0x09, 0x02, // Usage (0x02) 354 0xA1, 0x01, // Collection (Application) 355 0x85, 0x0B, // Report ID (11) 356 0xA4, // Push 357 0x09, 0x20, // Usage (0x20) 358 0xA1, 0x00, // Collection (Physical) 359 0x09, 0x42, // Usage (0x42) 360 0x09, 0x44, // Usage (0x44) 361 0x09, 0x45, // Usage (0x45) 362 0x09, 0x3C, // Usage (0x3C) 363 0x09, 0x5A, // Usage (0x5A) 364 0x09, 0x32, // Usage (0x32) 365 0x15, 0x00, // Logical Minimum (0) 366 0x25, 0x01, // Logical Maximum (1) 367 0x75, 0x01, // Report Size (1) 368 0x95, 0x06, // Report Count (6) 369 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 370 0x95, 0x02, // Report Count (2) 371 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 372 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 373 0x09, 0x30, // Usage (X) 374 0x27, 0x40, 0x65, 0x00, 0x00, // Logical Maximum (25919) 375 0x47, 0x40, 0x65, 0x00, 0x00, // Physical Maximum (25919) 376 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 377 0x55, 0x0D, // Unit Exponent (-3) 378 0x75, 0x10, // Report Size (16) 379 0x95, 0x01, // Report Count (1) 380 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 381 0x09, 0x31, // Usage (Y) 382 0x27, 0x80, 0x43, 0x00, 0x00, // Logical Maximum (17279) 383 0x47, 0x80, 0x43, 0x00, 0x00, // Physical Maximum (17279) 384 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 385 0x45, 0x00, // Physical Maximum (0) 386 0x65, 0x00, // Unit (None) 387 0x55, 0x00, // Unit Exponent (0) 388 0x05, 0x0D, // Usage Page (Digitizer) 389 0x09, 0x30, // Usage (Tip Pressure) 390 0x26, 0xFF, 0x07, // Logical Maximum (2047) 391 0x75, 0x10, // Report Size (16) 392 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 393 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 394 0x09, 0x5B, // Usage (0x5B) 395 0x16, 0x00, 0x80, // Logical Minimum (-32768) 396 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 397 0x75, 0x10, // Report Size (16) 398 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 399 0x05, 0x0D, // Usage Page (Digitizer) 400 0x09, 0x5B, // Usage (0x5B) 401 0x17, 0x00, 0x00, 0x00, 0x80, // Logical Minimum (-2147483649) 402 0x27, 0xFF, 0xFF, 0xFF, 0x7F, // Logical Maximum (2147483646) 403 0x75, 0x20, // Report Size (32) 404 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 405 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 406 0x09, 0x00, // Usage (0x00) 407 0x75, 0x08, // Report Size (8) 408 0x26, 0xFF, 0x00, // Logical Maximum (255) 409 0x15, 0x00, // Logical Minimum (0) 410 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 411 0x05, 0x0D, // Usage Page (Digitizer) 412 0x09, 0x3B, // Usage (Battery Strength) 413 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 414 0x65, 0x14, // Unit (System: English Rotation, Length: Centimeter) 415 0x55, 0x00, // Unit Exponent (0) 416 0x16, 0xA6, 0xFF, // Logical Minimum (-90) 417 0x26, 0x5A, 0x00, // Logical Maximum (90) 418 0x36, 0xA6, 0xFF, // Physical Minimum (-90) 419 0x46, 0x5A, 0x00, // Physical Maximum (90) 420 0x75, 0x08, // Report Size (8) 421 0x09, 0x3D, // Usage (X Tilt) 422 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 423 0x09, 0x3E, // Usage (Y Tilt) 424 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 425 0x15, 0x00, // Logical Minimum (0) 426 0x27, 0xFF, 0xFF, 0x00, 0x00, // Logical Maximum (65534) 427 0x35, 0x00, // Physical Minimum (0) 428 0x47, 0xFF, 0xFF, 0x00, 0x00, // Physical Maximum (65534) 429 0x66, 0x01, 0x10, // Unit (System: SI Linear, Time: Seconds) 430 0x55, 0x0C, // Unit Exponent (-4) 431 0x75, 0x10, // Report Size (16) 432 0x09, 0x56, // Usage (0x56) 433 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 434 0xC0, // End Collection 435 0xB4, // Pop 436 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 437 0x75, 0x08, // Report Size (8) 438 0x15, 0x00, // Logical Minimum (0) 439 0x26, 0xFF, 0x00, // Logical Maximum (255) 440 0x85, 0x05, // Report ID (5) 441 0x09, 0x00, // Usage (0x00) 442 0x95, 0x3A, // Report Count (58) 443 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 444 0x85, 0x10, // Report ID (16) 445 0x09, 0x00, // Usage (0x00) 446 0x95, 0x14, // Report Count (20) 447 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 448 0x85, 0x0F, // Report ID (15) 449 0x09, 0x00, // Usage (0x00) 450 0x95, 0x27, // Report Count (39) 451 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 452 0x85, 0x0F, // Report ID (15) 453 0x09, 0x00, // Usage (0x00) 454 0x95, 0x07, // Report Count (7) 455 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 456 0x85, 0x11, // Report ID (17) 457 0x09, 0x00, // Usage (0x00) 458 0x95, 0x09, // Report Count (9) 459 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 460 0x85, 0x05, // Report ID (5) 461 0x09, 0x00, // Usage (0x00) 462 0x95, 0x08, // Report Count (8) 463 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 464 0x85, 0x10, // Report ID (16) 465 0x09, 0x00, // Usage (0x00) 466 0x96, 0x3F, 0x00, // Report Count (63) 467 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 468 0x85, 0x0B, // Report ID (11) 469 0x09, 0x00, // Usage (0x00) 470 0x96, 0x3F, 0x00, // Report Count (63) 471 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 472 0xC0, // End Collection 473 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 474 0x09, 0x02, // Usage (Mouse) 475 0xA1, 0x01, // Collection (Application) 476 0x85, 0x01, // Report ID (1) 477 0x09, 0x01, // Usage (Pointer) 478 0xA1, 0x00, // Collection (Physical) 479 0x05, 0x09, // Usage Page (Button) 480 0x19, 0x01, // Usage Minimum (0x01) 481 0x29, 0x02, // Usage Maximum (0x02) 482 0x15, 0x00, // Logical Minimum (0) 483 0x25, 0x01, // Logical Maximum (1) 484 0x95, 0x02, // Report Count (2) 485 0x75, 0x01, // Report Size (1) 486 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 487 0x95, 0x01, // Report Count (1) 488 0x75, 0x06, // Report Size (6) 489 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 490 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 491 0x09, 0x30, // Usage (X) 492 0x09, 0x31, // Usage (Y) 493 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 494 0x75, 0x10, // Report Size (16) 495 0x95, 0x02, // Report Count (2) 496 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 497 0xC0, // End Collection 498 0xC0, // End Collection 499 500 // 1064 bytes 501}; 502 503bool is_paradise_touch_report_desc(const uint8_t* data, size_t len) { 504 if (!data) 505 return false; 506 507 if (len != sizeof(paradise_touch_report_desc)) { 508 return false; 509 } 510 511 return (memcmp(data, paradise_touch_report_desc, len) == 0); 512} 513 514static const uint8_t paradise_touch_v2_report_desc[] = { 5150x05, 0x0D, // Usage Page (Digitizer) 5160x09, 0x04, // Usage (Touch Screen) 5170xA1, 0x01, // Collection (Application) 5180x85, 0x0C, // Report ID (12) 5190x95, 0x01, // Report Count (1) 5200x75, 0x08, // Report Size (8) 5210x26, 0xFF, 0x00, // Logical Maximum (255) 5220x15, 0x00, // Logical Minimum (0) 5230x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5240x09, 0x54, // Usage (0x54) 5250x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5260x05, 0x0D, // Usage Page (Digitizer) 5270x09, 0x22, // Usage (Finger) 5280xA1, 0x02, // Collection (Logical) 5290x09, 0x42, // Usage (Tip Switch) 5300x15, 0x00, // Logical Minimum (0) 5310x25, 0x01, // Logical Maximum (1) 5320x75, 0x01, // Report Size (1) 5330x95, 0x01, // Report Count (1) 5340x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5350x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5360x09, 0x47, // Usage (0x47) 5370x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5380x95, 0x05, // Report Count (5) 5390x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5400x75, 0x10, // Report Size (16) 5410x09, 0x51, // Usage (0x51) 5420x95, 0x01, // Report Count (1) 5430x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5440x15, 0x00, // Logical Minimum (0) 5450x26, 0xFF, 0x00, // Logical Maximum (255) 5460x35, 0x00, // Physical Minimum (0) 5470x46, 0xFF, 0x00, // Physical Maximum (255) 5480x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 5490x55, 0x0F, // Unit Exponent (-1) 5500x75, 0x08, // Report Size (8) 5510x09, 0x48, // Usage (0x48) 5520x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5530x09, 0x49, // Usage (0x49) 5540x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5550x05, 0x01, // Usage Page (Generic Desktop Ctrls) 5560x75, 0x10, // Report Size (16) 5570x95, 0x01, // Report Count (1) 5580x55, 0x0E, // Unit Exponent (-2) 5590x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 5600x09, 0x30, // Usage (X) 5610x26, 0x80, 0x28, // Logical Maximum (10368) 5620x35, 0x00, // Physical Minimum (0) 5630x46, 0x20, 0x0A, // Physical Maximum (2592) 5640x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5650x46, 0xC0, 0x06, // Physical Maximum (1728) 5660x09, 0x31, // Usage (Y) 5670x26, 0x00, 0x1B, // Logical Maximum (6912) 5680x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5690x15, 0x00, // Logical Minimum (0) 5700x26, 0xFF, 0x00, // Logical Maximum (255) 5710x35, 0x00, // Physical Minimum (0) 5720x45, 0x00, // Physical Maximum (0) 5730x65, 0x00, // Unit (None) 5740x55, 0x00, // Unit Exponent (0) 5750x75, 0x08, // Report Size (8) 5760x05, 0x0D, // Usage Page (Digitizer) 5770x09, 0x30, // Usage (Tip Pressure) 5780x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5790xC0, // End Collection 5800x05, 0x0D, // Usage Page (Digitizer) 5810x09, 0x22, // Usage (Finger) 5820xA1, 0x02, // Collection (Logical) 5830x09, 0x42, // Usage (Tip Switch) 5840x15, 0x00, // Logical Minimum (0) 5850x25, 0x01, // Logical Maximum (1) 5860x75, 0x01, // Report Size (1) 5870x95, 0x01, // Report Count (1) 5880x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5890x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5900x09, 0x47, // Usage (0x47) 5910x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5920x95, 0x05, // Report Count (5) 5930x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5940x75, 0x10, // Report Size (16) 5950x09, 0x51, // Usage (0x51) 5960x95, 0x01, // Report Count (1) 5970x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 5980x15, 0x00, // Logical Minimum (0) 5990x26, 0xFF, 0x00, // Logical Maximum (255) 6000x35, 0x00, // Physical Minimum (0) 6010x46, 0xFF, 0x00, // Physical Maximum (255) 6020x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 6030x55, 0x0F, // Unit Exponent (-1) 6040x75, 0x08, // Report Size (8) 6050x09, 0x48, // Usage (0x48) 6060x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6070x09, 0x49, // Usage (0x49) 6080x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6090x05, 0x01, // Usage Page (Generic Desktop Ctrls) 6100x75, 0x10, // Report Size (16) 6110x95, 0x01, // Report Count (1) 6120x55, 0x0E, // Unit Exponent (-2) 6130x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 6140x09, 0x30, // Usage (X) 6150x26, 0x80, 0x28, // Logical Maximum (10368) 6160x35, 0x00, // Physical Minimum (0) 6170x46, 0x20, 0x0A, // Physical Maximum (2592) 6180x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6190x46, 0xC0, 0x06, // Physical Maximum (1728) 6200x09, 0x31, // Usage (Y) 6210x26, 0x00, 0x1B, // Logical Maximum (6912) 6220x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6230x15, 0x00, // Logical Minimum (0) 6240x26, 0xFF, 0x00, // Logical Maximum (255) 6250x35, 0x00, // Physical Minimum (0) 6260x45, 0x00, // Physical Maximum (0) 6270x65, 0x00, // Unit (None) 6280x55, 0x00, // Unit Exponent (0) 6290x75, 0x08, // Report Size (8) 6300x05, 0x0D, // Usage Page (Digitizer) 6310x09, 0x30, // Usage (Tip Pressure) 6320x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6330xC0, // End Collection 6340x05, 0x0D, // Usage Page (Digitizer) 6350x09, 0x22, // Usage (Finger) 6360xA1, 0x02, // Collection (Logical) 6370x09, 0x42, // Usage (Tip Switch) 6380x15, 0x00, // Logical Minimum (0) 6390x25, 0x01, // Logical Maximum (1) 6400x75, 0x01, // Report Size (1) 6410x95, 0x01, // Report Count (1) 6420x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6430x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6440x09, 0x47, // Usage (0x47) 6450x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6460x95, 0x05, // Report Count (5) 6470x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6480x75, 0x10, // Report Size (16) 6490x09, 0x51, // Usage (0x51) 6500x95, 0x01, // Report Count (1) 6510x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6520x15, 0x00, // Logical Minimum (0) 6530x26, 0xFF, 0x00, // Logical Maximum (255) 6540x35, 0x00, // Physical Minimum (0) 6550x46, 0xFF, 0x00, // Physical Maximum (255) 6560x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 6570x55, 0x0F, // Unit Exponent (-1) 6580x75, 0x08, // Report Size (8) 6590x09, 0x48, // Usage (0x48) 6600x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6610x09, 0x49, // Usage (0x49) 6620x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6630x05, 0x01, // Usage Page (Generic Desktop Ctrls) 6640x75, 0x10, // Report Size (16) 6650x95, 0x01, // Report Count (1) 6660x55, 0x0E, // Unit Exponent (-2) 6670x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 6680x09, 0x30, // Usage (X) 6690x26, 0x80, 0x28, // Logical Maximum (10368) 6700x35, 0x00, // Physical Minimum (0) 6710x46, 0x20, 0x0A, // Physical Maximum (2592) 6720x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6730x46, 0xC0, 0x06, // Physical Maximum (1728) 6740x09, 0x31, // Usage (Y) 6750x26, 0x00, 0x1B, // Logical Maximum (6912) 6760x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6770x15, 0x00, // Logical Minimum (0) 6780x26, 0xFF, 0x00, // Logical Maximum (255) 6790x35, 0x00, // Physical Minimum (0) 6800x45, 0x00, // Physical Maximum (0) 6810x65, 0x00, // Unit (None) 6820x55, 0x00, // Unit Exponent (0) 6830x75, 0x08, // Report Size (8) 6840x05, 0x0D, // Usage Page (Digitizer) 6850x09, 0x30, // Usage (Tip Pressure) 6860x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6870xC0, // End Collection 6880x05, 0x0D, // Usage Page (Digitizer) 6890x09, 0x22, // Usage (Finger) 6900xA1, 0x02, // Collection (Logical) 6910x09, 0x42, // Usage (Tip Switch) 6920x15, 0x00, // Logical Minimum (0) 6930x25, 0x01, // Logical Maximum (1) 6940x75, 0x01, // Report Size (1) 6950x95, 0x01, // Report Count (1) 6960x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6970x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 6980x09, 0x47, // Usage (0x47) 6990x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7000x95, 0x05, // Report Count (5) 7010x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7020x75, 0x10, // Report Size (16) 7030x09, 0x51, // Usage (0x51) 7040x95, 0x01, // Report Count (1) 7050x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7060x15, 0x00, // Logical Minimum (0) 7070x26, 0xFF, 0x00, // Logical Maximum (255) 7080x35, 0x00, // Physical Minimum (0) 7090x46, 0xFF, 0x00, // Physical Maximum (255) 7100x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 7110x55, 0x0F, // Unit Exponent (-1) 7120x75, 0x08, // Report Size (8) 7130x09, 0x48, // Usage (0x48) 7140x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7150x09, 0x49, // Usage (0x49) 7160x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7170x05, 0x01, // Usage Page (Generic Desktop Ctrls) 7180x75, 0x10, // Report Size (16) 7190x95, 0x01, // Report Count (1) 7200x55, 0x0E, // Unit Exponent (-2) 7210x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 7220x09, 0x30, // Usage (X) 7230x26, 0x80, 0x28, // Logical Maximum (10368) 7240x35, 0x00, // Physical Minimum (0) 7250x46, 0x20, 0x0A, // Physical Maximum (2592) 7260x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7270x46, 0xC0, 0x06, // Physical Maximum (1728) 7280x09, 0x31, // Usage (Y) 7290x26, 0x00, 0x1B, // Logical Maximum (6912) 7300x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7310x15, 0x00, // Logical Minimum (0) 7320x26, 0xFF, 0x00, // Logical Maximum (255) 7330x35, 0x00, // Physical Minimum (0) 7340x45, 0x00, // Physical Maximum (0) 7350x65, 0x00, // Unit (None) 7360x55, 0x00, // Unit Exponent (0) 7370x75, 0x08, // Report Size (8) 7380x05, 0x0D, // Usage Page (Digitizer) 7390x09, 0x30, // Usage (Tip Pressure) 7400x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7410xC0, // End Collection 7420x05, 0x0D, // Usage Page (Digitizer) 7430x09, 0x22, // Usage (Finger) 7440xA1, 0x02, // Collection (Logical) 7450x09, 0x42, // Usage (Tip Switch) 7460x15, 0x00, // Logical Minimum (0) 7470x25, 0x01, // Logical Maximum (1) 7480x75, 0x01, // Report Size (1) 7490x95, 0x01, // Report Count (1) 7500x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7510x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7520x09, 0x47, // Usage (0x47) 7530x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7540x95, 0x05, // Report Count (5) 7550x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7560x75, 0x10, // Report Size (16) 7570x09, 0x51, // Usage (0x51) 7580x95, 0x01, // Report Count (1) 7590x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7600x15, 0x00, // Logical Minimum (0) 7610x26, 0xFF, 0x00, // Logical Maximum (255) 7620x35, 0x00, // Physical Minimum (0) 7630x46, 0xFF, 0x00, // Physical Maximum (255) 7640x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 7650x55, 0x0F, // Unit Exponent (-1) 7660x75, 0x08, // Report Size (8) 7670x09, 0x48, // Usage (0x48) 7680x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7690x09, 0x49, // Usage (0x49) 7700x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7710x05, 0x01, // Usage Page (Generic Desktop Ctrls) 7720x75, 0x10, // Report Size (16) 7730x95, 0x01, // Report Count (1) 7740x55, 0x0E, // Unit Exponent (-2) 7750x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 7760x09, 0x30, // Usage (X) 7770x26, 0x80, 0x28, // Logical Maximum (10368) 7780x35, 0x00, // Physical Minimum (0) 7790x46, 0x20, 0x0A, // Physical Maximum (2592) 7800x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7810x46, 0xC0, 0x06, // Physical Maximum (1728) 7820x09, 0x31, // Usage (Y) 7830x26, 0x00, 0x1B, // Logical Maximum (6912) 7840x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7850x15, 0x00, // Logical Minimum (0) 7860x26, 0xFF, 0x00, // Logical Maximum (255) 7870x35, 0x00, // Physical Minimum (0) 7880x45, 0x00, // Physical Maximum (0) 7890x65, 0x00, // Unit (None) 7900x55, 0x00, // Unit Exponent (0) 7910x75, 0x08, // Report Size (8) 7920x05, 0x0D, // Usage Page (Digitizer) 7930x09, 0x30, // Usage (Tip Pressure) 7940x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 7950xC0, // End Collection 7960x05, 0x0D, // Usage Page (Digitizer) 7970x27, 0xFF, 0xFF, 0x00, 0x00, // Logical Maximum (65534) 7980x75, 0x10, // Report Size (16) 7990x95, 0x01, // Report Count (1) 8000x09, 0x56, // Usage (0x56) 8010x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 8020x85, 0x0C, // Report ID (12) 8030x09, 0x55, // Usage (0x55) 8040x75, 0x08, // Report Size (8) 8050x95, 0x01, // Report Count (1) 8060x26, 0xFF, 0x00, // Logical Maximum (255) 8070xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 8080x85, 0x0A, // Report ID (10) 8090x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 8100x09, 0xC5, // Usage (0xC5) 8110x96, 0x00, 0x01, // Report Count (256) 8120xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 8130xC0, // End Collection 8140x06, 0x11, 0xFF, // Usage Page (Vendor Defined 0xFF11) 8150x09, 0x11, // Usage (0x11) 8160xA1, 0x01, // Collection (Application) 8170x85, 0x03, // Report ID (3) 8180xA1, 0x02, // Collection (Logical) 8190x09, 0x00, // Usage (0x00) 8200x75, 0x08, // Report Size (8) 8210x15, 0x00, // Logical Minimum (0) 8220x26, 0xFF, 0x00, // Logical Maximum (255) 8230x95, 0x36, // Report Count (54) 8240x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 8250xC0, // End Collection 8260x85, 0x02, // Report ID (2) 8270x09, 0x00, // Usage (0x00) 8280x95, 0x01, // Report Count (1) 8290xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 8300x85, 0x03, // Report ID (3) 8310x09, 0x00, // Usage (0x00) 8320x95, 0x3F, // Report Count (63) 8330xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 8340x85, 0x04, // Report ID (4) 8350x09, 0x00, // Usage (0x00) 8360x95, 0x0F, // Report Count (15) 8370xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 8380x85, 0x07, // Report ID (7) 8390x09, 0x00, // Usage (0x00) 8400x96, 0x00, 0x01, // Report Count (256) 8410xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 8420x85, 0x08, // Report ID (8) 8430x09, 0x00, // Usage (0x00) 8440x96, 0x87, 0x00, // Report Count (135) 8450xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 8460x85, 0x09, // Report ID (9) 8470x09, 0x00, // Usage (0x00) 8480x96, 0x3F, 0x00, // Report Count (63) 8490xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 8500x85, 0x0D, // Report ID (13) 8510x09, 0x00, // Usage (0x00) 8520x95, 0x07, // Report Count (7) 8530xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 8540xC0, // End Collection 8550x05, 0x0D, // Usage Page (Digitizer) 8560x09, 0x0E, // Usage (0x0E) 8570xA1, 0x01, // Collection (Application) 8580x85, 0x0E, // Report ID (14) 8590x09, 0x23, // Usage (0x23) 8600xA1, 0x02, // Collection (Logical) 8610x09, 0x52, // Usage (0x52) 8620x09, 0x53, // Usage (0x53) 8630x15, 0x00, // Logical Minimum (0) 8640x25, 0x0A, // Logical Maximum (10) 8650x75, 0x08, // Report Size (8) 8660x95, 0x02, // Report Count (2) 8670xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 8680xC0, // End Collection 8690xC0, // End Collection 8700x05, 0x0D, // Usage Page (Digitizer) 8710x09, 0x02, // Usage (Pen) 8720xA1, 0x01, // Collection (Application) 8730x85, 0x06, // Report ID (6) 8740xA4, // Push 8750x09, 0x20, // Usage (Stylus) 8760xA1, 0x00, // Collection (Physical) 8770x09, 0x42, // Usage (Tip Switch) 8780x09, 0x44, // Usage (Barrel Switch) 8790x09, 0x45, // Usage (Eraser) 8800x09, 0x3C, // Usage (Invert) 8810x09, 0x5A, // Usage (0x5A) 8820x09, 0x32, // Usage (In Range) 8830x15, 0x00, // Logical Minimum (0) 8840x25, 0x01, // Logical Maximum (1) 8850x75, 0x01, // Report Size (1) 8860x95, 0x06, // Report Count (6) 8870x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 8880x95, 0x02, // Report Count (2) 8890x81, 0x03, // Input (Const,Var,Abs,No Wap,Linear,Preferred State,No Null Position) 8900x05, 0x01, // Usage Page (Generic Desktop Ctrls) 8910x09, 0x30, // Usage (X) 8920x27, 0x40, 0x65, 0x00, 0x00, // Logical Maximum (25919) 8930x47, 0x40, 0x65, 0x00, 0x00, // Physical Maximum (25919) 8940x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 8950x55, 0x0D, // Unit Exponent (-3) 8960x75, 0x10, // Report Size (16) 8970x95, 0x01, // Report Count (1) 8980x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 8990x09, 0x31, // Usage (Y) 9000x27, 0x80, 0x43, 0x00, 0x00, // Logical Maximum (17279) 9010x47, 0x80, 0x43, 0x00, 0x00, // Physical Maximum (17279) 9020x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9030x45, 0x00, // Physical Maximum (0) 9040x65, 0x00, // Unit (None) 9050x55, 0x00, // Unit Exponent (0) 9060x05, 0x0D, // Usage Page (Digitizer) 9070x09, 0x30, // Usage (Tip Pressure) 9080x26, 0xFF, 0x07, // Logical Maximum (2047) 9090x75, 0x10, // Report Size (16) 9100x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9110x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 9120x09, 0x5B, // Usage (0x5B) 9130x16, 0x00, 0x80, // Logical Minimum (-32768) 9140x26, 0xFF, 0x7F, // Logical Maximum (32767) 9150x75, 0x10, // Report Size (16) 9160x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9170x05, 0x0D, // Usage Page (Digitizer) 9180x09, 0x5B, // Usage (0x5B) 9190x17, 0x00, 0x00, 0x00, 0x80, // Logical Minimum (-2147483649) 9200x27, 0xFF, 0xFF, 0xFF, 0x7F, // Logical Maximum (2147483646) 9210x75, 0x20, // Report Size (32) 9220x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9230x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 9240x09, 0x00, // Usage (0x00) 9250x75, 0x08, // Report Size (8) 9260x26, 0xFF, 0x00, // Logical Maximum (255) 9270x15, 0x00, // Logical Minimum (0) 9280x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9290x05, 0x0D, // Usage Page (Digitizer) 9300x09, 0x3B, // Usage (Battery Strength) 9310x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9320x65, 0x14, // Unit (System: English Rotation, Length: Centimeter) 9330x55, 0x00, // Unit Exponent (0) 9340x16, 0xA6, 0xFF, // Logical Minimum (-90) 9350x26, 0x5A, 0x00, // Logical Maximum (90) 9360x36, 0xA6, 0xFF, // Physical Minimum (-90) 9370x46, 0x5A, 0x00, // Physical Maximum (90) 9380x75, 0x08, // Report Size (8) 9390x09, 0x3D, // Usage (X Tilt) 9400x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9410x09, 0x3E, // Usage (Y Tilt) 9420x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9430x15, 0x00, // Logical Minimum (0) 9440x27, 0xFF, 0xFF, 0x00, 0x00, // Logical Maximum (65534) 9450x35, 0x00, // Physical Minimum (0) 9460x47, 0xFF, 0xFF, 0x00, 0x00, // Physical Maximum (65534) 9470x66, 0x01, 0x10, // Unit (System: SI Linear, Time: Seconds) 9480x55, 0x0C, // Unit Exponent (-4) 9490x75, 0x10, // Report Size (16) 9500x09, 0x56, // Usage (0x56) 9510x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9520xC0, // End Collection 9530xB4, // Pop 9540x85, 0x13, // Report ID (19) 9550x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 9560x09, 0xC5, // Usage (0xC5) 9570x96, 0x00, 0x01, // Report Count (256) 9580xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 9590xC0, // End Collection 9600x06, 0x11, 0xFF, // Usage Page (Vendor Defined 0xFF11) 9610x09, 0x02, // Usage (0x02) 9620xA1, 0x01, // Collection (Application) 9630x85, 0x0B, // Report ID (11) 9640xA4, // Push 9650x09, 0x20, // Usage (0x20) 9660xA1, 0x00, // Collection (Physical) 9670x09, 0x42, // Usage (0x42) 9680x09, 0x44, // Usage (0x44) 9690x09, 0x45, // Usage (0x45) 9700x09, 0x3C, // Usage (0x3C) 9710x09, 0x5A, // Usage (0x5A) 9720x09, 0x32, // Usage (0x32) 9730x15, 0x00, // Logical Minimum (0) 9740x25, 0x01, // Logical Maximum (1) 9750x75, 0x01, // Report Size (1) 9760x95, 0x06, // Report Count (6) 9770x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9780x95, 0x02, // Report Count (2) 9790x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9800x05, 0x01, // Usage Page (Generic Desktop Ctrls) 9810x09, 0x30, // Usage (X) 9820x27, 0x40, 0x65, 0x00, 0x00, // Logical Maximum (25919) 9830x47, 0x40, 0x65, 0x00, 0x00, // Physical Maximum (25919) 9840x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 9850x55, 0x0D, // Unit Exponent (-3) 9860x75, 0x10, // Report Size (16) 9870x95, 0x01, // Report Count (1) 9880x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9890x09, 0x31, // Usage (Y) 9900x27, 0x80, 0x43, 0x00, 0x00, // Logical Maximum (17279) 9910x47, 0x80, 0x43, 0x00, 0x00, // Physical Maximum (17279) 9920x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 9930x45, 0x00, // Physical Maximum (0) 9940x65, 0x00, // Unit (None) 9950x55, 0x00, // Unit Exponent (0) 9960x05, 0x0D, // Usage Page (Digitizer) 9970x09, 0x30, // Usage (Tip Pressure) 9980x26, 0xFF, 0x07, // Logical Maximum (2047) 9990x75, 0x10, // Report Size (16) 10000x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10010x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 10020x09, 0x5B, // Usage (0x5B) 10030x16, 0x00, 0x80, // Logical Minimum (-32768) 10040x26, 0xFF, 0x7F, // Logical Maximum (32767) 10050x75, 0x10, // Report Size (16) 10060x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10070x05, 0x0D, // Usage Page (Digitizer) 10080x09, 0x5B, // Usage (0x5B) 10090x17, 0x00, 0x00, 0x00, 0x80, // Logical Minimum (-2147483649) 10100x27, 0xFF, 0xFF, 0xFF, 0x7F, // Logical Maximum (2147483646) 10110x75, 0x20, // Report Size (32) 10120x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10130x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 10140x09, 0x00, // Usage (0x00) 10150x75, 0x08, // Report Size (8) 10160x26, 0xFF, 0x00, // Logical Maximum (255) 10170x15, 0x00, // Logical Minimum (0) 10180x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10190x05, 0x0D, // Usage Page (Digitizer) 10200x09, 0x3B, // Usage (Battery Strength) 10210x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10220x65, 0x14, // Unit (System: English Rotation, Length: Centimeter) 10230x55, 0x00, // Unit Exponent (0) 10240x16, 0xA6, 0xFF, // Logical Minimum (-90) 10250x26, 0x5A, 0x00, // Logical Maximum (90) 10260x36, 0xA6, 0xFF, // Physical Minimum (-90) 10270x46, 0x5A, 0x00, // Physical Maximum (90) 10280x75, 0x08, // Report Size (8) 10290x09, 0x3D, // Usage (X Tilt) 10300x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10310x09, 0x3E, // Usage (Y Tilt) 10320x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10330x15, 0x00, // Logical Minimum (0) 10340x27, 0xFF, 0xFF, 0x00, 0x00, // Logical Maximum (65534) 10350x35, 0x00, // Physical Minimum (0) 10360x47, 0xFF, 0xFF, 0x00, 0x00, // Physical Maximum (65534) 10370x66, 0x01, 0x10, // Unit (System: SI Linear, Time: Seconds) 10380x55, 0x0C, // Unit Exponent (-4) 10390x75, 0x10, // Report Size (16) 10400x09, 0x56, // Usage (0x56) 10410x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10420xC0, // End Collection 10430xB4, // Pop 10440x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 10450x75, 0x08, // Report Size (8) 10460x15, 0x00, // Logical Minimum (0) 10470x26, 0xFF, 0x00, // Logical Maximum (255) 10480x85, 0x05, // Report ID (5) 10490x09, 0x00, // Usage (0x00) 10500x95, 0x3A, // Report Count (58) 10510x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10520x85, 0x10, // Report ID (16) 10530x09, 0x00, // Usage (0x00) 10540x95, 0x14, // Report Count (20) 10550x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10560x85, 0x0F, // Report ID (15) 10570x09, 0x00, // Usage (0x00) 10580x95, 0x27, // Report Count (39) 10590x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10600x85, 0x0F, // Report ID (15) 10610x09, 0x00, // Usage (0x00) 10620x95, 0x07, // Report Count (7) 10630xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 10640x85, 0x11, // Report ID (17) 10650x09, 0x00, // Usage (0x00) 10660x95, 0x09, // Report Count (9) 10670xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 10680x85, 0x05, // Report ID (5) 10690x09, 0x00, // Usage (0x00) 10700x95, 0x08, // Report Count (8) 10710xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 10720x85, 0x10, // Report ID (16) 10730x09, 0x00, // Usage (0x00) 10740x96, 0x3F, 0x00, // Report Count (63) 10750xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 10760x85, 0x0B, // Report ID (11) 10770x09, 0x00, // Usage (0x00) 10780x96, 0x3F, 0x00, // Report Count (63) 10790xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 10800xC0, // End Collection 10810x05, 0x01, // Usage Page (Generic Desktop Ctrls) 10820x09, 0x02, // Usage (Mouse) 10830xA1, 0x01, // Collection (Application) 10840x85, 0x01, // Report ID (1) 10850x09, 0x01, // Usage (Pointer) 10860xA1, 0x00, // Collection (Physical) 10870x05, 0x09, // Usage Page (Button) 10880x19, 0x01, // Usage Minimum (0x01) 10890x29, 0x02, // Usage Maximum (0x02) 10900x15, 0x00, // Logical Minimum (0) 10910x25, 0x01, // Logical Maximum (1) 10920x95, 0x02, // Report Count (2) 10930x75, 0x01, // Report Size (1) 10940x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10950x95, 0x01, // Report Count (1) 10960x75, 0x06, // Report Size (6) 10970x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 10980x05, 0x01, // Usage Page (Generic Desktop Ctrls) 10990x09, 0x30, // Usage (X) 11000x09, 0x31, // Usage (Y) 11010x26, 0xFF, 0x7F, // Logical Maximum (32767) 11020x75, 0x10, // Report Size (16) 11030x95, 0x02, // Report Count (2) 11040x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11050xC0, // End Collection 11060xC0, // End Collection 1107 1108// 1289 bytes 1109}; 1110 1111bool is_paradise_touch_v2_report_desc(const uint8_t* data, size_t len) { 1112 if (!data) 1113 return false; 1114 1115 if (len != sizeof(paradise_touch_v2_report_desc)) { 1116 return false; 1117 } 1118 1119 return (memcmp(data, paradise_touch_v2_report_desc, len) == 0); 1120} 1121 1122static const uint8_t paradise_touch_v3_report_desc[] = { 11230x05, 0x0D, // Usage Page (Digitizer) 11240x09, 0x04, // Usage (Touch Screen) 11250xA1, 0x01, // Collection (Application) 11260x85, 0x0C, // Report ID (12) 11270x95, 0x01, // Report Count (1) 11280x75, 0x08, // Report Size (8) 11290x26, 0xFF, 0x00, // Logical Maximum (255) 11300x15, 0x00, // Logical Minimum (0) 11310x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11320x09, 0x54, // Usage (0x54) 11330x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11340x05, 0x0D, // Usage Page (Digitizer) 11350x09, 0x22, // Usage (Finger) 11360xA1, 0x02, // Collection (Logical) 11370x09, 0x42, // Usage (Tip Switch) 11380x15, 0x00, // Logical Minimum (0) 11390x25, 0x01, // Logical Maximum (1) 11400x75, 0x01, // Report Size (1) 11410x95, 0x01, // Report Count (1) 11420x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11430x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11440x09, 0x47, // Usage (0x47) 11450x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11460x95, 0x05, // Report Count (5) 11470x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11480x75, 0x10, // Report Size (16) 11490x09, 0x51, // Usage (0x51) 11500x95, 0x01, // Report Count (1) 11510x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11520x05, 0x01, // Usage Page (Generic Desktop Ctrls) 11530x75, 0x10, // Report Size (16) 11540x95, 0x01, // Report Count (1) 11550x55, 0x0E, // Unit Exponent (-2) 11560x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 11570x09, 0x30, // Usage (X) 11580x26, 0x84, 0x28, // Logical Maximum (10372) 11590x35, 0x00, // Physical Minimum (0) 11600x46, 0x21, 0x0A, // Physical Maximum (2593) 11610x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11620x46, 0xC1, 0x06, // Physical Maximum (1729) 11630x09, 0x31, // Usage (Y) 11640x26, 0x04, 0x1B, // Logical Maximum (6916) 11650x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11660xC0, // End Collection 11670x05, 0x0D, // Usage Page (Digitizer) 11680x09, 0x22, // Usage (Finger) 11690xA1, 0x02, // Collection (Logical) 11700x09, 0x42, // Usage (Tip Switch) 11710x15, 0x00, // Logical Minimum (0) 11720x25, 0x01, // Logical Maximum (1) 11730x75, 0x01, // Report Size (1) 11740x95, 0x01, // Report Count (1) 11750x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11760x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11770x09, 0x47, // Usage (0x47) 11780x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11790x95, 0x05, // Report Count (5) 11800x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11810x75, 0x10, // Report Size (16) 11820x09, 0x51, // Usage (0x51) 11830x95, 0x01, // Report Count (1) 11840x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11850x05, 0x01, // Usage Page (Generic Desktop Ctrls) 11860x75, 0x10, // Report Size (16) 11870x95, 0x01, // Report Count (1) 11880x55, 0x0E, // Unit Exponent (-2) 11890x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 11900x09, 0x30, // Usage (X) 11910x26, 0x84, 0x28, // Logical Maximum (10372) 11920x35, 0x00, // Physical Minimum (0) 11930x46, 0x21, 0x0A, // Physical Maximum (2593) 11940x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11950x46, 0xC1, 0x06, // Physical Maximum (1729) 11960x09, 0x31, // Usage (Y) 11970x26, 0x04, 0x1B, // Logical Maximum (6916) 11980x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 11990xC0, // End Collection 12000x05, 0x0D, // Usage Page (Digitizer) 12010x09, 0x22, // Usage (Finger) 12020xA1, 0x02, // Collection (Logical) 12030x09, 0x42, // Usage (Tip Switch) 12040x15, 0x00, // Logical Minimum (0) 12050x25, 0x01, // Logical Maximum (1) 12060x75, 0x01, // Report Size (1) 12070x95, 0x01, // Report Count (1) 12080x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12090x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12100x09, 0x47, // Usage (0x47) 12110x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12120x95, 0x05, // Report Count (5) 12130x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12140x75, 0x10, // Report Size (16) 12150x09, 0x51, // Usage (0x51) 12160x95, 0x01, // Report Count (1) 12170x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12180x05, 0x01, // Usage Page (Generic Desktop Ctrls) 12190x75, 0x10, // Report Size (16) 12200x95, 0x01, // Report Count (1) 12210x55, 0x0E, // Unit Exponent (-2) 12220x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 12230x09, 0x30, // Usage (X) 12240x26, 0x84, 0x28, // Logical Maximum (10372) 12250x35, 0x00, // Physical Minimum (0) 12260x46, 0x21, 0x0A, // Physical Maximum (2593) 12270x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12280x46, 0xC1, 0x06, // Physical Maximum (1729) 12290x09, 0x31, // Usage (Y) 12300x26, 0x04, 0x1B, // Logical Maximum (6916) 12310x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12320xC0, // End Collection 12330x05, 0x0D, // Usage Page (Digitizer) 12340x09, 0x22, // Usage (Finger) 12350xA1, 0x02, // Collection (Logical) 12360x09, 0x42, // Usage (Tip Switch) 12370x15, 0x00, // Logical Minimum (0) 12380x25, 0x01, // Logical Maximum (1) 12390x75, 0x01, // Report Size (1) 12400x95, 0x01, // Report Count (1) 12410x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12420x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12430x09, 0x47, // Usage (0x47) 12440x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12450x95, 0x05, // Report Count (5) 12460x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12470x75, 0x10, // Report Size (16) 12480x09, 0x51, // Usage (0x51) 12490x95, 0x01, // Report Count (1) 12500x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12510x05, 0x01, // Usage Page (Generic Desktop Ctrls) 12520x75, 0x10, // Report Size (16) 12530x95, 0x01, // Report Count (1) 12540x55, 0x0E, // Unit Exponent (-2) 12550x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 12560x09, 0x30, // Usage (X) 12570x26, 0x84, 0x28, // Logical Maximum (10372) 12580x35, 0x00, // Physical Minimum (0) 12590x46, 0x21, 0x0A, // Physical Maximum (2593) 12600x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12610x46, 0xC1, 0x06, // Physical Maximum (1729) 12620x09, 0x31, // Usage (Y) 12630x26, 0x04, 0x1B, // Logical Maximum (6916) 12640x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12650xC0, // End Collection 12660x05, 0x0D, // Usage Page (Digitizer) 12670x09, 0x22, // Usage (Finger) 12680xA1, 0x02, // Collection (Logical) 12690x09, 0x42, // Usage (Tip Switch) 12700x15, 0x00, // Logical Minimum (0) 12710x25, 0x01, // Logical Maximum (1) 12720x75, 0x01, // Report Size (1) 12730x95, 0x01, // Report Count (1) 12740x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12750x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12760x09, 0x47, // Usage (0x47) 12770x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12780x95, 0x05, // Report Count (5) 12790x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12800x75, 0x10, // Report Size (16) 12810x09, 0x51, // Usage (0x51) 12820x95, 0x01, // Report Count (1) 12830x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12840x05, 0x01, // Usage Page (Generic Desktop Ctrls) 12850x75, 0x10, // Report Size (16) 12860x95, 0x01, // Report Count (1) 12870x55, 0x0E, // Unit Exponent (-2) 12880x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 12890x09, 0x30, // Usage (X) 12900x26, 0x84, 0x28, // Logical Maximum (10372) 12910x35, 0x00, // Physical Minimum (0) 12920x46, 0x21, 0x0A, // Physical Maximum (2593) 12930x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12940x46, 0xC1, 0x06, // Physical Maximum (1729) 12950x09, 0x31, // Usage (Y) 12960x26, 0x04, 0x1B, // Logical Maximum (6916) 12970x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 12980xC0, // End Collection 12990x05, 0x0D, // Usage Page (Digitizer) 13000x27, 0xFF, 0xFF, 0x00, 0x00, // Logical Maximum (65534) 13010x75, 0x10, // Report Size (16) 13020x95, 0x01, // Report Count (1) 13030x09, 0x56, // Usage (0x56) 13040x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 13050x85, 0x0C, // Report ID (12) 13060x09, 0x55, // Usage (0x55) 13070x75, 0x08, // Report Size (8) 13080x95, 0x01, // Report Count (1) 13090x26, 0xFF, 0x00, // Logical Maximum (255) 13100xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 13110x85, 0x0A, // Report ID (10) 13120x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 13130x09, 0xC5, // Usage (0xC5) 13140x96, 0x00, 0x01, // Report Count (256) 13150xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 13160xC0, // End Collection 13170x06, 0x11, 0xFF, // Usage Page (Vendor Defined 0xFF11) 13180x09, 0x11, // Usage (0x11) 13190xA1, 0x01, // Collection (Application) 13200x85, 0x03, // Report ID (3) 13210xA1, 0x02, // Collection (Logical) 13220x09, 0x00, // Usage (0x00) 13230x75, 0x08, // Report Size (8) 13240x15, 0x00, // Logical Minimum (0) 13250x26, 0xFF, 0x00, // Logical Maximum (255) 13260x95, 0x27, // Report Count (39) 13270x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 13280xC0, // End Collection 13290x85, 0x02, // Report ID (2) 13300x09, 0x00, // Usage (0x00) 13310x95, 0x01, // Report Count (1) 13320xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 13330x85, 0x03, // Report ID (3) 13340x09, 0x00, // Usage (0x00) 13350x95, 0x3F, // Report Count (63) 13360xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 13370x85, 0x04, // Report ID (4) 13380x09, 0x00, // Usage (0x00) 13390x95, 0x0F, // Report Count (15) 13400xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 13410x85, 0x07, // Report ID (7) 13420x09, 0x00, // Usage (0x00) 13430x96, 0x00, 0x01, // Report Count (256) 13440xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 13450x85, 0x08, // Report ID (8) 13460x09, 0x00, // Usage (0x00) 13470x96, 0x87, 0x00, // Report Count (135) 13480xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 13490x85, 0x09, // Report ID (9) 13500x09, 0x00, // Usage (0x00) 13510x96, 0x3F, 0x00, // Report Count (63) 13520xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 13530x85, 0x0D, // Report ID (13) 13540x09, 0x00, // Usage (0x00) 13550x95, 0x07, // Report Count (7) 13560xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 13570xC0, // End Collection 13580x05, 0x0D, // Usage Page (Digitizer) 13590x09, 0x0E, // Usage (0x0E) 13600xA1, 0x01, // Collection (Application) 13610x85, 0x0E, // Report ID (14) 13620x09, 0x23, // Usage (0x23) 13630xA1, 0x02, // Collection (Logical) 13640x09, 0x52, // Usage (0x52) 13650x09, 0x53, // Usage (0x53) 13660x15, 0x00, // Logical Minimum (0) 13670x25, 0x0A, // Logical Maximum (10) 13680x75, 0x08, // Report Size (8) 13690x95, 0x02, // Report Count (2) 13700xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 13710xC0, // End Collection 13720xC0, // End Collection 13730x05, 0x0D, // Usage Page (Digitizer) 13740x09, 0x02, // Usage (Pen) 13750xA1, 0x01, // Collection (Application) 13760x85, 0x06, // Report ID (6) 13770xA4, // Push 13780x09, 0x20, // Usage (Stylus) 13790xA1, 0x00, // Collection (Physical) 13800x09, 0x42, // Usage (Tip Switch) 13810x09, 0x44, // Usage (Barrel Switch) 13820x09, 0x45, // Usage (Eraser) 13830x09, 0x3C, // Usage (Invert) 13840x09, 0x5A, // Usage (0x5A) 13850x09, 0x32, // Usage (In Range) 13860x15, 0x00, // Logical Minimum (0) 13870x25, 0x01, // Logical Maximum (1) 13880x75, 0x01, // Report Size (1) 13890x95, 0x06, // Report Count (6) 13900x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 13910x95, 0x02, // Report Count (2) 13920x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 13930x05, 0x01, // Usage Page (Generic Desktop Ctrls) 13940x09, 0x30, // Usage (X) 13950x27, 0x40, 0x65, 0x00, 0x00, // Logical Maximum (25919) 13960x47, 0x40, 0x65, 0x00, 0x00, // Physical Maximum (25919) 13970x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 13980x55, 0x0D, // Unit Exponent (-3) 13990x75, 0x10, // Report Size (16) 14000x95, 0x01, // Report Count (1) 14010x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14020x09, 0x31, // Usage (Y) 14030x27, 0x80, 0x43, 0x00, 0x00, // Logical Maximum (17279) 14040x47, 0x80, 0x43, 0x00, 0x00, // Physical Maximum (17279) 14050x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14060x45, 0x00, // Physical Maximum (0) 14070x65, 0x00, // Unit (None) 14080x55, 0x00, // Unit Exponent (0) 14090x05, 0x0D, // Usage Page (Digitizer) 14100x09, 0x30, // Usage (Tip Pressure) 14110x26, 0xFF, 0x07, // Logical Maximum (2047) 14120x75, 0x10, // Report Size (16) 14130x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14140x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 14150x09, 0x5B, // Usage (0x5B) 14160x16, 0x00, 0x80, // Logical Minimum (-32768) 14170x26, 0xFF, 0x7F, // Logical Maximum (32767) 14180x75, 0x10, // Report Size (16) 14190x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14200x05, 0x0D, // Usage Page (Digitizer) 14210x09, 0x5B, // Usage (0x5B) 14220x17, 0x00, 0x00, 0x00, 0x80, // Logical Minimum (-2147483649) 14230x27, 0xFF, 0xFF, 0xFF, 0x7F, // Logical Maximum (2147483646) 14240x75, 0x20, // Report Size (32) 14250x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14260x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 14270x09, 0x00, // Usage (0x00) 14280x75, 0x08, // Report Size (8) 14290x26, 0xFF, 0x00, // Logical Maximum (255) 14300x15, 0x00, // Logical Minimum (0) 14310x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14320x05, 0x0D, // Usage Page (Digitizer) 14330x09, 0x3B, // Usage (Battery Strength) 14340x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14350x65, 0x14, // Unit (System: English Rotation, Length: Centimeter) 14360x55, 0x00, // Unit Exponent (0) 14370x16, 0xA6, 0xFF, // Logical Minimum (-90) 14380x26, 0x5A, 0x00, // Logical Maximum (90) 14390x36, 0xA6, 0xFF, // Physical Minimum (-90) 14400x46, 0x5A, 0x00, // Physical Maximum (90) 14410x75, 0x08, // Report Size (8) 14420x09, 0x3D, // Usage (X Tilt) 14430x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14440x09, 0x3E, // Usage (Y Tilt) 14450x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14460xC0, // End Collection 14470xB4, // Pop 14480x85, 0x13, // Report ID (19) 14490x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 14500x09, 0xC5, // Usage (0xC5) 14510x96, 0x00, 0x01, // Report Count (256) 14520xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 14530xC0, // End Collection 14540x06, 0x11, 0xFF, // Usage Page (Vendor Defined 0xFF11) 14550x09, 0x02, // Usage (0x02) 14560xA1, 0x01, // Collection (Application) 14570x85, 0x0B, // Report ID (11) 14580xA4, // Push 14590x09, 0x20, // Usage (0x20) 14600xA1, 0x00, // Collection (Physical) 14610x09, 0x42, // Usage (0x42) 14620x09, 0x44, // Usage (0x44) 14630x09, 0x45, // Usage (0x45) 14640x09, 0x3C, // Usage (0x3C) 14650x09, 0x5A, // Usage (0x5A) 14660x09, 0x32, // Usage (0x32) 14670x15, 0x00, // Logical Minimum (0) 14680x25, 0x01, // Logical Maximum (1) 14690x75, 0x01, // Report Size (1) 14700x95, 0x06, // Report Count (6) 14710x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14720x95, 0x02, // Report Count (2) 14730x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14740x05, 0x01, // Usage Page (Generic Desktop Ctrls) 14750x09, 0x30, // Usage (X) 14760x27, 0x40, 0x65, 0x00, 0x00, // Logical Maximum (25919) 14770x47, 0x40, 0x65, 0x00, 0x00, // Physical Maximum (25919) 14780x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 14790x55, 0x0D, // Unit Exponent (-3) 14800x75, 0x10, // Report Size (16) 14810x95, 0x01, // Report Count (1) 14820x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14830x09, 0x31, // Usage (Y) 14840x27, 0x80, 0x43, 0x00, 0x00, // Logical Maximum (17279) 14850x47, 0x80, 0x43, 0x00, 0x00, // Physical Maximum (17279) 14860x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14870x45, 0x00, // Physical Maximum (0) 14880x65, 0x00, // Unit (None) 14890x55, 0x00, // Unit Exponent (0) 14900x05, 0x0D, // Usage Page (Digitizer) 14910x09, 0x30, // Usage (Tip Pressure) 14920x26, 0xFF, 0x07, // Logical Maximum (2047) 14930x75, 0x10, // Report Size (16) 14940x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 14950x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 14960x09, 0x5B, // Usage (0x5B) 14970x16, 0x00, 0x80, // Logical Minimum (-32768) 14980x26, 0xFF, 0x7F, // Logical Maximum (32767) 14990x75, 0x10, // Report Size (16) 15000x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15010x05, 0x0D, // Usage Page (Digitizer) 15020x09, 0x5B, // Usage (0x5B) 15030x17, 0x00, 0x00, 0x00, 0x80, // Logical Minimum (-2147483649) 15040x27, 0xFF, 0xFF, 0xFF, 0x7F, // Logical Maximum (2147483646) 15050x75, 0x20, // Report Size (32) 15060x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15070x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 15080x09, 0x00, // Usage (0x00) 15090x75, 0x08, // Report Size (8) 15100x26, 0xFF, 0x00, // Logical Maximum (255) 15110x15, 0x00, // Logical Minimum (0) 15120x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15130x05, 0x0D, // Usage Page (Digitizer) 15140x09, 0x3B, // Usage (Battery Strength) 15150x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15160x65, 0x14, // Unit (System: English Rotation, Length: Centimeter) 15170x55, 0x00, // Unit Exponent (0) 15180x16, 0xA6, 0xFF, // Logical Minimum (-90) 15190x26, 0x5A, 0x00, // Logical Maximum (90) 15200x36, 0xA6, 0xFF, // Physical Minimum (-90) 15210x46, 0x5A, 0x00, // Physical Maximum (90) 15220x75, 0x08, // Report Size (8) 15230x09, 0x3D, // Usage (X Tilt) 15240x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15250x09, 0x3E, // Usage (Y Tilt) 15260x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15270xC0, // End Collection 15280xB4, // Pop 15290x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 15300x75, 0x08, // Report Size (8) 15310x15, 0x00, // Logical Minimum (0) 15320x26, 0xFF, 0x00, // Logical Maximum (255) 15330x85, 0x05, // Report ID (5) 15340x09, 0x00, // Usage (0x00) 15350x95, 0x3A, // Report Count (58) 15360x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15370x85, 0x10, // Report ID (16) 15380x09, 0x00, // Usage (0x00) 15390x95, 0x14, // Report Count (20) 15400x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15410x85, 0x0F, // Report ID (15) 15420x09, 0x00, // Usage (0x00) 15430x95, 0x27, // Report Count (39) 15440x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15450x85, 0x0F, // Report ID (15) 15460x09, 0x00, // Usage (0x00) 15470x95, 0x07, // Report Count (7) 15480xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 15490x85, 0x11, // Report ID (17) 15500x09, 0x00, // Usage (0x00) 15510x95, 0x09, // Report Count (9) 15520xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 15530x85, 0x05, // Report ID (5) 15540x09, 0x00, // Usage (0x00) 15550x95, 0x08, // Report Count (8) 15560xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 15570x85, 0x10, // Report ID (16) 15580x09, 0x00, // Usage (0x00) 15590x96, 0x3F, 0x00, // Report Count (63) 15600xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 15610x85, 0x0B, // Report ID (11) 15620x09, 0x00, // Usage (0x00) 15630x96, 0x3F, 0x00, // Report Count (63) 15640xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 15650xC0, // End Collection 15660x05, 0x01, // Usage Page (Generic Desktop Ctrls) 15670x09, 0x02, // Usage (Mouse) 15680xA1, 0x01, // Collection (Application) 15690x85, 0x01, // Report ID (1) 15700x09, 0x01, // Usage (Pointer) 15710xA1, 0x00, // Collection (Physical) 15720x05, 0x09, // Usage Page (Button) 15730x19, 0x01, // Usage Minimum (0x01) 15740x29, 0x02, // Usage Maximum (0x02) 15750x15, 0x00, // Logical Minimum (0) 15760x25, 0x01, // Logical Maximum (1) 15770x95, 0x02, // Report Count (2) 15780x75, 0x01, // Report Size (1) 15790x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15800x95, 0x01, // Report Count (1) 15810x75, 0x06, // Report Size (6) 15820x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15830x05, 0x01, // Usage Page (Generic Desktop Ctrls) 15840x09, 0x30, // Usage (X) 15850x09, 0x31, // Usage (Y) 15860x26, 0xFF, 0x7F, // Logical Maximum (32767) 15870x75, 0x10, // Report Size (16) 15880x95, 0x02, // Report Count (2) 15890x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 15900xC0, // End Collection 15910xC0, // End Collection 1592 1593// 1014 bytes 1594}; 1595 1596bool is_paradise_touch_v3_report_desc(const uint8_t* data, size_t len) { 1597 if (!data) 1598 return false; 1599 1600 if (len != sizeof(paradise_touch_v3_report_desc)) { 1601 return false; 1602 } 1603 1604 return (memcmp(data, paradise_touch_v3_report_desc, len) == 0); 1605} 1606 1607zx_status_t setup_paradise_touch(int fd) { 1608 if (fd < 0) 1609 return ZX_ERR_INVALID_ARGS; 1610 1611 return ZX_OK; 1612} 1613 1614static const uint8_t paradise_touchpad_v1_report_desc[] = { 16150x05, 0x0D, // Usage Page (Digitizer) 16160x09, 0x05, // Usage (Touch Pad) 16170xA1, 0x01, // Collection (Application) 16180x85, 0x01, // Report ID (1) 16190x05, 0x09, // Usage Page (Button) 16200x19, 0x01, // Usage Minimum (0x01) 16210x29, 0x01, // Usage Maximum (0x01) 16220x15, 0x00, // Logical Minimum (0) 16230x25, 0x01, // Logical Maximum (1) 16240x75, 0x01, // Report Size (1) 16250x95, 0x01, // Report Count (1) 16260x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16270x05, 0x0D, // Usage Page (Digitizer) 16280x09, 0x54, // Usage (0x54) 16290x75, 0x07, // Report Size (7) 16300x95, 0x01, // Report Count (1) 16310x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16320x09, 0x22, // Usage (Finger) 16330xA1, 0x02, // Collection (Logical) 16340x09, 0x42, // Usage (Tip Switch) 16350x15, 0x00, // Logical Minimum (0) 16360x25, 0x01, // Logical Maximum (1) 16370x75, 0x01, // Report Size (1) 16380x95, 0x01, // Report Count (1) 16390x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16400x09, 0x32, // Usage (In Range) 16410x75, 0x07, // Report Size (7) 16420x95, 0x01, // Report Count (1) 16430x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16440x09, 0x51, // Usage (0x51) 16450x26, 0xFF, 0x7F, // Logical Maximum (32767) 16460x75, 0x10, // Report Size (16) 16470x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16480x05, 0x01, // Usage Page (Generic Desktop Ctrls) 16490x09, 0x30, // Usage (X) 16500x55, 0x0E, // Unit Exponent (-2) 16510x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 16520x35, 0x00, // Physical Minimum (0) 16530x46, 0x06, 0x04, // Physical Maximum (1030) 16540x26, 0x80, 0x33, // Logical Maximum (13184) 16550x75, 0x10, // Report Size (16) 16560x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16570x09, 0x31, // Usage (Y) 16580x46, 0xA8, 0x02, // Physical Maximum (680) 16590x26, 0x00, 0x22, // Logical Maximum (8704) 16600x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16610x05, 0x0D, // Usage Page (Digitizer) 16620x26, 0x80, 0x33, // Logical Maximum (13184) 16630x09, 0x48, // Usage (0x48) 16640x75, 0x10, // Report Size (16) 16650x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16660x26, 0x00, 0x22, // Logical Maximum (8704) 16670x09, 0x49, // Usage (0x49) 16680x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16690x09, 0x30, // Usage (Tip Pressure) 16700x26, 0xFF, 0x00, // Logical Maximum (255) 16710x75, 0x08, // Report Size (8) 16720x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16730xC0, // End Collection 16740x09, 0x22, // Usage (Finger) 16750xA1, 0x02, // Collection (Logical) 16760x09, 0x42, // Usage (Tip Switch) 16770x15, 0x00, // Logical Minimum (0) 16780x25, 0x01, // Logical Maximum (1) 16790x75, 0x01, // Report Size (1) 16800x95, 0x01, // Report Count (1) 16810x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16820x09, 0x32, // Usage (In Range) 16830x75, 0x07, // Report Size (7) 16840x95, 0x01, // Report Count (1) 16850x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16860x09, 0x51, // Usage (0x51) 16870x26, 0xFF, 0x7F, // Logical Maximum (32767) 16880x75, 0x10, // Report Size (16) 16890x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16900x05, 0x01, // Usage Page (Generic Desktop Ctrls) 16910x09, 0x30, // Usage (X) 16920x55, 0x0E, // Unit Exponent (-2) 16930x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 16940x35, 0x00, // Physical Minimum (0) 16950x46, 0x06, 0x04, // Physical Maximum (1030) 16960x26, 0x80, 0x33, // Logical Maximum (13184) 16970x75, 0x10, // Report Size (16) 16980x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 16990x09, 0x31, // Usage (Y) 17000x46, 0xA8, 0x02, // Physical Maximum (680) 17010x26, 0x00, 0x22, // Logical Maximum (8704) 17020x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17030x05, 0x0D, // Usage Page (Digitizer) 17040x26, 0x80, 0x33, // Logical Maximum (13184) 17050x09, 0x48, // Usage (0x48) 17060x75, 0x10, // Report Size (16) 17070x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17080x26, 0x00, 0x22, // Logical Maximum (8704) 17090x09, 0x49, // Usage (0x49) 17100x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17110x09, 0x30, // Usage (Tip Pressure) 17120x26, 0xFF, 0x00, // Logical Maximum (255) 17130x75, 0x08, // Report Size (8) 17140x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17150xC0, // End Collection 17160x09, 0x22, // Usage (Finger) 17170xA1, 0x02, // Collection (Logical) 17180x09, 0x42, // Usage (Tip Switch) 17190x15, 0x00, // Logical Minimum (0) 17200x25, 0x01, // Logical Maximum (1) 17210x75, 0x01, // Report Size (1) 17220x95, 0x01, // Report Count (1) 17230x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17240x09, 0x32, // Usage (In Range) 17250x75, 0x07, // Report Size (7) 17260x95, 0x01, // Report Count (1) 17270x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17280x09, 0x51, // Usage (0x51) 17290x26, 0xFF, 0x7F, // Logical Maximum (32767) 17300x75, 0x10, // Report Size (16) 17310x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17320x05, 0x01, // Usage Page (Generic Desktop Ctrls) 17330x09, 0x30, // Usage (X) 17340x55, 0x0E, // Unit Exponent (-2) 17350x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 17360x35, 0x00, // Physical Minimum (0) 17370x46, 0x06, 0x04, // Physical Maximum (1030) 17380x26, 0x80, 0x33, // Logical Maximum (13184) 17390x75, 0x10, // Report Size (16) 17400x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17410x09, 0x31, // Usage (Y) 17420x46, 0xA8, 0x02, // Physical Maximum (680) 17430x26, 0x00, 0x22, // Logical Maximum (8704) 17440x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17450x05, 0x0D, // Usage Page (Digitizer) 17460x26, 0x80, 0x33, // Logical Maximum (13184) 17470x09, 0x48, // Usage (0x48) 17480x75, 0x10, // Report Size (16) 17490x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17500x26, 0x00, 0x22, // Logical Maximum (8704) 17510x09, 0x49, // Usage (0x49) 17520x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17530x09, 0x30, // Usage (Tip Pressure) 17540x26, 0xFF, 0x00, // Logical Maximum (255) 17550x75, 0x08, // Report Size (8) 17560x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17570xC0, // End Collection 17580x09, 0x22, // Usage (Finger) 17590xA1, 0x02, // Collection (Logical) 17600x09, 0x42, // Usage (Tip Switch) 17610x15, 0x00, // Logical Minimum (0) 17620x25, 0x01, // Logical Maximum (1) 17630x75, 0x01, // Report Size (1) 17640x95, 0x01, // Report Count (1) 17650x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17660x09, 0x32, // Usage (In Range) 17670x75, 0x07, // Report Size (7) 17680x95, 0x01, // Report Count (1) 17690x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17700x09, 0x51, // Usage (0x51) 17710x26, 0xFF, 0x7F, // Logical Maximum (32767) 17720x75, 0x10, // Report Size (16) 17730x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17740x05, 0x01, // Usage Page (Generic Desktop Ctrls) 17750x09, 0x30, // Usage (X) 17760x55, 0x0E, // Unit Exponent (-2) 17770x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 17780x35, 0x00, // Physical Minimum (0) 17790x46, 0x06, 0x04, // Physical Maximum (1030) 17800x26, 0x80, 0x33, // Logical Maximum (13184) 17810x75, 0x10, // Report Size (16) 17820x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17830x09, 0x31, // Usage (Y) 17840x46, 0xA8, 0x02, // Physical Maximum (680) 17850x26, 0x00, 0x22, // Logical Maximum (8704) 17860x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17870x05, 0x0D, // Usage Page (Digitizer) 17880x26, 0x80, 0x33, // Logical Maximum (13184) 17890x09, 0x48, // Usage (0x48) 17900x75, 0x10, // Report Size (16) 17910x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17920x26, 0x00, 0x22, // Logical Maximum (8704) 17930x09, 0x49, // Usage (0x49) 17940x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17950x09, 0x30, // Usage (Tip Pressure) 17960x26, 0xFF, 0x00, // Logical Maximum (255) 17970x75, 0x08, // Report Size (8) 17980x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 17990xC0, // End Collection 18000x09, 0x22, // Usage (Finger) 18010xA1, 0x02, // Collection (Logical) 18020x09, 0x42, // Usage (Tip Switch) 18030x15, 0x00, // Logical Minimum (0) 18040x25, 0x01, // Logical Maximum (1) 18050x75, 0x01, // Report Size (1) 18060x95, 0x01, // Report Count (1) 18070x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18080x09, 0x32, // Usage (In Range) 18090x75, 0x07, // Report Size (7) 18100x95, 0x01, // Report Count (1) 18110x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18120x09, 0x51, // Usage (0x51) 18130x26, 0xFF, 0x7F, // Logical Maximum (32767) 18140x75, 0x10, // Report Size (16) 18150x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18160x05, 0x01, // Usage Page (Generic Desktop Ctrls) 18170x09, 0x30, // Usage (X) 18180x55, 0x0E, // Unit Exponent (-2) 18190x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 18200x35, 0x00, // Physical Minimum (0) 18210x46, 0x06, 0x04, // Physical Maximum (1030) 18220x26, 0x80, 0x33, // Logical Maximum (13184) 18230x75, 0x10, // Report Size (16) 18240x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18250x09, 0x31, // Usage (Y) 18260x46, 0xA8, 0x02, // Physical Maximum (680) 18270x26, 0x00, 0x22, // Logical Maximum (8704) 18280x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18290x05, 0x0D, // Usage Page (Digitizer) 18300x26, 0x80, 0x33, // Logical Maximum (13184) 18310x09, 0x48, // Usage (0x48) 18320x75, 0x10, // Report Size (16) 18330x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18340x26, 0x00, 0x22, // Logical Maximum (8704) 18350x09, 0x49, // Usage (0x49) 18360x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18370x09, 0x30, // Usage (Tip Pressure) 18380x26, 0xFF, 0x00, // Logical Maximum (255) 18390x75, 0x08, // Report Size (8) 18400x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18410xC0, // End Collection 18420xC0, // End Collection 1843 1844// 490 bytes 1845}; 1846 1847// The same as paradise_touchpad_v1_report_desc except for the extra 16 bits 1848// of Azimuth for each finger. Since we don't use that field we can reuse 1849// the same report struct. 1850 1851static const uint8_t paradise_touchpad_v2_report_desc[] = { 18520x05, 0x0D, // Usage Page (Digitizer) 18530x09, 0x05, // Usage (Touch Pad) 18540xA1, 0x01, // Collection (Application) 18550x85, 0x01, // Report ID (1) 18560x05, 0x09, // Usage Page (Button) 18570x19, 0x01, // Usage Minimum (0x01) 18580x29, 0x01, // Usage Maximum (0x01) 18590x15, 0x00, // Logical Minimum (0) 18600x25, 0x01, // Logical Maximum (1) 18610x75, 0x01, // Report Size (1) 18620x95, 0x01, // Report Count (1) 18630x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18640x05, 0x0D, // Usage Page (Digitizer) 18650x09, 0x54, // Usage (0x54) 18660x75, 0x07, // Report Size (7) 18670x95, 0x01, // Report Count (1) 18680x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18690x05, 0x0D, // Usage Page (Digitizer) 18700x09, 0x22, // Usage (Finger) 18710xA1, 0x02, // Collection (Logical) 18720x09, 0x42, // Usage (Tip Switch) 18730x15, 0x00, // Logical Minimum (0) 18740x25, 0x01, // Logical Maximum (1) 18750x75, 0x01, // Report Size (1) 18760x95, 0x01, // Report Count (1) 18770x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18780x09, 0x32, // Usage (In Range) 18790x75, 0x07, // Report Size (7) 18800x95, 0x01, // Report Count (1) 18810x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18820x09, 0x51, // Usage (0x51) 18830x26, 0xFF, 0x7F, // Logical Maximum (32767) 18840x75, 0x10, // Report Size (16) 18850x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18860x05, 0x01, // Usage Page (Generic Desktop Ctrls) 18870x09, 0x30, // Usage (X) 18880x55, 0x0E, // Unit Exponent (-2) 18890x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 18900x35, 0x00, // Physical Minimum (0) 18910x46, 0x06, 0x04, // Physical Maximum (1030) 18920x26, 0x80, 0x33, // Logical Maximum (13184) 18930x75, 0x10, // Report Size (16) 18940x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18950x09, 0x31, // Usage (Y) 18960x46, 0xA8, 0x02, // Physical Maximum (680) 18970x26, 0x00, 0x22, // Logical Maximum (8704) 18980x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 18990x05, 0x0D, // Usage Page (Digitizer) 19000x26, 0x80, 0x33, // Logical Maximum (13184) 19010x09, 0x48, // Usage (0x48) 19020x75, 0x10, // Report Size (16) 19030x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19040x26, 0x00, 0x22, // Logical Maximum (8704) 19050x09, 0x49, // Usage (0x49) 19060x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19070x09, 0x30, // Usage (Tip Pressure) 19080x26, 0xFF, 0x00, // Logical Maximum (255) 19090x75, 0x08, // Report Size (8) 19100x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19110x09, 0x3F, // Usage (Azimuth) 19120x16, 0x00, 0x00, // Logical Minimum (0) 19130x26, 0x68, 0x01, // Logical Maximum (360) 19140x75, 0x10, // Report Size (16) 19150x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19160xC0, // End Collection 19170x05, 0x0D, // Usage Page (Digitizer) 19180x09, 0x22, // Usage (Finger) 19190xA1, 0x02, // Collection (Logical) 19200x09, 0x42, // Usage (Tip Switch) 19210x15, 0x00, // Logical Minimum (0) 19220x25, 0x01, // Logical Maximum (1) 19230x75, 0x01, // Report Size (1) 19240x95, 0x01, // Report Count (1) 19250x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19260x09, 0x32, // Usage (In Range) 19270x75, 0x07, // Report Size (7) 19280x95, 0x01, // Report Count (1) 19290x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19300x09, 0x51, // Usage (0x51) 19310x26, 0xFF, 0x7F, // Logical Maximum (32767) 19320x75, 0x10, // Report Size (16) 19330x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19340x05, 0x01, // Usage Page (Generic Desktop Ctrls) 19350x09, 0x30, // Usage (X) 19360x55, 0x0E, // Unit Exponent (-2) 19370x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 19380x35, 0x00, // Physical Minimum (0) 19390x46, 0x06, 0x04, // Physical Maximum (1030) 19400x26, 0x80, 0x33, // Logical Maximum (13184) 19410x75, 0x10, // Report Size (16) 19420x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19430x09, 0x31, // Usage (Y) 19440x46, 0xA8, 0x02, // Physical Maximum (680) 19450x26, 0x00, 0x22, // Logical Maximum (8704) 19460x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19470x05, 0x0D, // Usage Page (Digitizer) 19480x26, 0x80, 0x33, // Logical Maximum (13184) 19490x09, 0x48, // Usage (0x48) 19500x75, 0x10, // Report Size (16) 19510x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19520x26, 0x00, 0x22, // Logical Maximum (8704) 19530x09, 0x49, // Usage (0x49) 19540x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19550x09, 0x30, // Usage (Tip Pressure) 19560x26, 0xFF, 0x00, // Logical Maximum (255) 19570x75, 0x08, // Report Size (8) 19580x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19590x09, 0x3F, // Usage (Azimuth) 19600x16, 0x00, 0x00, // Logical Minimum (0) 19610x26, 0x68, 0x01, // Logical Maximum (360) 19620x75, 0x10, // Report Size (16) 19630x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19640xC0, // End Collection 19650x05, 0x0D, // Usage Page (Digitizer) 19660x09, 0x22, // Usage (Finger) 19670xA1, 0x02, // Collection (Logical) 19680x09, 0x42, // Usage (Tip Switch) 19690x15, 0x00, // Logical Minimum (0) 19700x25, 0x01, // Logical Maximum (1) 19710x75, 0x01, // Report Size (1) 19720x95, 0x01, // Report Count (1) 19730x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19740x09, 0x32, // Usage (In Range) 19750x75, 0x07, // Report Size (7) 19760x95, 0x01, // Report Count (1) 19770x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19780x09, 0x51, // Usage (0x51) 19790x26, 0xFF, 0x7F, // Logical Maximum (32767) 19800x75, 0x10, // Report Size (16) 19810x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19820x05, 0x01, // Usage Page (Generic Desktop Ctrls) 19830x09, 0x30, // Usage (X) 19840x55, 0x0E, // Unit Exponent (-2) 19850x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 19860x35, 0x00, // Physical Minimum (0) 19870x46, 0x06, 0x04, // Physical Maximum (1030) 19880x26, 0x80, 0x33, // Logical Maximum (13184) 19890x75, 0x10, // Report Size (16) 19900x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19910x09, 0x31, // Usage (Y) 19920x46, 0xA8, 0x02, // Physical Maximum (680) 19930x26, 0x00, 0x22, // Logical Maximum (8704) 19940x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 19950x05, 0x0D, // Usage Page (Digitizer) 19960x26, 0x80, 0x33, // Logical Maximum (13184) 19970x09, 0x48, // Usage (0x48) 19980x75, 0x10, // Report Size (16) 19990x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20000x26, 0x00, 0x22, // Logical Maximum (8704) 20010x09, 0x49, // Usage (0x49) 20020x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20030x09, 0x30, // Usage (Tip Pressure) 20040x26, 0xFF, 0x00, // Logical Maximum (255) 20050x75, 0x08, // Report Size (8) 20060x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20070x09, 0x3F, // Usage (Azimuth) 20080x16, 0x00, 0x00, // Logical Minimum (0) 20090x26, 0x68, 0x01, // Logical Maximum (360) 20100x75, 0x10, // Report Size (16) 20110x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20120xC0, // End Collection 20130x05, 0x0D, // Usage Page (Digitizer) 20140x09, 0x22, // Usage (Finger) 20150xA1, 0x02, // Collection (Logical) 20160x09, 0x42, // Usage (Tip Switch) 20170x15, 0x00, // Logical Minimum (0) 20180x25, 0x01, // Logical Maximum (1) 20190x75, 0x01, // Report Size (1) 20200x95, 0x01, // Report Count (1) 20210x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20220x09, 0x32, // Usage (In Range) 20230x75, 0x07, // Report Size (7) 20240x95, 0x01, // Report Count (1) 20250x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20260x09, 0x51, // Usage (0x51) 20270x26, 0xFF, 0x7F, // Logical Maximum (32767) 20280x75, 0x10, // Report Size (16) 20290x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20300x05, 0x01, // Usage Page (Generic Desktop Ctrls) 20310x09, 0x30, // Usage (X) 20320x55, 0x0E, // Unit Exponent (-2) 20330x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 20340x35, 0x00, // Physical Minimum (0) 20350x46, 0x06, 0x04, // Physical Maximum (1030) 20360x26, 0x80, 0x33, // Logical Maximum (13184) 20370x75, 0x10, // Report Size (16) 20380x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20390x09, 0x31, // Usage (Y) 20400x46, 0xA8, 0x02, // Physical Maximum (680) 20410x26, 0x00, 0x22, // Logical Maximum (8704) 20420x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20430x05, 0x0D, // Usage Page (Digitizer) 20440x26, 0x80, 0x33, // Logical Maximum (13184) 20450x09, 0x48, // Usage (0x48) 20460x75, 0x10, // Report Size (16) 20470x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20480x26, 0x00, 0x22, // Logical Maximum (8704) 20490x09, 0x49, // Usage (0x49) 20500x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20510x09, 0x30, // Usage (Tip Pressure) 20520x26, 0xFF, 0x00, // Logical Maximum (255) 20530x75, 0x08, // Report Size (8) 20540x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20550x09, 0x3F, // Usage (Azimuth) 20560x16, 0x00, 0x00, // Logical Minimum (0) 20570x26, 0x68, 0x01, // Logical Maximum (360) 20580x75, 0x10, // Report Size (16) 20590x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20600xC0, // End Collection 20610x05, 0x0D, // Usage Page (Digitizer) 20620x09, 0x22, // Usage (Finger) 20630xA1, 0x02, // Collection (Logical) 20640x09, 0x42, // Usage (Tip Switch) 20650x15, 0x00, // Logical Minimum (0) 20660x25, 0x01, // Logical Maximum (1) 20670x75, 0x01, // Report Size (1) 20680x95, 0x01, // Report Count (1) 20690x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20700x09, 0x32, // Usage (In Range) 20710x75, 0x07, // Report Size (7) 20720x95, 0x01, // Report Count (1) 20730x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20740x09, 0x51, // Usage (0x51) 20750x26, 0xFF, 0x7F, // Logical Maximum (32767) 20760x75, 0x10, // Report Size (16) 20770x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20780x05, 0x01, // Usage Page (Generic Desktop Ctrls) 20790x09, 0x30, // Usage (X) 20800x55, 0x0E, // Unit Exponent (-2) 20810x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 20820x35, 0x00, // Physical Minimum (0) 20830x46, 0x06, 0x04, // Physical Maximum (1030) 20840x26, 0x80, 0x33, // Logical Maximum (13184) 20850x75, 0x10, // Report Size (16) 20860x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20870x09, 0x31, // Usage (Y) 20880x46, 0xA8, 0x02, // Physical Maximum (680) 20890x26, 0x00, 0x22, // Logical Maximum (8704) 20900x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20910x05, 0x0D, // Usage Page (Digitizer) 20920x26, 0x80, 0x33, // Logical Maximum (13184) 20930x09, 0x48, // Usage (0x48) 20940x75, 0x10, // Report Size (16) 20950x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20960x26, 0x00, 0x22, // Logical Maximum (8704) 20970x09, 0x49, // Usage (0x49) 20980x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 20990x09, 0x30, // Usage (Tip Pressure) 21000x26, 0xFF, 0x00, // Logical Maximum (255) 21010x75, 0x08, // Report Size (8) 21020x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 21030x09, 0x3F, // Usage (Azimuth) 21040x16, 0x00, 0x00, // Logical Minimum (0) 21050x26, 0x68, 0x01, // Logical Maximum (360) 21060x75, 0x10, // Report Size (16) 21070x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 21080xC0, // End Collection 21090xC0, // End Collection 2110 2111// 560 bytes 2112}; 2113 2114bool is_paradise_touchpad_report_desc(const uint8_t* data, size_t len) { 2115 return is_paradise_touchpad_v2_report_desc(data, len); 2116} 2117 2118bool is_paradise_touchpad_v1_report_desc(const uint8_t* data, size_t len) { 2119 static_assert(sizeof(paradise_touchpad_v1_t) == 62, "hid struct not packed"); 2120 2121 if (!data) 2122 return false; 2123 2124 if (len != sizeof(paradise_touchpad_v1_report_desc)) 2125 return false; 2126 2127 return (memcmp(data, paradise_touchpad_v1_report_desc, len) == 0); 2128} 2129 2130bool is_paradise_touchpad_v2_report_desc(const uint8_t* data, size_t len) { 2131 static_assert(sizeof(paradise_touchpad_v2_t) == 72, "hid struct not packed"); 2132 2133 if (!data) 2134 return false; 2135 2136 if (len != sizeof(paradise_touchpad_v2_report_desc)) 2137 return false; 2138 2139 return (memcmp(data, paradise_touchpad_v2_report_desc, len) == 0); 2140} 2141 2142zx_status_t setup_paradise_touchpad(int fd) { 2143 if (fd < 0) 2144 return ZX_ERR_INVALID_ARGS; 2145 2146 return ZX_OK; 2147} 2148 2149// Sensors 2150 2151static const uint8_t paradise_sensor_report_desc[] = { 2152 // Base Sensor Set 2153 0x05, 0x20, // HID Usage Page (Sensors) 2154 0x09, 0x01, // HID Usage (Sensor) 2155 0xa1, 0x01, // Collection (Application) 2156 2157 // Base Accelerometer 2158 0x85, 0x01, // Report ID (1) 2159 0x37, 0xfe, 0xff, 0xff, 0xff, // Physical Minimum (-2) 2160 0x47, 0x02, 0x00, 0x00, 0x00, // Physical Maximum (2) 2161 0x05, 0x20, // HID Usage Page (Sensors) 2162 0x09, 0x73, // HID Usage (Accelerometer 3D) 2163 0xa1, 0x00, // Collection (Physical) 2164 0x05, 0x20, // HID Usage Page (Sensors) 2165 0x16, 0x00, 0x80, // Logical Minimum (-32768) 2166 0x26, 0xff, 0x7f, // Logical Maximum (32767) 2167 0x75, 0x10, // Report Size (16) 2168 0x95, 0x01, // Report Count (1) 2169 0x0a, 0x53, 0x04, // Usage (Acceleration Axis X) 2170 0x81, 0x03, // Const Var Abs 2171 0x0a, 0x54, 0x04, // Usage (Acceleration Axis Y) 2172 0x81, 0x03, // Const Var Abs 2173 0x0a, 0x55, 0x04, // Usage (Acceleration Axis Z) 2174 0x81, 0x03, // Const Var Abs 2175 0xc0, // End Collection 2176 2177 // Base Gyroscope 2178 0x85, 0x02, // Report ID (2) 2179 0x37, 0x18, 0xfc, 0xff, 0xff, // Physical Minimum (-1000) 2180 0x47, 0xe8, 0x03, 0x00, 0x00, // Physical Maximum (1000) 2181 0x05, 0x20, // HID Usage Page (Sensors) 2182 0x09, 0x76, // HID Usage (Gyrometer 3D) 2183 0xa1, 0x00, // Collection (Physical) 2184 0x05, 0x20, // HID Usage Page (Sensors) 2185 0x16, 0x00, 0x80, // Logical Minimum (-32768) 2186 0x26, 0xff, 0x7f, // Logical Maximum (32767) 2187 0x75, 0x10, // Report Size (16) 2188 0x95, 0x01, // Report Count (1) 2189 0x0a, 0x57, 0x04, // Usage (Angular Velocity X) 2190 0x81, 0x03, // Const Var Abs 2191 0x0a, 0x58, 0x04, // Usage (Angular Velocity Y) 2192 0x81, 0x03, // Const Var Abs 2193 0x0a, 0x59, 0x04, // Usage (Angular Velocity Z) 2194 0x81, 0x03, // Const Var Abs 2195 0xc0, // End Collection 2196 2197 // Base Magnetometer 2198 0x85, 0x03, // Report ID (3) 2199 0x37, 0x00, 0x78, 0xec, 0xff, // Physical Minimum (-1280000) 2200 0x47, 0x00, 0x88, 0x13, 0x00, // Physical Maximum (1280000) 2201 0x05, 0x20, // HID Usage Page (Sensors) 2202 0x09, 0x83, // HID Usage (Compass 3D) 2203 0xa1, 0x00, // Collection (Physical) 2204 0x05, 0x20, // HID Usage Page (Sensors) 2205 0x16, 0x00, 0x80, // Logical Minimum (-32768) 2206 0x26, 0xff, 0x7f, // Logical Maximum (32767) 2207 0x55, 0x0d, // Unit Exponent (-3) 2208 0x75, 0x10, // Report Size (16) 2209 0x95, 0x01, // Report Count (1) 2210 0x0a, 0x85, 0x04, // Usage (Magnetic Flux X) 2211 0x81, 0x03, // Const Var Abs 2212 0x0a, 0x86, 0x04, // Usage (Magnetic Flux Y) 2213 0x81, 0x03, // Const Var Abs 2214 0x0a, 0x87, 0x04, // Usage (Magnetic Flux Z) 2215 0x81, 0x03, // Const Var Abs 2216 0xc0, // End Collection 2217 0xc0, // End Collection 2218 2219 // Lid Sensor Set 2220 0x05, 0x20, // HID Usage Page (Sensors) 2221 0x09, 0x01, // HID Usage (Sensor) 2222 0xa1, 0x01, // Collection (Application) 2223 2224 // Lid Accelerometer 2225 0x85, 0x00, // Report ID (0) 2226 0x37, 0xfe, 0xff, 0xff, 0xff, // Physical Minimum (-2) 2227 0x47, 0x02, 0x00, 0x00, 0x00, // Physical Maximum (2) 2228 0x05, 0x20, // HID Usage Page (Sensors) 2229 0x09, 0x73, // HID Usage (Accelerometer 3D) 2230 0xa1, 0x00, // Collection (Physical) 2231 0x05, 0x20, // HID Usage Page (Sensors) 2232 0x16, 0x00, 0x80, // Logical Minimum (-32768) 2233 0x26, 0xff, 0x7f, // Logical Maximum (32767) 2234 0x75, 0x10, // Report Size (16) 2235 0x95, 0x01, // Report Count (1) 2236 0x0a, 0x53, 0x04, // Usage (Acceleration Axis X) 2237 0x81, 0x03, // Const Var Abs 2238 0x0a, 0x54, 0x04, // Usage (Acceleration Axis Y) 2239 0x81, 0x03, // Const Var Abs 2240 0x0a, 0x55, 0x04, // Usage (Acceleration Axis Z) 2241 0x81, 0x03, // Const Var Abs 2242 0xc0, // End Collection 2243 2244 // Lid Lightmeter 2245 0x85, 0x04, // Report ID (4) 2246 0x37, 0x00, 0x00, 0x00, 0x00, // Physical Minimum (0) 2247 0x47, 0x70, 0x17, 0x00, 0x00, // Physical Maximum (6000) 2248 0x05, 0x20, // HID Usage Page (Sensors) 2249 0x09, 0x41, // HID Usage (Ambient Light) 2250 0xa1, 0x00, // Collection (Physical) 2251 0x05, 0x20, // HID Usage Page (Sensors) 2252 0x15, 0x00, // Logical Minimum (0) 2253 0x26, 0xff, 0x7f, // Logical Maximum (32767) 2254 0x75, 0x10, // Report Size (16) 2255 0x95, 0x01, // Report Count (1) 2256 0x0a, 0xd1, 0x04, // Usage (Illuminance) 2257 0x81, 0x03, // Const Var Abs 2258 0xc0, // End Collection 2259 0xc0, // End Collection 2260 2261 // 235 bytes 2262}; 2263 2264bool is_paradise_sensor_report_desc(const uint8_t* data, size_t len) { 2265 if (!data) 2266 return false; 2267 2268 if (len != sizeof(paradise_sensor_report_desc)) 2269 return false; 2270 2271 return (memcmp(data, paradise_sensor_report_desc, len) == 0); 2272} 2273 2274zx_status_t setup_paradise_sensor(int fd) { 2275 if (fd < 0) 2276 return ZX_ERR_INVALID_ARGS; 2277 2278 return ZX_OK; 2279} 2280