1 /* $OpenBSD: uhid_rdesc.h,v 1.2 2022/03/21 12:18:52 thfr Exp $ */ 2 /* $NetBSD: ugraphire_rdesc.h,v 1.1 2000/12/29 01:47:49 augustss Exp $ */ 3 /* $FreeBSD: uxb360gp_rdesc.h,v 1.3 2008/05/24 18:35:55 ed Exp $ */ 4 /* 5 * Copyright (c) 2000 Nick Hibma <n_hibma@freebsd.org> 6 * Copyright (c) 2005 Ed Schouten <ed@FreeBSD.org> 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 */ 30 31 static uByte uhid_graphire_report_descr[] = { 32 0x05, 0x0d, /* USAGE_PAGE (Digitizers) */ 33 0x09, 0x01, /* USAGE (Digitizer) */ 34 0xa1, 0x01, /* COLLECTION (Application) */ 35 0x85, 0x02, /* REPORT_ID (2) */ 36 0x05, 0x0d, /* USAGE_PAGE (Digitizers) */ 37 0x09, 0x01, /* USAGE (Digitizer) */ 38 0xa1, 0x00, /* COLLECTION (Physical) */ 39 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 40 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ 41 0x09, 0x33, /* USAGE (Touch) */ 42 0x95, 0x01, /* REPORT_COUNT (1) */ 43 0x75, 0x01, /* REPORT_SIZE (1) */ 44 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 45 0x09, 0x44, /* USAGE (Barrel Switch) */ 46 0x95, 0x02, /* REPORT_COUNT (2) */ 47 0x75, 0x01, /* REPORT_SIZE (1) */ 48 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 49 0x09, 0x00, /* USAGE (Undefined) */ 50 0x95, 0x02, /* REPORT_COUNT (2) */ 51 0x75, 0x01, /* REPORT_SIZE (1) */ 52 0x81, 0x03, /* INPUT (Cnst,Var,Abs) */ 53 0x09, 0x3c, /* USAGE (Invert) */ 54 0x95, 0x01, /* REPORT_COUNT (1) */ 55 0x75, 0x01, /* REPORT_SIZE (1) */ 56 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 57 0x09, 0x38, /* USAGE (Transducer Index) */ 58 0x95, 0x01, /* REPORT_COUNT (1) */ 59 0x75, 0x01, /* REPORT_SIZE (1) */ 60 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 61 0x09, 0x32, /* USAGE (In Range) */ 62 0x95, 0x01, /* REPORT_COUNT (1) */ 63 0x75, 0x01, /* REPORT_SIZE (1) */ 64 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 65 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ 66 0x09, 0x30, /* USAGE (X) */ 67 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 68 0x26, 0xde, 0x27, /* LOGICAL_MAXIMUM (10206) */ 69 0x95, 0x01, /* REPORT_COUNT (1) */ 70 0x75, 0x10, /* REPORT_SIZE (16) */ 71 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 72 0x09, 0x31, /* USAGE (Y) */ 73 0x26, 0xfe, 0x1c, /* LOGICAL_MAXIMUM (7422) */ 74 0x95, 0x01, /* REPORT_COUNT (1) */ 75 0x75, 0x10, /* REPORT_SIZE (16) */ 76 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 77 0x05, 0x0d, /* USAGE_PAGE (Digitizers) */ 78 0x09, 0x30, /* USAGE (Tip Pressure) */ 79 0x26, 0xff, 0x01, /* LOGICAL_MAXIMUM (511) */ 80 0x95, 0x01, /* REPORT_COUNT (1) */ 81 0x75, 0x10, /* REPORT_SIZE (16) */ 82 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 83 0xc0, /* END_COLLECTION */ 84 0x05, 0x0d, /* USAGE_PAGE (Digitizers) */ 85 0x09, 0x00, /* USAGE (Undefined) */ 86 0x85, 0x02, /* REPORT_ID (2) */ 87 0x95, 0x01, /* REPORT_COUNT (1) */ 88 0xb1, 0x02, /* FEATURE (Data,Var,Abs) */ 89 0x09, 0x00, /* USAGE (Undefined) */ 90 0x85, 0x03, /* REPORT_ID (3) */ 91 0x95, 0x01, /* REPORT_COUNT (1) */ 92 0xb1, 0x02, /* FEATURE (Data,Var,Abs) */ 93 0xc0, /* END_COLLECTION */ 94 }; 95 96 static uByte uhid_graphire3_4x5_report_descr[] = { 97 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ 98 0x09, 0x02, /* USAGE (Mouse) */ 99 0xa1, 0x01, /* COLLECTION (Application) */ 100 0x85, 0x01, /* REPORT_ID (1) */ 101 0x09, 0x01, /* USAGE (Pointer) */ 102 0xa1, 0x00, /* COLLECTION (Physical) */ 103 0x05, 0x09, /* USAGE_PAGE (Button) */ 104 0x19, 0x01, /* USAGE_MINIMUM (Button 1) */ 105 0x29, 0x03, /* USAGE_MAXIMUM (Button 3) */ 106 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 107 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ 108 0x95, 0x03, /* REPORT_COUNT (3) */ 109 0x75, 0x01, /* REPORT_SIZE (1) */ 110 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 111 0x95, 0x01, /* REPORT_COUNT (1) */ 112 0x75, 0x05, /* REPORT_SIZE (5) */ 113 0x81, 0x01, /* INPUT (Cnst,Ary,Abs) */ 114 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ 115 0x09, 0x30, /* USAGE (X) */ 116 0x09, 0x31, /* USAGE (Y) */ 117 0x09, 0x38, /* USAGE (Wheel) */ 118 0x15, 0x81, /* LOGICAL_MINIMUM (-127) */ 119 0x25, 0x7f, /* LOGICAL_MAXIMUM (127) */ 120 0x75, 0x08, /* REPORT_SIZE (8) */ 121 0x95, 0x03, /* REPORT_COUNT (3) */ 122 0x81, 0x06, /* INPUT (Data,Var,Rel) */ 123 0xc0, /* END_COLLECTION */ 124 0xc0, /* END_COLLECTION */ 125 0x05, 0x0d, /* USAGE_PAGE (Digitizers) */ 126 0x09, 0x01, /* USAGE (Pointer) */ 127 0xa1, 0x01, /* COLLECTION (Application) */ 128 0x85, 0x02, /* REPORT_ID (2) */ 129 0x05, 0x0d, /* USAGE_PAGE (Digitizers) */ 130 0x09, 0x01, /* USAGE (Digitizer) */ 131 0xa1, 0x00, /* COLLECTION (Physical) */ 132 0x09, 0x33, /* USAGE (Touch) */ 133 0x09, 0x44, /* USAGE (Barrel Switch) */ 134 0x09, 0x44, /* USAGE (Barrel Switch) */ 135 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 136 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ 137 0x75, 0x01, /* REPORT_SIZE (1) */ 138 0x95, 0x03, /* REPORT_COUNT (3) */ 139 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 140 0x75, 0x01, /* REPORT_SIZE (1) */ 141 0x95, 0x02, /* REPORT_COUNT (2) */ 142 0x81, 0x01, /* INPUT (Cnst,Ary,Abs) */ 143 0x09, 0x3c, /* USAGE (Invert) */ 144 0x09, 0x38, /* USAGE (Transducer Index) */ 145 0x09, 0x32, /* USAGE (In Range) */ 146 0x75, 0x01, /* REPORT_SIZE (1) */ 147 0x95, 0x03, /* REPORT_COUNT (3) */ 148 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 149 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ 150 0x09, 0x30, /* USAGE (X) */ 151 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 152 0x26, 0xde, 0x27, /* LOGICAL_MAXIMUM (10206) */ 153 0x75, 0x10, /* REPORT_SIZE (16) */ 154 0x95, 0x01, /* REPORT_COUNT (1) */ 155 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 156 0x09, 0x31, /* USAGE (Y) */ 157 0x26, 0xfe, 0x1c, /* LOGICAL_MAXIMUM (7422) */ 158 0x75, 0x10, /* REPORT_SIZE (16) */ 159 0x95, 0x01, /* REPORT_COUNT (1) */ 160 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 161 0x05, 0x0d, /* USAGE_PAGE (Digitizers) */ 162 0x09, 0x30, /* USAGE (Tip Pressure) */ 163 0x26, 0xff, 0x01, /* LOGICAL_MAXIMUM (511) */ 164 0x75, 0x10, /* REPORT_SIZE (16) */ 165 0x95, 0x01, /* REPORT_COUNT (1) */ 166 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 167 0xc0, /* END_COLLECTION */ 168 0x05, 0x0d, /* USAGE_PAGE (Digitizers) */ 169 0x09, 0x00, /* USAGE (Undefined) */ 170 0x85, 0x02, /* REPORT_ID (2) */ 171 0x95, 0x01, /* REPORT_COUNT (1) */ 172 0xb1, 0x02, /* FEATURE (Data,Var,Abs) */ 173 0x09, 0x00, /* USAGE (Undefined) */ 174 0x85, 0x03, /* REPORT_ID (3) */ 175 0x95, 0x01, /* REPORT_COUNT (1) */ 176 0xb1, 0x02, /* FEATURE (Data,Var,Abs) */ 177 0xc0 /* END_COLLECTION */ 178 }; 179 180 /* 181 * The descriptor has no output report format, thus preventing you from 182 * controlling the LEDs and the built-in rumblers. 183 */ 184 static const uByte uhid_xb360gp_report_descr[] = { 185 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 186 0x09, 0x05, /* USAGE (Gamepad) */ 187 0xa1, 0x01, /* COLLECTION (Application) */ 188 /* Unused */ 189 0x75, 0x08, /* REPORT SIZE (8) */ 190 0x95, 0x01, /* REPORT COUNT (1) */ 191 0x81, 0x01, /* INPUT (Constant) */ 192 /* Byte count */ 193 0x75, 0x08, /* REPORT SIZE (8) */ 194 0x95, 0x01, /* REPORT COUNT (1) */ 195 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 196 0x09, 0x3b, /* USAGE (Byte Count) */ 197 0x81, 0x01, /* INPUT (Constant) */ 198 /* D-Pad */ 199 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 200 0x09, 0x01, /* USAGE (Pointer) */ 201 0xa1, 0x00, /* COLLECTION (Physical) */ 202 0x75, 0x01, /* REPORT SIZE (1) */ 203 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 204 0x25, 0x01, /* LOGICAL MAXIMUM (1) */ 205 0x35, 0x00, /* PHYSICAL MINIMUM (0) */ 206 0x45, 0x01, /* PHYSICAL MAXIMUM (1) */ 207 0x95, 0x04, /* REPORT COUNT (4) */ 208 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 209 0x09, 0x90, /* USAGE (D-Pad Up) */ 210 0x09, 0x91, /* USAGE (D-Pad Down) */ 211 0x09, 0x93, /* USAGE (D-Pad Left) */ 212 0x09, 0x92, /* USAGE (D-Pad Right) */ 213 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 214 0xc0, /* END COLLECTION */ 215 /* Buttons 5-11 */ 216 0x75, 0x01, /* REPORT SIZE (1) */ 217 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 218 0x25, 0x01, /* LOGICAL MAXIMUM (1) */ 219 0x35, 0x00, /* PHYSICAL MINIMUM (0) */ 220 0x45, 0x01, /* PHYSICAL MAXIMUM (1) */ 221 0x95, 0x07, /* REPORT COUNT (7) */ 222 0x05, 0x09, /* USAGE PAGE (Button) */ 223 0x09, 0x08, /* USAGE (Button 8) */ 224 0x09, 0x07, /* USAGE (Button 7) */ 225 0x09, 0x09, /* USAGE (Button 9) */ 226 0x09, 0x0a, /* USAGE (Button 10) */ 227 0x09, 0x05, /* USAGE (Button 5) */ 228 0x09, 0x06, /* USAGE (Button 6) */ 229 0x09, 0x0b, /* USAGE (Button 11) */ 230 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 231 /* Unused */ 232 0x75, 0x01, /* REPORT SIZE (1) */ 233 0x95, 0x01, /* REPORT COUNT (1) */ 234 0x81, 0x01, /* INPUT (Constant) */ 235 /* Buttons 1-4 */ 236 0x75, 0x01, /* REPORT SIZE (1) */ 237 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 238 0x25, 0x01, /* LOGICAL MAXIMUM (1) */ 239 0x35, 0x00, /* PHYSICAL MINIMUM (0) */ 240 0x45, 0x01, /* PHYSICAL MAXIMUM (1) */ 241 0x95, 0x04, /* REPORT COUNT (4) */ 242 0x05, 0x09, /* USAGE PAGE (Button) */ 243 0x19, 0x01, /* USAGE MINIMUM (Button 1) */ 244 0x29, 0x04, /* USAGE MAXIMUM (Button 4) */ 245 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 246 /* Triggers */ 247 0x75, 0x08, /* REPORT SIZE (8) */ 248 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 249 0x26, 0xff, 0x00, /* LOGICAL MAXIMUM (255) */ 250 0x35, 0x00, /* PHYSICAL MINIMUM (0) */ 251 0x46, 0xff, 0x00, /* PHYSICAL MAXIMUM (255) */ 252 0x95, 0x02, /* REPORT SIZE (2) */ 253 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 254 0x09, 0x32, /* USAGE (Z) */ 255 0x09, 0x35, /* USAGE (Rz) */ 256 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 257 /* Sticks */ 258 0x75, 0x10, /* REPORT SIZE (16) */ 259 0x16, 0x00, 0x80, /* LOGICAL MINIMUM (-32768) */ 260 0x26, 0xff, 0x7f, /* LOGICAL MAXIMUM (32767) */ 261 0x36, 0x00, 0x80, /* PHYSICAL MINIMUM (-32768) */ 262 0x46, 0xff, 0x7f, /* PHYSICAL MAXIMUM (32767) */ 263 0x95, 0x04, /* REPORT COUNT (4) */ 264 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 265 0x09, 0x30, /* USAGE (X) */ 266 0x09, 0x31, /* USAGE (Y) */ 267 0x09, 0x33, /* USAGE (Rx) */ 268 0x09, 0x34, /* USAGE (Ry) */ 269 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 270 /* Unused */ 271 0x75, 0x30, /* REPORT SIZE (48) */ 272 0x95, 0x01, /* REPORT COUNT (1) */ 273 0x81, 0x01, /* INPUT (Constant) */ 274 0xc0, /* END COLLECTION */ 275 }; 276 277 static const uByte uhid_xbonegp_report_descr[] = { 278 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 279 0x09, 0x05, /* USAGE (Gamepad) */ 280 0xa1, 0x01, /* COLLECTION (Application) */ 281 /* Button packet */ 282 0xa1, 0x00, /* COLLECTION (Physical) */ 283 0x85, 0x20, /* REPORT ID (0x20) */ 284 /* Skip unknown field and counter */ 285 0x09, 0x00, /* USAGE (Undefined) */ 286 0x75, 0x08, /* REPORT SIZE (8) */ 287 0x95, 0x02, /* REPORT COUNT (2) */ 288 0x81, 0x03, /* INPUT (Constant, Variable, Absolute) */ 289 /* Payload size */ 290 0x09, 0x3b, /* USAGE (Byte Count) */ 291 0x95, 0x01, /* REPORT COUNT (1) */ 292 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 293 /* 16 Buttons: 1-2=Unknown, 3=Start, 4=Back, 5-8=ABXY, 294 * 9-12=D-Pad(Up,Dn,Lt,Rt), 13=LB, 14=RB, 15=LS, 16=RS 295 */ 296 /* Skip the first 2 as they are not used */ 297 0x75, 0x01, /* REPORT SIZE (1) */ 298 0x95, 0x02, /* REPORT COUNT (2) */ 299 0x81, 0x01, /* INPUT (Constant) */ 300 /* Assign buttons Start(7), Back(8), ABXY(1-4) */ 301 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 302 0x25, 0x01, /* LOGICAL MAXIMUM (1) */ 303 0x95, 0x06, /* REPORT COUNT (6) */ 304 0x05, 0x09, /* USAGE PAGE (Button) */ 305 0x09, 0x08, /* USAGE (Button 8) */ 306 0x09, 0x07, /* USAGE (Button 7) */ 307 0x09, 0x01, /* USAGE (Button 1) */ 308 0x09, 0x02, /* USAGE (Button 2) */ 309 0x09, 0x03, /* USAGE (Button 3) */ 310 0x09, 0x04, /* USAGE (Button 4) */ 311 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 312 /* D-Pad */ 313 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 314 0x09, 0x01, /* USAGE (Pointer) */ 315 0xa1, 0x00, /* COLLECTION (Physical) */ 316 0x75, 0x01, /* REPORT SIZE (1) */ 317 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 318 0x25, 0x01, /* LOGICAL MAXIMUM (1) */ 319 0x95, 0x04, /* REPORT COUNT (4) */ 320 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 321 0x09, 0x90, /* USAGE (D-Pad Up) */ 322 0x09, 0x91, /* USAGE (D-Pad Down) */ 323 0x09, 0x93, /* USAGE (D-Pad Left) */ 324 0x09, 0x92, /* USAGE (D-Pad Right) */ 325 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 326 0xc0, /* END COLLECTION */ 327 /* Buttons 5-6 (Shoulder Buttons) and 9-10 (Stick Buttons) */ 328 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 329 0x25, 0x01, /* LOGICAL MAXIMUM (1) */ 330 0x95, 0x04, /* REPORT COUNT (4) */ 331 0x05, 0x09, /* USAGE PAGE (Button) */ 332 0x09, 0x05, /* USAGE (Button 5) */ 333 0x09, 0x06, /* USAGE (Button 6) */ 334 0x09, 0x09, /* USAGE (Button 9) */ 335 0x09, 0x0a, /* USAGE (Button 10) */ 336 0x81, 0x02, /* INPUT (Data, Variable, Absolute */ 337 /* Triggers */ 338 0x15, 0x00, /* LOGICAL MINIMUM (0) */ 339 0x26, 0xff, 0x03, /* LOGICAL MAXIMUM (1023) */ 340 0x75, 0x10, /* REPORT SIZE (16) */ 341 0x95, 0x02, /* REPORT COUNT (2) */ 342 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 343 0x09, 0x32, /* USAGE (Z) */ 344 0x09, 0x35, /* USAGE (Rz) */ 345 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 346 /* Sticks */ 347 0x16, 0x00, 0x80, /* LOGICAL MINIMUM (-32768) */ 348 0x26, 0xff, 0x7f, /* LOGICAL MAXIMUM (32767) */ 349 0x09, 0x01, /* USAGE (Pointer) */ 350 0xa1, 0x00, /* COLLECTION (Physical) */ 351 0x95, 0x02, /* REPORT COUNT (2) */ 352 0x05, 0x01, /* USAGE PAGE (Generic Desktop) */ 353 0x09, 0x30, /* USAGE (X) */ 354 0x09, 0x31, /* USAGE (Y) */ 355 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 356 0xc0, /* END COLLECTION */ 357 0x09, 0x01, /* USAGE (Pointer) */ 358 0xa1, 0x00, /* COLLECTION (Physical) */ 359 0x95, 0x02, /* REPORT COUNT (2) */ 360 0x09, 0x33, /* USAGE (Rx) */ 361 0x09, 0x34, /* USAGE (Ry) */ 362 0x81, 0x02, /* INPUT (Data, Variable, Absolute) */ 363 0xc0, /* END COLLECTION */ 364 0xc0, /* END COLLECTION */ 365 }; 366