gcpad_rdesc.h revision 1.1
11.1Sjmcneill/* $NetBSD: gcpad_rdesc.h,v 1.1 2025/12/08 23:00:22 jmcneill Exp $ */ 21.1Sjmcneill 31.1Sjmcneill/*- 41.1Sjmcneill * Copyright (c) 2025 Jared McNeill <jmcneill@invisible.ca> 51.1Sjmcneill * All rights reserved. 61.1Sjmcneill * 71.1Sjmcneill * Redistribution and use in source and binary forms, with or without 81.1Sjmcneill * modification, are permitted provided that the following conditions 91.1Sjmcneill * are met: 101.1Sjmcneill * 1. Redistributions of source code must retain the above copyright 111.1Sjmcneill * notice, this list of conditions and the following disclaimer. 121.1Sjmcneill * 2. Redistributions in binary form must reproduce the above copyright 131.1Sjmcneill * notice, this list of conditions and the following disclaimer in the 141.1Sjmcneill * documentation and/or other materials provided with the distribution. 151.1Sjmcneill * 161.1Sjmcneill * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 171.1Sjmcneill * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 181.1Sjmcneill * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 191.1Sjmcneill * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 201.1Sjmcneill * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 211.1Sjmcneill * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 221.1Sjmcneill * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 231.1Sjmcneill * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 241.1Sjmcneill * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 251.1Sjmcneill * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 261.1Sjmcneill * SUCH DAMAGE. 271.1Sjmcneill */ 281.1Sjmcneill 291.1Sjmcneillstatic uint8_t gcpad_report_descr[] = { 301.1Sjmcneill 0x05, 0x01, // UsagePage(Generic Desktop[0x0001]) 311.1Sjmcneill 0x09, 0x05, // UsageId(Gamepad[0x0005]) 321.1Sjmcneill 0xA1, 0x01, // Collection(Application) 331.1Sjmcneill 0x85, 0x01, // ReportId(1) 341.1Sjmcneill 0x05, 0x09, // UsagePage(Button[0x0009]) 351.1Sjmcneill 0x09, 0x03, // UsageId(Button 3[0x0003]) 361.1Sjmcneill 0x09, 0x01, // UsageId(Button 1[0x0001]) 371.1Sjmcneill 0x09, 0x02, // UsageId(Button 2[0x0002]) 381.1Sjmcneill 0x09, 0x04, // UsageId(Button 4[0x0004]) 391.1Sjmcneill 0x09, 0x0B, // UsageId(Button 11[0x000B]) 401.1Sjmcneill 0x09, 0x0C, // UsageId(Button 12[0x000C]) 411.1Sjmcneill 0x15, 0x00, // LogicalMinimum(0) 421.1Sjmcneill 0x25, 0x01, // LogicalMaximum(1) 431.1Sjmcneill 0x95, 0x06, // ReportCount(6) 441.1Sjmcneill 0x75, 0x01, // ReportSize(1) 451.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 461.1Sjmcneill 0x95, 0x01, // ReportCount(1) 471.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 481.1Sjmcneill 0x09, 0x0A, // UsageId(Button 10[0x000A]) 491.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 501.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 511.1Sjmcneill 0x09, 0x09, // UsageId(Button 9[0x0009]) 521.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 531.1Sjmcneill 0x75, 0x02, // ReportSize(2) 541.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 551.1Sjmcneill 0x09, 0x08, // UsageId(Button 8[0x0008]) 561.1Sjmcneill 0x09, 0x06, // UsageId(Button 6[0x0006]) 571.1Sjmcneill 0x09, 0x07, // UsageId(Button 7[0x0007]) 581.1Sjmcneill 0x09, 0x05, // UsageId(Button 5[0x0005]) 591.1Sjmcneill 0x95, 0x04, // ReportCount(4) 601.1Sjmcneill 0x75, 0x01, // ReportSize(1) 611.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 621.1Sjmcneill 0x05, 0x01, // UsagePage(Generic Desktop[0x0001]) 631.1Sjmcneill 0x09, 0x01, // UsageId(Pointer[0x0001]) 641.1Sjmcneill 0xA1, 0x00, // Collection(Physical) 651.1Sjmcneill 0x09, 0x30, // UsageId(X[0x0030]) 661.1Sjmcneill 0x09, 0x31, // UsageId(Y[0x0031]) 671.1Sjmcneill 0x26, 0xFF, 0x00, // LogicalMaximum(255) 681.1Sjmcneill 0x95, 0x02, // ReportCount(2) 691.1Sjmcneill 0x75, 0x08, // ReportSize(8) 701.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 711.1Sjmcneill 0xC0, // EndCollection() 721.1Sjmcneill 0x09, 0x01, // UsageId(Pointer[0x0001]) 731.1Sjmcneill 0xA1, 0x00, // Collection(Physical) 741.1Sjmcneill 0x09, 0x32, // UsageId(Z[0x0032]) 751.1Sjmcneill 0x09, 0x35, // UsageId(Rz[0x0035]) 761.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 771.1Sjmcneill 0xC0, // EndCollection() 781.1Sjmcneill 0x09, 0x33, // UsageId(Rx[0x0033]) 791.1Sjmcneill 0x09, 0x34, // UsageId(Ry[0x0034]) 801.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 811.1Sjmcneill 0x95, 0x01, // ReportCount(1) 821.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 831.1Sjmcneill 0x85, 0x02, // ReportId(2) 841.1Sjmcneill 0x05, 0x09, // UsagePage(Button[0x0009]) 851.1Sjmcneill 0x09, 0x03, // UsageId(Button 3[0x0003]) 861.1Sjmcneill 0x09, 0x01, // UsageId(Button 1[0x0001]) 871.1Sjmcneill 0x09, 0x02, // UsageId(Button 2[0x0002]) 881.1Sjmcneill 0x09, 0x04, // UsageId(Button 4[0x0004]) 891.1Sjmcneill 0x09, 0x0B, // UsageId(Button 11[0x000B]) 901.1Sjmcneill 0x09, 0x0C, // UsageId(Button 12[0x000C]) 911.1Sjmcneill 0x25, 0x01, // LogicalMaximum(1) 921.1Sjmcneill 0x95, 0x06, // ReportCount(6) 931.1Sjmcneill 0x75, 0x01, // ReportSize(1) 941.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 951.1Sjmcneill 0x95, 0x01, // ReportCount(1) 961.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 971.1Sjmcneill 0x09, 0x0A, // UsageId(Button 10[0x000A]) 981.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 991.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1001.1Sjmcneill 0x09, 0x09, // UsageId(Button 9[0x0009]) 1011.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1021.1Sjmcneill 0x75, 0x02, // ReportSize(2) 1031.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1041.1Sjmcneill 0x09, 0x08, // UsageId(Button 8[0x0008]) 1051.1Sjmcneill 0x09, 0x06, // UsageId(Button 6[0x0006]) 1061.1Sjmcneill 0x09, 0x07, // UsageId(Button 7[0x0007]) 1071.1Sjmcneill 0x09, 0x05, // UsageId(Button 5[0x0005]) 1081.1Sjmcneill 0x95, 0x04, // ReportCount(4) 1091.1Sjmcneill 0x75, 0x01, // ReportSize(1) 1101.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1111.1Sjmcneill 0x05, 0x01, // UsagePage(Generic Desktop[0x0001]) 1121.1Sjmcneill 0x09, 0x01, // UsageId(Pointer[0x0001]) 1131.1Sjmcneill 0xA1, 0x00, // Collection(Physical) 1141.1Sjmcneill 0x09, 0x30, // UsageId(X[0x0030]) 1151.1Sjmcneill 0x09, 0x31, // UsageId(Y[0x0031]) 1161.1Sjmcneill 0x26, 0xFF, 0x00, // LogicalMaximum(255) 1171.1Sjmcneill 0x95, 0x02, // ReportCount(2) 1181.1Sjmcneill 0x75, 0x08, // ReportSize(8) 1191.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1201.1Sjmcneill 0xC0, // EndCollection() 1211.1Sjmcneill 0x09, 0x01, // UsageId(Pointer[0x0001]) 1221.1Sjmcneill 0xA1, 0x00, // Collection(Physical) 1231.1Sjmcneill 0x09, 0x32, // UsageId(Z[0x0032]) 1241.1Sjmcneill 0x09, 0x35, // UsageId(Rz[0x0035]) 1251.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1261.1Sjmcneill 0xC0, // EndCollection() 1271.1Sjmcneill 0x09, 0x33, // UsageId(Rx[0x0033]) 1281.1Sjmcneill 0x09, 0x34, // UsageId(Ry[0x0034]) 1291.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1301.1Sjmcneill 0x95, 0x01, // ReportCount(1) 1311.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1321.1Sjmcneill 0x85, 0x03, // ReportId(3) 1331.1Sjmcneill 0x05, 0x09, // UsagePage(Button[0x0009]) 1341.1Sjmcneill 0x09, 0x03, // UsageId(Button 3[0x0003]) 1351.1Sjmcneill 0x09, 0x01, // UsageId(Button 1[0x0001]) 1361.1Sjmcneill 0x09, 0x02, // UsageId(Button 2[0x0002]) 1371.1Sjmcneill 0x09, 0x04, // UsageId(Button 4[0x0004]) 1381.1Sjmcneill 0x09, 0x0B, // UsageId(Button 11[0x000B]) 1391.1Sjmcneill 0x09, 0x0C, // UsageId(Button 12[0x000C]) 1401.1Sjmcneill 0x25, 0x01, // LogicalMaximum(1) 1411.1Sjmcneill 0x95, 0x06, // ReportCount(6) 1421.1Sjmcneill 0x75, 0x01, // ReportSize(1) 1431.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1441.1Sjmcneill 0x95, 0x01, // ReportCount(1) 1451.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1461.1Sjmcneill 0x09, 0x0A, // UsageId(Button 10[0x000A]) 1471.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1481.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1491.1Sjmcneill 0x09, 0x09, // UsageId(Button 9[0x0009]) 1501.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1511.1Sjmcneill 0x75, 0x02, // ReportSize(2) 1521.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1531.1Sjmcneill 0x09, 0x08, // UsageId(Button 8[0x0008]) 1541.1Sjmcneill 0x09, 0x06, // UsageId(Button 6[0x0006]) 1551.1Sjmcneill 0x09, 0x07, // UsageId(Button 7[0x0007]) 1561.1Sjmcneill 0x09, 0x05, // UsageId(Button 5[0x0005]) 1571.1Sjmcneill 0x95, 0x04, // ReportCount(4) 1581.1Sjmcneill 0x75, 0x01, // ReportSize(1) 1591.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1601.1Sjmcneill 0x05, 0x01, // UsagePage(Generic Desktop[0x0001]) 1611.1Sjmcneill 0x09, 0x01, // UsageId(Pointer[0x0001]) 1621.1Sjmcneill 0xA1, 0x00, // Collection(Physical) 1631.1Sjmcneill 0x09, 0x30, // UsageId(X[0x0030]) 1641.1Sjmcneill 0x09, 0x31, // UsageId(Y[0x0031]) 1651.1Sjmcneill 0x26, 0xFF, 0x00, // LogicalMaximum(255) 1661.1Sjmcneill 0x95, 0x02, // ReportCount(2) 1671.1Sjmcneill 0x75, 0x08, // ReportSize(8) 1681.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1691.1Sjmcneill 0xC0, // EndCollection() 1701.1Sjmcneill 0x09, 0x01, // UsageId(Pointer[0x0001]) 1711.1Sjmcneill 0xA1, 0x00, // Collection(Physical) 1721.1Sjmcneill 0x09, 0x32, // UsageId(Z[0x0032]) 1731.1Sjmcneill 0x09, 0x35, // UsageId(Rz[0x0035]) 1741.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1751.1Sjmcneill 0xC0, // EndCollection() 1761.1Sjmcneill 0x09, 0x33, // UsageId(Rx[0x0033]) 1771.1Sjmcneill 0x09, 0x34, // UsageId(Ry[0x0034]) 1781.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1791.1Sjmcneill 0x95, 0x01, // ReportCount(1) 1801.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1811.1Sjmcneill 0x85, 0x04, // ReportId(4) 1821.1Sjmcneill 0x05, 0x09, // UsagePage(Button[0x0009]) 1831.1Sjmcneill 0x09, 0x03, // UsageId(Button 3[0x0003]) 1841.1Sjmcneill 0x09, 0x01, // UsageId(Button 1[0x0001]) 1851.1Sjmcneill 0x09, 0x02, // UsageId(Button 2[0x0002]) 1861.1Sjmcneill 0x09, 0x04, // UsageId(Button 4[0x0004]) 1871.1Sjmcneill 0x09, 0x0B, // UsageId(Button 11[0x000B]) 1881.1Sjmcneill 0x09, 0x0C, // UsageId(Button 12[0x000C]) 1891.1Sjmcneill 0x25, 0x01, // LogicalMaximum(1) 1901.1Sjmcneill 0x95, 0x06, // ReportCount(6) 1911.1Sjmcneill 0x75, 0x01, // ReportSize(1) 1921.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1931.1Sjmcneill 0x95, 0x01, // ReportCount(1) 1941.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1951.1Sjmcneill 0x09, 0x0A, // UsageId(Button 10[0x000A]) 1961.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1971.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 1981.1Sjmcneill 0x09, 0x09, // UsageId(Button 9[0x0009]) 1991.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 2001.1Sjmcneill 0x75, 0x02, // ReportSize(2) 2011.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 2021.1Sjmcneill 0x09, 0x08, // UsageId(Button 8[0x0008]) 2031.1Sjmcneill 0x09, 0x06, // UsageId(Button 6[0x0006]) 2041.1Sjmcneill 0x09, 0x07, // UsageId(Button 7[0x0007]) 2051.1Sjmcneill 0x09, 0x05, // UsageId(Button 5[0x0005]) 2061.1Sjmcneill 0x95, 0x04, // ReportCount(4) 2071.1Sjmcneill 0x75, 0x01, // ReportSize(1) 2081.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 2091.1Sjmcneill 0x05, 0x01, // UsagePage(Generic Desktop[0x0001]) 2101.1Sjmcneill 0x09, 0x01, // UsageId(Pointer[0x0001]) 2111.1Sjmcneill 0xA1, 0x00, // Collection(Physical) 2121.1Sjmcneill 0x09, 0x30, // UsageId(X[0x0030]) 2131.1Sjmcneill 0x09, 0x31, // UsageId(Y[0x0031]) 2141.1Sjmcneill 0x26, 0xFF, 0x00, // LogicalMaximum(255) 2151.1Sjmcneill 0x95, 0x02, // ReportCount(2) 2161.1Sjmcneill 0x75, 0x08, // ReportSize(8) 2171.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 2181.1Sjmcneill 0xC0, // EndCollection() 2191.1Sjmcneill 0x09, 0x01, // UsageId(Pointer[0x0001]) 2201.1Sjmcneill 0xA1, 0x00, // Collection(Physical) 2211.1Sjmcneill 0x09, 0x32, // UsageId(Z[0x0032]) 2221.1Sjmcneill 0x09, 0x35, // UsageId(Rz[0x0035]) 2231.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 2241.1Sjmcneill 0xC0, // EndCollection() 2251.1Sjmcneill 0x09, 0x33, // UsageId(Rx[0x0033]) 2261.1Sjmcneill 0x09, 0x34, // UsageId(Ry[0x0034]) 2271.1Sjmcneill 0x81, 0x02, // Input(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 2281.1Sjmcneill 0x95, 0x01, // ReportCount(1) 2291.1Sjmcneill 0x81, 0x03, // Input(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, BitField) 2301.1Sjmcneill 0xC0, // EndCollection() 2311.1Sjmcneill}; 232