1// Copyright 2016 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 <hid/acer12.h> 6#include <zircon/device/input.h> 7#include <zircon/errors.h> 8#include <string.h> 9 10// Eyoyo 10 Inch IPS EDP 1920 x 1200 Touch Screen 11static const uint8_t eyoyo_touch_report_desc[] = { 12 0x05, 0x0D, // Usage Page (Digitizer) 13 0x09, 0x04, // Usage (Touch Screen) 14 0xA1, 0x01, // Collection (Application) 15 0x85, 0x01, // Report ID (1) 16 0x09, 0x22, // Usage (Finger) 17 0xA1, 0x02, // Collection (Logical) 18 0x09, 0x42, // Usage (Tip Switch) 19 0x15, 0x00, // Logical Minimum (0) 20 0x25, 0x01, // Logical Maximum (1) 21 0x75, 0x01, // Report Size (1) 22 0x95, 0x01, // Report Count (1) 23 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 24 0x95, 0x02, // Report Count (2) 25 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 26 0x09, 0x51, // Usage (0x51) 27 0x25, 0x1F, // Logical Maximum (31) 28 0x75, 0x05, // Report Size (5) 29 0x95, 0x01, // Report Count (1) 30 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 31 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 32 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 33 0x75, 0x10, // Report Size (16) 34 0x55, 0x0E, // Unit Exponent (-2) 35 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 36 0x09, 0x30, // Usage (X) 37 0x35, 0x00, // Physical Minimum (0) 38 0x46, 0xD3, 0x0A, // Physical Maximum (2771) 39 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 40 0x46, 0x19, 0x06, // Physical Maximum (1561) 41 0x09, 0x31, // Usage (Y) 42 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 43 0x45, 0x00, // Physical Maximum (0) 44 0xC0, // End Collection 45 0x05, 0x0D, // Usage Page (Digitizer) 46 0x09, 0x22, // Usage (Finger) 47 0xA1, 0x02, // Collection (Logical) 48 0x09, 0x42, // Usage (Tip Switch) 49 0x15, 0x00, // Logical Minimum (0) 50 0x25, 0x01, // Logical Maximum (1) 51 0x75, 0x01, // Report Size (1) 52 0x95, 0x01, // Report Count (1) 53 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 54 0x95, 0x02, // Report Count (2) 55 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 56 0x09, 0x51, // Usage (0x51) 57 0x25, 0x1F, // Logical Maximum (31) 58 0x75, 0x05, // Report Size (5) 59 0x95, 0x01, // Report Count (1) 60 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 61 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 62 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 63 0x75, 0x10, // Report Size (16) 64 0x55, 0x0E, // Unit Exponent (-2) 65 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 66 0x09, 0x30, // Usage (X) 67 0x35, 0x00, // Physical Minimum (0) 68 0x46, 0xD3, 0x0A, // Physical Maximum (2771) 69 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 70 0x46, 0x19, 0x06, // Physical Maximum (1561) 71 0x09, 0x31, // Usage (Y) 72 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 73 0x45, 0x00, // Physical Maximum (0) 74 0xC0, // End Collection 75 0x05, 0x0D, // Usage Page (Digitizer) 76 0x09, 0x22, // Usage (Finger) 77 0xA1, 0x02, // Collection (Logical) 78 0x09, 0x42, // Usage (Tip Switch) 79 0x15, 0x00, // Logical Minimum (0) 80 0x25, 0x01, // Logical Maximum (1) 81 0x75, 0x01, // Report Size (1) 82 0x95, 0x01, // Report Count (1) 83 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 84 0x95, 0x02, // Report Count (2) 85 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 86 0x09, 0x51, // Usage (0x51) 87 0x25, 0x1F, // Logical Maximum (31) 88 0x75, 0x05, // Report Size (5) 89 0x95, 0x01, // Report Count (1) 90 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 91 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 92 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 93 0x75, 0x10, // Report Size (16) 94 0x55, 0x0E, // Unit Exponent (-2) 95 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 96 0x09, 0x30, // Usage (X) 97 0x35, 0x00, // Physical Minimum (0) 98 0x46, 0xD3, 0x0A, // Physical Maximum (2771) 99 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 100 0x46, 0x19, 0x06, // Physical Maximum (1561) 101 0x09, 0x31, // Usage (Y) 102 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 103 0x45, 0x00, // Physical Maximum (0) 104 0xC0, // End Collection 105 0x05, 0x0D, // Usage Page (Digitizer) 106 0x09, 0x22, // Usage (Finger) 107 0xA1, 0x02, // Collection (Logical) 108 0x09, 0x42, // Usage (Tip Switch) 109 0x15, 0x00, // Logical Minimum (0) 110 0x25, 0x01, // Logical Maximum (1) 111 0x75, 0x01, // Report Size (1) 112 0x95, 0x01, // Report Count (1) 113 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 114 0x95, 0x02, // Report Count (2) 115 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 116 0x09, 0x51, // Usage (0x51) 117 0x25, 0x1F, // Logical Maximum (31) 118 0x75, 0x05, // Report Size (5) 119 0x95, 0x01, // Report Count (1) 120 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 121 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 122 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 123 0x75, 0x10, // Report Size (16) 124 0x55, 0x0E, // Unit Exponent (-2) 125 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 126 0x09, 0x30, // Usage (X) 127 0x35, 0x00, // Physical Minimum (0) 128 0x46, 0xD3, 0x0A, // Physical Maximum (2771) 129 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 130 0x46, 0x19, 0x06, // Physical Maximum (1561) 131 0x09, 0x31, // Usage (Y) 132 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 133 0x45, 0x00, // Physical Maximum (0) 134 0xC0, // End Collection 135 0x05, 0x0D, // Usage Page (Digitizer) 136 0x09, 0x22, // Usage (Finger) 137 0xA1, 0x02, // Collection (Logical) 138 0x09, 0x42, // Usage (Tip Switch) 139 0x15, 0x00, // Logical Minimum (0) 140 0x25, 0x01, // Logical Maximum (1) 141 0x75, 0x01, // Report Size (1) 142 0x95, 0x01, // Report Count (1) 143 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 144 0x95, 0x02, // Report Count (2) 145 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 146 0x09, 0x51, // Usage (0x51) 147 0x25, 0x1F, // Logical Maximum (31) 148 0x75, 0x05, // Report Size (5) 149 0x95, 0x01, // Report Count (1) 150 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 151 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 152 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 153 0x75, 0x10, // Report Size (16) 154 0x55, 0x0E, // Unit Exponent (-2) 155 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 156 0x09, 0x30, // Usage (X) 157 0x35, 0x00, // Physical Minimum (0) 158 0x46, 0xD3, 0x0A, // Physical Maximum (2771) 159 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 160 0x46, 0x19, 0x06, // Physical Maximum (1561) 161 0x09, 0x31, // Usage (Y) 162 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 163 0x45, 0x00, // Physical Maximum (0) 164 0xC0, // End Collection 165 0x05, 0x0D, // Usage Page (Digitizer) 166 0x09, 0x22, // Usage (Finger) 167 0xA1, 0x02, // Collection (Logical) 168 0x09, 0x42, // Usage (Tip Switch) 169 0x15, 0x00, // Logical Minimum (0) 170 0x25, 0x01, // Logical Maximum (1) 171 0x75, 0x01, // Report Size (1) 172 0x95, 0x01, // Report Count (1) 173 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 174 0x95, 0x02, // Report Count (2) 175 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 176 0x09, 0x51, // Usage (0x51) 177 0x25, 0x1F, // Logical Maximum (31) 178 0x75, 0x05, // Report Size (5) 179 0x95, 0x01, // Report Count (1) 180 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 181 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 182 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 183 0x75, 0x10, // Report Size (16) 184 0x55, 0x0E, // Unit Exponent (-2) 185 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 186 0x09, 0x30, // Usage (X) 187 0x35, 0x00, // Physical Minimum (0) 188 0x46, 0xD3, 0x0A, // Physical Maximum (2771) 189 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 190 0x46, 0x19, 0x06, // Physical Maximum (1561) 191 0x09, 0x31, // Usage (Y) 192 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 193 0x45, 0x00, // Physical Maximum (0) 194 0xC0, // End Collection 195 0x05, 0x0D, // Usage Page (Digitizer) 196 0x09, 0x22, // Usage (Finger) 197 0xA1, 0x02, // Collection (Logical) 198 0x09, 0x42, // Usage (Tip Switch) 199 0x15, 0x00, // Logical Minimum (0) 200 0x25, 0x01, // Logical Maximum (1) 201 0x75, 0x01, // Report Size (1) 202 0x95, 0x01, // Report Count (1) 203 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 204 0x95, 0x02, // Report Count (2) 205 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 206 0x09, 0x51, // Usage (0x51) 207 0x25, 0x1F, // Logical Maximum (31) 208 0x75, 0x05, // Report Size (5) 209 0x95, 0x01, // Report Count (1) 210 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 211 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 212 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 213 0x75, 0x10, // Report Size (16) 214 0x55, 0x0E, // Unit Exponent (-2) 215 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 216 0x09, 0x30, // Usage (X) 217 0x35, 0x00, // Physical Minimum (0) 218 0x46, 0xD3, 0x0A, // Physical Maximum (2771) 219 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 220 0x46, 0x19, 0x06, // Physical Maximum (1561) 221 0x09, 0x31, // Usage (Y) 222 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 223 0x45, 0x00, // Physical Maximum (0) 224 0xC0, // End Collection 225 0x05, 0x0D, // Usage Page (Digitizer) 226 0x09, 0x22, // Usage (Finger) 227 0xA1, 0x02, // Collection (Logical) 228 0x09, 0x42, // Usage (Tip Switch) 229 0x15, 0x00, // Logical Minimum (0) 230 0x25, 0x01, // Logical Maximum (1) 231 0x75, 0x01, // Report Size (1) 232 0x95, 0x01, // Report Count (1) 233 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 234 0x95, 0x02, // Report Count (2) 235 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 236 0x09, 0x51, // Usage (0x51) 237 0x25, 0x1F, // Logical Maximum (31) 238 0x75, 0x05, // Report Size (5) 239 0x95, 0x01, // Report Count (1) 240 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 241 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 242 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 243 0x75, 0x10, // Report Size (16) 244 0x55, 0x0E, // Unit Exponent (-2) 245 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 246 0x09, 0x30, // Usage (X) 247 0x35, 0x00, // Physical Minimum (0) 248 0x46, 0xD3, 0x0A, // Physical Maximum (2771) 249 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 250 0x46, 0x19, 0x06, // Physical Maximum (1561) 251 0x09, 0x31, // Usage (Y) 252 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 253 0x45, 0x00, // Physical Maximum (0) 254 0xC0, // End Collection 255 0x05, 0x0D, // Usage Page (Digitizer) 256 0x09, 0x22, // Usage (Finger) 257 0xA1, 0x02, // Collection (Logical) 258 0x09, 0x42, // Usage (Tip Switch) 259 0x15, 0x00, // Logical Minimum (0) 260 0x25, 0x01, // Logical Maximum (1) 261 0x75, 0x01, // Report Size (1) 262 0x95, 0x01, // Report Count (1) 263 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 264 0x95, 0x02, // Report Count (2) 265 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 266 0x09, 0x51, // Usage (0x51) 267 0x25, 0x1F, // Logical Maximum (31) 268 0x75, 0x05, // Report Size (5) 269 0x95, 0x01, // Report Count (1) 270 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 271 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 272 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 273 0x75, 0x10, // Report Size (16) 274 0x55, 0x0E, // Unit Exponent (-2) 275 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 276 0x09, 0x30, // Usage (X) 277 0x35, 0x00, // Physical Minimum (0) 278 0x46, 0xD3, 0x0A, // Physical Maximum (2771) 279 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 280 0x46, 0x19, 0x06, // Physical Maximum (1561) 281 0x09, 0x31, // Usage (Y) 282 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 283 0x45, 0x00, // Physical Maximum (0) 284 0xC0, // End Collection 285 0x05, 0x0D, // Usage Page (Digitizer) 286 0x09, 0x22, // Usage (Finger) 287 0xA1, 0x02, // Collection (Logical) 288 0x09, 0x42, // Usage (Tip Switch) 289 0x15, 0x00, // Logical Minimum (0) 290 0x25, 0x01, // Logical Maximum (1) 291 0x75, 0x01, // Report Size (1) 292 0x95, 0x01, // Report Count (1) 293 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 294 0x95, 0x02, // Report Count (2) 295 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 296 0x09, 0x51, // Usage (0x51) 297 0x25, 0x1F, // Logical Maximum (31) 298 0x75, 0x05, // Report Size (5) 299 0x95, 0x01, // Report Count (1) 300 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 301 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 302 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 303 0x75, 0x10, // Report Size (16) 304 0x55, 0x0E, // Unit Exponent (-2) 305 0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter) 306 0x09, 0x30, // Usage (X) 307 0x35, 0x00, // Physical Minimum (0) 308 0x46, 0xD3, 0x0A, // Physical Maximum (2771) 309 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 310 0x46, 0x19, 0x06, // Physical Maximum (1561) 311 0x09, 0x31, // Usage (Y) 312 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 313 0x45, 0x00, // Physical Maximum (0) 314 0xC0, // End Collection 315 0x05, 0x0D, // Usage Page (Digitizer) 316 0x15, 0x00, // Logical Minimum (0) 317 0x27, 0xFF, 0xFF, 0x00, 0x00, // Logical Maximum (65534) 318 0x75, 0x10, // Report Size (16) 319 0x95, 0x01, // Report Count (1) 320 0x09, 0x56, // Usage (0x56) 321 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 322 0x25, 0x0A, // Logical Maximum (10) 323 0x75, 0x08, // Report Size (8) 324 0x09, 0x54, // Usage (0x54) 325 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 326 0x85, 0x42, // Report ID (66) 327 0x09, 0x55, // Usage (0x55) 328 0x25, 0x0A, // Logical Maximum (10) 329 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 330 0x85, 0x44, // Report ID (68) 331 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 332 0x09, 0xC5, // Usage (0xC5) 333 0x26, 0xFF, 0x00, // Logical Maximum (255) 334 0x96, 0x00, 0x01, // Report Count (256) 335 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 336 0x85, 0xF2, // Report ID (-14) 337 0x09, 0x03, // Usage (0x03) 338 0x75, 0x08, // Report Size (8) 339 0x95, 0x04, // Report Count (4) 340 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 341 0x09, 0x04, // Usage (0x04) 342 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 343 0x09, 0x05, // Usage (0x05) 344 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 345 0x95, 0x01, // Report Count (1) 346 0x09, 0x06, // Usage (0x06) 347 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 348 0x09, 0x07, // Usage (0x07) 349 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 350 0x85, 0x06, // Report ID (6) 351 0x09, 0x01, // Usage (0x01) 352 0x95, 0x07, // Report Count (7) 353 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 354 0x85, 0x08, // Report ID (8) 355 0x09, 0x01, // Usage (0x01) 356 0x95, 0x3F, // Report Count (63) 357 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 358 0x85, 0x07, // Report ID (7) 359 0x09, 0x01, // Usage (0x01) 360 0x95, 0x3F, // Report Count (63) 361 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 362 0x85, 0xF4, // Report ID (-12) 363 0x09, 0x01, // Usage (0x01) 364 0x95, 0x2F, // Report Count (47) 365 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 366 0xC0, // End Collection 367 0x05, 0x0D, // Usage Page (Digitizer) 368 0x09, 0x0E, // Usage (0x0E) 369 0xA1, 0x01, // Collection (Application) 370 0x85, 0x43, // Report ID (67) 371 0x09, 0x23, // Usage (0x23) 372 0xA1, 0x02, // Collection (Logical) 373 0x09, 0x52, // Usage (0x52) 374 0x09, 0x53, // Usage (0x53) 375 0x15, 0x00, // Logical Minimum (0) 376 0x25, 0x0A, // Logical Maximum (10) 377 0x75, 0x08, // Report Size (8) 378 0x95, 0x02, // Report Count (2) 379 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 380 0xC0, // End Collection 381 0xC0, // End Collection 382 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 383 0x09, 0x02, // Usage (Mouse) 384 0xA1, 0x01, // Collection (Application) 385 0x85, 0x03, // Report ID (3) 386 0x09, 0x01, // Usage (Pointer) 387 0xA1, 0x00, // Collection (Physical) 388 0x05, 0x09, // Usage Page (Button) 389 0x19, 0x01, // Usage Minimum (0x01) 390 0x29, 0x02, // Usage Maximum (0x02) 391 0x15, 0x00, // Logical Minimum (0) 392 0x25, 0x01, // Logical Maximum (1) 393 0x75, 0x01, // Report Size (1) 394 0x95, 0x02, // Report Count (2) 395 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 396 0x95, 0x06, // Report Count (6) 397 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 398 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 399 0x09, 0x30, // Usage (X) 400 0x09, 0x31, // Usage (Y) 401 0x75, 0x10, // Report Size (16) 402 0x95, 0x02, // Report Count (2) 403 0x15, 0x00, // Logical Minimum (0) 404 0x26, 0xFF, 0x7F, // Logical Maximum (32767) 405 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 406 0xC0, // End Collection 407 0xC0, // End Collection 408 409 // 814 bytes 410}; 411 412bool is_eyoyo_touch_report_desc(const uint8_t* data, size_t len) { 413 if (!data) 414 return false; 415 416 if (len != sizeof(eyoyo_touch_report_desc)) 417 return false; 418 419 return (memcmp(data, eyoyo_touch_report_desc, len) == 0); 420} 421 422zx_status_t setup_eyoyo_touch(int fd) { 423 if (fd < 0) 424 return ZX_ERR_INVALID_ARGS; 425 426 uint8_t buf[sizeof(input_set_report_t) + 3]; 427 input_set_report_t* enable_multitouch = (input_set_report_t*)buf; 428 429 enable_multitouch->id = 67; 430 enable_multitouch->type = INPUT_REPORT_FEATURE; 431 enable_multitouch->data[0] = 67; 432 enable_multitouch->data[1] = 2; 433 enable_multitouch->data[2] = 0; 434 435 ssize_t res = ioctl_input_set_report(fd, enable_multitouch, sizeof(buf)); 436 return (res >= 0) ? ZX_OK : (zx_status_t)res; 437} 438