hid.h revision 1.3
1/*	$OpenBSD: hid.h,v 1.3 2016/01/20 01:11:50 jcs Exp $ */
2/*	$NetBSD: hid.h,v 1.8 2002/07/11 21:14:25 augustss Exp $	*/
3/*	$FreeBSD: src/sys/dev/usb/hid.h,v 1.7 1999/11/17 22:33:40 n_hibma Exp $ */
4
5/*
6 * Copyright (c) 1998 The NetBSD Foundation, Inc.
7 * All rights reserved.
8 *
9 * This code is derived from software contributed to The NetBSD Foundation
10 * by Lennart Augustsson (lennart@augustsson.net) at
11 * Carlstedt Research & Technology.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
15 * are met:
16 * 1. Redistributions of source code must retain the above copyright
17 *    notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 *    notice, this list of conditions and the following disclaimer in the
20 *    documentation and/or other materials provided with the distribution.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
23 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
24 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
26 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 */
34
35#ifndef _HIDHID_H_
36#define _HIDHID_H_
37
38#ifdef _KERNEL
39
40enum hid_kind {
41	hid_input,
42	hid_output,
43	hid_feature,
44	hid_collection,
45	hid_endcollection,
46	hid_none
47};
48
49struct hid_location {
50	u_int32_t size;
51	u_int32_t count;
52	u_int32_t pos;
53};
54
55struct hid_item {
56	/* Global */
57	int32_t _usage_page;
58	int32_t logical_minimum;
59	int32_t logical_maximum;
60	int32_t physical_minimum;
61	int32_t physical_maximum;
62	int32_t unit_exponent;
63	int32_t unit;
64	int32_t report_ID;
65	/* Local */
66	int32_t usage;
67	int32_t usage_minimum;
68	int32_t usage_maximum;
69	int32_t designator_index;
70	int32_t designator_minimum;
71	int32_t designator_maximum;
72	int32_t string_index;
73	int32_t string_minimum;
74	int32_t string_maximum;
75	int32_t set_delimiter;
76	/* Misc */
77	int32_t collection;
78	int collevel;
79	enum hid_kind kind;
80	u_int32_t flags;
81	/* Location */
82	struct hid_location loc;
83	/* */
84	struct hid_item *next;
85};
86
87struct	hid_data *hid_start_parse(const void *, int, enum hid_kind);
88void	hid_end_parse(struct hid_data *);
89int	hid_get_item(struct hid_data *, struct hid_item *);
90int	hid_report_size(const void *, int, enum hid_kind, uint8_t);
91int	hid_locate(const void *, int, int32_t, uint8_t, enum hid_kind,
92	    struct hid_location *, uint32_t *);
93int32_t	hid_get_data(const uint8_t *buf, int, struct hid_location *);
94uint32_t hid_get_udata(const uint8_t *buf, int, struct hid_location *);
95int	hid_is_collection(const void *, int, uint8_t, int32_t);
96
97#endif /* _KERNEL */
98
99/* Usage pages */
100#define HUP_UNDEFINED		0x0000
101#define HUP_GENERIC_DESKTOP	0x0001
102#define HUP_SIMULATION		0x0002
103#define HUP_VR_CONTROLS		0x0003
104#define HUP_SPORTS_CONTROLS	0x0004
105#define HUP_GAMING_CONTROLS	0x0005
106#define HUP_KEYBOARD		0x0007
107#define HUP_LED			0x0008
108#define HUP_BUTTON		0x0009
109#define HUP_ORDINALS		0x000a
110#define HUP_TELEPHONY		0x000b
111#define HUP_CONSUMER		0x000c
112#define HUP_DIGITIZERS		0x000d
113#define HUP_PHYSICAL_IFACE	0x000e
114#define HUP_UNICODE		0x0010
115#define HUP_ALPHANUM_DISPLAY	0x0014
116#define HUP_MONITOR		0x0080
117#define HUP_MONITOR_ENUM_VAL	0x0081
118#define HUP_VESA_VC		0x0082
119#define HUP_VESA_CMD		0x0083
120#define HUP_POWER		0x0084
121#define HUP_BATTERY		0x0085
122#define HUP_BARCODE_SCANNER	0x008b
123#define HUP_SCALE		0x008c
124#define HUP_CAMERA_CONTROL	0x0090
125#define HUP_ARCADE		0x0091
126#define HUP_APPLE		0x00ff
127#define HUP_MICROSOFT		0xff00
128
129/* Usages, Power Device */
130#define HUP_INAME		0x0001
131#define HUP_PRESENT_STATUS	0x0002
132#define HUP_CHANGED_STATUS	0x0003
133#define HUP_UPS			0x0004
134#define HUP_POWER_SUPPLY	0x0005
135#define HUP_BATTERY_SYSTEM	0x0010
136#define HUP_BATTERY_SYSTEM_ID	0x0011
137#define HUP_PD_BATTERY		0x0012
138#define HUP_BATTERY_ID		0x0013
139#define HUP_CHARGER		0x0014
140#define HUP_CHARGER_ID		0x0015
141#define HUP_POWER_CONVERTER	0x0016
142#define HUP_POWER_CONVERTER_ID	0x0017
143#define HUP_OUTLET_SYSTEM	0x0018
144#define HUP_OUTLET_SYSTEM_ID	0x0019
145#define HUP_INPUT		0x001a
146#define HUP_INPUT_ID		0x001b
147#define HUP_OUTPUT		0x001c
148#define HUP_OUTPUT_ID		0x001d
149#define HUP_FLOW		0x001e
150#define HUP_FLOW_ID		0x001f
151#define HUP_OUTLET		0x0020
152#define HUP_OUTLET_ID		0x0021
153#define HUP_GANG		0x0022
154#define HUP_GANG_ID		0x0023
155#define HUP_POWER_SUMMARY	0x0024
156#define HUP_POWER_SUMMARY_ID	0x0025
157#define HUP_VOLTAGE		0x0030
158#define HUP_CURRENT		0x0031
159#define HUP_FREQUENCY		0x0032
160#define HUP_APPARENT_POWER	0x0033
161#define HUP_ACTIVE_POWER	0x0034
162#define HUP_PERCENT_LOAD	0x0035
163#define HUP_TEMPERATURE		0x0036
164#define HUP_HUMIDITY		0x0037
165#define HUP_BADCOUNT		0x0038
166#define HUP_CONFIG_VOLTAGE	0x0040
167#define HUP_CONFIG_CURRENT	0x0041
168#define HUP_CONFIG_FREQUENCY	0x0042
169#define HUP_CONFIG_APP_POWER	0x0043
170#define HUP_CONFIG_ACT_POWER	0x0044
171#define HUP_CONFIG_PERCENT_LOAD	0x0045
172#define HUP_CONFIG_TEMPERATURE	0x0046
173#define HUP_CONFIG_HUMIDITY	0x0047
174#define HUP_SWITCHON_CONTROL	0x0050
175#define HUP_SWITCHOFF_CONTROL	0x0051
176#define HUP_TOGGLE_CONTROL	0x0052
177#define HUP_LOW_VOLT_TRANSF	0x0053
178#define HUP_HIGH_VOLT_TRANSF	0x0054
179#define HUP_DELAYBEFORE_REBOOT	0x0055
180#define HUP_DELAYBEFORE_STARTUP	0x0056
181#define HUP_DELAYBEFORE_SHUTDWN	0x0057
182#define HUP_TEST		0x0058
183#define HUP_MODULE_RESET	0x0059
184#define HUP_AUDIBLE_ALRM_CTL	0x005a
185#define HUP_PRESENT		0x0060
186#define HUP_GOOD		0x0061
187#define HUP_INTERNAL_FAILURE	0x0062
188#define HUP_PD_VOLT_OUTOF_RANGE	0x0063
189#define HUP_FREQ_OUTOFRANGE	0x0064
190#define HUP_OVERLOAD		0x0065
191#define HUP_OVERCHARGED		0x0066
192#define HUP_OVERTEMPERATURE	0x0067
193#define HUP_SHUTDOWN_REQUESTED	0x0068
194#define HUP_SHUTDOWN_IMMINENT	0x0069
195#define HUP_SWITCH_ON_OFF	0x006b
196#define HUP_SWITCHABLE		0x006c
197#define HUP_USED		0x006d
198#define HUP_BOOST		0x006e
199#define HUP_BUCK		0x006f
200#define HUP_INITIALIZED		0x0070
201#define HUP_TESTED		0x0071
202#define HUP_AWAITING_POWER	0x0072
203#define HUP_COMMUNICATION_LOST	0x0073
204#define HUP_IMANUFACTURER	0x00fd
205#define HUP_IPRODUCT		0x00fe
206#define HUP_ISERIALNUMBER	0x00ff
207
208/* Usages, Battery */
209#define HUB_SMB_BATTERY_MODE	0x0001
210#define HUB_SMB_BATTERY_STATUS	0x0002
211#define HUB_SMB_ALARM_WARNING	0x0003
212#define HUB_SMB_CHARGER_MODE	0x0004
213#define HUB_SMB_CHARGER_STATUS	0x0005
214#define HUB_SMB_CHARGER_SPECINF	0x0006
215#define HUB_SMB_SELECTR_STATE	0x0007
216#define HUB_SMB_SELECTR_PRESETS	0x0008
217#define HUB_SMB_SELECTR_INFO	0x0009
218#define HUB_SMB_OPT_MFGFUNC1	0x0010
219#define HUB_SMB_OPT_MFGFUNC2	0x0011
220#define HUB_SMB_OPT_MFGFUNC3	0x0012
221#define HUB_SMB_OPT_MFGFUNC4	0x0013
222#define HUB_SMB_OPT_MFGFUNC5	0x0014
223#define HUB_CONNECTIONTOSMBUS	0x0015
224#define HUB_OUTPUT_CONNECTION	0x0016
225#define HUB_CHARGER_CONNECTION	0x0017
226#define HUB_BATTERY_INSERTION	0x0018
227#define HUB_USENEXT		0x0019
228#define HUB_OKTOUSE		0x001a
229#define HUB_BATTERY_SUPPORTED	0x001b
230#define HUB_SELECTOR_REVISION	0x001c
231#define HUB_CHARGING_INDICATOR	0x001d
232#define HUB_MANUFACTURER_ACCESS	0x0028
233#define HUB_REM_CAPACITY_LIM	0x0029
234#define HUB_REM_TIME_LIM	0x002a
235#define HUB_ATRATE		0x002b
236#define HUB_CAPACITY_MODE	0x002c
237#define HUB_BCAST_TO_CHARGER	0x002d
238#define HUB_PRIMARY_BATTERY	0x002e
239#define HUB_CHANGE_CONTROLLER	0x002f
240#define HUB_TERMINATE_CHARGE	0x0040
241#define HUB_TERMINATE_DISCHARGE	0x0041
242#define HUB_BELOW_REM_CAP_LIM	0x0042
243#define HUB_REM_TIME_LIM_EXP	0x0043
244#define HUB_CHARGING		0x0044
245#define HUB_DISCHARGING		0x0045
246#define HUB_FULLY_CHARGED	0x0046
247#define HUB_FULLY_DISCHARGED	0x0047
248#define HUB_CONDITIONING_FLAG	0x0048
249#define HUB_ATRATE_OK		0x0049
250#define HUB_SMB_ERROR_CODE	0x004a
251#define HUB_NEED_REPLACEMENT	0x004b
252#define HUB_ATRATE_TIMETOFULL	0x0060
253#define HUB_ATRATE_TIMETOEMPTY	0x0061
254#define HUB_AVERAGE_CURRENT	0x0062
255#define HUB_MAXERROR		0x0063
256#define HUB_REL_STATEOF_CHARGE	0x0064
257#define HUB_ABS_STATEOF_CHARGE	0x0065
258#define HUB_REM_CAPACITY	0x0066
259#define HUB_FULLCHARGE_CAPACITY	0x0067
260#define HUB_RUNTIMETO_EMPTY	0x0068
261#define HUB_AVERAGETIMETO_EMPTY	0x0069
262#define HUB_AVERAGETIMETO_FULL	0x006a
263#define HUB_CYCLECOUNT		0x006b
264#define HUB_BATTPACKMODEL_LEVEL	0x0080
265#define HUB_INTERNAL_CHARGE_CTL	0x0081
266#define HUB_PRIMARY_BATTERY_SUP	0x0082
267#define HUB_DESIGN_CAPACITY	0x0083
268#define HUB_SPECIFICATION_INFO	0x0084
269#define HUB_MANUFACTURER_DATE	0x0085
270#define HUB_SERIAL_NUMBER	0x0086
271#define HUB_IMANUFACTURERNAME	0x0087
272#define HUB_IDEVICENAME		0x0088
273#define HUB_IDEVICECHEMISTERY	0x0089
274#define HUB_MANUFACTURERDATA	0x008a
275#define HUB_RECHARGABLE		0x008b
276#define HUB_WARN_CAPACITY_LIM	0x008c
277#define HUB_CAPACITY_GRANUL1	0x008d
278#define HUB_CAPACITY_GRANUL2	0x008e
279#define HUB_IOEM_INFORMATION	0x008f
280#define HUB_INHIBIT_CHARGE	0x00c0
281#define HUB_ENABLE_POLLING	0x00c1
282#define HUB_RESTORE_TO_ZERO	0x00c2
283#define HUB_AC_PRESENT		0x00d0
284#define HUB_BATTERY_PRESENT	0x00d1
285#define HUB_POWER_FAIL		0x00d2
286#define HUB_ALARM_INHIBITED	0x00d3
287#define HUB_THERMISTOR_UNDRANGE	0x00d4
288#define HUB_THERMISTOR_HOT	0x00d5
289#define HUB_THERMISTOR_COLD	0x00d6
290#define HUB_THERMISTOR_OVERANGE	0x00d7
291#define HUB_BS_VOLT_OUTOF_RANGE	0x00d8
292#define HUB_BS_CURR_OUTOF_RANGE	0x00d9
293#define HUB_BS_CURR_NOT_REGULTD	0x00da
294#define HUB_BS_VOLT_NOT_REGULTD	0x00db
295#define HUB_MASTER_MODE		0x00dc
296#define HUB_CHARGER_SELECTR_SUP	0x00f0
297#define HUB_CHARGER_SPEC	0x00f1
298#define HUB_LEVEL2		0x00f2
299#define HUB_LEVEL3		0x00f3
300
301/* Usages, generic desktop */
302#define HUG_POINTER		0x0001
303#define HUG_MOUSE		0x0002
304#define HUG_FN_KEY		0x0003
305#define HUG_JOYSTICK		0x0004
306#define HUG_GAME_PAD		0x0005
307#define HUG_KEYBOARD		0x0006
308#define HUG_KEYPAD		0x0007
309#define HUG_X			0x0030
310#define HUG_Y			0x0031
311#define HUG_Z			0x0032
312#define HUG_RX			0x0033
313#define HUG_RY			0x0034
314#define HUG_RZ			0x0035
315#define HUG_SLIDER		0x0036
316#define HUG_DIAL		0x0037
317#define HUG_WHEEL		0x0038
318#define HUG_HAT_SWITCH		0x0039
319#define HUG_COUNTED_BUFFER	0x003a
320#define HUG_BYTE_COUNT		0x003b
321#define HUG_MOTION_WAKEUP	0x003c
322#define HUG_VX			0x0040
323#define HUG_VY			0x0041
324#define HUG_VZ			0x0042
325#define HUG_VBRX		0x0043
326#define HUG_VBRY		0x0044
327#define HUG_VBRZ		0x0045
328#define HUG_VNO			0x0046
329#define HUG_TWHEEL		0x0048
330#define HUG_SYSTEM_CONTROL	0x0080
331#define HUG_SYSTEM_POWER_DOWN	0x0081
332#define HUG_SYSTEM_SLEEP	0x0082
333#define HUG_SYSTEM_WAKEUP	0x0083
334#define HUG_SYSTEM_CONTEXT_MENU	0x0084
335#define HUG_SYSTEM_MAIN_MENU	0x0085
336#define HUG_SYSTEM_APP_MENU	0x0086
337#define HUG_SYSTEM_MENU_HELP	0x0087
338#define HUG_SYSTEM_MENU_EXIT	0x0088
339#define HUG_SYSTEM_MENU_SELECT	0x0089
340#define HUG_SYSTEM_MENU_RIGHT	0x008a
341#define HUG_SYSTEM_MENU_LEFT	0x008b
342#define HUG_SYSTEM_MENU_UP	0x008c
343#define HUG_SYSTEM_MENU_DOWN	0x008d
344
345/* Usages, Digitizers */
346#define HUD_UNDEFINED		0x0000
347#define HUD_DIGITIZER		0x0001
348#define HUD_PEN			0x0002
349#define HUD_TOUCHSCREEN		0x0004
350#define HUD_TOUCHPAD		0x0005
351#define HUD_FINGER		0x0022
352#define HUD_TIP_PRESSURE	0x0030
353#define HUD_BARREL_PRESSURE	0x0031
354#define HUD_IN_RANGE		0x0032
355#define HUD_TOUCH		0x0033
356#define HUD_UNTOUCH		0x0034
357#define HUD_TAP			0x0035
358#define HUD_QUALITY		0x0036
359#define HUD_DATA_VALID		0x0037
360#define HUD_TRANSDUCER_INDEX	0x0038
361#define HUD_TABLET_FKEYS	0x0039
362#define HUD_PROGRAM_CHANGE_KEYS	0x003a
363#define HUD_BATTERY_STRENGTH	0x003b
364#define HUD_INVERT		0x003c
365#define HUD_X_TILT		0x003d
366#define HUD_Y_TILT		0x003e
367#define HUD_AZIMUTH		0x003f
368#define HUD_ALTITUDE		0x0040
369#define HUD_TWIST		0x0041
370#define HUD_TIP_SWITCH		0x0042
371#define HUD_SEC_TIP_SWITCH	0x0043
372#define HUD_BARREL_SWITCH	0x0044
373#define HUD_ERASER		0x0045
374#define HUD_TABLET_PICK		0x0046
375
376/* Usages, LED */
377#define HUL_NUM_LOCK		0x0001
378#define HUL_CAPS_LOCK		0x0002
379#define HUL_SCROLL_LOCK		0x0003
380#define HUL_COMPOSE		0x0004
381#define HUL_KANA		0x0005
382
383/* Usages, Consumer */
384#define HUC_AC_PAN		0x0238
385
386#define HID_USAGE2(p, u) (((p) << 16) | u)
387#define HID_GET_USAGE(u) ((u) & 0xffff)
388#define HID_GET_USAGE_PAGE(u) (((u) >> 16) & 0xffff)
389
390#define HCOLL_PHYSICAL		0
391#define HCOLL_APPLICATION	1
392#define HCOLL_LOGICAL		2
393
394/* Bits in the input/output/feature items */
395#define HIO_CONST	0x001
396#define HIO_VARIABLE	0x002
397#define HIO_RELATIVE	0x004
398#define HIO_WRAP	0x008
399#define HIO_NONLINEAR	0x010
400#define HIO_NOPREF	0x020
401#define HIO_NULLSTATE	0x040
402#define HIO_VOLATILE	0x080
403#define HIO_BUFBYTES	0x100
404
405/* Valid values for the country codes */
406#define	HCC_UNDEFINED	0x00
407#define	HCC_MAX		0x23
408
409#endif /* _HIDHID_H_ */
410