Home | History | Annotate | Line # | Download | only in hid
      1 /*	$NetBSD: hid.h,v 1.6 2020/03/11 16:05:31 msaitoh 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 (at) 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 	uint32_t _usage_page;
     57 	int32_t logical_minimum;
     58 	int32_t logical_maximum;
     59 	int32_t physical_minimum;
     60 	int32_t physical_maximum;
     61 	uint32_t unit_exponent;
     62 	uint32_t unit;
     63 	uint32_t report_ID;
     64 	/* Local */
     65 	uint32_t usage;
     66 	uint32_t usage_minimum;
     67 	uint32_t usage_maximum;
     68 	uint32_t designator_index;
     69 	uint32_t designator_minimum;
     70 	uint32_t designator_maximum;
     71 	uint32_t string_index;
     72 	uint32_t string_minimum;
     73 	uint32_t string_maximum;
     74 	uint32_t set_delimiter;
     75 	/* Misc */
     76 	uint32_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		0x0000U
    100 #define HUP_GENERIC_DESKTOP	0x0001U
    101 #define HUP_SIMULATION		0x0002U
    102 #define HUP_VR_CONTROLS		0x0003U
    103 #define HUP_SPORTS_CONTROLS	0x0004U
    104 #define HUP_GAMING_CONTROLS	0x0005U
    105 #define HUP_KEYBOARD		0x0007U
    106 #define HUP_LEDS		0x0008U
    107 #define HUP_BUTTON		0x0009U
    108 #define HUP_ORDINALS		0x000aU
    109 #define HUP_TELEPHONY		0x000bU
    110 #define HUP_CONSUMER		0x000cU
    111 #define HUP_DIGITIZERS		0x000dU
    112 #define HUP_PHYSICAL_IFACE	0x000eU
    113 #define HUP_UNICODE		0x0010U
    114 #define HUP_ALPHANUM_DISPLAY	0x0014U
    115 #define HUP_MONITOR		0x0080U
    116 #define HUP_MONITOR_ENUM_VAL	0x0081U
    117 #define HUP_VESA_VC		0x0082U
    118 #define HUP_VESA_CMD		0x0083U
    119 #define HUP_POWER		0x0084U
    120 #define HUP_BATTERY		0x0085U
    121 #define HUP_BARCODE_SCANNER	0x008bU
    122 #define HUP_SCALE		0x008cU
    123 #define HUP_CAMERA_CONTROL	0x0090U
    124 #define HUP_ARCADE		0x0091U
    125 #define HUP_VENDOR		0x00ffU
    126 #define HUP_FIDO		0xf1d0U
    127 #define HUP_MICROSOFT		0xff00U
    128 /* XXX compat */
    129 #define HUP_APPLE		0x00ffU
    130 #define HUP_WACOM		0xff00U
    131 
    132 /* Usages, Power Device */
    133 #define HUP_INAME		0x0001U
    134 #define HUP_PRESENT_STATUS	0x0002U
    135 #define HUP_CHANGED_STATUS	0x0003U
    136 #define HUP_UPS			0x0004U
    137 #define HUP_POWER_SUPPLY	0x0005U
    138 #define HUP_BATTERY_SYSTEM	0x0010U
    139 #define HUP_BATTERY_SYSTEM_ID	0x0011U
    140 #define HUP_PD_BATTERY		0x0012U
    141 #define HUP_BATTERY_ID		0x0013U
    142 #define HUP_CHARGER		0x0014U
    143 #define HUP_CHARGER_ID		0x0015U
    144 #define HUP_POWER_CONVERTER	0x0016U
    145 #define HUP_POWER_CONVERTER_ID	0x0017U
    146 #define HUP_OUTLET_SYSTEM	0x0018U
    147 #define HUP_OUTLET_SYSTEM_ID	0x0019U
    148 #define HUP_INPUT		0x001aU
    149 #define HUP_INPUT_ID		0x001bU
    150 #define HUP_OUTPUT		0x001cU
    151 #define HUP_OUTPUT_ID		0x001dU
    152 #define HUP_FLOW		0x001eU
    153 #define HUP_FLOW_ID		0x001fU
    154 #define HUP_OUTLET		0x0020U
    155 #define HUP_OUTLET_ID		0x0021U
    156 #define HUP_GANG		0x0022U
    157 #define HUP_GANG_ID		0x0023U
    158 #define HUP_POWER_SUMMARY	0x0024U
    159 #define HUP_POWER_SUMMARY_ID	0x0025U
    160 #define HUP_VOLTAGE		0x0030U
    161 #define HUP_CURRENT		0x0031U
    162 #define HUP_FREQUENCY		0x0032U
    163 #define HUP_APPARENT_POWER	0x0033U
    164 #define HUP_ACTIVE_POWER	0x0034U
    165 #define HUP_PERCENT_LOAD	0x0035U
    166 #define HUP_TEMPERATURE		0x0036U
    167 #define HUP_HUMIDITY		0x0037U
    168 #define HUP_BADCOUNT		0x0038U
    169 #define HUP_CONFIG_VOLTAGE	0x0040U
    170 #define HUP_CONFIG_CURRENT	0x0041U
    171 #define HUP_CONFIG_FREQUENCY	0x0042U
    172 #define HUP_CONFIG_APP_POWER	0x0043U
    173 #define HUP_CONFIG_ACT_POWER	0x0044U
    174 #define HUP_CONFIG_PERCENT_LOAD	0x0045U
    175 #define HUP_CONFIG_TEMPERATURE	0x0046U
    176 #define HUP_CONFIG_HUMIDITY	0x0047U
    177 #define HUP_SWITCHON_CONTROL	0x0050U
    178 #define HUP_SWITCHOFF_CONTROL	0x0051U
    179 #define HUP_TOGGLE_CONTROL	0x0052U
    180 #define HUP_LOW_VOLT_TRANSF	0x0053U
    181 #define HUP_HIGH_VOLT_TRANSF	0x0054U
    182 #define HUP_DELAYBEFORE_REBOOT	0x0055U
    183 #define HUP_DELAYBEFORE_STARTUP	0x0056U
    184 #define HUP_DELAYBEFORE_SHUTDWN	0x0057U
    185 #define HUP_TEST		0x0058U
    186 #define HUP_MODULE_RESET	0x0059U
    187 #define HUP_AUDIBLE_ALRM_CTL	0x005aU
    188 #define HUP_PRESENT		0x0060U
    189 #define HUP_GOOD		0x0061U
    190 #define HUP_INTERNAL_FAILURE	0x0062U
    191 #define HUP_PD_VOLT_OUTOF_RANGE	0x0063U
    192 #define HUP_FREQ_OUTOFRANGE	0x0064U
    193 #define HUP_OVERLOAD		0x0065U
    194 #define HUP_OVERCHARGED		0x0066U
    195 #define HUP_OVERTEMPERATURE	0x0067U
    196 #define HUP_SHUTDOWN_REQUESTED	0x0068U
    197 #define HUP_SHUTDOWN_IMMINENT	0x0069U
    198 #define HUP_SWITCH_ON_OFF	0x006bU
    199 #define HUP_SWITCHABLE		0x006cU
    200 #define HUP_USED		0x006dU
    201 #define HUP_BOOST		0x006eU
    202 #define HUP_BUCK		0x006fU
    203 #define HUP_INITIALIZED		0x0070U
    204 #define HUP_TESTED		0x0071U
    205 #define HUP_AWAITING_POWER	0x0072U
    206 #define HUP_COMMUNICATION_LOST	0x0073U
    207 #define HUP_IMANUFACTURER	0x00fdU
    208 #define HUP_IPRODUCT		0x00feU
    209 #define HUP_ISERIALNUMBER	0x00ffU
    210 
    211 /* Usages, Battery */
    212 #define HUB_SMB_BATTERY_MODE	0x0001U
    213 #define HUB_SMB_BATTERY_STATUS	0x0002U
    214 #define HUB_SMB_ALARM_WARNING	0x0003U
    215 #define HUB_SMB_CHARGER_MODE	0x0004U
    216 #define HUB_SMB_CHARGER_STATUS	0x0005U
    217 #define HUB_SMB_CHARGER_SPECINF	0x0006U
    218 #define HUB_SMB_SELECTR_STATE	0x0007U
    219 #define HUB_SMB_SELECTR_PRESETS	0x0008U
    220 #define HUB_SMB_SELECTR_INFO	0x0009U
    221 #define HUB_SMB_OPT_MFGFUNC1	0x0010U
    222 #define HUB_SMB_OPT_MFGFUNC2	0x0011U
    223 #define HUB_SMB_OPT_MFGFUNC3	0x0012U
    224 #define HUB_SMB_OPT_MFGFUNC4	0x0013U
    225 #define HUB_SMB_OPT_MFGFUNC5	0x0014U
    226 #define HUB_CONNECTIONTOSMBUS	0x0015U
    227 #define HUB_OUTPUT_CONNECTION	0x0016U
    228 #define HUB_CHARGER_CONNECTION	0x0017U
    229 #define HUB_BATTERY_INSERTION	0x0018U
    230 #define HUB_USENEXT		0x0019U
    231 #define HUB_OKTOUSE		0x001aU
    232 #define HUB_BATTERY_SUPPORTED	0x001bU
    233 #define HUB_SELECTOR_REVISION	0x001cU
    234 #define HUB_CHARGING_INDICATOR	0x001dU
    235 #define HUB_MANUFACTURER_ACCESS	0x0028U
    236 #define HUB_REM_CAPACITY_LIM	0x0029U
    237 #define HUB_REM_TIME_LIM	0x002aU
    238 #define HUB_ATRATE		0x002bU
    239 #define HUB_CAPACITY_MODE	0x002cU
    240 #define HUB_BCAST_TO_CHARGER	0x002dU
    241 #define HUB_PRIMARY_BATTERY	0x002eU
    242 #define HUB_CHANGE_CONTROLLER	0x002fU
    243 #define HUB_TERMINATE_CHARGE	0x0040U
    244 #define HUB_TERMINATE_DISCHARGE	0x0041U
    245 #define HUB_BELOW_REM_CAP_LIM	0x0042U
    246 #define HUB_REM_TIME_LIM_EXP	0x0043U
    247 #define HUB_CHARGING		0x0044U
    248 #define HUB_DISCHARGING		0x0045U
    249 #define HUB_FULLY_CHARGED	0x0046U
    250 #define HUB_FULLY_DISCHARGED	0x0047U
    251 #define HUB_CONDITIONING_FLAG	0x0048U
    252 #define HUB_ATRATE_OK		0x0049U
    253 #define HUB_SMB_ERROR_CODE	0x004aU
    254 #define HUB_NEED_REPLACEMENT	0x004bU
    255 #define HUB_ATRATE_TIMETOFULL	0x0060U
    256 #define HUB_ATRATE_TIMETOEMPTY	0x0061U
    257 #define HUB_AVERAGE_CURRENT	0x0062U
    258 #define HUB_MAXERROR		0x0063U
    259 #define HUB_REL_STATEOF_CHARGE	0x0064U
    260 #define HUB_ABS_STATEOF_CHARGE	0x0065U
    261 #define HUB_REM_CAPACITY	0x0066U
    262 #define HUB_FULLCHARGE_CAPACITY	0x0067U
    263 #define HUB_RUNTIMETO_EMPTY	0x0068U
    264 #define HUB_AVERAGETIMETO_EMPTY	0x0069U
    265 #define HUB_AVERAGETIMETO_FULL	0x006aU
    266 #define HUB_CYCLECOUNT		0x006bU
    267 #define HUB_BATTPACKMODEL_LEVEL	0x0080U
    268 #define HUB_INTERNAL_CHARGE_CTL	0x0081U
    269 #define HUB_PRIMARY_BATTERY_SUP	0x0082U
    270 #define HUB_DESIGN_CAPACITY	0x0083U
    271 #define HUB_SPECIFICATION_INFO	0x0084U
    272 #define HUB_MANUFACTURER_DATE	0x0085U
    273 #define HUB_SERIAL_NUMBER	0x0086U
    274 #define HUB_IMANUFACTURERNAME	0x0087U
    275 #define HUB_IDEVICENAME		0x0088U
    276 #define HUB_IDEVICECHEMISTERY	0x0089U
    277 #define HUB_MANUFACTURERDATA	0x008aU
    278 #define HUB_RECHARGABLE		0x008bU
    279 #define HUB_WARN_CAPACITY_LIM	0x008cU
    280 #define HUB_CAPACITY_GRANUL1	0x008dU
    281 #define HUB_CAPACITY_GRANUL2	0x008eU
    282 #define HUB_IOEM_INFORMATION	0x008fU
    283 #define HUB_INHIBIT_CHARGE	0x00c0U
    284 #define HUB_ENABLE_POLLING	0x00c1U
    285 #define HUB_RESTORE_TO_ZERO	0x00c2U
    286 #define HUB_AC_PRESENT		0x00d0U
    287 #define HUB_BATTERY_PRESENT	0x00d1U
    288 #define HUB_POWER_FAIL		0x00d2U
    289 #define HUB_ALARM_INHIBITED	0x00d3U
    290 #define HUB_THERMISTOR_UNDRANGE	0x00d4U
    291 #define HUB_THERMISTOR_HOT	0x00d5U
    292 #define HUB_THERMISTOR_COLD	0x00d6U
    293 #define HUB_THERMISTOR_OVERANGE	0x00d7U
    294 #define HUB_BS_VOLT_OUTOF_RANGE	0x00d8U
    295 #define HUB_BS_CURR_OUTOF_RANGE	0x00d9U
    296 #define HUB_BS_CURR_NOT_REGULTD	0x00daU
    297 #define HUB_BS_VOLT_NOT_REGULTD	0x00dbU
    298 #define HUB_MASTER_MODE		0x00dcU
    299 #define HUB_CHARGER_SELECTR_SUP	0x00f0U
    300 #define HUB_CHARGER_SPEC	0x00f1U
    301 #define HUB_LEVEL2		0x00f2U
    302 #define HUB_LEVEL3		0x00f3U
    303 
    304 /* Usages, generic desktop */
    305 #define HUG_POINTER		0x0001U
    306 #define HUG_MOUSE		0x0002U
    307 #define HUG_FN_KEY		0x0003U
    308 #define HUG_JOYSTICK		0x0004U
    309 #define HUG_GAME_PAD		0x0005U
    310 #define HUG_KEYBOARD		0x0006U
    311 #define HUG_KEYPAD		0x0007U
    312 #define HUG_X			0x0030U
    313 #define HUG_Y			0x0031U
    314 #define HUG_Z			0x0032U
    315 #define HUG_RX			0x0033U
    316 #define HUG_RY			0x0034U
    317 #define HUG_RZ			0x0035U
    318 #define HUG_SLIDER		0x0036U
    319 #define HUG_DIAL		0x0037U
    320 #define HUG_WHEEL		0x0038U
    321 #define HUG_HAT_SWITCH		0x0039U
    322 #define HUG_COUNTED_BUFFER	0x003aU
    323 #define HUG_BYTE_COUNT		0x003bU
    324 #define HUG_MOTION_WAKEUP	0x003cU
    325 #define HUG_VX			0x0040U
    326 #define HUG_VY			0x0041U
    327 #define HUG_VZ			0x0042U
    328 #define HUG_VBRX		0x0043U
    329 #define HUG_VBRY		0x0044U
    330 #define HUG_VBRZ		0x0045U
    331 #define HUG_VNO			0x0046U
    332 #define HUG_TWHEEL		0x0048U
    333 #define HUG_SYSTEM_CONTROL	0x0080U
    334 #define HUG_SYSTEM_POWER_DOWN	0x0081U
    335 #define HUG_SYSTEM_SLEEP	0x0082U
    336 #define HUG_SYSTEM_WAKEUP	0x0083U
    337 #define HUG_SYSTEM_CONTEXT_MENU	0x0084U
    338 #define HUG_SYSTEM_MAIN_MENU	0x0085U
    339 #define HUG_SYSTEM_APP_MENU	0x0086U
    340 #define HUG_SYSTEM_MENU_HELP	0x0087U
    341 #define HUG_SYSTEM_MENU_EXIT	0x0088U
    342 #define HUG_SYSTEM_MENU_SELECT	0x0089U
    343 #define HUG_SYSTEM_MENU_RIGHT	0x008aU
    344 #define HUG_SYSTEM_MENU_LEFT	0x008bU
    345 #define HUG_SYSTEM_MENU_UP	0x008cU
    346 #define HUG_SYSTEM_MENU_DOWN	0x008dU
    347 
    348 /* Usages, Digitizers */
    349 #define HUD_UNDEFINED		0x0000U
    350 #define HUD_DIGITIZER		0x0001U
    351 #define HUD_PEN			0x0002U
    352 #define HUD_TOUCH_SCREEN	0x0004U
    353 #define HUD_TOUCHPAD		0x0005U
    354 #define HUD_CONFIG		0x000eU
    355 #define HUD_FINGER		0x0022U
    356 #define HUD_TIP_PRESSURE	0x0030U
    357 #define HUD_BARREL_PRESSURE	0x0031U
    358 #define HUD_IN_RANGE		0x0032U
    359 #define HUD_TOUCH		0x0033U
    360 #define HUD_UNTOUCH		0x0034U
    361 #define HUD_TAP			0x0035U
    362 #define HUD_QUALITY		0x0036U
    363 #define HUD_DATA_VALID		0x0037U
    364 #define HUD_TRANSDUCER_INDEX	0x0038U
    365 #define HUD_TABLET_FKEYS	0x0039U
    366 #define HUD_PROGRAM_CHANGE_KEYS	0x003aU
    367 #define HUD_BATTERY_STRENGTH	0x003bU
    368 #define HUD_INVERT		0x003cU
    369 #define HUD_X_TILT		0x003dU
    370 #define HUD_Y_TILT		0x003eU
    371 #define HUD_AZIMUTH		0x003fU
    372 #define HUD_ALTITUDE		0x0040U
    373 #define HUD_TWIST		0x0041U
    374 #define HUD_TIP_SWITCH		0x0042U
    375 #define HUD_SEC_TIP_SWITCH	0x0043U
    376 #define HUD_BARREL_SWITCH	0x0044U
    377 #define HUD_ERASER		0x0045U
    378 #define HUD_TABLET_PICK		0x0046U
    379 #define HUD_CONFIDENCE		0x0047U
    380 #define HUD_WIDTH		0x0048U
    381 #define HUD_HEIGHT		0x0049U
    382 #define HUD_CONTACTID		0x0051U
    383 #define HUD_INPUT_MODE		0x0052U
    384 #define HUD_DEVICE_INDEX	0x0053U
    385 #define HUD_CONTACTCOUNT	0x0054U
    386 #define HUD_CONTACT_MAX		0x0055U
    387 #define HUD_SCAN_TIME		0x0056U
    388 #define HUD_BUTTON_TYPE		0x0059U
    389 
    390 /* Usages, LED */
    391 #define HUD_LED_NUM_LOCK	0x0001U
    392 #define HUD_LED_CAPS_LOCK	0x0002U
    393 #define HUD_LED_SCROLL_LOCK	0x0003U
    394 #define HUD_LED_COMPOSE		0x0004U
    395 #define HUD_LED_KANA		0x0005U
    396 
    397 /* Usages, Consumer */
    398 #define HUC_AC_PAN		0x0238U
    399 
    400 /* Usages, FIDO */
    401 #define HUF_U2FHID		0x0001U
    402 
    403 #define HID_USAGE2(p, u) (((p) << 16) | u)
    404 #define HID_GET_USAGE(u) ((u) & 0xffff)
    405 #define HID_GET_USAGE_PAGE(u) (((u) >> 16) & 0xffff)
    406 
    407 #define HCOLL_PHYSICAL		0
    408 #define HCOLL_APPLICATION	1
    409 #define HCOLL_LOGICAL		2
    410 
    411 /* Bits in the input/output/feature items */
    412 #define HIO_CONST	0x001
    413 #define HIO_VARIABLE	0x002
    414 #define HIO_RELATIVE	0x004
    415 #define HIO_WRAP	0x008
    416 #define HIO_NONLINEAR	0x010
    417 #define HIO_NOPREF	0x020
    418 #define HIO_NULLSTATE	0x040
    419 #define HIO_VOLATILE	0x080
    420 #define HIO_BUFBYTES	0x100
    421 
    422 /* Valid values for the country codes */
    423 #define	HCC_UNDEFINED	0x00
    424 #define	HCC_MAX		0x23
    425 
    426 #endif /* _HIDHID_H_ */
    427