aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/include/generic-netbsd/dev/hid/hid.h
blob: 4d3d74714eab92d3195d41b758827caaa4df9d0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
/*	$NetBSD: hid.h,v 1.6 2020/03/11 16:05:31 msaitoh Exp $	*/
/*	$FreeBSD: src/sys/dev/usb/hid.h,v 1.7 1999/11/17 22:33:40 n_hibma Exp $ */

/*
 * Copyright (c) 1998 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by Lennart Augustsson (lennart@augustsson.net) at
 * Carlstedt Research & Technology.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _HIDHID_H_
#define _HIDHID_H_

#if defined(_KERNEL) || defined(_RUMPKERNEL)

enum hid_kind {
	hid_input,
	hid_output,
	hid_feature,
	hid_collection,
	hid_endcollection,
	hid_none
};

struct hid_location {
	uint32_t size;
	uint32_t count;
	uint32_t pos;
};

struct hid_item {
	/* Global */
	uint32_t _usage_page;
	int32_t logical_minimum;
	int32_t logical_maximum;
	int32_t physical_minimum;
	int32_t physical_maximum;
	uint32_t unit_exponent;
	uint32_t unit;
	uint32_t report_ID;
	/* Local */
	uint32_t usage;
	uint32_t usage_minimum;
	uint32_t usage_maximum;
	uint32_t designator_index;
	uint32_t designator_minimum;
	uint32_t designator_maximum;
	uint32_t string_index;
	uint32_t string_minimum;
	uint32_t string_maximum;
	uint32_t set_delimiter;
	/* Misc */
	uint32_t collection;
	int collevel;
	enum hid_kind kind;
	uint32_t flags;
	/* Location */
	struct hid_location loc;
	/* */
	struct hid_item *next;
};

struct hid_data *hid_start_parse(const void *, int, enum hid_kind);
void hid_end_parse(struct hid_data *);
int hid_get_item(struct hid_data *, struct hid_item *);
int hid_report_size(const void *, int, enum hid_kind, uint8_t);
int hid_locate(const void *, int, uint32_t, uint8_t, enum hid_kind,
    struct hid_location *, uint32_t *);
long hid_get_data(const u_char *, const struct hid_location *);
u_long hid_get_udata(const u_char *, const struct hid_location *);
int hid_is_collection(const void *, int, uint8_t, uint32_t);

#endif /* _KERNEL || _RUMPKERNEL */

/* Usage pages */
#define HUP_UNDEFINED		0x0000U
#define HUP_GENERIC_DESKTOP	0x0001U
#define HUP_SIMULATION		0x0002U
#define HUP_VR_CONTROLS		0x0003U
#define HUP_SPORTS_CONTROLS	0x0004U
#define HUP_GAMING_CONTROLS	0x0005U
#define HUP_KEYBOARD		0x0007U
#define HUP_LEDS		0x0008U
#define HUP_BUTTON		0x0009U
#define HUP_ORDINALS		0x000aU
#define HUP_TELEPHONY		0x000bU
#define HUP_CONSUMER		0x000cU
#define HUP_DIGITIZERS		0x000dU
#define HUP_PHYSICAL_IFACE	0x000eU
#define HUP_UNICODE		0x0010U
#define HUP_ALPHANUM_DISPLAY	0x0014U
#define HUP_MONITOR		0x0080U
#define HUP_MONITOR_ENUM_VAL	0x0081U
#define HUP_VESA_VC		0x0082U
#define HUP_VESA_CMD		0x0083U
#define HUP_POWER		0x0084U
#define HUP_BATTERY		0x0085U
#define HUP_BARCODE_SCANNER	0x008bU
#define HUP_SCALE		0x008cU
#define HUP_CAMERA_CONTROL	0x0090U
#define HUP_ARCADE		0x0091U
#define HUP_VENDOR		0x00ffU
#define HUP_FIDO		0xf1d0U
#define HUP_MICROSOFT		0xff00U
/* XXX compat */
#define HUP_APPLE		0x00ffU
#define HUP_WACOM		0xff00U

/* Usages, Power Device */
#define HUP_INAME		0x0001U
#define HUP_PRESENT_STATUS	0x0002U
#define HUP_CHANGED_STATUS	0x0003U
#define HUP_UPS			0x0004U
#define HUP_POWER_SUPPLY	0x0005U
#define HUP_BATTERY_SYSTEM	0x0010U
#define HUP_BATTERY_SYSTEM_ID	0x0011U
#define HUP_PD_BATTERY		0x0012U
#define HUP_BATTERY_ID		0x0013U
#define HUP_CHARGER		0x0014U
#define HUP_CHARGER_ID		0x0015U
#define HUP_POWER_CONVERTER	0x0016U
#define HUP_POWER_CONVERTER_ID	0x0017U
#define HUP_OUTLET_SYSTEM	0x0018U
#define HUP_OUTLET_SYSTEM_ID	0x0019U
#define HUP_INPUT		0x001aU
#define HUP_INPUT_ID		0x001bU
#define HUP_OUTPUT		0x001cU
#define HUP_OUTPUT_ID		0x001dU
#define HUP_FLOW		0x001eU
#define HUP_FLOW_ID		0x001fU
#define HUP_OUTLET		0x0020U
#define HUP_OUTLET_ID		0x0021U
#define HUP_GANG		0x0022U
#define HUP_GANG_ID		0x0023U
#define HUP_POWER_SUMMARY	0x0024U
#define HUP_POWER_SUMMARY_ID	0x0025U
#define HUP_VOLTAGE		0x0030U
#define HUP_CURRENT		0x0031U
#define HUP_FREQUENCY		0x0032U
#define HUP_APPARENT_POWER	0x0033U
#define HUP_ACTIVE_POWER	0x0034U
#define HUP_PERCENT_LOAD	0x0035U
#define HUP_TEMPERATURE		0x0036U
#define HUP_HUMIDITY		0x0037U
#define HUP_BADCOUNT		0x0038U
#define HUP_CONFIG_VOLTAGE	0x0040U
#define HUP_CONFIG_CURRENT	0x0041U
#define HUP_CONFIG_FREQUENCY	0x0042U
#define HUP_CONFIG_APP_POWER	0x0043U
#define HUP_CONFIG_ACT_POWER	0x0044U
#define HUP_CONFIG_PERCENT_LOAD	0x0045U
#define HUP_CONFIG_TEMPERATURE	0x0046U
#define HUP_CONFIG_HUMIDITY	0x0047U
#define HUP_SWITCHON_CONTROL	0x0050U
#define HUP_SWITCHOFF_CONTROL	0x0051U
#define HUP_TOGGLE_CONTROL	0x0052U
#define HUP_LOW_VOLT_TRANSF	0x0053U
#define HUP_HIGH_VOLT_TRANSF	0x0054U
#define HUP_DELAYBEFORE_REBOOT	0x0055U
#define HUP_DELAYBEFORE_STARTUP	0x0056U
#define HUP_DELAYBEFORE_SHUTDWN	0x0057U
#define HUP_TEST		0x0058U
#define HUP_MODULE_RESET	0x0059U
#define HUP_AUDIBLE_ALRM_CTL	0x005aU
#define HUP_PRESENT		0x0060U
#define HUP_GOOD		0x0061U
#define HUP_INTERNAL_FAILURE	0x0062U
#define HUP_PD_VOLT_OUTOF_RANGE	0x0063U
#define HUP_FREQ_OUTOFRANGE	0x0064U
#define HUP_OVERLOAD		0x0065U
#define HUP_OVERCHARGED		0x0066U
#define HUP_OVERTEMPERATURE	0x0067U
#define HUP_SHUTDOWN_REQUESTED	0x0068U
#define HUP_SHUTDOWN_IMMINENT	0x0069U
#define HUP_SWITCH_ON_OFF	0x006bU
#define HUP_SWITCHABLE		0x006cU
#define HUP_USED		0x006dU
#define HUP_BOOST		0x006eU
#define HUP_BUCK		0x006fU
#define HUP_INITIALIZED		0x0070U
#define HUP_TESTED		0x0071U
#define HUP_AWAITING_POWER	0x0072U
#define HUP_COMMUNICATION_LOST	0x0073U
#define HUP_IMANUFACTURER	0x00fdU
#define HUP_IPRODUCT		0x00feU
#define HUP_ISERIALNUMBER	0x00ffU

/* Usages, Battery */
#define HUB_SMB_BATTERY_MODE	0x0001U
#define HUB_SMB_BATTERY_STATUS	0x0002U
#define HUB_SMB_ALARM_WARNING	0x0003U
#define HUB_SMB_CHARGER_MODE	0x0004U
#define HUB_SMB_CHARGER_STATUS	0x0005U
#define HUB_SMB_CHARGER_SPECINF	0x0006U
#define HUB_SMB_SELECTR_STATE	0x0007U
#define HUB_SMB_SELECTR_PRESETS	0x0008U
#define HUB_SMB_SELECTR_INFO	0x0009U
#define HUB_SMB_OPT_MFGFUNC1	0x0010U
#define HUB_SMB_OPT_MFGFUNC2	0x0011U
#define HUB_SMB_OPT_MFGFUNC3	0x0012U
#define HUB_SMB_OPT_MFGFUNC4	0x0013U
#define HUB_SMB_OPT_MFGFUNC5	0x0014U
#define HUB_CONNECTIONTOSMBUS	0x0015U
#define HUB_OUTPUT_CONNECTION	0x0016U
#define HUB_CHARGER_CONNECTION	0x0017U
#define HUB_BATTERY_INSERTION	0x0018U
#define HUB_USENEXT		0x0019U
#define HUB_OKTOUSE		0x001aU
#define HUB_BATTERY_SUPPORTED	0x001bU
#define HUB_SELECTOR_REVISION	0x001cU
#define HUB_CHARGING_INDICATOR	0x001dU
#define HUB_MANUFACTURER_ACCESS	0x0028U
#define HUB_REM_CAPACITY_LIM	0x0029U
#define HUB_REM_TIME_LIM	0x002aU
#define HUB_ATRATE		0x002bU
#define HUB_CAPACITY_MODE	0x002cU
#define HUB_BCAST_TO_CHARGER	0x002dU
#define HUB_PRIMARY_BATTERY	0x002eU
#define HUB_CHANGE_CONTROLLER	0x002fU
#define HUB_TERMINATE_CHARGE	0x0040U
#define HUB_TERMINATE_DISCHARGE	0x0041U
#define HUB_BELOW_REM_CAP_LIM	0x0042U
#define HUB_REM_TIME_LIM_EXP	0x0043U
#define HUB_CHARGING		0x0044U
#define HUB_DISCHARGING		0x0045U
#define HUB_FULLY_CHARGED	0x0046U
#define HUB_FULLY_DISCHARGED	0x0047U
#define HUB_CONDITIONING_FLAG	0x0048U
#define HUB_ATRATE_OK		0x0049U
#define HUB_SMB_ERROR_CODE	0x004aU
#define HUB_NEED_REPLACEMENT	0x004bU
#define HUB_ATRATE_TIMETOFULL	0x0060U
#define HUB_ATRATE_TIMETOEMPTY	0x0061U
#define HUB_AVERAGE_CURRENT	0x0062U
#define HUB_MAXERROR		0x0063U
#define HUB_REL_STATEOF_CHARGE	0x0064U
#define HUB_ABS_STATEOF_CHARGE	0x0065U
#define HUB_REM_CAPACITY	0x0066U
#define HUB_FULLCHARGE_CAPACITY	0x0067U
#define HUB_RUNTIMETO_EMPTY	0x0068U
#define HUB_AVERAGETIMETO_EMPTY	0x0069U
#define HUB_AVERAGETIMETO_FULL	0x006aU
#define HUB_CYCLECOUNT		0x006bU
#define HUB_BATTPACKMODEL_LEVEL	0x0080U
#define HUB_INTERNAL_CHARGE_CTL	0x0081U
#define HUB_PRIMARY_BATTERY_SUP	0x0082U
#define HUB_DESIGN_CAPACITY	0x0083U
#define HUB_SPECIFICATION_INFO	0x0084U
#define HUB_MANUFACTURER_DATE	0x0085U
#define HUB_SERIAL_NUMBER	0x0086U
#define HUB_IMANUFACTURERNAME	0x0087U
#define HUB_IDEVICENAME		0x0088U
#define HUB_IDEVICECHEMISTERY	0x0089U
#define HUB_MANUFACTURERDATA	0x008aU
#define HUB_RECHARGABLE		0x008bU
#define HUB_WARN_CAPACITY_LIM	0x008cU
#define HUB_CAPACITY_GRANUL1	0x008dU
#define HUB_CAPACITY_GRANUL2	0x008eU
#define HUB_IOEM_INFORMATION	0x008fU
#define HUB_INHIBIT_CHARGE	0x00c0U
#define HUB_ENABLE_POLLING	0x00c1U
#define HUB_RESTORE_TO_ZERO	0x00c2U
#define HUB_AC_PRESENT		0x00d0U
#define HUB_BATTERY_PRESENT	0x00d1U
#define HUB_POWER_FAIL		0x00d2U
#define HUB_ALARM_INHIBITED	0x00d3U
#define HUB_THERMISTOR_UNDRANGE	0x00d4U
#define HUB_THERMISTOR_HOT	0x00d5U
#define HUB_THERMISTOR_COLD	0x00d6U
#define HUB_THERMISTOR_OVERANGE	0x00d7U
#define HUB_BS_VOLT_OUTOF_RANGE	0x00d8U
#define HUB_BS_CURR_OUTOF_RANGE	0x00d9U
#define HUB_BS_CURR_NOT_REGULTD	0x00daU
#define HUB_BS_VOLT_NOT_REGULTD	0x00dbU
#define HUB_MASTER_MODE		0x00dcU
#define HUB_CHARGER_SELECTR_SUP	0x00f0U
#define HUB_CHARGER_SPEC	0x00f1U
#define HUB_LEVEL2		0x00f2U
#define HUB_LEVEL3		0x00f3U

/* Usages, generic desktop */
#define HUG_POINTER		0x0001U
#define HUG_MOUSE		0x0002U
#define HUG_FN_KEY		0x0003U
#define HUG_JOYSTICK		0x0004U
#define HUG_GAME_PAD		0x0005U
#define HUG_KEYBOARD		0x0006U
#define HUG_KEYPAD		0x0007U
#define HUG_X			0x0030U
#define HUG_Y			0x0031U
#define HUG_Z			0x0032U
#define HUG_RX			0x0033U
#define HUG_RY			0x0034U
#define HUG_RZ			0x0035U
#define HUG_SLIDER		0x0036U
#define HUG_DIAL		0x0037U
#define HUG_WHEEL		0x0038U
#define HUG_HAT_SWITCH		0x0039U
#define HUG_COUNTED_BUFFER	0x003aU
#define HUG_BYTE_COUNT		0x003bU
#define HUG_MOTION_WAKEUP	0x003cU
#define HUG_VX			0x0040U
#define HUG_VY			0x0041U
#define HUG_VZ			0x0042U
#define HUG_VBRX		0x0043U
#define HUG_VBRY		0x0044U
#define HUG_VBRZ		0x0045U
#define HUG_VNO			0x0046U
#define HUG_TWHEEL		0x0048U
#define HUG_SYSTEM_CONTROL	0x0080U
#define HUG_SYSTEM_POWER_DOWN	0x0081U
#define HUG_SYSTEM_SLEEP	0x0082U
#define HUG_SYSTEM_WAKEUP	0x0083U
#define HUG_SYSTEM_CONTEXT_MENU	0x0084U
#define HUG_SYSTEM_MAIN_MENU	0x0085U
#define HUG_SYSTEM_APP_MENU	0x0086U
#define HUG_SYSTEM_MENU_HELP	0x0087U
#define HUG_SYSTEM_MENU_EXIT	0x0088U
#define HUG_SYSTEM_MENU_SELECT	0x0089U
#define HUG_SYSTEM_MENU_RIGHT	0x008aU
#define HUG_SYSTEM_MENU_LEFT	0x008bU
#define HUG_SYSTEM_MENU_UP	0x008cU
#define HUG_SYSTEM_MENU_DOWN	0x008dU

/* Usages, Digitizers */
#define HUD_UNDEFINED		0x0000U
#define HUD_DIGITIZER		0x0001U
#define HUD_PEN			0x0002U
#define HUD_TOUCH_SCREEN	0x0004U
#define HUD_TOUCHPAD		0x0005U
#define HUD_CONFIG		0x000eU
#define HUD_FINGER		0x0022U
#define HUD_TIP_PRESSURE	0x0030U
#define HUD_BARREL_PRESSURE	0x0031U
#define HUD_IN_RANGE		0x0032U
#define HUD_TOUCH		0x0033U
#define HUD_UNTOUCH		0x0034U
#define HUD_TAP			0x0035U
#define HUD_QUALITY		0x0036U
#define HUD_DATA_VALID		0x0037U
#define HUD_TRANSDUCER_INDEX	0x0038U
#define HUD_TABLET_FKEYS	0x0039U
#define HUD_PROGRAM_CHANGE_KEYS	0x003aU
#define HUD_BATTERY_STRENGTH	0x003bU
#define HUD_INVERT		0x003cU
#define HUD_X_TILT		0x003dU
#define HUD_Y_TILT		0x003eU
#define HUD_AZIMUTH		0x003fU
#define HUD_ALTITUDE		0x0040U
#define HUD_TWIST		0x0041U
#define HUD_TIP_SWITCH		0x0042U
#define HUD_SEC_TIP_SWITCH	0x0043U
#define HUD_BARREL_SWITCH	0x0044U
#define HUD_ERASER		0x0045U
#define HUD_TABLET_PICK		0x0046U
#define HUD_CONFIDENCE		0x0047U
#define HUD_WIDTH		0x0048U
#define HUD_HEIGHT		0x0049U
#define HUD_CONTACTID		0x0051U
#define HUD_INPUT_MODE		0x0052U
#define HUD_DEVICE_INDEX	0x0053U
#define HUD_CONTACTCOUNT	0x0054U
#define HUD_CONTACT_MAX		0x0055U
#define HUD_SCAN_TIME		0x0056U
#define HUD_BUTTON_TYPE		0x0059U

/* Usages, LED */
#define HUD_LED_NUM_LOCK	0x0001U
#define HUD_LED_CAPS_LOCK	0x0002U
#define HUD_LED_SCROLL_LOCK	0x0003U
#define HUD_LED_COMPOSE		0x0004U
#define HUD_LED_KANA		0x0005U

/* Usages, Consumer */
#define HUC_AC_PAN		0x0238U

/* Usages, FIDO */
#define HUF_U2FHID		0x0001U

#define HID_USAGE2(p, u) (((p) << 16) | u)
#define HID_GET_USAGE(u) ((u) & 0xffff)
#define HID_GET_USAGE_PAGE(u) (((u) >> 16) & 0xffff)

#define HCOLL_PHYSICAL		0
#define HCOLL_APPLICATION	1
#define HCOLL_LOGICAL		2

/* Bits in the input/output/feature items */
#define HIO_CONST	0x001
#define HIO_VARIABLE	0x002
#define HIO_RELATIVE	0x004
#define HIO_WRAP	0x008
#define HIO_NONLINEAR	0x010
#define HIO_NOPREF	0x020
#define HIO_NULLSTATE	0x040
#define HIO_VOLATILE	0x080
#define HIO_BUFBYTES	0x100

/* Valid values for the country codes */
#define	HCC_UNDEFINED	0x00
#define	HCC_MAX		0x23

#endif /* _HIDHID_H_ */