1f9f848faSopenharmony_ci/*-
2f9f848faSopenharmony_ci * SPDX-License-Identifier: BSD-2-Clause
3f9f848faSopenharmony_ci *
4f9f848faSopenharmony_ci * Copyright (c) 2020 Vladimir Kondratyev <wulf@FreeBSD.org>
5f9f848faSopenharmony_ci *
6f9f848faSopenharmony_ci * Redistribution and use in source and binary forms, with or without
7f9f848faSopenharmony_ci * modification, are permitted provided that the following conditions
8f9f848faSopenharmony_ci * are met:
9f9f848faSopenharmony_ci * 1. Redistributions of source code must retain the above copyright
10f9f848faSopenharmony_ci *    notice, this list of conditions and the following disclaimer.
11f9f848faSopenharmony_ci * 2. Redistributions in binary form must reproduce the above copyright
12f9f848faSopenharmony_ci *    notice, this list of conditions and the following disclaimer in the
13f9f848faSopenharmony_ci *    documentation and/or other materials provided with the distribution.
14f9f848faSopenharmony_ci *
15f9f848faSopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16f9f848faSopenharmony_ci * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17f9f848faSopenharmony_ci * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18f9f848faSopenharmony_ci * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19f9f848faSopenharmony_ci * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20f9f848faSopenharmony_ci * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21f9f848faSopenharmony_ci * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22f9f848faSopenharmony_ci * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23f9f848faSopenharmony_ci * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24f9f848faSopenharmony_ci * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25f9f848faSopenharmony_ci * SUCH DAMAGE.
26f9f848faSopenharmony_ci *
27f9f848faSopenharmony_ci * This a proxy file for replacements for broken HID report descriptors.
28f9f848faSopenharmony_ci */
29f9f848faSopenharmony_ci
30f9f848faSopenharmony_ci#define	UHID_GRAPHIRE_REPORT_DESCR(...) \
31f9f848faSopenharmony_ci    0x05, 0x0d,                    /*  USAGE_PAGE (Digitizers)		*/\
32f9f848faSopenharmony_ci    0x09, 0x01,                    /*  USAGE (Digitizer)		*/\
33f9f848faSopenharmony_ci    0xa1, 0x01,                    /*  COLLECTION (Application)		*/\
34f9f848faSopenharmony_ci    0x85, 0x02,                    /*    REPORT_ID (2)			*/\
35f9f848faSopenharmony_ci    0x05, 0x0d,                    /*    USAGE_PAGE (Digitizers)	*/\
36f9f848faSopenharmony_ci    0x09, 0x01,                    /*    USAGE (Digitizer)		*/\
37f9f848faSopenharmony_ci    0xa1, 0x00,                    /*    COLLECTION (Physical)		*/\
38f9f848faSopenharmony_ci    0x15, 0x00,                    /*      LOGICAL_MINIMUM (0)		*/\
39f9f848faSopenharmony_ci    0x25, 0x01,                    /*      LOGICAL_MAXIMUM (1)		*/\
40f9f848faSopenharmony_ci    0x09, 0x33,                    /*      USAGE (Touch)		*/\
41f9f848faSopenharmony_ci    0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
42f9f848faSopenharmony_ci    0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
43f9f848faSopenharmony_ci    0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
44f9f848faSopenharmony_ci    0x09, 0x44,                    /*      USAGE (Barrel Switch)	*/\
45f9f848faSopenharmony_ci    0x95, 0x02,                    /*      REPORT_COUNT (2)		*/\
46f9f848faSopenharmony_ci    0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
47f9f848faSopenharmony_ci    0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
48f9f848faSopenharmony_ci    0x09, 0x00,                    /*      USAGE (Undefined)		*/\
49f9f848faSopenharmony_ci    0x95, 0x02,                    /*      REPORT_COUNT (2)		*/\
50f9f848faSopenharmony_ci    0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
51f9f848faSopenharmony_ci    0x81, 0x03,                    /*      INPUT (Cnst,Var,Abs)		*/\
52f9f848faSopenharmony_ci    0x09, 0x3c,                    /*      USAGE (Invert)		*/\
53f9f848faSopenharmony_ci    0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
54f9f848faSopenharmony_ci    0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
55f9f848faSopenharmony_ci    0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
56f9f848faSopenharmony_ci    0x09, 0x38,                    /*      USAGE (Transducer Index)	*/\
57f9f848faSopenharmony_ci    0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
58f9f848faSopenharmony_ci    0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
59f9f848faSopenharmony_ci    0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
60f9f848faSopenharmony_ci    0x09, 0x32,                    /*      USAGE (In Range)		*/\
61f9f848faSopenharmony_ci    0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
62f9f848faSopenharmony_ci    0x75, 0x01,                    /*      REPORT_SIZE (1)		*/\
63f9f848faSopenharmony_ci    0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
64f9f848faSopenharmony_ci    0x05, 0x01,                    /*      USAGE_PAGE (Generic Desktop)	*/\
65f9f848faSopenharmony_ci    0x09, 0x30,                    /*      USAGE (X)			*/\
66f9f848faSopenharmony_ci    0x15, 0x00,                    /*      LOGICAL_MINIMUM (0)		*/\
67f9f848faSopenharmony_ci    0x26, 0xde, 0x27,              /*      LOGICAL_MAXIMUM (10206)	*/\
68f9f848faSopenharmony_ci    0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
69f9f848faSopenharmony_ci    0x75, 0x10,                    /*      REPORT_SIZE (16)		*/\
70f9f848faSopenharmony_ci    0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
71f9f848faSopenharmony_ci    0x09, 0x31,                    /*      USAGE (Y)			*/\
72f9f848faSopenharmony_ci    0x26, 0xfe, 0x1c,              /*      LOGICAL_MAXIMUM (7422)	*/\
73f9f848faSopenharmony_ci    0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
74f9f848faSopenharmony_ci    0x75, 0x10,                    /*      REPORT_SIZE (16)		*/\
75f9f848faSopenharmony_ci    0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
76f9f848faSopenharmony_ci    0x05, 0x0d,                    /*      USAGE_PAGE (Digitizers)	*/\
77f9f848faSopenharmony_ci    0x09, 0x30,                    /*      USAGE (Tip Pressure)		*/\
78f9f848faSopenharmony_ci    0x26, 0xff, 0x01,              /*      LOGICAL_MAXIMUM (511)	*/\
79f9f848faSopenharmony_ci    0x95, 0x01,                    /*      REPORT_COUNT (1)		*/\
80f9f848faSopenharmony_ci    0x75, 0x10,                    /*      REPORT_SIZE (16)		*/\
81f9f848faSopenharmony_ci    0x81, 0x02,                    /*      INPUT (Data,Var,Abs)		*/\
82f9f848faSopenharmony_ci    0xc0,                          /*    END_COLLECTION			*/\
83f9f848faSopenharmony_ci    0x05, 0x0d,                    /*    USAGE_PAGE (Digitizers)	*/\
84f9f848faSopenharmony_ci    0x09, 0x00,                    /*    USAGE (Undefined)		*/\
85f9f848faSopenharmony_ci    0x85, 0x02,                    /*    REPORT_ID (2)			*/\
86f9f848faSopenharmony_ci    0x95, 0x01,                    /*    REPORT_COUNT (1)		*/\
87f9f848faSopenharmony_ci    0xb1, 0x02,                    /*    FEATURE (Data,Var,Abs)		*/\
88f9f848faSopenharmony_ci    0x09, 0x00,                    /*    USAGE (Undefined)		*/\
89f9f848faSopenharmony_ci    0x85, 0x03,                    /*    REPORT_ID (3)			*/\
90f9f848faSopenharmony_ci    0x95, 0x01,                    /*    REPORT_COUNT (1)		*/\
91f9f848faSopenharmony_ci    0xb1, 0x02,                    /*    FEATURE (Data,Var,Abs)		*/\
92f9f848faSopenharmony_ci    0xc0,                          /*  END_COLLECTION			*/\
93f9f848faSopenharmony_ci
94f9f848faSopenharmony_ci#define	UHID_GRAPHIRE3_4X5_REPORT_DESCR(...) \
95f9f848faSopenharmony_ci    0x05, 0x01,                    /* USAGE_PAGE (Generic Desktop)	*/\
96f9f848faSopenharmony_ci    0x09, 0x02,                    /* USAGE (Mouse)			*/\
97f9f848faSopenharmony_ci    0xa1, 0x01,                    /* COLLECTION (Application)		*/\
98f9f848faSopenharmony_ci    0x85, 0x01,                    /*   REPORT_ID (1)			*/\
99f9f848faSopenharmony_ci    0x09, 0x01,                    /*   USAGE (Pointer)			*/\
100f9f848faSopenharmony_ci    0xa1, 0x00,                    /*   COLLECTION (Physical)		*/\
101f9f848faSopenharmony_ci    0x05, 0x09,                    /*     USAGE_PAGE (Button)		*/\
102f9f848faSopenharmony_ci    0x19, 0x01,                    /*     USAGE_MINIMUM (Button 1)	*/\
103f9f848faSopenharmony_ci    0x29, 0x03,                    /*     USAGE_MAXIMUM (Button 3)	*/\
104f9f848faSopenharmony_ci    0x15, 0x00,                    /*     LOGICAL_MINIMUM (0)		*/\
105f9f848faSopenharmony_ci    0x25, 0x01,                    /*     LOGICAL_MAXIMUM (1)		*/\
106f9f848faSopenharmony_ci    0x95, 0x03,                    /*     REPORT_COUNT (3)		*/\
107f9f848faSopenharmony_ci    0x75, 0x01,                    /*     REPORT_SIZE (1)		*/\
108f9f848faSopenharmony_ci    0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
109f9f848faSopenharmony_ci    0x95, 0x01,                    /*     REPORT_COUNT (1)		*/\
110f9f848faSopenharmony_ci    0x75, 0x05,                    /*     REPORT_SIZE (5)		*/\
111f9f848faSopenharmony_ci    0x81, 0x01,                    /*     INPUT (Cnst,Ary,Abs)		*/\
112f9f848faSopenharmony_ci    0x05, 0x01,                    /*     USAGE_PAGE (Generic Desktop)	*/\
113f9f848faSopenharmony_ci    0x09, 0x30,                    /*     USAGE (X)			*/\
114f9f848faSopenharmony_ci    0x09, 0x31,                    /*     USAGE (Y)			*/\
115f9f848faSopenharmony_ci    0x09, 0x38,                    /*     USAGE (Wheel)			*/\
116f9f848faSopenharmony_ci    0x15, 0x81,                    /*     LOGICAL_MINIMUM (-127)	*/\
117f9f848faSopenharmony_ci    0x25, 0x7f,                    /*     LOGICAL_MAXIMUM (127)		*/\
118f9f848faSopenharmony_ci    0x75, 0x08,                    /*     REPORT_SIZE (8)		*/\
119f9f848faSopenharmony_ci    0x95, 0x03,                    /*     REPORT_COUNT (3)		*/\
120f9f848faSopenharmony_ci    0x81, 0x06,                    /*     INPUT (Data,Var,Rel)		*/\
121f9f848faSopenharmony_ci    0xc0,                          /*   END_COLLECTION			*/\
122f9f848faSopenharmony_ci    0xc0,                          /* END_COLLECTION			*/\
123f9f848faSopenharmony_ci    0x05, 0x0d,                    /* USAGE_PAGE (Digitizers)		*/\
124f9f848faSopenharmony_ci    0x09, 0x01,                    /* USAGE (Pointer)			*/\
125f9f848faSopenharmony_ci    0xa1, 0x01,                    /* COLLECTION (Applicaption)		*/\
126f9f848faSopenharmony_ci    0x85, 0x02,                    /*   REPORT_ID (2)			*/\
127f9f848faSopenharmony_ci    0x05, 0x0d,                    /*   USAGE_PAGE (Digitizers)		*/\
128f9f848faSopenharmony_ci    0x09, 0x01,                    /*   USAGE (Digitizer)		*/\
129f9f848faSopenharmony_ci    0xa1, 0x00,                    /*   COLLECTION (Physical)		*/\
130f9f848faSopenharmony_ci    0x09, 0x33,                    /*     USAGE (Touch)			*/\
131f9f848faSopenharmony_ci    0x09, 0x44,                    /*     USAGE (Barrel Switch)		*/\
132f9f848faSopenharmony_ci    0x09, 0x44,                    /*     USAGE (Barrel Switch)		*/\
133f9f848faSopenharmony_ci    0x15, 0x00,                    /*     LOGICAL_MINIMUM (0)		*/\
134f9f848faSopenharmony_ci    0x25, 0x01,                    /*     LOGICAL_MAXIMUM (1)		*/\
135f9f848faSopenharmony_ci    0x75, 0x01,                    /*     REPORT_SIZE (1)		*/\
136f9f848faSopenharmony_ci    0x95, 0x03,                    /*     REPORT_COUNT (3)		*/\
137f9f848faSopenharmony_ci    0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
138f9f848faSopenharmony_ci    0x75, 0x01,                    /*     REPORT_SIZE (1)		*/\
139f9f848faSopenharmony_ci    0x95, 0x02,                    /*     REPORT_COUNT (2)		*/\
140f9f848faSopenharmony_ci    0x81, 0x01,                    /*     INPUT (Cnst,Ary,Abs)		*/\
141f9f848faSopenharmony_ci    0x09, 0x3c,                    /*     USAGE (Invert)		*/\
142f9f848faSopenharmony_ci    0x09, 0x38,                    /*     USAGE (Transducer Index)	*/\
143f9f848faSopenharmony_ci    0x09, 0x32,                    /*     USAGE (In Range)		*/\
144f9f848faSopenharmony_ci    0x75, 0x01,                    /*     REPORT_SIZE (1)		*/\
145f9f848faSopenharmony_ci    0x95, 0x03,                    /*     REPORT_COUNT (3)		*/\
146f9f848faSopenharmony_ci    0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
147f9f848faSopenharmony_ci    0x05, 0x01,                    /*     USAGE_PAGE (Generic Desktop)	*/\
148f9f848faSopenharmony_ci    0x09, 0x30,                    /*     USAGE (X)			*/\
149f9f848faSopenharmony_ci    0x15, 0x00,                    /*     LOGICAL_MINIMUM (0)		*/\
150f9f848faSopenharmony_ci    0x26, 0xde, 0x27,              /*     LOGICAL_MAXIMUM (10206)	*/\
151f9f848faSopenharmony_ci    0x75, 0x10,                    /*     REPORT_SIZE (16)		*/\
152f9f848faSopenharmony_ci    0x95, 0x01,                    /*     REPORT_COUNT (1)		*/\
153f9f848faSopenharmony_ci    0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
154f9f848faSopenharmony_ci    0x09, 0x31,                    /*     USAGE (Y)			*/\
155f9f848faSopenharmony_ci    0x26, 0xfe, 0x1c,              /*     LOGICAL_MAXIMUM (7422)	*/\
156f9f848faSopenharmony_ci    0x75, 0x10,                    /*     REPORT_SIZE (16)		*/\
157f9f848faSopenharmony_ci    0x95, 0x01,                    /*     REPORT_COUNT (1)		*/\
158f9f848faSopenharmony_ci    0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
159f9f848faSopenharmony_ci    0x05, 0x0d,                    /*     USAGE_PAGE (Digitizers)	*/\
160f9f848faSopenharmony_ci    0x09, 0x30,                    /*     USAGE (Tip Pressure)		*/\
161f9f848faSopenharmony_ci    0x26, 0xff, 0x01,              /*     LOGICAL_MAXIMUM (511)		*/\
162f9f848faSopenharmony_ci    0x75, 0x10,                    /*     REPORT_SIZE (16)		*/\
163f9f848faSopenharmony_ci    0x95, 0x01,                    /*     REPORT_COUNT (1)		*/\
164f9f848faSopenharmony_ci    0x81, 0x02,                    /*     INPUT (Data,Var,Abs)		*/\
165f9f848faSopenharmony_ci    0xc0,                          /*   END_COLLECTION			*/\
166f9f848faSopenharmony_ci    0x05, 0x0d,                    /*   USAGE_PAGE (Digitizers)		*/\
167f9f848faSopenharmony_ci    0x09, 0x00,                    /*   USAGE (Undefined)		*/\
168f9f848faSopenharmony_ci    0x85, 0x02,                    /*   REPORT_ID (2)			*/\
169f9f848faSopenharmony_ci    0x95, 0x01,                    /*   REPORT_COUNT (1)		*/\
170f9f848faSopenharmony_ci    0xb1, 0x02,                    /*   FEATURE (Data,Var,Abs)		*/\
171f9f848faSopenharmony_ci    0x09, 0x00,                    /*   USAGE (Undefined)		*/\
172f9f848faSopenharmony_ci    0x85, 0x03,                    /*   REPORT_ID (3)			*/\
173f9f848faSopenharmony_ci    0x95, 0x01,                    /*   REPORT_COUNT (1)		*/\
174f9f848faSopenharmony_ci    0xb1, 0x02,                    /*   FEATURE (Data,Var,Abs)		*/\
175f9f848faSopenharmony_ci    0xc0                           /* END_COLLECTION			*/\
176f9f848faSopenharmony_ci
177f9f848faSopenharmony_ci/*
178f9f848faSopenharmony_ci * The descriptor has no output report format, thus preventing you from
179f9f848faSopenharmony_ci * controlling the LEDs and the built-in rumblers.
180f9f848faSopenharmony_ci */
181f9f848faSopenharmony_ci#define	UHID_XB360GP_REPORT_DESCR(...) \
182f9f848faSopenharmony_ci    0x05, 0x01,		/* USAGE PAGE (Generic Desktop)		*/\
183f9f848faSopenharmony_ci    0x09, 0x05,		/* USAGE (Gamepad)			*/\
184f9f848faSopenharmony_ci    0xa1, 0x01,		/* COLLECTION (Application)		*/\
185f9f848faSopenharmony_ci    /* Unused */\
186f9f848faSopenharmony_ci    0x75, 0x08,		/*  REPORT SIZE (8)			*/\
187f9f848faSopenharmony_ci    0x95, 0x01,		/*  REPORT COUNT (1)			*/\
188f9f848faSopenharmony_ci    0x81, 0x01,		/*  INPUT (Constant)			*/\
189f9f848faSopenharmony_ci    /* Byte count */\
190f9f848faSopenharmony_ci    0x75, 0x08,		/*  REPORT SIZE (8)			*/\
191f9f848faSopenharmony_ci    0x95, 0x01,		/*  REPORT COUNT (1)			*/\
192f9f848faSopenharmony_ci    0x05, 0x01,		/*  USAGE PAGE (Generic Desktop)	*/\
193f9f848faSopenharmony_ci    0x09, 0x3b,		/*  USAGE (Byte Count)			*/\
194f9f848faSopenharmony_ci    0x81, 0x01,		/*  INPUT (Constant)			*/\
195f9f848faSopenharmony_ci    /* D-Pad */\
196f9f848faSopenharmony_ci    0x05, 0x01,		/*  USAGE PAGE (Generic Desktop)	*/\
197f9f848faSopenharmony_ci    0x09, 0x01,		/*  USAGE (Pointer)			*/\
198f9f848faSopenharmony_ci    0xa1, 0x00,		/*  COLLECTION (Physical)		*/\
199f9f848faSopenharmony_ci    0x75, 0x01,		/*   REPORT SIZE (1)			*/\
200f9f848faSopenharmony_ci    0x15, 0x00,		/*   LOGICAL MINIMUM (0)		*/\
201f9f848faSopenharmony_ci    0x25, 0x01,		/*   LOGICAL MAXIMUM (1)		*/\
202f9f848faSopenharmony_ci    0x35, 0x00,		/*   PHYSICAL MINIMUM (0)		*/\
203f9f848faSopenharmony_ci    0x45, 0x01,		/*   PHYSICAL MAXIMUM (1)		*/\
204f9f848faSopenharmony_ci    0x95, 0x04,		/*   REPORT COUNT (4)			*/\
205f9f848faSopenharmony_ci    0x05, 0x01,		/*   USAGE PAGE (Generic Desktop)	*/\
206f9f848faSopenharmony_ci    0x09, 0x90,		/*   USAGE (D-Pad Up)			*/\
207f9f848faSopenharmony_ci    0x09, 0x91,		/*   USAGE (D-Pad Down)			*/\
208f9f848faSopenharmony_ci    0x09, 0x93,		/*   USAGE (D-Pad Left)			*/\
209f9f848faSopenharmony_ci    0x09, 0x92,		/*   USAGE (D-Pad Right)		*/\
210f9f848faSopenharmony_ci    0x81, 0x02,		/*   INPUT (Data, Variable, Absolute)	*/\
211f9f848faSopenharmony_ci    0xc0,		/*  END COLLECTION			*/\
212f9f848faSopenharmony_ci    /* Buttons 5-11 */\
213f9f848faSopenharmony_ci    0x75, 0x01,		/*  REPORT SIZE (1)			*/\
214f9f848faSopenharmony_ci    0x15, 0x00,		/*  LOGICAL MINIMUM (0)			*/\
215f9f848faSopenharmony_ci    0x25, 0x01,		/*  LOGICAL MAXIMUM (1)			*/\
216f9f848faSopenharmony_ci    0x35, 0x00,		/*  PHYSICAL MINIMUM (0)		*/\
217f9f848faSopenharmony_ci    0x45, 0x01,		/*  PHYSICAL MAXIMUM (1)		*/\
218f9f848faSopenharmony_ci    0x95, 0x07,		/*  REPORT COUNT (7)			*/\
219f9f848faSopenharmony_ci    0x05, 0x09,		/*  USAGE PAGE (Button)			*/\
220f9f848faSopenharmony_ci    0x09, 0x08,		/*  USAGE (Button 8)			*/\
221f9f848faSopenharmony_ci    0x09, 0x07,		/*  USAGE (Button 7)			*/\
222f9f848faSopenharmony_ci    0x09, 0x09,		/*  USAGE (Button 9)			*/\
223f9f848faSopenharmony_ci    0x09, 0x0a,		/*  USAGE (Button 10)			*/\
224f9f848faSopenharmony_ci    0x09, 0x05,		/*  USAGE (Button 5)			*/\
225f9f848faSopenharmony_ci    0x09, 0x06,		/*  USAGE (Button 6)			*/\
226f9f848faSopenharmony_ci    0x09, 0x0b,		/*  USAGE (Button 11)			*/\
227f9f848faSopenharmony_ci    0x81, 0x02,		/*  INPUT (Data, Variable, Absolute)	*/\
228f9f848faSopenharmony_ci    /* Unused */\
229f9f848faSopenharmony_ci    0x75, 0x01,		/*  REPORT SIZE (1)			*/\
230f9f848faSopenharmony_ci    0x95, 0x01,		/*  REPORT COUNT (1)			*/\
231f9f848faSopenharmony_ci    0x81, 0x01,		/*  INPUT (Constant)			*/\
232f9f848faSopenharmony_ci    /* Buttons 1-4 */\
233f9f848faSopenharmony_ci    0x75, 0x01,		/*  REPORT SIZE (1)			*/\
234f9f848faSopenharmony_ci    0x15, 0x00,		/*  LOGICAL MINIMUM (0)			*/\
235f9f848faSopenharmony_ci    0x25, 0x01,		/*  LOGICAL MAXIMUM (1)			*/\
236f9f848faSopenharmony_ci    0x35, 0x00,		/*  PHYSICAL MINIMUM (0)		*/\
237f9f848faSopenharmony_ci    0x45, 0x01,		/*  PHYSICAL MAXIMUM (1)		*/\
238f9f848faSopenharmony_ci    0x95, 0x04,		/*  REPORT COUNT (4)			*/\
239f9f848faSopenharmony_ci    0x05, 0x09,		/*  USAGE PAGE (Button)			*/\
240f9f848faSopenharmony_ci    0x19, 0x01,		/*  USAGE MINIMUM (Button 1)		*/\
241f9f848faSopenharmony_ci    0x29, 0x04,		/*  USAGE MAXIMUM (Button 4)		*/\
242f9f848faSopenharmony_ci    0x81, 0x02,		/*  INPUT (Data, Variable, Absolute)	*/\
243f9f848faSopenharmony_ci    /* Triggers */\
244f9f848faSopenharmony_ci    0x75, 0x08,		/*  REPORT SIZE (8)			*/\
245f9f848faSopenharmony_ci    0x15, 0x00,		/*  LOGICAL MINIMUM (0)			*/\
246f9f848faSopenharmony_ci    0x26, 0xff, 0x00,	/*  LOGICAL MAXIMUM (255)		*/\
247f9f848faSopenharmony_ci    0x35, 0x00,		/*  PHYSICAL MINIMUM (0)		*/\
248f9f848faSopenharmony_ci    0x46, 0xff, 0x00,	/*  PHYSICAL MAXIMUM (255)		*/\
249f9f848faSopenharmony_ci    0x95, 0x02,		/*  REPORT SIZE (2)			*/\
250f9f848faSopenharmony_ci    0x05, 0x01,		/*  USAGE PAGE (Generic Desktop)	*/\
251f9f848faSopenharmony_ci    0x09, 0x32,		/*  USAGE (Z)				*/\
252f9f848faSopenharmony_ci    0x09, 0x35,		/*  USAGE (Rz)				*/\
253f9f848faSopenharmony_ci    0x81, 0x02,		/*  INPUT (Data, Variable, Absolute)	*/\
254f9f848faSopenharmony_ci    /* Sticks */\
255f9f848faSopenharmony_ci    0x75, 0x10,		/*  REPORT SIZE (16)			*/\
256f9f848faSopenharmony_ci    0x16, 0x00, 0x80,	/*  LOGICAL MINIMUM (-32768)		*/\
257f9f848faSopenharmony_ci    0x26, 0xff, 0x7f,	/*  LOGICAL MAXIMUM (32767)		*/\
258f9f848faSopenharmony_ci    0x36, 0x00, 0x80,	/*  PHYSICAL MINIMUM (-32768)		*/\
259f9f848faSopenharmony_ci    0x46, 0xff, 0x7f,	/*  PHYSICAL MAXIMUM (32767)		*/\
260f9f848faSopenharmony_ci    0x95, 0x04,		/*  REPORT COUNT (4)			*/\
261f9f848faSopenharmony_ci    0x05, 0x01,		/*  USAGE PAGE (Generic Desktop)	*/\
262f9f848faSopenharmony_ci    0x09, 0x30,		/*  USAGE (X)				*/\
263f9f848faSopenharmony_ci    0x09, 0x31,		/*  USAGE (Y)				*/\
264f9f848faSopenharmony_ci    0x09, 0x33,		/*  USAGE (Rx)				*/\
265f9f848faSopenharmony_ci    0x09, 0x34,		/*  USAGE (Ry)				*/\
266f9f848faSopenharmony_ci    0x81, 0x02,		/*  INPUT (Data, Variable, Absolute)	*/\
267f9f848faSopenharmony_ci    /* Unused */\
268f9f848faSopenharmony_ci    0x75, 0x30,		/*  REPORT SIZE (48)			*/\
269f9f848faSopenharmony_ci    0x95, 0x01,		/*  REPORT COUNT (1)			*/\
270f9f848faSopenharmony_ci    0x81, 0x01,		/*  INPUT (Constant)			*/\
271f9f848faSopenharmony_ci    0xc0		/* END COLLECTION			*/\
272f9f848faSopenharmony_ci
273