11ffa5c63SVladimir Kondratyev /*- 2b61a5730SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 31ffa5c63SVladimir Kondratyev * 41ffa5c63SVladimir Kondratyev * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. 51ffa5c63SVladimir Kondratyev * Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved. 61ffa5c63SVladimir Kondratyev * Copyright (c) 1998 Lennart Augustsson. All rights reserved. 71ffa5c63SVladimir Kondratyev * 81ffa5c63SVladimir Kondratyev * Redistribution and use in source and binary forms, with or without 91ffa5c63SVladimir Kondratyev * modification, are permitted provided that the following conditions 101ffa5c63SVladimir Kondratyev * are met: 111ffa5c63SVladimir Kondratyev * 1. Redistributions of source code must retain the above copyright 121ffa5c63SVladimir Kondratyev * notice, this list of conditions and the following disclaimer. 131ffa5c63SVladimir Kondratyev * 2. Redistributions in binary form must reproduce the above copyright 141ffa5c63SVladimir Kondratyev * notice, this list of conditions and the following disclaimer in the 151ffa5c63SVladimir Kondratyev * documentation and/or other materials provided with the distribution. 161ffa5c63SVladimir Kondratyev * 171ffa5c63SVladimir Kondratyev * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 181ffa5c63SVladimir Kondratyev * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 191ffa5c63SVladimir Kondratyev * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 201ffa5c63SVladimir Kondratyev * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 211ffa5c63SVladimir Kondratyev * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 221ffa5c63SVladimir Kondratyev * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 231ffa5c63SVladimir Kondratyev * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 241ffa5c63SVladimir Kondratyev * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 251ffa5c63SVladimir Kondratyev * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 261ffa5c63SVladimir Kondratyev * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 271ffa5c63SVladimir Kondratyev * SUCH DAMAGE. 281ffa5c63SVladimir Kondratyev */ 291ffa5c63SVladimir Kondratyev 3067de2db2SVladimir Kondratyev #ifndef _HID_HID_H_ 3167de2db2SVladimir Kondratyev #define _HID_HID_H_ 321ffa5c63SVladimir Kondratyev 331ffa5c63SVladimir Kondratyev /* Usage pages */ 341ffa5c63SVladimir Kondratyev #define HUP_UNDEFINED 0x0000 351ffa5c63SVladimir Kondratyev #define HUP_GENERIC_DESKTOP 0x0001 361ffa5c63SVladimir Kondratyev #define HUP_SIMULATION 0x0002 371ffa5c63SVladimir Kondratyev #define HUP_VR_CONTROLS 0x0003 381ffa5c63SVladimir Kondratyev #define HUP_SPORTS_CONTROLS 0x0004 391ffa5c63SVladimir Kondratyev #define HUP_GAMING_CONTROLS 0x0005 401ffa5c63SVladimir Kondratyev #define HUP_KEYBOARD 0x0007 411ffa5c63SVladimir Kondratyev #define HUP_LEDS 0x0008 421ffa5c63SVladimir Kondratyev #define HUP_BUTTON 0x0009 431ffa5c63SVladimir Kondratyev #define HUP_ORDINALS 0x000a 441ffa5c63SVladimir Kondratyev #define HUP_TELEPHONY 0x000b 451ffa5c63SVladimir Kondratyev #define HUP_CONSUMER 0x000c 461ffa5c63SVladimir Kondratyev #define HUP_DIGITIZERS 0x000d 471ffa5c63SVladimir Kondratyev #define HUP_PHYSICAL_IFACE 0x000e 481ffa5c63SVladimir Kondratyev #define HUP_UNICODE 0x0010 491ffa5c63SVladimir Kondratyev #define HUP_ALPHANUM_DISPLAY 0x0014 501ffa5c63SVladimir Kondratyev #define HUP_MONITOR 0x0080 511ffa5c63SVladimir Kondratyev #define HUP_MONITOR_ENUM_VAL 0x0081 521ffa5c63SVladimir Kondratyev #define HUP_VESA_VC 0x0082 531ffa5c63SVladimir Kondratyev #define HUP_VESA_CMD 0x0083 541ffa5c63SVladimir Kondratyev #define HUP_POWER 0x0084 551ffa5c63SVladimir Kondratyev #define HUP_BATTERY_SYSTEM 0x0085 561ffa5c63SVladimir Kondratyev #define HUP_BARCODE_SCANNER 0x008b 571ffa5c63SVladimir Kondratyev #define HUP_SCALE 0x008c 581ffa5c63SVladimir Kondratyev #define HUP_CAMERA_CONTROL 0x0090 591ffa5c63SVladimir Kondratyev #define HUP_ARCADE 0x0091 601ffa5c63SVladimir Kondratyev #define HUP_MICROSOFT 0xff00 611ffa5c63SVladimir Kondratyev 621ffa5c63SVladimir Kondratyev /* Usages, generic desktop */ 631ffa5c63SVladimir Kondratyev #define HUG_POINTER 0x0001 641ffa5c63SVladimir Kondratyev #define HUG_MOUSE 0x0002 651ffa5c63SVladimir Kondratyev #define HUG_JOYSTICK 0x0004 661ffa5c63SVladimir Kondratyev #define HUG_GAME_PAD 0x0005 671ffa5c63SVladimir Kondratyev #define HUG_KEYBOARD 0x0006 681ffa5c63SVladimir Kondratyev #define HUG_KEYPAD 0x0007 6919758786SVladimir Kondratyev #define HUG_MULTIAXIS_CNTROLLER 0x0008 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 10519758786SVladimir Kondratyev #define HUG_SYSTEM_POWER_UP 0x008e 10619758786SVladimir Kondratyev #define HUG_SYSTEM_RESTART 0x008f 10719758786SVladimir Kondratyev #define HUG_D_PAD_UP 0x0090 10819758786SVladimir Kondratyev #define HUG_D_PAD_DOWN 0x0091 10919758786SVladimir Kondratyev #define HUG_D_PAD_RIGHT 0x0092 11019758786SVladimir Kondratyev #define HUG_D_PAD_LEFT 0x0093 1111ffa5c63SVladimir Kondratyev #define HUG_APPLE_EJECT 0x00b8 1121ffa5c63SVladimir Kondratyev 1131ffa5c63SVladimir Kondratyev /* Usages Digitizers */ 1141ffa5c63SVladimir Kondratyev #define HUD_UNDEFINED 0x0000 1151ffa5c63SVladimir Kondratyev #define HUD_DIGITIZER 0x0001 1161ffa5c63SVladimir Kondratyev #define HUD_PEN 0x0002 1171ffa5c63SVladimir Kondratyev #define HUD_TOUCHSCREEN 0x0004 1181ffa5c63SVladimir Kondratyev #define HUD_TOUCHPAD 0x0005 1191ffa5c63SVladimir Kondratyev #define HUD_CONFIG 0x000e 1201ffa5c63SVladimir Kondratyev #define HUD_FINGER 0x0022 1211ffa5c63SVladimir Kondratyev #define HUD_TIP_PRESSURE 0x0030 1221ffa5c63SVladimir Kondratyev #define HUD_BARREL_PRESSURE 0x0031 1231ffa5c63SVladimir Kondratyev #define HUD_IN_RANGE 0x0032 1241ffa5c63SVladimir Kondratyev #define HUD_TOUCH 0x0033 1251ffa5c63SVladimir Kondratyev #define HUD_UNTOUCH 0x0034 1261ffa5c63SVladimir Kondratyev #define HUD_TAP 0x0035 1271ffa5c63SVladimir Kondratyev #define HUD_QUALITY 0x0036 1281ffa5c63SVladimir Kondratyev #define HUD_DATA_VALID 0x0037 1291ffa5c63SVladimir Kondratyev #define HUD_TRANSDUCER_INDEX 0x0038 1301ffa5c63SVladimir Kondratyev #define HUD_TABLET_FKEYS 0x0039 1311ffa5c63SVladimir Kondratyev #define HUD_PROGRAM_CHANGE_KEYS 0x003a 1321ffa5c63SVladimir Kondratyev #define HUD_BATTERY_STRENGTH 0x003b 1331ffa5c63SVladimir Kondratyev #define HUD_INVERT 0x003c 1341ffa5c63SVladimir Kondratyev #define HUD_X_TILT 0x003d 1351ffa5c63SVladimir Kondratyev #define HUD_Y_TILT 0x003e 1361ffa5c63SVladimir Kondratyev #define HUD_AZIMUTH 0x003f 1371ffa5c63SVladimir Kondratyev #define HUD_ALTITUDE 0x0040 1381ffa5c63SVladimir Kondratyev #define HUD_TWIST 0x0041 1391ffa5c63SVladimir Kondratyev #define HUD_TIP_SWITCH 0x0042 1401ffa5c63SVladimir Kondratyev #define HUD_SEC_TIP_SWITCH 0x0043 1411ffa5c63SVladimir Kondratyev #define HUD_BARREL_SWITCH 0x0044 1421ffa5c63SVladimir Kondratyev #define HUD_ERASER 0x0045 1431ffa5c63SVladimir Kondratyev #define HUD_TABLET_PICK 0x0046 1441ffa5c63SVladimir Kondratyev #define HUD_CONFIDENCE 0x0047 1451ffa5c63SVladimir Kondratyev #define HUD_WIDTH 0x0048 1461ffa5c63SVladimir Kondratyev #define HUD_HEIGHT 0x0049 1471ffa5c63SVladimir Kondratyev #define HUD_CONTACTID 0x0051 1481ffa5c63SVladimir Kondratyev #define HUD_INPUT_MODE 0x0052 1491ffa5c63SVladimir Kondratyev #define HUD_DEVICE_INDEX 0x0053 1501ffa5c63SVladimir Kondratyev #define HUD_CONTACTCOUNT 0x0054 1511ffa5c63SVladimir Kondratyev #define HUD_CONTACT_MAX 0x0055 1521ffa5c63SVladimir Kondratyev #define HUD_SCAN_TIME 0x0056 1531ffa5c63SVladimir Kondratyev #define HUD_SURFACE_SWITCH 0x0057 1541ffa5c63SVladimir Kondratyev #define HUD_BUTTONS_SWITCH 0x0058 1551ffa5c63SVladimir Kondratyev #define HUD_BUTTON_TYPE 0x0059 15619758786SVladimir Kondratyev #define HUD_SEC_BARREL_SWITCH 0x005a 1571ffa5c63SVladimir Kondratyev #define HUD_LATENCY_MODE 0x0060 1581ffa5c63SVladimir Kondratyev 1591ffa5c63SVladimir Kondratyev /* Usages, Consumer */ 16019758786SVladimir Kondratyev #define HUC_CONTROL 0x0001 16119758786SVladimir Kondratyev #define HUC_HEADPHONE 0x0005 1621ffa5c63SVladimir Kondratyev #define HUC_AC_PAN 0x0238 1631ffa5c63SVladimir Kondratyev 1641ffa5c63SVladimir Kondratyev #define HID_USAGE2(p,u) (((p) << 16) | (u)) 16519758786SVladimir Kondratyev #define HID_GET_USAGE(u) ((u) & 0xffff) 16619758786SVladimir Kondratyev #define HID_GET_USAGE_PAGE(u) (((u) >> 16) & 0xffff) 1671ffa5c63SVladimir Kondratyev 16819758786SVladimir Kondratyev #define HID_INPUT_REPORT 0x01 16919758786SVladimir Kondratyev #define HID_OUTPUT_REPORT 0x02 17019758786SVladimir Kondratyev #define HID_FEATURE_REPORT 0x03 1711ffa5c63SVladimir Kondratyev 1721ffa5c63SVladimir Kondratyev /* Bits in the input/output/feature items */ 1731ffa5c63SVladimir Kondratyev #define HIO_CONST 0x001 1741ffa5c63SVladimir Kondratyev #define HIO_VARIABLE 0x002 1751ffa5c63SVladimir Kondratyev #define HIO_RELATIVE 0x004 1761ffa5c63SVladimir Kondratyev #define HIO_WRAP 0x008 1771ffa5c63SVladimir Kondratyev #define HIO_NONLINEAR 0x010 1781ffa5c63SVladimir Kondratyev #define HIO_NOPREF 0x020 1791ffa5c63SVladimir Kondratyev #define HIO_NULLSTATE 0x040 1801ffa5c63SVladimir Kondratyev #define HIO_VOLATILE 0x080 1811ffa5c63SVladimir Kondratyev #define HIO_BUFBYTES 0x100 1821ffa5c63SVladimir Kondratyev 1831ffa5c63SVladimir Kondratyev /* Units of Measure */ 1841ffa5c63SVladimir Kondratyev #define HUM_CENTIMETER 0x11 1851ffa5c63SVladimir Kondratyev #define HUM_RADIAN 0x12 1861ffa5c63SVladimir Kondratyev #define HUM_INCH 0x13 187be75951aSVladimir Kondratyev #define HUM_INCH_EGALAX 0x33 1881ffa5c63SVladimir Kondratyev #define HUM_DEGREE 0x14 1891ffa5c63SVladimir Kondratyev 1901ffa5c63SVladimir Kondratyev #if defined(_KERNEL) || defined(_STANDALONE) 1911ffa5c63SVladimir Kondratyev 192db2f5123SWarner Losh #define HID_ITEM_MAXUSAGE 8 19319758786SVladimir Kondratyev #define HID_MAX_AUTO_QUIRK 8 /* maximum number of dynamic quirks */ 19419758786SVladimir Kondratyev #define HID_PNP_ID_SIZE 20 /* includes null terminator */ 19519758786SVladimir Kondratyev 19619758786SVladimir Kondratyev /* Declare global HID debug variable. */ 19719758786SVladimir Kondratyev extern int hid_debug; 19819758786SVladimir Kondratyev 19919758786SVladimir Kondratyev /* Check if HID debugging is enabled. */ 20019758786SVladimir Kondratyev #ifdef HID_DEBUG_VAR 20119758786SVladimir Kondratyev #ifdef HID_DEBUG 20219758786SVladimir Kondratyev #define DPRINTFN(n,fmt,...) do { \ 20319758786SVladimir Kondratyev if ((HID_DEBUG_VAR) >= (n)) { \ 20419758786SVladimir Kondratyev printf("%s: " fmt, \ 20519758786SVladimir Kondratyev __FUNCTION__ ,##__VA_ARGS__); \ 20619758786SVladimir Kondratyev } \ 20719758786SVladimir Kondratyev } while (0) 20819758786SVladimir Kondratyev #define DPRINTF(...) DPRINTFN(1, __VA_ARGS__) 20919758786SVladimir Kondratyev #else 21019758786SVladimir Kondratyev #define DPRINTF(...) do { } while (0) 21119758786SVladimir Kondratyev #define DPRINTFN(...) do { } while (0) 21219758786SVladimir Kondratyev #endif 21319758786SVladimir Kondratyev #endif 21419758786SVladimir Kondratyev 21519758786SVladimir Kondratyev /* Declare parent SYSCTL HID node. */ 21619758786SVladimir Kondratyev #ifdef SYSCTL_DECL 21719758786SVladimir Kondratyev SYSCTL_DECL(_hw_hid); 21819758786SVladimir Kondratyev #endif 21919758786SVladimir Kondratyev 22019758786SVladimir Kondratyev typedef uint32_t hid_size_t; 22119758786SVladimir Kondratyev 22219758786SVladimir Kondratyev #define HID_IN_POLLING_MODE() (SCHEDULER_STOPPED() || kdb_active) 2231ffa5c63SVladimir Kondratyev 2241ffa5c63SVladimir Kondratyev enum hid_kind { 2251ffa5c63SVladimir Kondratyev hid_input, hid_output, hid_feature, hid_collection, hid_endcollection 2261ffa5c63SVladimir Kondratyev }; 2271ffa5c63SVladimir Kondratyev 2281ffa5c63SVladimir Kondratyev struct hid_location { 2291ffa5c63SVladimir Kondratyev uint32_t size; 2301ffa5c63SVladimir Kondratyev uint32_t count; 2311ffa5c63SVladimir Kondratyev uint32_t pos; 2321ffa5c63SVladimir Kondratyev }; 2331ffa5c63SVladimir Kondratyev 2341ffa5c63SVladimir Kondratyev struct hid_item { 2351ffa5c63SVladimir Kondratyev /* Global */ 236*38b67578SVladimir Kondratyev uint32_t _usage_page; 2371ffa5c63SVladimir Kondratyev int32_t logical_minimum; 2381ffa5c63SVladimir Kondratyev int32_t logical_maximum; 2391ffa5c63SVladimir Kondratyev int32_t physical_minimum; 2401ffa5c63SVladimir Kondratyev int32_t physical_maximum; 241*38b67578SVladimir Kondratyev uint32_t unit_exponent; 242*38b67578SVladimir Kondratyev uint32_t unit; 243*38b67578SVladimir Kondratyev uint32_t report_ID; 2441ffa5c63SVladimir Kondratyev /* Local */ 2451ffa5c63SVladimir Kondratyev int nusages; 2461ffa5c63SVladimir Kondratyev union { 247*38b67578SVladimir Kondratyev uint32_t usage; 248*38b67578SVladimir Kondratyev uint32_t usages[HID_ITEM_MAXUSAGE]; 2491ffa5c63SVladimir Kondratyev }; 250*38b67578SVladimir Kondratyev uint32_t usage_minimum; 251*38b67578SVladimir Kondratyev uint32_t usage_maximum; 252*38b67578SVladimir Kondratyev uint32_t designator_index; 253*38b67578SVladimir Kondratyev uint32_t designator_minimum; 254*38b67578SVladimir Kondratyev uint32_t designator_maximum; 255*38b67578SVladimir Kondratyev uint32_t string_index; 256*38b67578SVladimir Kondratyev uint32_t string_minimum; 257*38b67578SVladimir Kondratyev uint32_t string_maximum; 258*38b67578SVladimir Kondratyev uint32_t set_delimiter; 2591ffa5c63SVladimir Kondratyev /* Misc */ 260*38b67578SVladimir Kondratyev uint32_t collection; 2611ffa5c63SVladimir Kondratyev int collevel; 2621ffa5c63SVladimir Kondratyev enum hid_kind kind; 2631ffa5c63SVladimir Kondratyev uint32_t flags; 2641ffa5c63SVladimir Kondratyev /* Location */ 2651ffa5c63SVladimir Kondratyev struct hid_location loc; 2661ffa5c63SVladimir Kondratyev }; 2671ffa5c63SVladimir Kondratyev 26819758786SVladimir Kondratyev struct hid_absinfo { 26919758786SVladimir Kondratyev int32_t min; 27019758786SVladimir Kondratyev int32_t max; 27119758786SVladimir Kondratyev int32_t res; 27219758786SVladimir Kondratyev }; 27319758786SVladimir Kondratyev 27419758786SVladimir Kondratyev struct hid_device_info { 27519758786SVladimir Kondratyev char name[80]; 27619758786SVladimir Kondratyev char serial[80]; 27719758786SVladimir Kondratyev char idPnP[HID_PNP_ID_SIZE]; 27819758786SVladimir Kondratyev uint16_t idBus; 27919758786SVladimir Kondratyev uint16_t idVendor; 28019758786SVladimir Kondratyev uint16_t idProduct; 28119758786SVladimir Kondratyev uint16_t idVersion; 28219758786SVladimir Kondratyev hid_size_t rdescsize; /* Report descriptor size */ 28319758786SVladimir Kondratyev uint8_t autoQuirk[HID_MAX_AUTO_QUIRK]; 28419758786SVladimir Kondratyev }; 28519758786SVladimir Kondratyev 28619758786SVladimir Kondratyev struct hid_rdesc_info { 28719758786SVladimir Kondratyev void *data; 28819758786SVladimir Kondratyev hid_size_t len; 28919758786SVladimir Kondratyev hid_size_t isize; 29019758786SVladimir Kondratyev hid_size_t osize; 29119758786SVladimir Kondratyev hid_size_t fsize; 29219758786SVladimir Kondratyev uint8_t iid; 29319758786SVladimir Kondratyev uint8_t oid; 29419758786SVladimir Kondratyev uint8_t fid; 29519758786SVladimir Kondratyev /* Max sizes for HID requests supported by transport backend */ 29619758786SVladimir Kondratyev hid_size_t rdsize; 29719758786SVladimir Kondratyev hid_size_t wrsize; 29819758786SVladimir Kondratyev hid_size_t grsize; 29919758786SVladimir Kondratyev hid_size_t srsize; 30019758786SVladimir Kondratyev }; 30119758786SVladimir Kondratyev 30219758786SVladimir Kondratyev typedef void hid_intr_t(void *context, void *data, hid_size_t len); 30319758786SVladimir Kondratyev typedef bool hid_test_quirk_t(const struct hid_device_info *dev_info, 30419758786SVladimir Kondratyev uint16_t quirk); 30519758786SVladimir Kondratyev 30619758786SVladimir Kondratyev extern hid_test_quirk_t *hid_test_quirk_p; 30719758786SVladimir Kondratyev 3081ffa5c63SVladimir Kondratyev /* prototypes from "usb_hid.c" */ 3091ffa5c63SVladimir Kondratyev 31019758786SVladimir Kondratyev struct hid_data *hid_start_parse(const void *d, hid_size_t len, int kindset); 3111ffa5c63SVladimir Kondratyev void hid_end_parse(struct hid_data *s); 3121ffa5c63SVladimir Kondratyev int hid_get_item(struct hid_data *s, struct hid_item *h); 31319758786SVladimir Kondratyev int hid_report_size(const void *buf, hid_size_t len, enum hid_kind k, 31419758786SVladimir Kondratyev uint8_t id); 31519758786SVladimir Kondratyev int hid_report_size_max(const void *buf, hid_size_t len, enum hid_kind k, 3161ffa5c63SVladimir Kondratyev uint8_t *id); 31719758786SVladimir Kondratyev int hid_locate(const void *desc, hid_size_t size, int32_t usage, 3181ffa5c63SVladimir Kondratyev enum hid_kind kind, uint8_t index, struct hid_location *loc, 3191ffa5c63SVladimir Kondratyev uint32_t *flags, uint8_t *id); 32019758786SVladimir Kondratyev int32_t hid_get_data(const uint8_t *buf, hid_size_t len, 3211ffa5c63SVladimir Kondratyev struct hid_location *loc); 32219758786SVladimir Kondratyev uint32_t hid_get_udata(const uint8_t *buf, hid_size_t len, 3231ffa5c63SVladimir Kondratyev struct hid_location *loc); 32419758786SVladimir Kondratyev void hid_put_udata(uint8_t *buf, hid_size_t len, 3251ffa5c63SVladimir Kondratyev struct hid_location *loc, unsigned int value); 32619758786SVladimir Kondratyev int hid_is_collection(const void *desc, hid_size_t size, int32_t usage); 3271ffa5c63SVladimir Kondratyev int32_t hid_item_resolution(struct hid_item *hi); 3281ffa5c63SVladimir Kondratyev int hid_is_mouse(const void *d_ptr, uint16_t d_len); 3291ffa5c63SVladimir Kondratyev int hid_is_keyboard(const void *d_ptr, uint16_t d_len); 33019758786SVladimir Kondratyev bool hid_test_quirk(const struct hid_device_info *dev_info, uint16_t quirk); 33119758786SVladimir Kondratyev int hid_add_dynamic_quirk(struct hid_device_info *dev_info, 33219758786SVladimir Kondratyev uint16_t quirk); 33319758786SVladimir Kondratyev void hid_quirk_unload(void *arg); 334961a3535SVladimir Kondratyev 3354151ac9fSVladimir Kondratyev int hid_intr_start(device_t); 3364151ac9fSVladimir Kondratyev int hid_intr_stop(device_t); 3374151ac9fSVladimir Kondratyev void hid_intr_poll(device_t); 338961a3535SVladimir Kondratyev int hid_get_rdesc(device_t, void *, hid_size_t); 339961a3535SVladimir Kondratyev int hid_read(device_t, void *, hid_size_t, hid_size_t *); 340961a3535SVladimir Kondratyev int hid_write(device_t, const void *, hid_size_t); 341961a3535SVladimir Kondratyev int hid_get_report(device_t, void *, hid_size_t, hid_size_t *, uint8_t, 342961a3535SVladimir Kondratyev uint8_t); 343961a3535SVladimir Kondratyev int hid_set_report(device_t, const void *, hid_size_t, uint8_t, uint8_t); 344961a3535SVladimir Kondratyev int hid_set_idle(device_t, uint16_t, uint8_t); 345961a3535SVladimir Kondratyev int hid_set_protocol(device_t, uint16_t); 3465f47c5a3SVladimir Kondratyev int hid_ioctl(device_t, unsigned long, uintptr_t); 3471ffa5c63SVladimir Kondratyev #endif /* _KERNEL || _STANDALONE */ 34867de2db2SVladimir Kondratyev #endif /* _HID_HID_H_ */ 349