1 1.2 skrll /* $NetBSD: xinput_rdesc.h,v 1.2 2016/04/23 10:15:32 skrll Exp $ */ 2 1.1 jmcneill 3 1.1 jmcneill /*- 4 1.1 jmcneill * Copyright (c) 2011 Jared D. McNeill <jmcneill (at) invisible.ca> 5 1.1 jmcneill * All rights reserved. 6 1.1 jmcneill * 7 1.1 jmcneill * Redistribution and use in source and binary forms, with or without 8 1.1 jmcneill * modification, are permitted provided that the following conditions 9 1.1 jmcneill * are met: 10 1.1 jmcneill * 1. Redistributions of source code must retain the above copyright 11 1.1 jmcneill * notice, this list of conditions and the following disclaimer. 12 1.1 jmcneill * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 jmcneill * notice, this list of conditions and the following disclaimer in the 14 1.1 jmcneill * documentation and/or other materials provided with the distribution. 15 1.1 jmcneill * 16 1.1 jmcneill * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' 17 1.1 jmcneill * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18 1.1 jmcneill * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 1.1 jmcneill * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 20 1.1 jmcneill * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 1.1 jmcneill * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 1.1 jmcneill * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 1.1 jmcneill * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 1.1 jmcneill * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 1.1 jmcneill * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 1.1 jmcneill * POSSIBILITY OF SUCH DAMAGE. 27 1.1 jmcneill */ 28 1.1 jmcneill 29 1.1 jmcneill /* 30 1.1 jmcneill * Descriptor from http://euc.jp/periphs/xbox-pad-report-desc.txt 31 1.1 jmcneill */ 32 1.1 jmcneill 33 1.2 skrll #define USBIF_IS_XINPUT(uiaa) \ 34 1.2 skrll ((uiaa)->uiaa_class == UICLASS_VENDOR && \ 35 1.2 skrll (uiaa)->uiaa_subclass == 0x5d && \ 36 1.2 skrll (uiaa)->uiaa_proto == 0x01) 37 1.1 jmcneill 38 1.1 jmcneill static const uByte uhid_xinput_report_descr[] = { 39 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 40 1.1 jmcneill 0x09, 0x05, /* Usage (Game Pad) */ 41 1.1 jmcneill 0xa1, 0x01, /* Collection (Application) */ 42 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 43 1.1 jmcneill 0x09, 0x3a, /* Usage (Counted Buffer) */ 44 1.1 jmcneill 0xa1, 0x02, /* Collection (Logical) */ 45 1.1 jmcneill 0x75, 0x08, /* Report Size (8) */ 46 1.1 jmcneill 0x95, 0x01, /* Report Count (1) */ 47 1.1 jmcneill 0x81, 0x01, /* Input (Constant) */ 48 1.1 jmcneill 0x75, 0x08, /* Report Size (8) */ 49 1.1 jmcneill 0x95, 0x01, /* Report Count (1) */ 50 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 51 1.1 jmcneill 0x09, 0x3b, /* Usage (Byte Count) */ 52 1.1 jmcneill 0x81, 0x01, /* Input (Constant) */ 53 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 54 1.1 jmcneill 0x09, 0x01, /* Usage (Pointer) */ 55 1.1 jmcneill 0xa1, 0x00, /* Collection (Physical) */ 56 1.1 jmcneill 0x75, 0x01, /* Report Size (1) */ 57 1.1 jmcneill 0x15, 0x00, /* Logical Minimum (0) */ 58 1.1 jmcneill 0x25, 0x01, /* Logical Maximum (1) */ 59 1.1 jmcneill 0x35, 0x00, /* Physical Minimum (0) */ 60 1.1 jmcneill 0x45, 0x01, /* Physical Maximum (1) */ 61 1.1 jmcneill 0x95, 0x04, /* Report Count (4) */ 62 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 63 1.1 jmcneill 0x09, 0x90, /* Usage (D-pad Up) */ 64 1.1 jmcneill 0x09, 0x91, /* Usage (D-pad Down) */ 65 1.1 jmcneill 0x09, 0x93, /* Usage (D-pad Left) */ 66 1.1 jmcneill 0x09, 0x92, /* Usage (D-pad Right) */ 67 1.1 jmcneill 0x81, 0x02, /* Input (Data,Variable,Absolute) */ 68 1.1 jmcneill 0xc0, /* End Collection */ 69 1.1 jmcneill 0x75, 0x01, /* Report Size (1) */ 70 1.1 jmcneill 0x15, 0x00, /* Logical Minimum (0) */ 71 1.1 jmcneill 0x25, 0x01, /* Logical Maximum (1) */ 72 1.1 jmcneill 0x35, 0x00, /* Physical Minimum (0) */ 73 1.1 jmcneill 0x45, 0x01, /* Physical Maximum (1) */ 74 1.1 jmcneill 0x95, 0x04, /* Report Count (4) */ 75 1.1 jmcneill 0x05, 0x09, /* Usage Page (Button) */ 76 1.1 jmcneill 0x19, 0x07, /* Usage Minimum (Button 7) */ 77 1.1 jmcneill 0x29, 0x0a, /* Usage Maximum (Button 10) */ 78 1.1 jmcneill 0x81, 0x02, /* Input (Data,Variable,Absolute) */ 79 1.1 jmcneill 0x75, 0x01, /* Report Size (1) */ 80 1.1 jmcneill 0x95, 0x08, /* Report Count (8) */ 81 1.1 jmcneill 0x81, 0x01, /* Input (Constant) */ 82 1.1 jmcneill 0x75, 0x08, /* Report Size (8) */ 83 1.1 jmcneill 0x15, 0x00, /* Logical Minimum (0) */ 84 1.1 jmcneill 0x26, 0xff, 0x00, /* Logical Maximum (255) */ 85 1.1 jmcneill 0x35, 0x00, /* Physical Minimum (0) */ 86 1.1 jmcneill 0x46, 0xff, 0x00, /* Physical Maximum (255) */ 87 1.1 jmcneill 0x95, 0x06, /* Report Count (6) */ 88 1.1 jmcneill 0x05, 0x09, /* Usage Page (Button) */ 89 1.1 jmcneill 0x19, 0x01, /* Usage Minimum (Button 1) */ 90 1.1 jmcneill 0x29, 0x06, /* Usage Minimum (Button 6) */ 91 1.1 jmcneill 0x81, 0x02, /* Input (Data,Variable,Absolute) */ 92 1.1 jmcneill 0x75, 0x08, /* Report Size (8) */ 93 1.1 jmcneill 0x15, 0x00, /* Logical Minimum (0) */ 94 1.1 jmcneill 0x26, 0xff, 0x00, /* Logical Maximum (255) */ 95 1.1 jmcneill 0x35, 0x00, /* Physical Minimum (0) */ 96 1.1 jmcneill 0x46, 0xff, 0x00, /* Physical Maximum (255) */ 97 1.1 jmcneill 0x95, 0x02, /* Report Count (2) */ 98 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 99 1.1 jmcneill 0x09, 0x32, /* Usage (Z) */ 100 1.1 jmcneill 0x09, 0x35, /* Usage (Rz) */ 101 1.1 jmcneill 0x81, 0x02, /* Input (Data,Variable,Absolute) */ 102 1.1 jmcneill 0x75, 0x10, /* Report Size (16) */ 103 1.1 jmcneill 0x16, 0x00, 0x80, /* Logical Minimum (-32768) */ 104 1.1 jmcneill 0x26, 0xff, 0x7f, /* Logical Maximum (32767) */ 105 1.1 jmcneill 0x36, 0x00, 0x80, /* Physical Minimum (-32768) */ 106 1.1 jmcneill 0x46, 0xff, 0x7f, /* Physical Maximum (32767) */ 107 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 108 1.1 jmcneill 0x09, 0x01, /* Usage (Pointer) */ 109 1.1 jmcneill 0xa1, 0x00, /* Collection (Physical) */ 110 1.1 jmcneill 0x95, 0x02, /* Report Count (2) */ 111 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 112 1.1 jmcneill 0x09, 0x30, /* Usage (X) */ 113 1.1 jmcneill 0x09, 0x31, /* Usage (Y) */ 114 1.1 jmcneill 0x81, 0x02, /* Input (Data,Variable,Absolute) */ 115 1.1 jmcneill 0xc0, /* End Collection */ 116 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 117 1.1 jmcneill 0x09, 0x01, /* Usage (Pointer) */ 118 1.1 jmcneill 0xa1, 0x00, /* Collection (Physical) */ 119 1.1 jmcneill 0x95, 0x02, /* Report Count (2) */ 120 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 121 1.1 jmcneill 0x09, 0x33, /* Usage (Rx) */ 122 1.1 jmcneill 0x09, 0x34, /* Usage (Ry) */ 123 1.1 jmcneill 0x81, 0x02, /* Input (Data,Variable,Absolute) */ 124 1.1 jmcneill 0xc0, /* End Collection */ 125 1.1 jmcneill 0xc0, /* End Collection */ 126 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 127 1.1 jmcneill 0x09, 0x3a, /* Usage (Counted Buffer) */ 128 1.1 jmcneill 0xa1, 0x02, /* Collection (Logical) */ 129 1.1 jmcneill 0x75, 0x08, /* Report Size (8) */ 130 1.1 jmcneill 0x95, 0x01, /* Report Count (1) */ 131 1.1 jmcneill 0x91, 0x01, /* Output (Constant) */ 132 1.1 jmcneill 0x75, 0x08, /* Report Size (8) */ 133 1.1 jmcneill 0x95, 0x01, /* Report Count (1) */ 134 1.1 jmcneill 0x05, 0x01, /* Usage Page (Generic Desktop) */ 135 1.1 jmcneill 0x09, 0x3b, /* Usage (Byte Count) */ 136 1.1 jmcneill 0x91, 0x01, /* Output (Constant) */ 137 1.1 jmcneill 0x75, 0x08, /* Report Size (8) */ 138 1.1 jmcneill 0x95, 0x01, /* Report Count (1) */ 139 1.1 jmcneill 0x91, 0x01, /* Output (Constant) */ 140 1.1 jmcneill 0x75, 0x08, /* Report Size (8) */ 141 1.1 jmcneill 0x15, 0x00, /* Logical Minimum (0) */ 142 1.1 jmcneill 0x26, 0xff, 0x00, /* Logical Maximum (255) */ 143 1.1 jmcneill 0x35, 0x00, /* Physical Minimum (0) */ 144 1.1 jmcneill 0x46, 0xff, 0x00, /* Physical Maximum (255) */ 145 1.1 jmcneill 0x95, 0x01, /* Report Count (1) */ 146 1.1 jmcneill 0x06, 0x00, 0xff, /* Usage Page (vendor-defined) */ 147 1.1 jmcneill 0x09, 0x01, /* Usage (1) */ 148 1.1 jmcneill 0x91, 0x02, /* Output (Data,Variable,Absolute) */ 149 1.1 jmcneill 0x75, 0x08, /* Report Size (8) */ 150 1.1 jmcneill 0x95, 0x01, /* Report Count (1) */ 151 1.1 jmcneill 0x91, 0x01, /* Output (Constant) */ 152 1.1 jmcneill 0x75, 0x08, /* Report Size (8) */ 153 1.1 jmcneill 0x15, 0x00, /* Logical Minimum (0) */ 154 1.1 jmcneill 0x26, 0xff, 0x00, /* Logical Maximum (255) */ 155 1.1 jmcneill 0x35, 0x00, /* Physical Minimum (0) */ 156 1.1 jmcneill 0x46, 0xff, 0x00, /* Physical Maximum (255) */ 157 1.1 jmcneill 0x95, 0x01, /* Report Count (1) */ 158 1.1 jmcneill 0x06, 0x00, 0xff, /* Usage Page (vendor-defined) */ 159 1.1 jmcneill 0x09, 0x02, /* Usage (2) */ 160 1.1 jmcneill 0x91, 0x02, /* Output (Data,Variable,Absolute) */ 161 1.1 jmcneill 0xc0, /* End Collection */ 162 1.1 jmcneill 0xc0, /* End Collection */ 163 1.1 jmcneill }; 164