xref: /freebsd/sys/dev/hid/hid.h (revision be75951af1ec2d69d34a8701700b9bfd2a50679e)
11ffa5c63SVladimir Kondratyev /* $FreeBSD$ */
21ffa5c63SVladimir Kondratyev /*-
31ffa5c63SVladimir Kondratyev  * SPDX-License-Identifier: BSD-2-Clause-NetBSD
41ffa5c63SVladimir Kondratyev  *
51ffa5c63SVladimir Kondratyev  * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
61ffa5c63SVladimir Kondratyev  * Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved.
71ffa5c63SVladimir Kondratyev  * Copyright (c) 1998 Lennart Augustsson. All rights reserved.
81ffa5c63SVladimir Kondratyev  *
91ffa5c63SVladimir Kondratyev  * Redistribution and use in source and binary forms, with or without
101ffa5c63SVladimir Kondratyev  * modification, are permitted provided that the following conditions
111ffa5c63SVladimir Kondratyev  * are met:
121ffa5c63SVladimir Kondratyev  * 1. Redistributions of source code must retain the above copyright
131ffa5c63SVladimir Kondratyev  *    notice, this list of conditions and the following disclaimer.
141ffa5c63SVladimir Kondratyev  * 2. Redistributions in binary form must reproduce the above copyright
151ffa5c63SVladimir Kondratyev  *    notice, this list of conditions and the following disclaimer in the
161ffa5c63SVladimir Kondratyev  *    documentation and/or other materials provided with the distribution.
171ffa5c63SVladimir Kondratyev  *
181ffa5c63SVladimir Kondratyev  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
191ffa5c63SVladimir Kondratyev  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
201ffa5c63SVladimir Kondratyev  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
211ffa5c63SVladimir Kondratyev  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
221ffa5c63SVladimir Kondratyev  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
231ffa5c63SVladimir Kondratyev  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
241ffa5c63SVladimir Kondratyev  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
251ffa5c63SVladimir Kondratyev  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
261ffa5c63SVladimir Kondratyev  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
271ffa5c63SVladimir Kondratyev  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
281ffa5c63SVladimir Kondratyev  * SUCH DAMAGE.
291ffa5c63SVladimir Kondratyev  */
301ffa5c63SVladimir Kondratyev 
3167de2db2SVladimir Kondratyev #ifndef _HID_HID_H_
3267de2db2SVladimir Kondratyev #define	_HID_HID_H_
331ffa5c63SVladimir Kondratyev 
341ffa5c63SVladimir Kondratyev /* Usage pages */
351ffa5c63SVladimir Kondratyev #define	HUP_UNDEFINED		0x0000
361ffa5c63SVladimir Kondratyev #define	HUP_GENERIC_DESKTOP	0x0001
371ffa5c63SVladimir Kondratyev #define	HUP_SIMULATION		0x0002
381ffa5c63SVladimir Kondratyev #define	HUP_VR_CONTROLS		0x0003
391ffa5c63SVladimir Kondratyev #define	HUP_SPORTS_CONTROLS	0x0004
401ffa5c63SVladimir Kondratyev #define	HUP_GAMING_CONTROLS	0x0005
411ffa5c63SVladimir Kondratyev #define	HUP_KEYBOARD		0x0007
421ffa5c63SVladimir Kondratyev #define	HUP_LEDS		0x0008
431ffa5c63SVladimir Kondratyev #define	HUP_BUTTON		0x0009
441ffa5c63SVladimir Kondratyev #define	HUP_ORDINALS		0x000a
451ffa5c63SVladimir Kondratyev #define	HUP_TELEPHONY		0x000b
461ffa5c63SVladimir Kondratyev #define	HUP_CONSUMER		0x000c
471ffa5c63SVladimir Kondratyev #define	HUP_DIGITIZERS		0x000d
481ffa5c63SVladimir Kondratyev #define	HUP_PHYSICAL_IFACE	0x000e
491ffa5c63SVladimir Kondratyev #define	HUP_UNICODE		0x0010
501ffa5c63SVladimir Kondratyev #define	HUP_ALPHANUM_DISPLAY	0x0014
511ffa5c63SVladimir Kondratyev #define	HUP_MONITOR		0x0080
521ffa5c63SVladimir Kondratyev #define	HUP_MONITOR_ENUM_VAL	0x0081
531ffa5c63SVladimir Kondratyev #define	HUP_VESA_VC		0x0082
541ffa5c63SVladimir Kondratyev #define	HUP_VESA_CMD		0x0083
551ffa5c63SVladimir Kondratyev #define	HUP_POWER		0x0084
561ffa5c63SVladimir Kondratyev #define	HUP_BATTERY_SYSTEM	0x0085
571ffa5c63SVladimir Kondratyev #define	HUP_BARCODE_SCANNER	0x008b
581ffa5c63SVladimir Kondratyev #define	HUP_SCALE		0x008c
591ffa5c63SVladimir Kondratyev #define	HUP_CAMERA_CONTROL	0x0090
601ffa5c63SVladimir Kondratyev #define	HUP_ARCADE		0x0091
611ffa5c63SVladimir Kondratyev #define	HUP_MICROSOFT		0xff00
621ffa5c63SVladimir Kondratyev 
631ffa5c63SVladimir Kondratyev /* Usages, generic desktop */
641ffa5c63SVladimir Kondratyev #define	HUG_POINTER		0x0001
651ffa5c63SVladimir Kondratyev #define	HUG_MOUSE		0x0002
661ffa5c63SVladimir Kondratyev #define	HUG_JOYSTICK		0x0004
671ffa5c63SVladimir Kondratyev #define	HUG_GAME_PAD		0x0005
681ffa5c63SVladimir Kondratyev #define	HUG_KEYBOARD		0x0006
691ffa5c63SVladimir Kondratyev #define	HUG_KEYPAD		0x0007
7019758786SVladimir Kondratyev #define	HUG_MULTIAXIS_CNTROLLER	0x0008
711ffa5c63SVladimir Kondratyev #define	HUG_X			0x0030
721ffa5c63SVladimir Kondratyev #define	HUG_Y			0x0031
731ffa5c63SVladimir Kondratyev #define	HUG_Z			0x0032
741ffa5c63SVladimir Kondratyev #define	HUG_RX			0x0033
751ffa5c63SVladimir Kondratyev #define	HUG_RY			0x0034
761ffa5c63SVladimir Kondratyev #define	HUG_RZ			0x0035
771ffa5c63SVladimir Kondratyev #define	HUG_SLIDER		0x0036
781ffa5c63SVladimir Kondratyev #define	HUG_DIAL		0x0037
791ffa5c63SVladimir Kondratyev #define	HUG_WHEEL		0x0038
801ffa5c63SVladimir Kondratyev #define	HUG_HAT_SWITCH		0x0039
811ffa5c63SVladimir Kondratyev #define	HUG_COUNTED_BUFFER	0x003a
821ffa5c63SVladimir Kondratyev #define	HUG_BYTE_COUNT		0x003b
831ffa5c63SVladimir Kondratyev #define	HUG_MOTION_WAKEUP	0x003c
841ffa5c63SVladimir Kondratyev #define	HUG_VX			0x0040
851ffa5c63SVladimir Kondratyev #define	HUG_VY			0x0041
861ffa5c63SVladimir Kondratyev #define	HUG_VZ			0x0042
871ffa5c63SVladimir Kondratyev #define	HUG_VBRX		0x0043
881ffa5c63SVladimir Kondratyev #define	HUG_VBRY		0x0044
891ffa5c63SVladimir Kondratyev #define	HUG_VBRZ		0x0045
901ffa5c63SVladimir Kondratyev #define	HUG_VNO			0x0046
911ffa5c63SVladimir Kondratyev #define	HUG_TWHEEL		0x0048	/* M$ Wireless Intellimouse Wheel */
921ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_CONTROL	0x0080
931ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_POWER_DOWN	0x0081
941ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_SLEEP	0x0082
951ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_WAKEUP	0x0083
961ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_CONTEXT_MENU	0x0084
971ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MAIN_MENU	0x0085
981ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_APP_MENU	0x0086
991ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_HELP	0x0087
1001ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_EXIT	0x0088
1011ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_SELECT	0x0089
1021ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_RIGHT	0x008a
1031ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_LEFT	0x008b
1041ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_UP	0x008c
1051ffa5c63SVladimir Kondratyev #define	HUG_SYSTEM_MENU_DOWN	0x008d
10619758786SVladimir Kondratyev #define	HUG_SYSTEM_POWER_UP	0x008e
10719758786SVladimir Kondratyev #define	HUG_SYSTEM_RESTART	0x008f
10819758786SVladimir Kondratyev #define	HUG_D_PAD_UP		0x0090
10919758786SVladimir Kondratyev #define	HUG_D_PAD_DOWN		0x0091
11019758786SVladimir Kondratyev #define	HUG_D_PAD_RIGHT		0x0092
11119758786SVladimir Kondratyev #define	HUG_D_PAD_LEFT		0x0093
1121ffa5c63SVladimir Kondratyev #define	HUG_APPLE_EJECT		0x00b8
1131ffa5c63SVladimir Kondratyev 
1141ffa5c63SVladimir Kondratyev /* Usages Digitizers */
1151ffa5c63SVladimir Kondratyev #define	HUD_UNDEFINED		0x0000
1161ffa5c63SVladimir Kondratyev #define	HUD_DIGITIZER		0x0001
1171ffa5c63SVladimir Kondratyev #define	HUD_PEN			0x0002
1181ffa5c63SVladimir Kondratyev #define	HUD_TOUCHSCREEN		0x0004
1191ffa5c63SVladimir Kondratyev #define	HUD_TOUCHPAD		0x0005
1201ffa5c63SVladimir Kondratyev #define	HUD_CONFIG		0x000e
1211ffa5c63SVladimir Kondratyev #define	HUD_FINGER		0x0022
1221ffa5c63SVladimir Kondratyev #define	HUD_TIP_PRESSURE	0x0030
1231ffa5c63SVladimir Kondratyev #define	HUD_BARREL_PRESSURE	0x0031
1241ffa5c63SVladimir Kondratyev #define	HUD_IN_RANGE		0x0032
1251ffa5c63SVladimir Kondratyev #define	HUD_TOUCH		0x0033
1261ffa5c63SVladimir Kondratyev #define	HUD_UNTOUCH		0x0034
1271ffa5c63SVladimir Kondratyev #define	HUD_TAP			0x0035
1281ffa5c63SVladimir Kondratyev #define	HUD_QUALITY		0x0036
1291ffa5c63SVladimir Kondratyev #define	HUD_DATA_VALID		0x0037
1301ffa5c63SVladimir Kondratyev #define	HUD_TRANSDUCER_INDEX	0x0038
1311ffa5c63SVladimir Kondratyev #define	HUD_TABLET_FKEYS	0x0039
1321ffa5c63SVladimir Kondratyev #define	HUD_PROGRAM_CHANGE_KEYS	0x003a
1331ffa5c63SVladimir Kondratyev #define	HUD_BATTERY_STRENGTH	0x003b
1341ffa5c63SVladimir Kondratyev #define	HUD_INVERT		0x003c
1351ffa5c63SVladimir Kondratyev #define	HUD_X_TILT		0x003d
1361ffa5c63SVladimir Kondratyev #define	HUD_Y_TILT		0x003e
1371ffa5c63SVladimir Kondratyev #define	HUD_AZIMUTH		0x003f
1381ffa5c63SVladimir Kondratyev #define	HUD_ALTITUDE		0x0040
1391ffa5c63SVladimir Kondratyev #define	HUD_TWIST		0x0041
1401ffa5c63SVladimir Kondratyev #define	HUD_TIP_SWITCH		0x0042
1411ffa5c63SVladimir Kondratyev #define	HUD_SEC_TIP_SWITCH	0x0043
1421ffa5c63SVladimir Kondratyev #define	HUD_BARREL_SWITCH	0x0044
1431ffa5c63SVladimir Kondratyev #define	HUD_ERASER		0x0045
1441ffa5c63SVladimir Kondratyev #define	HUD_TABLET_PICK		0x0046
1451ffa5c63SVladimir Kondratyev #define	HUD_CONFIDENCE		0x0047
1461ffa5c63SVladimir Kondratyev #define	HUD_WIDTH		0x0048
1471ffa5c63SVladimir Kondratyev #define	HUD_HEIGHT		0x0049
1481ffa5c63SVladimir Kondratyev #define	HUD_CONTACTID		0x0051
1491ffa5c63SVladimir Kondratyev #define	HUD_INPUT_MODE		0x0052
1501ffa5c63SVladimir Kondratyev #define	HUD_DEVICE_INDEX	0x0053
1511ffa5c63SVladimir Kondratyev #define	HUD_CONTACTCOUNT	0x0054
1521ffa5c63SVladimir Kondratyev #define	HUD_CONTACT_MAX		0x0055
1531ffa5c63SVladimir Kondratyev #define	HUD_SCAN_TIME		0x0056
1541ffa5c63SVladimir Kondratyev #define	HUD_SURFACE_SWITCH	0x0057
1551ffa5c63SVladimir Kondratyev #define	HUD_BUTTONS_SWITCH	0x0058
1561ffa5c63SVladimir Kondratyev #define	HUD_BUTTON_TYPE		0x0059
15719758786SVladimir Kondratyev #define	HUD_SEC_BARREL_SWITCH	0x005a
1581ffa5c63SVladimir Kondratyev #define	HUD_LATENCY_MODE	0x0060
1591ffa5c63SVladimir Kondratyev 
1601ffa5c63SVladimir Kondratyev /* Usages, Consumer */
16119758786SVladimir Kondratyev #define	HUC_CONTROL		0x0001
16219758786SVladimir Kondratyev #define	HUC_HEADPHONE		0x0005
1631ffa5c63SVladimir Kondratyev #define	HUC_AC_PAN		0x0238
1641ffa5c63SVladimir Kondratyev 
1651ffa5c63SVladimir Kondratyev #define	HID_USAGE2(p,u)		(((p) << 16) | (u))
16619758786SVladimir Kondratyev #define	HID_GET_USAGE(u)	((u) & 0xffff)
16719758786SVladimir Kondratyev #define	HID_GET_USAGE_PAGE(u)	(((u) >> 16) & 0xffff)
1681ffa5c63SVladimir Kondratyev 
16919758786SVladimir Kondratyev #define	HID_INPUT_REPORT	0x01
17019758786SVladimir Kondratyev #define	HID_OUTPUT_REPORT	0x02
17119758786SVladimir Kondratyev #define	HID_FEATURE_REPORT	0x03
1721ffa5c63SVladimir Kondratyev 
1731ffa5c63SVladimir Kondratyev /* Bits in the input/output/feature items */
1741ffa5c63SVladimir Kondratyev #define	HIO_CONST	0x001
1751ffa5c63SVladimir Kondratyev #define	HIO_VARIABLE	0x002
1761ffa5c63SVladimir Kondratyev #define	HIO_RELATIVE	0x004
1771ffa5c63SVladimir Kondratyev #define	HIO_WRAP	0x008
1781ffa5c63SVladimir Kondratyev #define	HIO_NONLINEAR	0x010
1791ffa5c63SVladimir Kondratyev #define	HIO_NOPREF	0x020
1801ffa5c63SVladimir Kondratyev #define	HIO_NULLSTATE	0x040
1811ffa5c63SVladimir Kondratyev #define	HIO_VOLATILE	0x080
1821ffa5c63SVladimir Kondratyev #define	HIO_BUFBYTES	0x100
1831ffa5c63SVladimir Kondratyev 
1841ffa5c63SVladimir Kondratyev /* Units of Measure */
1851ffa5c63SVladimir Kondratyev #define	HUM_CENTIMETER	0x11
1861ffa5c63SVladimir Kondratyev #define	HUM_RADIAN	0x12
1871ffa5c63SVladimir Kondratyev #define	HUM_INCH	0x13
188*be75951aSVladimir Kondratyev #define	HUM_INCH_EGALAX	0x33
1891ffa5c63SVladimir Kondratyev #define	HUM_DEGREE	0x14
1901ffa5c63SVladimir Kondratyev 
1911ffa5c63SVladimir Kondratyev #if defined(_KERNEL) || defined(_STANDALONE)
1921ffa5c63SVladimir Kondratyev 
193db2f5123SWarner Losh #define	HID_ITEM_MAXUSAGE	8
19419758786SVladimir Kondratyev #define	HID_MAX_AUTO_QUIRK	8	/* maximum number of dynamic quirks */
19519758786SVladimir Kondratyev #define	HID_PNP_ID_SIZE		20	/* includes null terminator */
19619758786SVladimir Kondratyev 
1979be6b22dSVladimir Kondratyev /* Share unit number pool between uhid and hidraw */
1989be6b22dSVladimir Kondratyev extern devclass_t hidraw_devclass;
1999be6b22dSVladimir Kondratyev 
20019758786SVladimir Kondratyev /* Declare global HID debug variable. */
20119758786SVladimir Kondratyev extern int hid_debug;
20219758786SVladimir Kondratyev 
20319758786SVladimir Kondratyev /* Check if HID debugging is enabled. */
20419758786SVladimir Kondratyev #ifdef HID_DEBUG_VAR
20519758786SVladimir Kondratyev #ifdef HID_DEBUG
20619758786SVladimir Kondratyev #define DPRINTFN(n,fmt,...) do {			\
20719758786SVladimir Kondratyev 	if ((HID_DEBUG_VAR) >= (n)) {			\
20819758786SVladimir Kondratyev 		printf("%s: " fmt,			\
20919758786SVladimir Kondratyev 		    __FUNCTION__ ,##__VA_ARGS__);	\
21019758786SVladimir Kondratyev 	}						\
21119758786SVladimir Kondratyev } while (0)
21219758786SVladimir Kondratyev #define DPRINTF(...)	DPRINTFN(1, __VA_ARGS__)
21319758786SVladimir Kondratyev #else
21419758786SVladimir Kondratyev #define DPRINTF(...)	do { } while (0)
21519758786SVladimir Kondratyev #define DPRINTFN(...)	do { } while (0)
21619758786SVladimir Kondratyev #endif
21719758786SVladimir Kondratyev #endif
21819758786SVladimir Kondratyev 
21919758786SVladimir Kondratyev /* Declare parent SYSCTL HID node. */
22019758786SVladimir Kondratyev #ifdef SYSCTL_DECL
22119758786SVladimir Kondratyev SYSCTL_DECL(_hw_hid);
22219758786SVladimir Kondratyev #endif
22319758786SVladimir Kondratyev 
22419758786SVladimir Kondratyev typedef uint32_t hid_size_t;
22519758786SVladimir Kondratyev 
22619758786SVladimir Kondratyev #define	HID_IN_POLLING_MODE()	(SCHEDULER_STOPPED() || kdb_active)
2271ffa5c63SVladimir Kondratyev 
2281ffa5c63SVladimir Kondratyev enum hid_kind {
2291ffa5c63SVladimir Kondratyev 	hid_input, hid_output, hid_feature, hid_collection, hid_endcollection
2301ffa5c63SVladimir Kondratyev };
2311ffa5c63SVladimir Kondratyev 
2321ffa5c63SVladimir Kondratyev struct hid_location {
2331ffa5c63SVladimir Kondratyev 	uint32_t size;
2341ffa5c63SVladimir Kondratyev 	uint32_t count;
2351ffa5c63SVladimir Kondratyev 	uint32_t pos;
2361ffa5c63SVladimir Kondratyev };
2371ffa5c63SVladimir Kondratyev 
2381ffa5c63SVladimir Kondratyev struct hid_item {
2391ffa5c63SVladimir Kondratyev 	/* Global */
2401ffa5c63SVladimir Kondratyev 	int32_t	_usage_page;
2411ffa5c63SVladimir Kondratyev 	int32_t	logical_minimum;
2421ffa5c63SVladimir Kondratyev 	int32_t	logical_maximum;
2431ffa5c63SVladimir Kondratyev 	int32_t	physical_minimum;
2441ffa5c63SVladimir Kondratyev 	int32_t	physical_maximum;
2451ffa5c63SVladimir Kondratyev 	int32_t	unit_exponent;
2461ffa5c63SVladimir Kondratyev 	int32_t	unit;
2471ffa5c63SVladimir Kondratyev 	int32_t	report_ID;
2481ffa5c63SVladimir Kondratyev 	/* Local */
2491ffa5c63SVladimir Kondratyev 	int	nusages;
2501ffa5c63SVladimir Kondratyev 	union {
2511ffa5c63SVladimir Kondratyev 		int32_t	usage;
2521ffa5c63SVladimir Kondratyev 		int32_t usages[HID_ITEM_MAXUSAGE];
2531ffa5c63SVladimir Kondratyev 	};
2541ffa5c63SVladimir Kondratyev 	int32_t	usage_minimum;
2551ffa5c63SVladimir Kondratyev 	int32_t	usage_maximum;
2561ffa5c63SVladimir Kondratyev 	int32_t	designator_index;
2571ffa5c63SVladimir Kondratyev 	int32_t	designator_minimum;
2581ffa5c63SVladimir Kondratyev 	int32_t	designator_maximum;
2591ffa5c63SVladimir Kondratyev 	int32_t	string_index;
2601ffa5c63SVladimir Kondratyev 	int32_t	string_minimum;
2611ffa5c63SVladimir Kondratyev 	int32_t	string_maximum;
2621ffa5c63SVladimir Kondratyev 	int32_t	set_delimiter;
2631ffa5c63SVladimir Kondratyev 	/* Misc */
2641ffa5c63SVladimir Kondratyev 	int32_t	collection;
2651ffa5c63SVladimir Kondratyev 	int	collevel;
2661ffa5c63SVladimir Kondratyev 	enum hid_kind kind;
2671ffa5c63SVladimir Kondratyev 	uint32_t flags;
2681ffa5c63SVladimir Kondratyev 	/* Location */
2691ffa5c63SVladimir Kondratyev 	struct hid_location loc;
2701ffa5c63SVladimir Kondratyev };
2711ffa5c63SVladimir Kondratyev 
27219758786SVladimir Kondratyev struct hid_absinfo {
27319758786SVladimir Kondratyev 	int32_t min;
27419758786SVladimir Kondratyev 	int32_t max;
27519758786SVladimir Kondratyev 	int32_t res;
27619758786SVladimir Kondratyev };
27719758786SVladimir Kondratyev 
27819758786SVladimir Kondratyev struct hid_device_info {
27919758786SVladimir Kondratyev 	char		name[80];
28019758786SVladimir Kondratyev 	char		serial[80];
28119758786SVladimir Kondratyev 	char		idPnP[HID_PNP_ID_SIZE];
28219758786SVladimir Kondratyev 	uint16_t	idBus;
28319758786SVladimir Kondratyev 	uint16_t	idVendor;
28419758786SVladimir Kondratyev 	uint16_t	idProduct;
28519758786SVladimir Kondratyev 	uint16_t	idVersion;
28619758786SVladimir Kondratyev 	hid_size_t	rdescsize;	/* Report descriptor size */
28719758786SVladimir Kondratyev 	uint8_t		autoQuirk[HID_MAX_AUTO_QUIRK];
28819758786SVladimir Kondratyev };
28919758786SVladimir Kondratyev 
29019758786SVladimir Kondratyev struct hid_rdesc_info {
29119758786SVladimir Kondratyev 	void		*data;
29219758786SVladimir Kondratyev 	hid_size_t	len;
29319758786SVladimir Kondratyev 	hid_size_t	isize;
29419758786SVladimir Kondratyev 	hid_size_t	osize;
29519758786SVladimir Kondratyev 	hid_size_t	fsize;
29619758786SVladimir Kondratyev 	uint8_t		iid;
29719758786SVladimir Kondratyev 	uint8_t		oid;
29819758786SVladimir Kondratyev 	uint8_t		fid;
29919758786SVladimir Kondratyev 	/* Max sizes for HID requests supported by transport backend */
30019758786SVladimir Kondratyev 	hid_size_t	rdsize;
30119758786SVladimir Kondratyev 	hid_size_t	wrsize;
30219758786SVladimir Kondratyev 	hid_size_t	grsize;
30319758786SVladimir Kondratyev 	hid_size_t	srsize;
30419758786SVladimir Kondratyev };
30519758786SVladimir Kondratyev 
30619758786SVladimir Kondratyev typedef void hid_intr_t(void *context, void *data, hid_size_t len);
30719758786SVladimir Kondratyev typedef bool hid_test_quirk_t(const struct hid_device_info *dev_info,
30819758786SVladimir Kondratyev     uint16_t quirk);
30919758786SVladimir Kondratyev 
31019758786SVladimir Kondratyev extern hid_test_quirk_t *hid_test_quirk_p;
31119758786SVladimir Kondratyev 
3121ffa5c63SVladimir Kondratyev /* prototypes from "usb_hid.c" */
3131ffa5c63SVladimir Kondratyev 
31419758786SVladimir Kondratyev struct hid_data *hid_start_parse(const void *d, hid_size_t len, int kindset);
3151ffa5c63SVladimir Kondratyev void	hid_end_parse(struct hid_data *s);
3161ffa5c63SVladimir Kondratyev int	hid_get_item(struct hid_data *s, struct hid_item *h);
31719758786SVladimir Kondratyev int	hid_report_size(const void *buf, hid_size_t len, enum hid_kind k,
31819758786SVladimir Kondratyev 	    uint8_t id);
31919758786SVladimir Kondratyev int	hid_report_size_max(const void *buf, hid_size_t len, enum hid_kind k,
3201ffa5c63SVladimir Kondratyev 	    uint8_t *id);
32119758786SVladimir Kondratyev int	hid_locate(const void *desc, hid_size_t size, int32_t usage,
3221ffa5c63SVladimir Kondratyev 	    enum hid_kind kind, uint8_t index, struct hid_location *loc,
3231ffa5c63SVladimir Kondratyev 	    uint32_t *flags, uint8_t *id);
32419758786SVladimir Kondratyev int32_t hid_get_data(const uint8_t *buf, hid_size_t len,
3251ffa5c63SVladimir Kondratyev 	    struct hid_location *loc);
32619758786SVladimir Kondratyev uint32_t hid_get_udata(const uint8_t *buf, hid_size_t len,
3271ffa5c63SVladimir Kondratyev 	    struct hid_location *loc);
32819758786SVladimir Kondratyev void	hid_put_udata(uint8_t *buf, hid_size_t len,
3291ffa5c63SVladimir Kondratyev 	    struct hid_location *loc, unsigned int value);
33019758786SVladimir Kondratyev int	hid_is_collection(const void *desc, hid_size_t size, int32_t usage);
3311ffa5c63SVladimir Kondratyev int32_t	hid_item_resolution(struct hid_item *hi);
3321ffa5c63SVladimir Kondratyev int	hid_is_mouse(const void *d_ptr, uint16_t d_len);
3331ffa5c63SVladimir Kondratyev int	hid_is_keyboard(const void *d_ptr, uint16_t d_len);
33419758786SVladimir Kondratyev bool	hid_test_quirk(const struct hid_device_info *dev_info, uint16_t quirk);
33519758786SVladimir Kondratyev int	hid_add_dynamic_quirk(struct hid_device_info *dev_info,
33619758786SVladimir Kondratyev 	    uint16_t quirk);
33719758786SVladimir Kondratyev void	hid_quirk_unload(void *arg);
338961a3535SVladimir Kondratyev 
339961a3535SVladimir Kondratyev int	hid_get_rdesc(device_t, void *, hid_size_t);
340961a3535SVladimir Kondratyev int	hid_read(device_t, void *, hid_size_t, hid_size_t *);
341961a3535SVladimir Kondratyev int	hid_write(device_t, const void *, hid_size_t);
342961a3535SVladimir Kondratyev int	hid_get_report(device_t, void *, hid_size_t, hid_size_t *, uint8_t,
343961a3535SVladimir Kondratyev 	    uint8_t);
344961a3535SVladimir Kondratyev int	hid_set_report(device_t, const void *, hid_size_t, uint8_t, uint8_t);
345961a3535SVladimir Kondratyev int	hid_set_idle(device_t, uint16_t, uint8_t);
346961a3535SVladimir Kondratyev int	hid_set_protocol(device_t, uint16_t);
3471ffa5c63SVladimir Kondratyev #endif	/* _KERNEL || _STANDALONE */
34867de2db2SVladimir Kondratyev #endif	/* _HID_HID_H_ */
349