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 31*67de2db2SVladimir Kondratyev #ifndef _HID_HID_H_ 32*67de2db2SVladimir 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 701ffa5c63SVladimir Kondratyev #define HUG_X 0x0030 711ffa5c63SVladimir Kondratyev #define HUG_Y 0x0031 721ffa5c63SVladimir Kondratyev #define HUG_Z 0x0032 731ffa5c63SVladimir Kondratyev #define HUG_RX 0x0033 741ffa5c63SVladimir Kondratyev #define HUG_RY 0x0034 751ffa5c63SVladimir Kondratyev #define HUG_RZ 0x0035 761ffa5c63SVladimir Kondratyev #define HUG_SLIDER 0x0036 771ffa5c63SVladimir Kondratyev #define HUG_DIAL 0x0037 781ffa5c63SVladimir Kondratyev #define HUG_WHEEL 0x0038 791ffa5c63SVladimir Kondratyev #define HUG_HAT_SWITCH 0x0039 801ffa5c63SVladimir Kondratyev #define HUG_COUNTED_BUFFER 0x003a 811ffa5c63SVladimir Kondratyev #define HUG_BYTE_COUNT 0x003b 821ffa5c63SVladimir Kondratyev #define HUG_MOTION_WAKEUP 0x003c 831ffa5c63SVladimir Kondratyev #define HUG_VX 0x0040 841ffa5c63SVladimir Kondratyev #define HUG_VY 0x0041 851ffa5c63SVladimir Kondratyev #define HUG_VZ 0x0042 861ffa5c63SVladimir Kondratyev #define HUG_VBRX 0x0043 871ffa5c63SVladimir Kondratyev #define HUG_VBRY 0x0044 881ffa5c63SVladimir Kondratyev #define HUG_VBRZ 0x0045 891ffa5c63SVladimir Kondratyev #define HUG_VNO 0x0046 901ffa5c63SVladimir Kondratyev #define HUG_TWHEEL 0x0048 /* M$ Wireless Intellimouse Wheel */ 911ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_CONTROL 0x0080 921ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_POWER_DOWN 0x0081 931ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_SLEEP 0x0082 941ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_WAKEUP 0x0083 951ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_CONTEXT_MENU 0x0084 961ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MAIN_MENU 0x0085 971ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_APP_MENU 0x0086 981ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_HELP 0x0087 991ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_EXIT 0x0088 1001ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_SELECT 0x0089 1011ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_RIGHT 0x008a 1021ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_LEFT 0x008b 1031ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_UP 0x008c 1041ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_DOWN 0x008d 1051ffa5c63SVladimir Kondratyev #define HUG_APPLE_EJECT 0x00b8 1061ffa5c63SVladimir Kondratyev 1071ffa5c63SVladimir Kondratyev /* Usages Digitizers */ 1081ffa5c63SVladimir Kondratyev #define HUD_UNDEFINED 0x0000 1091ffa5c63SVladimir Kondratyev #define HUD_DIGITIZER 0x0001 1101ffa5c63SVladimir Kondratyev #define HUD_PEN 0x0002 1111ffa5c63SVladimir Kondratyev #define HUD_TOUCHSCREEN 0x0004 1121ffa5c63SVladimir Kondratyev #define HUD_TOUCHPAD 0x0005 1131ffa5c63SVladimir Kondratyev #define HUD_CONFIG 0x000e 1141ffa5c63SVladimir Kondratyev #define HUD_FINGER 0x0022 1151ffa5c63SVladimir Kondratyev #define HUD_TIP_PRESSURE 0x0030 1161ffa5c63SVladimir Kondratyev #define HUD_BARREL_PRESSURE 0x0031 1171ffa5c63SVladimir Kondratyev #define HUD_IN_RANGE 0x0032 1181ffa5c63SVladimir Kondratyev #define HUD_TOUCH 0x0033 1191ffa5c63SVladimir Kondratyev #define HUD_UNTOUCH 0x0034 1201ffa5c63SVladimir Kondratyev #define HUD_TAP 0x0035 1211ffa5c63SVladimir Kondratyev #define HUD_QUALITY 0x0036 1221ffa5c63SVladimir Kondratyev #define HUD_DATA_VALID 0x0037 1231ffa5c63SVladimir Kondratyev #define HUD_TRANSDUCER_INDEX 0x0038 1241ffa5c63SVladimir Kondratyev #define HUD_TABLET_FKEYS 0x0039 1251ffa5c63SVladimir Kondratyev #define HUD_PROGRAM_CHANGE_KEYS 0x003a 1261ffa5c63SVladimir Kondratyev #define HUD_BATTERY_STRENGTH 0x003b 1271ffa5c63SVladimir Kondratyev #define HUD_INVERT 0x003c 1281ffa5c63SVladimir Kondratyev #define HUD_X_TILT 0x003d 1291ffa5c63SVladimir Kondratyev #define HUD_Y_TILT 0x003e 1301ffa5c63SVladimir Kondratyev #define HUD_AZIMUTH 0x003f 1311ffa5c63SVladimir Kondratyev #define HUD_ALTITUDE 0x0040 1321ffa5c63SVladimir Kondratyev #define HUD_TWIST 0x0041 1331ffa5c63SVladimir Kondratyev #define HUD_TIP_SWITCH 0x0042 1341ffa5c63SVladimir Kondratyev #define HUD_SEC_TIP_SWITCH 0x0043 1351ffa5c63SVladimir Kondratyev #define HUD_BARREL_SWITCH 0x0044 1361ffa5c63SVladimir Kondratyev #define HUD_ERASER 0x0045 1371ffa5c63SVladimir Kondratyev #define HUD_TABLET_PICK 0x0046 1381ffa5c63SVladimir Kondratyev #define HUD_CONFIDENCE 0x0047 1391ffa5c63SVladimir Kondratyev #define HUD_WIDTH 0x0048 1401ffa5c63SVladimir Kondratyev #define HUD_HEIGHT 0x0049 1411ffa5c63SVladimir Kondratyev #define HUD_CONTACTID 0x0051 1421ffa5c63SVladimir Kondratyev #define HUD_INPUT_MODE 0x0052 1431ffa5c63SVladimir Kondratyev #define HUD_DEVICE_INDEX 0x0053 1441ffa5c63SVladimir Kondratyev #define HUD_CONTACTCOUNT 0x0054 1451ffa5c63SVladimir Kondratyev #define HUD_CONTACT_MAX 0x0055 1461ffa5c63SVladimir Kondratyev #define HUD_SCAN_TIME 0x0056 1471ffa5c63SVladimir Kondratyev #define HUD_SURFACE_SWITCH 0x0057 1481ffa5c63SVladimir Kondratyev #define HUD_BUTTONS_SWITCH 0x0058 1491ffa5c63SVladimir Kondratyev #define HUD_BUTTON_TYPE 0x0059 1501ffa5c63SVladimir Kondratyev #define HUD_LATENCY_MODE 0x0060 1511ffa5c63SVladimir Kondratyev 1521ffa5c63SVladimir Kondratyev /* Usages, Consumer */ 1531ffa5c63SVladimir Kondratyev #define HUC_AC_PAN 0x0238 1541ffa5c63SVladimir Kondratyev 1551ffa5c63SVladimir Kondratyev #define HID_USAGE2(p,u) (((p) << 16) | (u)) 1561ffa5c63SVladimir Kondratyev 1571ffa5c63SVladimir Kondratyev #define UHID_INPUT_REPORT 0x01 1581ffa5c63SVladimir Kondratyev #define UHID_OUTPUT_REPORT 0x02 1591ffa5c63SVladimir Kondratyev #define UHID_FEATURE_REPORT 0x03 1601ffa5c63SVladimir Kondratyev 1611ffa5c63SVladimir Kondratyev /* Bits in the input/output/feature items */ 1621ffa5c63SVladimir Kondratyev #define HIO_CONST 0x001 1631ffa5c63SVladimir Kondratyev #define HIO_VARIABLE 0x002 1641ffa5c63SVladimir Kondratyev #define HIO_RELATIVE 0x004 1651ffa5c63SVladimir Kondratyev #define HIO_WRAP 0x008 1661ffa5c63SVladimir Kondratyev #define HIO_NONLINEAR 0x010 1671ffa5c63SVladimir Kondratyev #define HIO_NOPREF 0x020 1681ffa5c63SVladimir Kondratyev #define HIO_NULLSTATE 0x040 1691ffa5c63SVladimir Kondratyev #define HIO_VOLATILE 0x080 1701ffa5c63SVladimir Kondratyev #define HIO_BUFBYTES 0x100 1711ffa5c63SVladimir Kondratyev 1721ffa5c63SVladimir Kondratyev /* Units of Measure */ 1731ffa5c63SVladimir Kondratyev #define HUM_CENTIMETER 0x11 1741ffa5c63SVladimir Kondratyev #define HUM_RADIAN 0x12 1751ffa5c63SVladimir Kondratyev #define HUM_INCH 0x13 1761ffa5c63SVladimir Kondratyev #define HUM_DEGREE 0x14 1771ffa5c63SVladimir Kondratyev 1781ffa5c63SVladimir Kondratyev #if defined(_KERNEL) || defined(_STANDALONE) 1791ffa5c63SVladimir Kondratyev 1801ffa5c63SVladimir Kondratyev #define HID_ITEM_MAXUSAGE 4 1811ffa5c63SVladimir Kondratyev 1821ffa5c63SVladimir Kondratyev enum hid_kind { 1831ffa5c63SVladimir Kondratyev hid_input, hid_output, hid_feature, hid_collection, hid_endcollection 1841ffa5c63SVladimir Kondratyev }; 1851ffa5c63SVladimir Kondratyev 1861ffa5c63SVladimir Kondratyev struct hid_location { 1871ffa5c63SVladimir Kondratyev uint32_t size; 1881ffa5c63SVladimir Kondratyev uint32_t count; 1891ffa5c63SVladimir Kondratyev uint32_t pos; 1901ffa5c63SVladimir Kondratyev }; 1911ffa5c63SVladimir Kondratyev 1921ffa5c63SVladimir Kondratyev struct hid_item { 1931ffa5c63SVladimir Kondratyev /* Global */ 1941ffa5c63SVladimir Kondratyev int32_t _usage_page; 1951ffa5c63SVladimir Kondratyev int32_t logical_minimum; 1961ffa5c63SVladimir Kondratyev int32_t logical_maximum; 1971ffa5c63SVladimir Kondratyev int32_t physical_minimum; 1981ffa5c63SVladimir Kondratyev int32_t physical_maximum; 1991ffa5c63SVladimir Kondratyev int32_t unit_exponent; 2001ffa5c63SVladimir Kondratyev int32_t unit; 2011ffa5c63SVladimir Kondratyev int32_t report_ID; 2021ffa5c63SVladimir Kondratyev /* Local */ 2031ffa5c63SVladimir Kondratyev int nusages; 2041ffa5c63SVladimir Kondratyev union { 2051ffa5c63SVladimir Kondratyev int32_t usage; 2061ffa5c63SVladimir Kondratyev int32_t usages[HID_ITEM_MAXUSAGE]; 2071ffa5c63SVladimir Kondratyev }; 2081ffa5c63SVladimir Kondratyev int32_t usage_minimum; 2091ffa5c63SVladimir Kondratyev int32_t usage_maximum; 2101ffa5c63SVladimir Kondratyev int32_t designator_index; 2111ffa5c63SVladimir Kondratyev int32_t designator_minimum; 2121ffa5c63SVladimir Kondratyev int32_t designator_maximum; 2131ffa5c63SVladimir Kondratyev int32_t string_index; 2141ffa5c63SVladimir Kondratyev int32_t string_minimum; 2151ffa5c63SVladimir Kondratyev int32_t string_maximum; 2161ffa5c63SVladimir Kondratyev int32_t set_delimiter; 2171ffa5c63SVladimir Kondratyev /* Misc */ 2181ffa5c63SVladimir Kondratyev int32_t collection; 2191ffa5c63SVladimir Kondratyev int collevel; 2201ffa5c63SVladimir Kondratyev enum hid_kind kind; 2211ffa5c63SVladimir Kondratyev uint32_t flags; 2221ffa5c63SVladimir Kondratyev /* Location */ 2231ffa5c63SVladimir Kondratyev struct hid_location loc; 2241ffa5c63SVladimir Kondratyev }; 2251ffa5c63SVladimir Kondratyev 2261ffa5c63SVladimir Kondratyev /* prototypes from "usb_hid.c" */ 2271ffa5c63SVladimir Kondratyev 2281ffa5c63SVladimir Kondratyev struct hid_data *hid_start_parse(const void *d, usb_size_t len, int kindset); 2291ffa5c63SVladimir Kondratyev void hid_end_parse(struct hid_data *s); 2301ffa5c63SVladimir Kondratyev int hid_get_item(struct hid_data *s, struct hid_item *h); 2311ffa5c63SVladimir Kondratyev int hid_report_size(const void *buf, usb_size_t len, enum hid_kind k, 2321ffa5c63SVladimir Kondratyev uint8_t *id); 2331ffa5c63SVladimir Kondratyev int hid_locate(const void *desc, usb_size_t size, int32_t usage, 2341ffa5c63SVladimir Kondratyev enum hid_kind kind, uint8_t index, struct hid_location *loc, 2351ffa5c63SVladimir Kondratyev uint32_t *flags, uint8_t *id); 2361ffa5c63SVladimir Kondratyev int32_t hid_get_data(const uint8_t *buf, usb_size_t len, 2371ffa5c63SVladimir Kondratyev struct hid_location *loc); 2381ffa5c63SVladimir Kondratyev uint32_t hid_get_data_unsigned(const uint8_t *buf, usb_size_t len, 2391ffa5c63SVladimir Kondratyev struct hid_location *loc); 2401ffa5c63SVladimir Kondratyev void hid_put_data_unsigned(uint8_t *buf, usb_size_t len, 2411ffa5c63SVladimir Kondratyev struct hid_location *loc, unsigned int value); 2421ffa5c63SVladimir Kondratyev int hid_is_collection(const void *desc, usb_size_t size, int32_t usage); 2431ffa5c63SVladimir Kondratyev int32_t hid_item_resolution(struct hid_item *hi); 2441ffa5c63SVladimir Kondratyev int hid_is_mouse(const void *d_ptr, uint16_t d_len); 2451ffa5c63SVladimir Kondratyev int hid_is_keyboard(const void *d_ptr, uint16_t d_len); 2461ffa5c63SVladimir Kondratyev #endif /* _KERNEL || _STANDALONE */ 247*67de2db2SVladimir Kondratyev #endif /* _HID_HID_H_ */ 248