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