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 3167de2db2SVladimir Kondratyev #ifndef _HID_HID_H_ 3267de2db2SVladimir 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 7019758786SVladimir Kondratyev #define HUG_MULTIAXIS_CNTROLLER 0x0008 711ffa5c63SVladimir Kondratyev #define HUG_X 0x0030 721ffa5c63SVladimir Kondratyev #define HUG_Y 0x0031 731ffa5c63SVladimir Kondratyev #define HUG_Z 0x0032 741ffa5c63SVladimir Kondratyev #define HUG_RX 0x0033 751ffa5c63SVladimir Kondratyev #define HUG_RY 0x0034 761ffa5c63SVladimir Kondratyev #define HUG_RZ 0x0035 771ffa5c63SVladimir Kondratyev #define HUG_SLIDER 0x0036 781ffa5c63SVladimir Kondratyev #define HUG_DIAL 0x0037 791ffa5c63SVladimir Kondratyev #define HUG_WHEEL 0x0038 801ffa5c63SVladimir Kondratyev #define HUG_HAT_SWITCH 0x0039 811ffa5c63SVladimir Kondratyev #define HUG_COUNTED_BUFFER 0x003a 821ffa5c63SVladimir Kondratyev #define HUG_BYTE_COUNT 0x003b 831ffa5c63SVladimir Kondratyev #define HUG_MOTION_WAKEUP 0x003c 841ffa5c63SVladimir Kondratyev #define HUG_VX 0x0040 851ffa5c63SVladimir Kondratyev #define HUG_VY 0x0041 861ffa5c63SVladimir Kondratyev #define HUG_VZ 0x0042 871ffa5c63SVladimir Kondratyev #define HUG_VBRX 0x0043 881ffa5c63SVladimir Kondratyev #define HUG_VBRY 0x0044 891ffa5c63SVladimir Kondratyev #define HUG_VBRZ 0x0045 901ffa5c63SVladimir Kondratyev #define HUG_VNO 0x0046 911ffa5c63SVladimir Kondratyev #define HUG_TWHEEL 0x0048 /* M$ Wireless Intellimouse Wheel */ 921ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_CONTROL 0x0080 931ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_POWER_DOWN 0x0081 941ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_SLEEP 0x0082 951ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_WAKEUP 0x0083 961ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_CONTEXT_MENU 0x0084 971ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MAIN_MENU 0x0085 981ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_APP_MENU 0x0086 991ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_HELP 0x0087 1001ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_EXIT 0x0088 1011ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_SELECT 0x0089 1021ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_RIGHT 0x008a 1031ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_LEFT 0x008b 1041ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_UP 0x008c 1051ffa5c63SVladimir Kondratyev #define HUG_SYSTEM_MENU_DOWN 0x008d 10619758786SVladimir Kondratyev #define HUG_SYSTEM_POWER_UP 0x008e 10719758786SVladimir Kondratyev #define HUG_SYSTEM_RESTART 0x008f 10819758786SVladimir Kondratyev #define HUG_D_PAD_UP 0x0090 10919758786SVladimir Kondratyev #define HUG_D_PAD_DOWN 0x0091 11019758786SVladimir Kondratyev #define HUG_D_PAD_RIGHT 0x0092 11119758786SVladimir Kondratyev #define HUG_D_PAD_LEFT 0x0093 1121ffa5c63SVladimir Kondratyev #define HUG_APPLE_EJECT 0x00b8 1131ffa5c63SVladimir Kondratyev 1141ffa5c63SVladimir Kondratyev /* Usages Digitizers */ 1151ffa5c63SVladimir Kondratyev #define HUD_UNDEFINED 0x0000 1161ffa5c63SVladimir Kondratyev #define HUD_DIGITIZER 0x0001 1171ffa5c63SVladimir Kondratyev #define HUD_PEN 0x0002 1181ffa5c63SVladimir Kondratyev #define HUD_TOUCHSCREEN 0x0004 1191ffa5c63SVladimir Kondratyev #define HUD_TOUCHPAD 0x0005 1201ffa5c63SVladimir Kondratyev #define HUD_CONFIG 0x000e 1211ffa5c63SVladimir Kondratyev #define HUD_FINGER 0x0022 1221ffa5c63SVladimir Kondratyev #define HUD_TIP_PRESSURE 0x0030 1231ffa5c63SVladimir Kondratyev #define HUD_BARREL_PRESSURE 0x0031 1241ffa5c63SVladimir Kondratyev #define HUD_IN_RANGE 0x0032 1251ffa5c63SVladimir Kondratyev #define HUD_TOUCH 0x0033 1261ffa5c63SVladimir Kondratyev #define HUD_UNTOUCH 0x0034 1271ffa5c63SVladimir Kondratyev #define HUD_TAP 0x0035 1281ffa5c63SVladimir Kondratyev #define HUD_QUALITY 0x0036 1291ffa5c63SVladimir Kondratyev #define HUD_DATA_VALID 0x0037 1301ffa5c63SVladimir Kondratyev #define HUD_TRANSDUCER_INDEX 0x0038 1311ffa5c63SVladimir Kondratyev #define HUD_TABLET_FKEYS 0x0039 1321ffa5c63SVladimir Kondratyev #define HUD_PROGRAM_CHANGE_KEYS 0x003a 1331ffa5c63SVladimir Kondratyev #define HUD_BATTERY_STRENGTH 0x003b 1341ffa5c63SVladimir Kondratyev #define HUD_INVERT 0x003c 1351ffa5c63SVladimir Kondratyev #define HUD_X_TILT 0x003d 1361ffa5c63SVladimir Kondratyev #define HUD_Y_TILT 0x003e 1371ffa5c63SVladimir Kondratyev #define HUD_AZIMUTH 0x003f 1381ffa5c63SVladimir Kondratyev #define HUD_ALTITUDE 0x0040 1391ffa5c63SVladimir Kondratyev #define HUD_TWIST 0x0041 1401ffa5c63SVladimir Kondratyev #define HUD_TIP_SWITCH 0x0042 1411ffa5c63SVladimir Kondratyev #define HUD_SEC_TIP_SWITCH 0x0043 1421ffa5c63SVladimir Kondratyev #define HUD_BARREL_SWITCH 0x0044 1431ffa5c63SVladimir Kondratyev #define HUD_ERASER 0x0045 1441ffa5c63SVladimir Kondratyev #define HUD_TABLET_PICK 0x0046 1451ffa5c63SVladimir Kondratyev #define HUD_CONFIDENCE 0x0047 1461ffa5c63SVladimir Kondratyev #define HUD_WIDTH 0x0048 1471ffa5c63SVladimir Kondratyev #define HUD_HEIGHT 0x0049 1481ffa5c63SVladimir Kondratyev #define HUD_CONTACTID 0x0051 1491ffa5c63SVladimir Kondratyev #define HUD_INPUT_MODE 0x0052 1501ffa5c63SVladimir Kondratyev #define HUD_DEVICE_INDEX 0x0053 1511ffa5c63SVladimir Kondratyev #define HUD_CONTACTCOUNT 0x0054 1521ffa5c63SVladimir Kondratyev #define HUD_CONTACT_MAX 0x0055 1531ffa5c63SVladimir Kondratyev #define HUD_SCAN_TIME 0x0056 1541ffa5c63SVladimir Kondratyev #define HUD_SURFACE_SWITCH 0x0057 1551ffa5c63SVladimir Kondratyev #define HUD_BUTTONS_SWITCH 0x0058 1561ffa5c63SVladimir Kondratyev #define HUD_BUTTON_TYPE 0x0059 15719758786SVladimir Kondratyev #define HUD_SEC_BARREL_SWITCH 0x005a 1581ffa5c63SVladimir Kondratyev #define HUD_LATENCY_MODE 0x0060 1591ffa5c63SVladimir Kondratyev 1601ffa5c63SVladimir Kondratyev /* Usages, Consumer */ 16119758786SVladimir Kondratyev #define HUC_CONTROL 0x0001 16219758786SVladimir Kondratyev #define HUC_HEADPHONE 0x0005 1631ffa5c63SVladimir Kondratyev #define HUC_AC_PAN 0x0238 1641ffa5c63SVladimir Kondratyev 1651ffa5c63SVladimir Kondratyev #define HID_USAGE2(p,u) (((p) << 16) | (u)) 16619758786SVladimir Kondratyev #define HID_GET_USAGE(u) ((u) & 0xffff) 16719758786SVladimir Kondratyev #define HID_GET_USAGE_PAGE(u) (((u) >> 16) & 0xffff) 1681ffa5c63SVladimir Kondratyev 16919758786SVladimir Kondratyev #define HID_INPUT_REPORT 0x01 17019758786SVladimir Kondratyev #define HID_OUTPUT_REPORT 0x02 17119758786SVladimir Kondratyev #define HID_FEATURE_REPORT 0x03 1721ffa5c63SVladimir Kondratyev 1731ffa5c63SVladimir Kondratyev /* Bits in the input/output/feature items */ 1741ffa5c63SVladimir Kondratyev #define HIO_CONST 0x001 1751ffa5c63SVladimir Kondratyev #define HIO_VARIABLE 0x002 1761ffa5c63SVladimir Kondratyev #define HIO_RELATIVE 0x004 1771ffa5c63SVladimir Kondratyev #define HIO_WRAP 0x008 1781ffa5c63SVladimir Kondratyev #define HIO_NONLINEAR 0x010 1791ffa5c63SVladimir Kondratyev #define HIO_NOPREF 0x020 1801ffa5c63SVladimir Kondratyev #define HIO_NULLSTATE 0x040 1811ffa5c63SVladimir Kondratyev #define HIO_VOLATILE 0x080 1821ffa5c63SVladimir Kondratyev #define HIO_BUFBYTES 0x100 1831ffa5c63SVladimir Kondratyev 1841ffa5c63SVladimir Kondratyev /* Units of Measure */ 1851ffa5c63SVladimir Kondratyev #define HUM_CENTIMETER 0x11 1861ffa5c63SVladimir Kondratyev #define HUM_RADIAN 0x12 1871ffa5c63SVladimir Kondratyev #define HUM_INCH 0x13 188*be75951aSVladimir Kondratyev #define HUM_INCH_EGALAX 0x33 1891ffa5c63SVladimir Kondratyev #define HUM_DEGREE 0x14 1901ffa5c63SVladimir Kondratyev 1911ffa5c63SVladimir Kondratyev #if defined(_KERNEL) || defined(_STANDALONE) 1921ffa5c63SVladimir Kondratyev 193db2f5123SWarner Losh #define HID_ITEM_MAXUSAGE 8 19419758786SVladimir Kondratyev #define HID_MAX_AUTO_QUIRK 8 /* maximum number of dynamic quirks */ 19519758786SVladimir Kondratyev #define HID_PNP_ID_SIZE 20 /* includes null terminator */ 19619758786SVladimir Kondratyev 1979be6b22dSVladimir Kondratyev /* Share unit number pool between uhid and hidraw */ 1989be6b22dSVladimir Kondratyev extern devclass_t hidraw_devclass; 1999be6b22dSVladimir Kondratyev 20019758786SVladimir Kondratyev /* Declare global HID debug variable. */ 20119758786SVladimir Kondratyev extern int hid_debug; 20219758786SVladimir Kondratyev 20319758786SVladimir Kondratyev /* Check if HID debugging is enabled. */ 20419758786SVladimir Kondratyev #ifdef HID_DEBUG_VAR 20519758786SVladimir Kondratyev #ifdef HID_DEBUG 20619758786SVladimir Kondratyev #define DPRINTFN(n,fmt,...) do { \ 20719758786SVladimir Kondratyev if ((HID_DEBUG_VAR) >= (n)) { \ 20819758786SVladimir Kondratyev printf("%s: " fmt, \ 20919758786SVladimir Kondratyev __FUNCTION__ ,##__VA_ARGS__); \ 21019758786SVladimir Kondratyev } \ 21119758786SVladimir Kondratyev } while (0) 21219758786SVladimir Kondratyev #define DPRINTF(...) DPRINTFN(1, __VA_ARGS__) 21319758786SVladimir Kondratyev #else 21419758786SVladimir Kondratyev #define DPRINTF(...) do { } while (0) 21519758786SVladimir Kondratyev #define DPRINTFN(...) do { } while (0) 21619758786SVladimir Kondratyev #endif 21719758786SVladimir Kondratyev #endif 21819758786SVladimir Kondratyev 21919758786SVladimir Kondratyev /* Declare parent SYSCTL HID node. */ 22019758786SVladimir Kondratyev #ifdef SYSCTL_DECL 22119758786SVladimir Kondratyev SYSCTL_DECL(_hw_hid); 22219758786SVladimir Kondratyev #endif 22319758786SVladimir Kondratyev 22419758786SVladimir Kondratyev typedef uint32_t hid_size_t; 22519758786SVladimir Kondratyev 22619758786SVladimir Kondratyev #define HID_IN_POLLING_MODE() (SCHEDULER_STOPPED() || kdb_active) 2271ffa5c63SVladimir Kondratyev 2281ffa5c63SVladimir Kondratyev enum hid_kind { 2291ffa5c63SVladimir Kondratyev hid_input, hid_output, hid_feature, hid_collection, hid_endcollection 2301ffa5c63SVladimir Kondratyev }; 2311ffa5c63SVladimir Kondratyev 2321ffa5c63SVladimir Kondratyev struct hid_location { 2331ffa5c63SVladimir Kondratyev uint32_t size; 2341ffa5c63SVladimir Kondratyev uint32_t count; 2351ffa5c63SVladimir Kondratyev uint32_t pos; 2361ffa5c63SVladimir Kondratyev }; 2371ffa5c63SVladimir Kondratyev 2381ffa5c63SVladimir Kondratyev struct hid_item { 2391ffa5c63SVladimir Kondratyev /* Global */ 2401ffa5c63SVladimir Kondratyev int32_t _usage_page; 2411ffa5c63SVladimir Kondratyev int32_t logical_minimum; 2421ffa5c63SVladimir Kondratyev int32_t logical_maximum; 2431ffa5c63SVladimir Kondratyev int32_t physical_minimum; 2441ffa5c63SVladimir Kondratyev int32_t physical_maximum; 2451ffa5c63SVladimir Kondratyev int32_t unit_exponent; 2461ffa5c63SVladimir Kondratyev int32_t unit; 2471ffa5c63SVladimir Kondratyev int32_t report_ID; 2481ffa5c63SVladimir Kondratyev /* Local */ 2491ffa5c63SVladimir Kondratyev int nusages; 2501ffa5c63SVladimir Kondratyev union { 2511ffa5c63SVladimir Kondratyev int32_t usage; 2521ffa5c63SVladimir Kondratyev int32_t usages[HID_ITEM_MAXUSAGE]; 2531ffa5c63SVladimir Kondratyev }; 2541ffa5c63SVladimir Kondratyev int32_t usage_minimum; 2551ffa5c63SVladimir Kondratyev int32_t usage_maximum; 2561ffa5c63SVladimir Kondratyev int32_t designator_index; 2571ffa5c63SVladimir Kondratyev int32_t designator_minimum; 2581ffa5c63SVladimir Kondratyev int32_t designator_maximum; 2591ffa5c63SVladimir Kondratyev int32_t string_index; 2601ffa5c63SVladimir Kondratyev int32_t string_minimum; 2611ffa5c63SVladimir Kondratyev int32_t string_maximum; 2621ffa5c63SVladimir Kondratyev int32_t set_delimiter; 2631ffa5c63SVladimir Kondratyev /* Misc */ 2641ffa5c63SVladimir Kondratyev int32_t collection; 2651ffa5c63SVladimir Kondratyev int collevel; 2661ffa5c63SVladimir Kondratyev enum hid_kind kind; 2671ffa5c63SVladimir Kondratyev uint32_t flags; 2681ffa5c63SVladimir Kondratyev /* Location */ 2691ffa5c63SVladimir Kondratyev struct hid_location loc; 2701ffa5c63SVladimir Kondratyev }; 2711ffa5c63SVladimir Kondratyev 27219758786SVladimir Kondratyev struct hid_absinfo { 27319758786SVladimir Kondratyev int32_t min; 27419758786SVladimir Kondratyev int32_t max; 27519758786SVladimir Kondratyev int32_t res; 27619758786SVladimir Kondratyev }; 27719758786SVladimir Kondratyev 27819758786SVladimir Kondratyev struct hid_device_info { 27919758786SVladimir Kondratyev char name[80]; 28019758786SVladimir Kondratyev char serial[80]; 28119758786SVladimir Kondratyev char idPnP[HID_PNP_ID_SIZE]; 28219758786SVladimir Kondratyev uint16_t idBus; 28319758786SVladimir Kondratyev uint16_t idVendor; 28419758786SVladimir Kondratyev uint16_t idProduct; 28519758786SVladimir Kondratyev uint16_t idVersion; 28619758786SVladimir Kondratyev hid_size_t rdescsize; /* Report descriptor size */ 28719758786SVladimir Kondratyev uint8_t autoQuirk[HID_MAX_AUTO_QUIRK]; 28819758786SVladimir Kondratyev }; 28919758786SVladimir Kondratyev 29019758786SVladimir Kondratyev struct hid_rdesc_info { 29119758786SVladimir Kondratyev void *data; 29219758786SVladimir Kondratyev hid_size_t len; 29319758786SVladimir Kondratyev hid_size_t isize; 29419758786SVladimir Kondratyev hid_size_t osize; 29519758786SVladimir Kondratyev hid_size_t fsize; 29619758786SVladimir Kondratyev uint8_t iid; 29719758786SVladimir Kondratyev uint8_t oid; 29819758786SVladimir Kondratyev uint8_t fid; 29919758786SVladimir Kondratyev /* Max sizes for HID requests supported by transport backend */ 30019758786SVladimir Kondratyev hid_size_t rdsize; 30119758786SVladimir Kondratyev hid_size_t wrsize; 30219758786SVladimir Kondratyev hid_size_t grsize; 30319758786SVladimir Kondratyev hid_size_t srsize; 30419758786SVladimir Kondratyev }; 30519758786SVladimir Kondratyev 30619758786SVladimir Kondratyev typedef void hid_intr_t(void *context, void *data, hid_size_t len); 30719758786SVladimir Kondratyev typedef bool hid_test_quirk_t(const struct hid_device_info *dev_info, 30819758786SVladimir Kondratyev uint16_t quirk); 30919758786SVladimir Kondratyev 31019758786SVladimir Kondratyev extern hid_test_quirk_t *hid_test_quirk_p; 31119758786SVladimir Kondratyev 3121ffa5c63SVladimir Kondratyev /* prototypes from "usb_hid.c" */ 3131ffa5c63SVladimir Kondratyev 31419758786SVladimir Kondratyev struct hid_data *hid_start_parse(const void *d, hid_size_t len, int kindset); 3151ffa5c63SVladimir Kondratyev void hid_end_parse(struct hid_data *s); 3161ffa5c63SVladimir Kondratyev int hid_get_item(struct hid_data *s, struct hid_item *h); 31719758786SVladimir Kondratyev int hid_report_size(const void *buf, hid_size_t len, enum hid_kind k, 31819758786SVladimir Kondratyev uint8_t id); 31919758786SVladimir Kondratyev int hid_report_size_max(const void *buf, hid_size_t len, enum hid_kind k, 3201ffa5c63SVladimir Kondratyev uint8_t *id); 32119758786SVladimir Kondratyev int hid_locate(const void *desc, hid_size_t size, int32_t usage, 3221ffa5c63SVladimir Kondratyev enum hid_kind kind, uint8_t index, struct hid_location *loc, 3231ffa5c63SVladimir Kondratyev uint32_t *flags, uint8_t *id); 32419758786SVladimir Kondratyev int32_t hid_get_data(const uint8_t *buf, hid_size_t len, 3251ffa5c63SVladimir Kondratyev struct hid_location *loc); 32619758786SVladimir Kondratyev uint32_t hid_get_udata(const uint8_t *buf, hid_size_t len, 3271ffa5c63SVladimir Kondratyev struct hid_location *loc); 32819758786SVladimir Kondratyev void hid_put_udata(uint8_t *buf, hid_size_t len, 3291ffa5c63SVladimir Kondratyev struct hid_location *loc, unsigned int value); 33019758786SVladimir Kondratyev int hid_is_collection(const void *desc, hid_size_t size, int32_t usage); 3311ffa5c63SVladimir Kondratyev int32_t hid_item_resolution(struct hid_item *hi); 3321ffa5c63SVladimir Kondratyev int hid_is_mouse(const void *d_ptr, uint16_t d_len); 3331ffa5c63SVladimir Kondratyev int hid_is_keyboard(const void *d_ptr, uint16_t d_len); 33419758786SVladimir Kondratyev bool hid_test_quirk(const struct hid_device_info *dev_info, uint16_t quirk); 33519758786SVladimir Kondratyev int hid_add_dynamic_quirk(struct hid_device_info *dev_info, 33619758786SVladimir Kondratyev uint16_t quirk); 33719758786SVladimir Kondratyev void hid_quirk_unload(void *arg); 338961a3535SVladimir Kondratyev 339961a3535SVladimir Kondratyev int hid_get_rdesc(device_t, void *, hid_size_t); 340961a3535SVladimir Kondratyev int hid_read(device_t, void *, hid_size_t, hid_size_t *); 341961a3535SVladimir Kondratyev int hid_write(device_t, const void *, hid_size_t); 342961a3535SVladimir Kondratyev int hid_get_report(device_t, void *, hid_size_t, hid_size_t *, uint8_t, 343961a3535SVladimir Kondratyev uint8_t); 344961a3535SVladimir Kondratyev int hid_set_report(device_t, const void *, hid_size_t, uint8_t, uint8_t); 345961a3535SVladimir Kondratyev int hid_set_idle(device_t, uint16_t, uint8_t); 346961a3535SVladimir Kondratyev int hid_set_protocol(device_t, uint16_t); 3471ffa5c63SVladimir Kondratyev #endif /* _KERNEL || _STANDALONE */ 34867de2db2SVladimir Kondratyev #endif /* _HID_HID_H_ */ 349