xref: /freebsd/sys/dev/hid/hid.h (revision 1ffa5c63f449866e030b2130dfa5c633d9062074)
1*1ffa5c63SVladimir Kondratyev /* $FreeBSD$ */
2*1ffa5c63SVladimir Kondratyev /*-
3*1ffa5c63SVladimir Kondratyev  * SPDX-License-Identifier: BSD-2-Clause-NetBSD
4*1ffa5c63SVladimir Kondratyev  *
5*1ffa5c63SVladimir Kondratyev  * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
6*1ffa5c63SVladimir Kondratyev  * Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved.
7*1ffa5c63SVladimir Kondratyev  * Copyright (c) 1998 Lennart Augustsson. All rights reserved.
8*1ffa5c63SVladimir Kondratyev  *
9*1ffa5c63SVladimir Kondratyev  * Redistribution and use in source and binary forms, with or without
10*1ffa5c63SVladimir Kondratyev  * modification, are permitted provided that the following conditions
11*1ffa5c63SVladimir Kondratyev  * are met:
12*1ffa5c63SVladimir Kondratyev  * 1. Redistributions of source code must retain the above copyright
13*1ffa5c63SVladimir Kondratyev  *    notice, this list of conditions and the following disclaimer.
14*1ffa5c63SVladimir Kondratyev  * 2. Redistributions in binary form must reproduce the above copyright
15*1ffa5c63SVladimir Kondratyev  *    notice, this list of conditions and the following disclaimer in the
16*1ffa5c63SVladimir Kondratyev  *    documentation and/or other materials provided with the distribution.
17*1ffa5c63SVladimir Kondratyev  *
18*1ffa5c63SVladimir Kondratyev  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19*1ffa5c63SVladimir Kondratyev  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*1ffa5c63SVladimir Kondratyev  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*1ffa5c63SVladimir Kondratyev  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22*1ffa5c63SVladimir Kondratyev  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23*1ffa5c63SVladimir Kondratyev  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24*1ffa5c63SVladimir Kondratyev  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25*1ffa5c63SVladimir Kondratyev  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26*1ffa5c63SVladimir Kondratyev  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27*1ffa5c63SVladimir Kondratyev  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28*1ffa5c63SVladimir Kondratyev  * SUCH DAMAGE.
29*1ffa5c63SVladimir Kondratyev  */
30*1ffa5c63SVladimir Kondratyev 
31*1ffa5c63SVladimir Kondratyev #ifndef _USB_HID_H_
32*1ffa5c63SVladimir Kondratyev #define	_USB_HID_H_
33*1ffa5c63SVladimir Kondratyev 
34*1ffa5c63SVladimir Kondratyev #ifndef USB_GLOBAL_INCLUDE_FILE
35*1ffa5c63SVladimir Kondratyev #include <dev/usb/usb_endian.h>
36*1ffa5c63SVladimir Kondratyev #endif
37*1ffa5c63SVladimir Kondratyev 
38*1ffa5c63SVladimir Kondratyev #define	UR_GET_HID_DESCRIPTOR	0x06
39*1ffa5c63SVladimir Kondratyev #define	UDESC_HID		0x21
40*1ffa5c63SVladimir Kondratyev #define	UDESC_REPORT		0x22
41*1ffa5c63SVladimir Kondratyev #define	UDESC_PHYSICAL		0x23
42*1ffa5c63SVladimir Kondratyev #define	UR_SET_HID_DESCRIPTOR	0x07
43*1ffa5c63SVladimir Kondratyev #define	UR_GET_REPORT		0x01
44*1ffa5c63SVladimir Kondratyev #define	UR_SET_REPORT		0x09
45*1ffa5c63SVladimir Kondratyev #define	UR_GET_IDLE		0x02
46*1ffa5c63SVladimir Kondratyev #define	UR_SET_IDLE		0x0a
47*1ffa5c63SVladimir Kondratyev #define	UR_GET_PROTOCOL		0x03
48*1ffa5c63SVladimir Kondratyev #define	UR_SET_PROTOCOL		0x0b
49*1ffa5c63SVladimir Kondratyev 
50*1ffa5c63SVladimir Kondratyev struct usb_hid_descriptor {
51*1ffa5c63SVladimir Kondratyev 	uByte	bLength;
52*1ffa5c63SVladimir Kondratyev 	uByte	bDescriptorType;
53*1ffa5c63SVladimir Kondratyev 	uWord	bcdHID;
54*1ffa5c63SVladimir Kondratyev 	uByte	bCountryCode;
55*1ffa5c63SVladimir Kondratyev 	uByte	bNumDescriptors;
56*1ffa5c63SVladimir Kondratyev 	struct {
57*1ffa5c63SVladimir Kondratyev 		uByte	bDescriptorType;
58*1ffa5c63SVladimir Kondratyev 		uWord	wDescriptorLength;
59*1ffa5c63SVladimir Kondratyev 	}	descrs[1];
60*1ffa5c63SVladimir Kondratyev } __packed;
61*1ffa5c63SVladimir Kondratyev 
62*1ffa5c63SVladimir Kondratyev #define	USB_HID_DESCRIPTOR_SIZE(n) (9+((n)*3))
63*1ffa5c63SVladimir Kondratyev 
64*1ffa5c63SVladimir Kondratyev /* Usage pages */
65*1ffa5c63SVladimir Kondratyev #define	HUP_UNDEFINED		0x0000
66*1ffa5c63SVladimir Kondratyev #define	HUP_GENERIC_DESKTOP	0x0001
67*1ffa5c63SVladimir Kondratyev #define	HUP_SIMULATION		0x0002
68*1ffa5c63SVladimir Kondratyev #define	HUP_VR_CONTROLS		0x0003
69*1ffa5c63SVladimir Kondratyev #define	HUP_SPORTS_CONTROLS	0x0004
70*1ffa5c63SVladimir Kondratyev #define	HUP_GAMING_CONTROLS	0x0005
71*1ffa5c63SVladimir Kondratyev #define	HUP_KEYBOARD		0x0007
72*1ffa5c63SVladimir Kondratyev #define	HUP_LEDS		0x0008
73*1ffa5c63SVladimir Kondratyev #define	HUP_BUTTON		0x0009
74*1ffa5c63SVladimir Kondratyev #define	HUP_ORDINALS		0x000a
75*1ffa5c63SVladimir Kondratyev #define	HUP_TELEPHONY		0x000b
76*1ffa5c63SVladimir Kondratyev #define	HUP_CONSUMER		0x000c
77*1ffa5c63SVladimir Kondratyev #define	HUP_DIGITIZERS		0x000d
78*1ffa5c63SVladimir Kondratyev #define	HUP_PHYSICAL_IFACE	0x000e
79*1ffa5c63SVladimir Kondratyev #define	HUP_UNICODE		0x0010
80*1ffa5c63SVladimir Kondratyev #define	HUP_ALPHANUM_DISPLAY	0x0014
81*1ffa5c63SVladimir Kondratyev #define	HUP_MONITOR		0x0080
82*1ffa5c63SVladimir Kondratyev #define	HUP_MONITOR_ENUM_VAL	0x0081
83*1ffa5c63SVladimir Kondratyev #define	HUP_VESA_VC		0x0082
84*1ffa5c63SVladimir Kondratyev #define	HUP_VESA_CMD		0x0083
85*1ffa5c63SVladimir Kondratyev #define	HUP_POWER		0x0084
86*1ffa5c63SVladimir Kondratyev #define	HUP_BATTERY_SYSTEM	0x0085
87*1ffa5c63SVladimir Kondratyev #define	HUP_BARCODE_SCANNER	0x008b
88*1ffa5c63SVladimir Kondratyev #define	HUP_SCALE		0x008c
89*1ffa5c63SVladimir Kondratyev #define	HUP_CAMERA_CONTROL	0x0090
90*1ffa5c63SVladimir Kondratyev #define	HUP_ARCADE		0x0091
91*1ffa5c63SVladimir Kondratyev #define	HUP_MICROSOFT		0xff00
92*1ffa5c63SVladimir Kondratyev 
93*1ffa5c63SVladimir Kondratyev /* Usages, generic desktop */
94*1ffa5c63SVladimir Kondratyev #define	HUG_POINTER		0x0001
95*1ffa5c63SVladimir Kondratyev #define	HUG_MOUSE		0x0002
96*1ffa5c63SVladimir Kondratyev #define	HUG_JOYSTICK		0x0004
97*1ffa5c63SVladimir Kondratyev #define	HUG_GAME_PAD		0x0005
98*1ffa5c63SVladimir Kondratyev #define	HUG_KEYBOARD		0x0006
99*1ffa5c63SVladimir Kondratyev #define	HUG_KEYPAD		0x0007
100*1ffa5c63SVladimir Kondratyev #define	HUG_X			0x0030
101*1ffa5c63SVladimir Kondratyev #define	HUG_Y			0x0031
102*1ffa5c63SVladimir Kondratyev #define	HUG_Z			0x0032
103*1ffa5c63SVladimir Kondratyev #define	HUG_RX			0x0033
104*1ffa5c63SVladimir Kondratyev #define	HUG_RY			0x0034
105*1ffa5c63SVladimir Kondratyev #define	HUG_RZ			0x0035
106*1ffa5c63SVladimir Kondratyev #define	HUG_SLIDER		0x0036
107*1ffa5c63SVladimir Kondratyev #define	HUG_DIAL		0x0037
108*1ffa5c63SVladimir Kondratyev #define	HUG_WHEEL		0x0038
109*1ffa5c63SVladimir Kondratyev #define	HUG_HAT_SWITCH		0x0039
110*1ffa5c63SVladimir Kondratyev #define	HUG_COUNTED_BUFFER	0x003a
111*1ffa5c63SVladimir Kondratyev #define	HUG_BYTE_COUNT		0x003b
112*1ffa5c63SVladimir Kondratyev #define	HUG_MOTION_WAKEUP	0x003c
113*1ffa5c63SVladimir Kondratyev #define	HUG_VX			0x0040
114*1ffa5c63SVladimir Kondratyev #define	HUG_VY			0x0041
115*1ffa5c63SVladimir Kondratyev #define	HUG_VZ			0x0042
116*1ffa5c63SVladimir Kondratyev #define	HUG_VBRX		0x0043
117*1ffa5c63SVladimir Kondratyev #define	HUG_VBRY		0x0044
118*1ffa5c63SVladimir Kondratyev #define	HUG_VBRZ		0x0045
119*1ffa5c63SVladimir Kondratyev #define	HUG_VNO			0x0046
120*1ffa5c63SVladimir Kondratyev #define	HUG_TWHEEL		0x0048	/* M$ Wireless Intellimouse Wheel */
121*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_CONTROL	0x0080
122*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_POWER_DOWN	0x0081
123*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_SLEEP	0x0082
124*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_WAKEUP	0x0083
125*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_CONTEXT_MENU	0x0084
126*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MAIN_MENU	0x0085
127*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_APP_MENU	0x0086
128*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_HELP	0x0087
129*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_EXIT	0x0088
130*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_SELECT	0x0089
131*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_RIGHT	0x008a
132*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_LEFT	0x008b
133*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_UP	0x008c
134*1ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_DOWN	0x008d
135*1ffa5c63SVladimir Kondratyev #define	HUG_APPLE_EJECT		0x00b8
136*1ffa5c63SVladimir Kondratyev 
137*1ffa5c63SVladimir Kondratyev /* Usages Digitizers */
138*1ffa5c63SVladimir Kondratyev #define	HUD_UNDEFINED		0x0000
139*1ffa5c63SVladimir Kondratyev #define	HUD_DIGITIZER		0x0001
140*1ffa5c63SVladimir Kondratyev #define	HUD_PEN			0x0002
141*1ffa5c63SVladimir Kondratyev #define	HUD_TOUCHSCREEN		0x0004
142*1ffa5c63SVladimir Kondratyev #define	HUD_TOUCHPAD		0x0005
143*1ffa5c63SVladimir Kondratyev #define	HUD_CONFIG		0x000e
144*1ffa5c63SVladimir Kondratyev #define	HUD_FINGER		0x0022
145*1ffa5c63SVladimir Kondratyev #define	HUD_TIP_PRESSURE	0x0030
146*1ffa5c63SVladimir Kondratyev #define	HUD_BARREL_PRESSURE	0x0031
147*1ffa5c63SVladimir Kondratyev #define	HUD_IN_RANGE		0x0032
148*1ffa5c63SVladimir Kondratyev #define	HUD_TOUCH		0x0033
149*1ffa5c63SVladimir Kondratyev #define	HUD_UNTOUCH		0x0034
150*1ffa5c63SVladimir Kondratyev #define	HUD_TAP			0x0035
151*1ffa5c63SVladimir Kondratyev #define	HUD_QUALITY		0x0036
152*1ffa5c63SVladimir Kondratyev #define	HUD_DATA_VALID		0x0037
153*1ffa5c63SVladimir Kondratyev #define	HUD_TRANSDUCER_INDEX	0x0038
154*1ffa5c63SVladimir Kondratyev #define	HUD_TABLET_FKEYS	0x0039
155*1ffa5c63SVladimir Kondratyev #define	HUD_PROGRAM_CHANGE_KEYS	0x003a
156*1ffa5c63SVladimir Kondratyev #define	HUD_BATTERY_STRENGTH	0x003b
157*1ffa5c63SVladimir Kondratyev #define	HUD_INVERT		0x003c
158*1ffa5c63SVladimir Kondratyev #define	HUD_X_TILT		0x003d
159*1ffa5c63SVladimir Kondratyev #define	HUD_Y_TILT		0x003e
160*1ffa5c63SVladimir Kondratyev #define	HUD_AZIMUTH		0x003f
161*1ffa5c63SVladimir Kondratyev #define	HUD_ALTITUDE		0x0040
162*1ffa5c63SVladimir Kondratyev #define	HUD_TWIST		0x0041
163*1ffa5c63SVladimir Kondratyev #define	HUD_TIP_SWITCH		0x0042
164*1ffa5c63SVladimir Kondratyev #define	HUD_SEC_TIP_SWITCH	0x0043
165*1ffa5c63SVladimir Kondratyev #define	HUD_BARREL_SWITCH	0x0044
166*1ffa5c63SVladimir Kondratyev #define	HUD_ERASER		0x0045
167*1ffa5c63SVladimir Kondratyev #define	HUD_TABLET_PICK		0x0046
168*1ffa5c63SVladimir Kondratyev #define	HUD_CONFIDENCE		0x0047
169*1ffa5c63SVladimir Kondratyev #define	HUD_WIDTH		0x0048
170*1ffa5c63SVladimir Kondratyev #define	HUD_HEIGHT		0x0049
171*1ffa5c63SVladimir Kondratyev #define	HUD_CONTACTID		0x0051
172*1ffa5c63SVladimir Kondratyev #define	HUD_INPUT_MODE		0x0052
173*1ffa5c63SVladimir Kondratyev #define	HUD_DEVICE_INDEX	0x0053
174*1ffa5c63SVladimir Kondratyev #define	HUD_CONTACTCOUNT	0x0054
175*1ffa5c63SVladimir Kondratyev #define	HUD_CONTACT_MAX		0x0055
176*1ffa5c63SVladimir Kondratyev #define	HUD_SCAN_TIME		0x0056
177*1ffa5c63SVladimir Kondratyev #define	HUD_SURFACE_SWITCH	0x0057
178*1ffa5c63SVladimir Kondratyev #define	HUD_BUTTONS_SWITCH	0x0058
179*1ffa5c63SVladimir Kondratyev #define	HUD_BUTTON_TYPE		0x0059
180*1ffa5c63SVladimir Kondratyev #define	HUD_LATENCY_MODE	0x0060
181*1ffa5c63SVladimir Kondratyev 
182*1ffa5c63SVladimir Kondratyev /* Usages, Consumer */
183*1ffa5c63SVladimir Kondratyev #define	HUC_AC_PAN		0x0238
184*1ffa5c63SVladimir Kondratyev 
185*1ffa5c63SVladimir Kondratyev #define	HID_USAGE2(p,u) (((p) << 16) | (u))
186*1ffa5c63SVladimir Kondratyev 
187*1ffa5c63SVladimir Kondratyev #define	UHID_INPUT_REPORT 0x01
188*1ffa5c63SVladimir Kondratyev #define	UHID_OUTPUT_REPORT 0x02
189*1ffa5c63SVladimir Kondratyev #define	UHID_FEATURE_REPORT 0x03
190*1ffa5c63SVladimir Kondratyev 
191*1ffa5c63SVladimir Kondratyev /* Bits in the input/output/feature items */
192*1ffa5c63SVladimir Kondratyev #define	HIO_CONST	0x001
193*1ffa5c63SVladimir Kondratyev #define	HIO_VARIABLE	0x002
194*1ffa5c63SVladimir Kondratyev #define	HIO_RELATIVE	0x004
195*1ffa5c63SVladimir Kondratyev #define	HIO_WRAP	0x008
196*1ffa5c63SVladimir Kondratyev #define	HIO_NONLINEAR	0x010
197*1ffa5c63SVladimir Kondratyev #define	HIO_NOPREF	0x020
198*1ffa5c63SVladimir Kondratyev #define	HIO_NULLSTATE	0x040
199*1ffa5c63SVladimir Kondratyev #define	HIO_VOLATILE	0x080
200*1ffa5c63SVladimir Kondratyev #define	HIO_BUFBYTES	0x100
201*1ffa5c63SVladimir Kondratyev 
202*1ffa5c63SVladimir Kondratyev /* Units of Measure */
203*1ffa5c63SVladimir Kondratyev #define	HUM_CENTIMETER	0x11
204*1ffa5c63SVladimir Kondratyev #define	HUM_RADIAN	0x12
205*1ffa5c63SVladimir Kondratyev #define	HUM_INCH	0x13
206*1ffa5c63SVladimir Kondratyev #define	HUM_DEGREE	0x14
207*1ffa5c63SVladimir Kondratyev 
208*1ffa5c63SVladimir Kondratyev #if defined(_KERNEL) || defined(_STANDALONE)
209*1ffa5c63SVladimir Kondratyev struct usb_config_descriptor;
210*1ffa5c63SVladimir Kondratyev 
211*1ffa5c63SVladimir Kondratyev #define	HID_ITEM_MAXUSAGE	4
212*1ffa5c63SVladimir Kondratyev 
213*1ffa5c63SVladimir Kondratyev enum hid_kind {
214*1ffa5c63SVladimir Kondratyev 	hid_input, hid_output, hid_feature, hid_collection, hid_endcollection
215*1ffa5c63SVladimir Kondratyev };
216*1ffa5c63SVladimir Kondratyev 
217*1ffa5c63SVladimir Kondratyev struct hid_location {
218*1ffa5c63SVladimir Kondratyev 	uint32_t size;
219*1ffa5c63SVladimir Kondratyev 	uint32_t count;
220*1ffa5c63SVladimir Kondratyev 	uint32_t pos;
221*1ffa5c63SVladimir Kondratyev };
222*1ffa5c63SVladimir Kondratyev 
223*1ffa5c63SVladimir Kondratyev struct hid_item {
224*1ffa5c63SVladimir Kondratyev 	/* Global */
225*1ffa5c63SVladimir Kondratyev 	int32_t	_usage_page;
226*1ffa5c63SVladimir Kondratyev 	int32_t	logical_minimum;
227*1ffa5c63SVladimir Kondratyev 	int32_t	logical_maximum;
228*1ffa5c63SVladimir Kondratyev 	int32_t	physical_minimum;
229*1ffa5c63SVladimir Kondratyev 	int32_t	physical_maximum;
230*1ffa5c63SVladimir Kondratyev 	int32_t	unit_exponent;
231*1ffa5c63SVladimir Kondratyev 	int32_t	unit;
232*1ffa5c63SVladimir Kondratyev 	int32_t	report_ID;
233*1ffa5c63SVladimir Kondratyev 	/* Local */
234*1ffa5c63SVladimir Kondratyev 	int	nusages;
235*1ffa5c63SVladimir Kondratyev 	union {
236*1ffa5c63SVladimir Kondratyev 		int32_t	usage;
237*1ffa5c63SVladimir Kondratyev 		int32_t usages[HID_ITEM_MAXUSAGE];
238*1ffa5c63SVladimir Kondratyev 	};
239*1ffa5c63SVladimir Kondratyev 	int32_t	usage_minimum;
240*1ffa5c63SVladimir Kondratyev 	int32_t	usage_maximum;
241*1ffa5c63SVladimir Kondratyev 	int32_t	designator_index;
242*1ffa5c63SVladimir Kondratyev 	int32_t	designator_minimum;
243*1ffa5c63SVladimir Kondratyev 	int32_t	designator_maximum;
244*1ffa5c63SVladimir Kondratyev 	int32_t	string_index;
245*1ffa5c63SVladimir Kondratyev 	int32_t	string_minimum;
246*1ffa5c63SVladimir Kondratyev 	int32_t	string_maximum;
247*1ffa5c63SVladimir Kondratyev 	int32_t	set_delimiter;
248*1ffa5c63SVladimir Kondratyev 	/* Misc */
249*1ffa5c63SVladimir Kondratyev 	int32_t	collection;
250*1ffa5c63SVladimir Kondratyev 	int	collevel;
251*1ffa5c63SVladimir Kondratyev 	enum hid_kind kind;
252*1ffa5c63SVladimir Kondratyev 	uint32_t flags;
253*1ffa5c63SVladimir Kondratyev 	/* Location */
254*1ffa5c63SVladimir Kondratyev 	struct hid_location loc;
255*1ffa5c63SVladimir Kondratyev };
256*1ffa5c63SVladimir Kondratyev 
257*1ffa5c63SVladimir Kondratyev /* prototypes from "usb_hid.c" */
258*1ffa5c63SVladimir Kondratyev 
259*1ffa5c63SVladimir Kondratyev struct hid_data *hid_start_parse(const void *d, usb_size_t len, int kindset);
260*1ffa5c63SVladimir Kondratyev void	hid_end_parse(struct hid_data *s);
261*1ffa5c63SVladimir Kondratyev int	hid_get_item(struct hid_data *s, struct hid_item *h);
262*1ffa5c63SVladimir Kondratyev int	hid_report_size(const void *buf, usb_size_t len, enum hid_kind k,
263*1ffa5c63SVladimir Kondratyev 	    uint8_t *id);
264*1ffa5c63SVladimir Kondratyev int	hid_locate(const void *desc, usb_size_t size, int32_t usage,
265*1ffa5c63SVladimir Kondratyev 	    enum hid_kind kind, uint8_t index, struct hid_location *loc,
266*1ffa5c63SVladimir Kondratyev 	    uint32_t *flags, uint8_t *id);
267*1ffa5c63SVladimir Kondratyev int32_t hid_get_data(const uint8_t *buf, usb_size_t len,
268*1ffa5c63SVladimir Kondratyev 	    struct hid_location *loc);
269*1ffa5c63SVladimir Kondratyev uint32_t hid_get_data_unsigned(const uint8_t *buf, usb_size_t len,
270*1ffa5c63SVladimir Kondratyev 	    struct hid_location *loc);
271*1ffa5c63SVladimir Kondratyev void hid_put_data_unsigned(uint8_t *buf, usb_size_t len,
272*1ffa5c63SVladimir Kondratyev 	    struct hid_location *loc, unsigned int value);
273*1ffa5c63SVladimir Kondratyev int	hid_is_collection(const void *desc, usb_size_t size, int32_t usage);
274*1ffa5c63SVladimir Kondratyev struct usb_hid_descriptor *hid_get_descriptor_from_usb(
275*1ffa5c63SVladimir Kondratyev 	    struct usb_config_descriptor *cd,
276*1ffa5c63SVladimir Kondratyev 	    struct usb_interface_descriptor *id);
277*1ffa5c63SVladimir Kondratyev usb_error_t usbd_req_get_hid_desc(struct usb_device *udev, struct mtx *mtx,
278*1ffa5c63SVladimir Kondratyev 	    void **descp, uint16_t *sizep, struct malloc_type *mem,
279*1ffa5c63SVladimir Kondratyev 	    uint8_t iface_index);
280*1ffa5c63SVladimir Kondratyev int32_t	hid_item_resolution(struct hid_item *hi);
281*1ffa5c63SVladimir Kondratyev int	hid_is_mouse(const void *d_ptr, uint16_t d_len);
282*1ffa5c63SVladimir Kondratyev int	hid_is_keyboard(const void *d_ptr, uint16_t d_len);
283*1ffa5c63SVladimir Kondratyev #endif	/* _KERNEL || _STANDALONE */
284*1ffa5c63SVladimir Kondratyev #endif	/* _USB_HID_H_ */
285