xref: /freebsd/sys/dev/usb/input/usb_rdesc.h (revision 02ac6454880b59bbc5f3f74dffaffa90b30adc8b)
102ac6454SAndrew Thompson /*-
202ac6454SAndrew Thompson  * Copyright (c) 2000 Nick Hibma <n_hibma@freebsd.org>
302ac6454SAndrew Thompson  * All rights reserved.
402ac6454SAndrew Thompson  *
502ac6454SAndrew Thompson  * Copyright (c) 2005 Ed Schouten <ed@fxq.nl>
602ac6454SAndrew Thompson  * All rights reserved.
702ac6454SAndrew Thompson  *
802ac6454SAndrew Thompson  * Redistribution and use in source and binary forms, with or without
902ac6454SAndrew Thompson  * modification, are permitted provided that the following conditions
1002ac6454SAndrew Thompson  * are met:
1102ac6454SAndrew Thompson  * 1. Redistributions of source code must retain the above copyright
1202ac6454SAndrew Thompson  *    notice, this list of conditions and the following disclaimer.
1302ac6454SAndrew Thompson  * 2. Redistributions in binary form must reproduce the above copyright
1402ac6454SAndrew Thompson  *    notice, this list of conditions and the following disclaimer in the
1502ac6454SAndrew Thompson  *    documentation and/or other materials provided with the distribution.
1602ac6454SAndrew Thompson  *
1702ac6454SAndrew Thompson  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1802ac6454SAndrew Thompson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1902ac6454SAndrew Thompson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2002ac6454SAndrew Thompson  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2102ac6454SAndrew Thompson  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2202ac6454SAndrew Thompson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2302ac6454SAndrew Thompson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2402ac6454SAndrew Thompson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2502ac6454SAndrew Thompson  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2602ac6454SAndrew Thompson  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2702ac6454SAndrew Thompson  * SUCH DAMAGE.
2802ac6454SAndrew Thompson  *
2902ac6454SAndrew Thompson  * $FreeBSD$
3002ac6454SAndrew Thompson  *
3102ac6454SAndrew Thompson  * This file contains replacements for broken HID report descriptors.
3202ac6454SAndrew Thompson  */
3302ac6454SAndrew Thompson 
3402ac6454SAndrew Thompson #define	UHID_GRAPHIRE_REPORT_DESCR(...) \
3502ac6454SAndrew Thompson     0x05, 0x0d,                    /*  USAGE_PAGE (Digitizers)		*/\
3602ac6454SAndrew Thompson     0x09, 0x01,                    /*  USAGE (Digitizer)		*/\
3702ac6454SAndrew Thompson     0xa1, 0x01,                    /*  COLLECTION (Application)		*/\
3802ac6454SAndrew Thompson     0x85, 0x02,                    /*    REPORT_ID (2)			*/\
3902ac6454SAndrew Thompson     0x05, 0x0d,                    /*    USAGE_PAGE (Digitizers)	*/\
4002ac6454SAndrew Thompson     0x09, 0x01,                    /*    USAGE (Digitizer)		*/\
4102ac6454SAndrew Thompson     0xa1, 0x00,                    /*    COLLECTION (Physical)		*/\
4202ac6454SAndrew Thompson     0x15, 0x00,                    /*      LOGICAL_MINIMUM (0)		*/\
4302ac6454SAndrew Thompson     0x25, 0x01,                    /*      LOGICAL_MAXIMUM (1)		*/\
4402ac6454SAndrew Thompson     0x09, 0x33,                    /*      USAGE (Touch)		*/\
4502ac6454SAndrew Thompson     0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
4602ac6454SAndrew Thompson     0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
4702ac6454SAndrew Thompson     0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
4802ac6454SAndrew Thompson     0x09, 0x44,                    /*      USAGE (Barrel Switch)	*/\
4902ac6454SAndrew Thompson     0x95, 0x02,                    /*      REPORT_COUNT (2)		*/\
5002ac6454SAndrew Thompson     0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
5102ac6454SAndrew Thompson     0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
5202ac6454SAndrew Thompson     0x09, 0x00,                    /*      USAGE (Undefined)		*/\
5302ac6454SAndrew Thompson     0x95, 0x02,                    /*      REPORT_COUNT (2)		*/\
5402ac6454SAndrew Thompson     0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
5502ac6454SAndrew Thompson     0x81, 0x03,                    /*      INPUT (Cnst,Var,Abs)		*/\
5602ac6454SAndrew Thompson     0x09, 0x3c,                    /*      USAGE (Invert)		*/\
5702ac6454SAndrew Thompson     0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
5802ac6454SAndrew Thompson     0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
5902ac6454SAndrew Thompson     0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
6002ac6454SAndrew Thompson     0x09, 0x38,                    /*      USAGE (Transducer Index)	*/\
6102ac6454SAndrew Thompson     0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
6202ac6454SAndrew Thompson     0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
6302ac6454SAndrew Thompson     0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
6402ac6454SAndrew Thompson     0x09, 0x32,                    /*      USAGE (In Range)		*/\
6502ac6454SAndrew Thompson     0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
6602ac6454SAndrew Thompson     0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
6702ac6454SAndrew Thompson     0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
6802ac6454SAndrew Thompson     0x05, 0x01,                    /*      USAGE_PAGE (Generic Desktop)	*/\
6902ac6454SAndrew Thompson     0x09, 0x30,                    /*      USAGE (X)			*/\
7002ac6454SAndrew Thompson     0x15, 0x00,                    /*      LOGICAL_MINIMUM (0)		*/\
7102ac6454SAndrew Thompson     0x26, 0xde, 0x27,              /*      LOGICAL_MAXIMUM (10206)	*/\
7202ac6454SAndrew Thompson     0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
7302ac6454SAndrew Thompson     0x75, 0x10,                    /*      REPORT_SIZE (16)		*/\
7402ac6454SAndrew Thompson     0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
7502ac6454SAndrew Thompson     0x09, 0x31,                    /*      USAGE (Y)			*/\
7602ac6454SAndrew Thompson     0x26, 0xfe, 0x1c,              /*      LOGICAL_MAXIMUM (7422)	*/\
7702ac6454SAndrew Thompson     0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
7802ac6454SAndrew Thompson     0x75, 0x10,                    /*      REPORT_SIZE (16)		*/\
7902ac6454SAndrew Thompson     0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
8002ac6454SAndrew Thompson     0x05, 0x0d,                    /*      USAGE_PAGE (Digitizers)	*/\
8102ac6454SAndrew Thompson     0x09, 0x30,                    /*      USAGE (Tip Pressure)		*/\
8202ac6454SAndrew Thompson     0x26, 0xff, 0x01,              /*      LOGICAL_MAXIMUM (511)	*/\
8302ac6454SAndrew Thompson     0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
8402ac6454SAndrew Thompson     0x75, 0x10,                    /*      REPORT_SIZE (16)		*/\
8502ac6454SAndrew Thompson     0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
8602ac6454SAndrew Thompson     0xc0,                          /*    END_COLLECTION			*/\
8702ac6454SAndrew Thompson     0x05, 0x0d,                    /*    USAGE_PAGE (Digitizers)	*/\
8802ac6454SAndrew Thompson     0x09, 0x00,                    /*    USAGE (Undefined)		*/\
8902ac6454SAndrew Thompson     0x85, 0x02,                    /*    REPORT_ID (2)			*/\
9002ac6454SAndrew Thompson     0x95, 0x01,                    /*    REPORT_COUNT (1)		*/\
9102ac6454SAndrew Thompson     0xb1, 0x02,                    /*    FEATURE (Data,Var,Abs)		*/\
9202ac6454SAndrew Thompson     0x09, 0x00,                    /*    USAGE (Undefined)		*/\
9302ac6454SAndrew Thompson     0x85, 0x03,                    /*    REPORT_ID (3)			*/\
9402ac6454SAndrew Thompson     0x95, 0x01,                    /*    REPORT_COUNT (1)		*/\
9502ac6454SAndrew Thompson     0xb1, 0x02,                    /*    FEATURE (Data,Var,Abs)		*/\
9602ac6454SAndrew Thompson     0xc0,                          /*  END_COLLECTION			*/\
9702ac6454SAndrew Thompson 
9802ac6454SAndrew Thompson #define	UHID_GRAPHIRE3_4X5_REPORT_DESCR(...) \
9902ac6454SAndrew Thompson     0x05, 0x01,                    /* USAGE_PAGE (Generic Desktop)	*/\
10002ac6454SAndrew Thompson     0x09, 0x02,                    /* USAGE (Mouse)			*/\
10102ac6454SAndrew Thompson     0xa1, 0x01,                    /* COLLECTION (Application)		*/\
10202ac6454SAndrew Thompson     0x85, 0x01,                    /*   REPORT_ID (1)			*/\
10302ac6454SAndrew Thompson     0x09, 0x01,                    /*   USAGE (Pointer)			*/\
10402ac6454SAndrew Thompson     0xa1, 0x00,                    /*   COLLECTION (Physical)		*/\
10502ac6454SAndrew Thompson     0x05, 0x09,                    /*     USAGE_PAGE (Button)		*/\
10602ac6454SAndrew Thompson     0x19, 0x01,                    /*     USAGE_MINIMUM (Button 1)	*/\
10702ac6454SAndrew Thompson     0x29, 0x03,                    /*     USAGE_MAXIMUM (Button 3)	*/\
10802ac6454SAndrew Thompson     0x15, 0x00,                    /*     LOGICAL_MINIMUM (0)		*/\
10902ac6454SAndrew Thompson     0x25, 0x01,                    /*     LOGICAL_MAXIMUM (1)		*/\
11002ac6454SAndrew Thompson     0x95, 0x03,                    /*     REPORT_COUNT (3)		*/\
11102ac6454SAndrew Thompson     0x75, 0x01,                    /*     REPORT_SIZE (1)		*/\
11202ac6454SAndrew Thompson     0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
11302ac6454SAndrew Thompson     0x95, 0x01,                    /*     REPORT_COUNT (1)		*/\
11402ac6454SAndrew Thompson     0x75, 0x05,                    /*     REPORT_SIZE (5)		*/\
11502ac6454SAndrew Thompson     0x81, 0x01,                    /*     INPUT (Cnst,Ary,Abs)		*/\
11602ac6454SAndrew Thompson     0x05, 0x01,                    /*     USAGE_PAGE (Generic Desktop)	*/\
11702ac6454SAndrew Thompson     0x09, 0x30,                    /*     USAGE (X)			*/\
11802ac6454SAndrew Thompson     0x09, 0x31,                    /*     USAGE (Y)			*/\
11902ac6454SAndrew Thompson     0x09, 0x38,                    /*     USAGE (Wheel)			*/\
12002ac6454SAndrew Thompson     0x15, 0x81,                    /*     LOGICAL_MINIMUM (-127)	*/\
12102ac6454SAndrew Thompson     0x25, 0x7f,                    /*     LOGICAL_MAXIMUM (127)		*/\
12202ac6454SAndrew Thompson     0x75, 0x08,                    /*     REPORT_SIZE (8)		*/\
12302ac6454SAndrew Thompson     0x95, 0x03,                    /*     REPORT_COUNT (3)		*/\
12402ac6454SAndrew Thompson     0x81, 0x06,                    /*     INPUT (Data,Var,Rel)		*/\
12502ac6454SAndrew Thompson     0xc0,                          /*   END_COLLECTION			*/\
12602ac6454SAndrew Thompson     0xc0,                          /* END_COLLECTION			*/\
12702ac6454SAndrew Thompson     0x05, 0x0d,                    /* USAGE_PAGE (Digitizers)		*/\
12802ac6454SAndrew Thompson     0x09, 0x01,                    /* USAGE (Pointer)			*/\
12902ac6454SAndrew Thompson     0xa1, 0x01,                    /* COLLECTION (Applicaption)		*/\
13002ac6454SAndrew Thompson     0x85, 0x02,                    /*   REPORT_ID (2)			*/\
13102ac6454SAndrew Thompson     0x05, 0x0d,                    /*   USAGE_PAGE (Digitizers)		*/\
13202ac6454SAndrew Thompson     0x09, 0x01,                    /*   USAGE (Digitizer)		*/\
13302ac6454SAndrew Thompson     0xa1, 0x00,                    /*   COLLECTION (Physical)		*/\
13402ac6454SAndrew Thompson     0x09, 0x33,                    /*     USAGE (Touch)			*/\
13502ac6454SAndrew Thompson     0x09, 0x44,                    /*     USAGE (Barrel Switch)		*/\
13602ac6454SAndrew Thompson     0x09, 0x44,                    /*     USAGE (Barrel Switch)		*/\
13702ac6454SAndrew Thompson     0x15, 0x00,                    /*     LOGICAL_MINIMUM (0)		*/\
13802ac6454SAndrew Thompson     0x25, 0x01,                    /*     LOGICAL_MAXIMUM (1)		*/\
13902ac6454SAndrew Thompson     0x75, 0x01,                    /*     REPORT_SIZE (1)		*/\
14002ac6454SAndrew Thompson     0x95, 0x03,                    /*     REPORT_COUNT (3)		*/\
14102ac6454SAndrew Thompson     0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
14202ac6454SAndrew Thompson     0x75, 0x01,                    /*     REPORT_SIZE (1)		*/\
14302ac6454SAndrew Thompson     0x95, 0x02,                    /*     REPORT_COUNT (2)		*/\
14402ac6454SAndrew Thompson     0x81, 0x01,                    /*     INPUT (Cnst,Ary,Abs)		*/\
14502ac6454SAndrew Thompson     0x09, 0x3c,                    /*     USAGE (Invert)		*/\
14602ac6454SAndrew Thompson     0x09, 0x38,                    /*     USAGE (Transducer Index)	*/\
14702ac6454SAndrew Thompson     0x09, 0x32,                    /*     USAGE (In Range)		*/\
14802ac6454SAndrew Thompson     0x75, 0x01,                    /*     REPORT_SIZE (1)		*/\
14902ac6454SAndrew Thompson     0x95, 0x03,                    /*     REPORT_COUNT (3)		*/\
15002ac6454SAndrew Thompson     0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
15102ac6454SAndrew Thompson     0x05, 0x01,                    /*     USAGE_PAGE (Generic Desktop)	*/\
15202ac6454SAndrew Thompson     0x09, 0x30,                    /*     USAGE (X)			*/\
15302ac6454SAndrew Thompson     0x15, 0x00,                    /*     LOGICAL_MINIMUM (0)		*/\
15402ac6454SAndrew Thompson     0x26, 0xde, 0x27,              /*     LOGICAL_MAXIMUM (10206)	*/\
15502ac6454SAndrew Thompson     0x75, 0x10,                    /*     REPORT_SIZE (16)		*/\
15602ac6454SAndrew Thompson     0x95, 0x01,                    /*     REPORT_COUNT (1)		*/\
15702ac6454SAndrew Thompson     0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
15802ac6454SAndrew Thompson     0x09, 0x31,                    /*     USAGE (Y)			*/\
15902ac6454SAndrew Thompson     0x26, 0xfe, 0x1c,              /*     LOGICAL_MAXIMUM (7422)	*/\
16002ac6454SAndrew Thompson     0x75, 0x10,                    /*     REPORT_SIZE (16)		*/\
16102ac6454SAndrew Thompson     0x95, 0x01,                    /*     REPORT_COUNT (1)		*/\
16202ac6454SAndrew Thompson     0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
16302ac6454SAndrew Thompson     0x05, 0x0d,                    /*     USAGE_PAGE (Digitizers)	*/\
16402ac6454SAndrew Thompson     0x09, 0x30,                    /*     USAGE (Tip Pressure)		*/\
16502ac6454SAndrew Thompson     0x26, 0xff, 0x01,              /*     LOGICAL_MAXIMUM (511)		*/\
16602ac6454SAndrew Thompson     0x75, 0x10,                    /*     REPORT_SIZE (16)		*/\
16702ac6454SAndrew Thompson     0x95, 0x01,                    /*     REPORT_COUNT (1)		*/\
16802ac6454SAndrew Thompson     0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
16902ac6454SAndrew Thompson     0xc0,                          /*   END_COLLECTION			*/\
17002ac6454SAndrew Thompson     0x05, 0x0d,                    /*   USAGE_PAGE (Digitizers)		*/\
17102ac6454SAndrew Thompson     0x09, 0x00,                    /*   USAGE (Undefined)		*/\
17202ac6454SAndrew Thompson     0x85, 0x02,                    /*   REPORT_ID (2)			*/\
17302ac6454SAndrew Thompson     0x95, 0x01,                    /*   REPORT_COUNT (1)		*/\
17402ac6454SAndrew Thompson     0xb1, 0x02,                    /*   FEATURE (Data,Var,Abs)		*/\
17502ac6454SAndrew Thompson     0x09, 0x00,                    /*   USAGE (Undefined)		*/\
17602ac6454SAndrew Thompson     0x85, 0x03,                    /*   REPORT_ID (3)			*/\
17702ac6454SAndrew Thompson     0x95, 0x01,                    /*   REPORT_COUNT (1)		*/\
17802ac6454SAndrew Thompson     0xb1, 0x02,                    /*   FEATURE (Data,Var,Abs)		*/\
17902ac6454SAndrew Thompson     0xc0                           /* END_COLLECTION			*/\
18002ac6454SAndrew Thompson 
18102ac6454SAndrew Thompson /*
18202ac6454SAndrew Thompson  * The descriptor has no output report format, thus preventing you from
18302ac6454SAndrew Thompson  * controlling the LEDs and the built-in rumblers.
18402ac6454SAndrew Thompson  */
18502ac6454SAndrew Thompson #define	UHID_XB360GP_REPORT_DESCR(...) \
18602ac6454SAndrew Thompson     0x05, 0x01,		/* USAGE PAGE (Generic Desktop)		*/\
18702ac6454SAndrew Thompson     0x09, 0x05,		/* USAGE (Gamepad)			*/\
18802ac6454SAndrew Thompson     0xa1, 0x01,		/* COLLECTION (Application)		*/\
18902ac6454SAndrew Thompson     /* Unused */\
19002ac6454SAndrew Thompson     0x75, 0x08,		/*  REPORT SIZE (8)			*/\
19102ac6454SAndrew Thompson     0x95, 0x01,		/*  REPORT COUNT (1)			*/\
19202ac6454SAndrew Thompson     0x81, 0x01,		/*  INPUT (Constant)			*/\
19302ac6454SAndrew Thompson     /* Byte count */\
19402ac6454SAndrew Thompson     0x75, 0x08,		/*  REPORT SIZE (8)			*/\
19502ac6454SAndrew Thompson     0x95, 0x01,		/*  REPORT COUNT (1)			*/\
19602ac6454SAndrew Thompson     0x05, 0x01,		/*  USAGE PAGE (Generic Desktop)	*/\
19702ac6454SAndrew Thompson     0x09, 0x3b,		/*  USAGE (Byte Count)			*/\
19802ac6454SAndrew Thompson     0x81, 0x01,		/*  INPUT (Constant)			*/\
19902ac6454SAndrew Thompson     /* D-Pad */\
20002ac6454SAndrew Thompson     0x05, 0x01,		/*  USAGE PAGE (Generic Desktop)	*/\
20102ac6454SAndrew Thompson     0x09, 0x01,		/*  USAGE (Pointer)			*/\
20202ac6454SAndrew Thompson     0xa1, 0x00,		/*  COLLECTION (Physical)		*/\
20302ac6454SAndrew Thompson     0x75, 0x01,		/*   REPORT SIZE (1)			*/\
20402ac6454SAndrew Thompson     0x15, 0x00,		/*   LOGICAL MINIMUM (0)		*/\
20502ac6454SAndrew Thompson     0x25, 0x01,		/*   LOGICAL MAXIMUM (1)		*/\
20602ac6454SAndrew Thompson     0x35, 0x00,		/*   PHYSICAL MINIMUM (0)		*/\
20702ac6454SAndrew Thompson     0x45, 0x01,		/*   PHYSICAL MAXIMUM (1)		*/\
20802ac6454SAndrew Thompson     0x95, 0x04,		/*   REPORT COUNT (4)			*/\
20902ac6454SAndrew Thompson     0x05, 0x01,		/*   USAGE PAGE (Generic Desktop)	*/\
21002ac6454SAndrew Thompson     0x09, 0x90,		/*   USAGE (D-Pad Up)			*/\
21102ac6454SAndrew Thompson     0x09, 0x91,		/*   USAGE (D-Pad Down)			*/\
21202ac6454SAndrew Thompson     0x09, 0x93,		/*   USAGE (D-Pad Left)			*/\
21302ac6454SAndrew Thompson     0x09, 0x92,		/*   USAGE (D-Pad Right)		*/\
21402ac6454SAndrew Thompson     0x81, 0x02,		/*   INPUT (Data, Variable, Absolute)	*/\
21502ac6454SAndrew Thompson     0xc0,		/*  END COLLECTION			*/\
21602ac6454SAndrew Thompson     /* Buttons 5-11 */\
21702ac6454SAndrew Thompson     0x75, 0x01,		/*  REPORT SIZE (1)			*/\
21802ac6454SAndrew Thompson     0x15, 0x00,		/*  LOGICAL MINIMUM (0)			*/\
21902ac6454SAndrew Thompson     0x25, 0x01,		/*  LOGICAL MAXIMUM (1)			*/\
22002ac6454SAndrew Thompson     0x35, 0x00,		/*  PHYSICAL MINIMUM (0)		*/\
22102ac6454SAndrew Thompson     0x45, 0x01,		/*  PHYSICAL MAXIMUM (1)		*/\
22202ac6454SAndrew Thompson     0x95, 0x07,		/*  REPORT COUNT (7)			*/\
22302ac6454SAndrew Thompson     0x05, 0x09,		/*  USAGE PAGE (Button)			*/\
22402ac6454SAndrew Thompson     0x09, 0x08,		/*  USAGE (Button 8)			*/\
22502ac6454SAndrew Thompson     0x09, 0x07,		/*  USAGE (Button 7)			*/\
22602ac6454SAndrew Thompson     0x09, 0x09,		/*  USAGE (Button 9)			*/\
22702ac6454SAndrew Thompson     0x09, 0x0a,		/*  USAGE (Button 10)			*/\
22802ac6454SAndrew Thompson     0x09, 0x05,		/*  USAGE (Button 5)			*/\
22902ac6454SAndrew Thompson     0x09, 0x06,		/*  USAGE (Button 6)			*/\
23002ac6454SAndrew Thompson     0x09, 0x0b,		/*  USAGE (Button 11)			*/\
23102ac6454SAndrew Thompson     0x81, 0x02,		/*  INPUT (Data, Variable, Absolute)	*/\
23202ac6454SAndrew Thompson     /* Unused */\
23302ac6454SAndrew Thompson     0x75, 0x01,		/*  REPORT SIZE (1)			*/\
23402ac6454SAndrew Thompson     0x95, 0x01,		/*  REPORT COUNT (1)			*/\
23502ac6454SAndrew Thompson     0x81, 0x01,		/*  INPUT (Constant)			*/\
23602ac6454SAndrew Thompson     /* Buttons 1-4 */\
23702ac6454SAndrew Thompson     0x75, 0x01,		/*  REPORT SIZE (1)			*/\
23802ac6454SAndrew Thompson     0x15, 0x00,		/*  LOGICAL MINIMUM (0)			*/\
23902ac6454SAndrew Thompson     0x25, 0x01,		/*  LOGICAL MAXIMUM (1)			*/\
24002ac6454SAndrew Thompson     0x35, 0x00,		/*  PHYSICAL MINIMUM (0)		*/\
24102ac6454SAndrew Thompson     0x45, 0x01,		/*  PHYSICAL MAXIMUM (1)		*/\
24202ac6454SAndrew Thompson     0x95, 0x04,		/*  REPORT COUNT (4)			*/\
24302ac6454SAndrew Thompson     0x05, 0x09,		/*  USAGE PAGE (Button)			*/\
24402ac6454SAndrew Thompson     0x19, 0x01,		/*  USAGE MINIMUM (Button 1)		*/\
24502ac6454SAndrew Thompson     0x29, 0x04,		/*  USAGE MAXIMUM (Button 4)		*/\
24602ac6454SAndrew Thompson     0x81, 0x02,		/*  INPUT (Data, Variable, Absolute)	*/\
24702ac6454SAndrew Thompson     /* Triggers */\
24802ac6454SAndrew Thompson     0x75, 0x08,		/*  REPORT SIZE (8)			*/\
24902ac6454SAndrew Thompson     0x15, 0x00,		/*  LOGICAL MINIMUM (0)			*/\
25002ac6454SAndrew Thompson     0x26, 0xff, 0x00,	/*  LOGICAL MAXIMUM (255)		*/\
25102ac6454SAndrew Thompson     0x35, 0x00,		/*  PHYSICAL MINIMUM (0)		*/\
25202ac6454SAndrew Thompson     0x46, 0xff, 0x00,	/*  PHYSICAL MAXIMUM (255)		*/\
25302ac6454SAndrew Thompson     0x95, 0x02,		/*  REPORT SIZE (2)			*/\
25402ac6454SAndrew Thompson     0x05, 0x01,		/*  USAGE PAGE (Generic Desktop)	*/\
25502ac6454SAndrew Thompson     0x09, 0x32,		/*  USAGE (Z)				*/\
25602ac6454SAndrew Thompson     0x09, 0x35,		/*  USAGE (Rz)				*/\
25702ac6454SAndrew Thompson     0x81, 0x02,		/*  INPUT (Data, Variable, Absolute)	*/\
25802ac6454SAndrew Thompson     /* Sticks */\
25902ac6454SAndrew Thompson     0x75, 0x10,		/*  REPORT SIZE (16)			*/\
26002ac6454SAndrew Thompson     0x16, 0x00, 0x80,	/*  LOGICAL MINIMUM (-32768)		*/\
26102ac6454SAndrew Thompson     0x26, 0xff, 0x7f,	/*  LOGICAL MAXIMUM (32767)		*/\
26202ac6454SAndrew Thompson     0x36, 0x00, 0x80,	/*  PHYSICAL MINIMUM (-32768)		*/\
26302ac6454SAndrew Thompson     0x46, 0xff, 0x7f,	/*  PHYSICAL MAXIMUM (32767)		*/\
26402ac6454SAndrew Thompson     0x95, 0x04,		/*  REPORT COUNT (4)			*/\
26502ac6454SAndrew Thompson     0x05, 0x01,		/*  USAGE PAGE (Generic Desktop)	*/\
26602ac6454SAndrew Thompson     0x09, 0x30,		/*  USAGE (X)				*/\
26702ac6454SAndrew Thompson     0x09, 0x31,		/*  USAGE (Y)				*/\
26802ac6454SAndrew Thompson     0x09, 0x33,		/*  USAGE (Rx)				*/\
26902ac6454SAndrew Thompson     0x09, 0x34,		/*  USAGE (Ry)				*/\
27002ac6454SAndrew Thompson     0x81, 0x02,		/*  INPUT (Data, Variable, Absolute)	*/\
27102ac6454SAndrew Thompson     /* Unused */\
27202ac6454SAndrew Thompson     0x75, 0x30,		/*  REPORT SIZE (48)			*/\
27302ac6454SAndrew Thompson     0x95, 0x01,		/*  REPORT COUNT (1)			*/\
27402ac6454SAndrew Thompson     0x81, 0x01,		/*  INPUT (Constant)			*/\
27502ac6454SAndrew Thompson     0xc0		/* END COLLECTION			*/\
27602ac6454SAndrew Thompson 
277