/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _SYS_USB_HID_H #define _SYS_USB_HID_H #include #ifdef __cplusplus extern "C" { #endif #define USB_DESCR_TYPE_HID 0x21 #define USB_HID_DESCR_SIZE 10 /* Hid descriptor length */ /* * HID : This header file defines the interface between the hid * module and the hid driver. */ /* * There is an M_CTL command per class specific HID command defined in * section 7.2 of the specification. */ #define HID_GET_REPORT 0x0001 /* receive report */ #define HID_GET_IDLE 0x0002 /* find the idle value */ #define HID_GET_PROTOCOL 0x0003 /* get the protocol */ #define HID_SET_REPORT 0x0009 /* send a report to device */ #define HID_SET_IDLE 0x000a /* set the idle value */ #define HID_SET_PROTOCOL 0x000b /* set the protocol */ /* * Hid descriptor */ typedef struct usb_hid_descr { uchar_t bLength; /* Size of this descriptor */ uchar_t bDescriptorType; /* HID descriptor */ ushort_t bcdHID; /* HID spec release */ uchar_t bCountryCode; /* Country code */ uchar_t bNumDescriptors; /* No. class descriptors */ uchar_t bReportDescriptorType; /* Class descr. type */ ushort_t wReportDescriptorLength; /* size of report descr */ } usb_hid_descr_t; /* * Hid device information */ typedef struct hid_vid_pid { uint16_t VendorId; /* vendor ID */ uint16_t ProductId; /* product ID */ } hid_vid_pid_t; /* * Hid will turn the M_CTL request into a request control request on the * default pipe. Hid needs the following information in the hid_req_t * structure. See the details below for specific values for each command. * hid_req_data is a 256-byte buffer, which is used to transfer input, output * and feature report(hid specification 6.2.2.3 long items). */ #define MAX_REPORT_DATA 256 typedef struct hid_req_struct { uint16_t hid_req_version_no; /* Version number */ uint16_t hid_req_wValue; /* wValue field of request */ uint16_t hid_req_wLength; /* wLength of request */ uchar_t hid_req_data[MAX_REPORT_DATA]; /* data for send case */ } hid_req_t; _NOTE(SCHEME_PROTECTS_DATA("unique per call", hid_req_t)) /* * hid_req_wValue values HID_GET_REPORT and HID_SET_REPORT */ #define REPORT_TYPE_INPUT 0x0100 /* Input report */ #define REPORT_TYPE_OUTPUT 0x0200 /* Output report */ #define REPORT_TYPE_FEATURE 0x0300 /* Feature report */ /* * hid_req_wLength value for HID_GET_IDLE and HID_SET_IDLE */ #define GET_IDLE_LENGTH 0x0001 #define SET_IDLE_LENGTH 0x0000 /* * hid_req_wValue values for SET_PROTOCOL */ #define SET_BOOT_PROTOCOL 0x0000 /* Boot protocol */ #define SET_REPORT_PROTOCOL 0x0001 /* Report protocol */ /* * return values for GET_PROTOCOL */ #define BOOT_PROTOCOL 0x00 /* Returned boot protocol */ #define REPORT_PROTOCOL 0x01 /* Returned report protocol */ /* * There is an additional M_CTL command for obtaining the * hid parser handle. This M_CTL returns a pointer to the handle. * The type of the pointer is intpr_t because this type is large enough to * hold any data pointer. */ #define HID_GET_PARSER_HANDLE 0x0100 /* obtain parser handle */ /* * The M_CTL command is to get the device vendor ID and product ID. */ #define HID_GET_VID_PID 0x0200 /* obtain device info */ /* * M_CTL commands for event notifications */ #define HID_POWER_OFF 0x00DC #define HID_FULL_POWER 0x00DD #define HID_DISCONNECT_EVENT 0x00DE #define HID_CONNECT_EVENT 0x00DF /* * To get the report descriptor, * This is the wValue */ #define USB_CLASS_DESCR_TYPE_REPORT 0x2200 /* Version numbers */ #define HID_VERSION_V_0 0 /* * HID IOCTLS */ #define HIDIOC ('h'<<8) /* * Each hid keyboard/mouse device instance has two streams (internal/external). * This pair of ioctls is used to get/set which stream the input data should * be sent to. */ #define HIDIOCKMGDIRECT (HIDIOC | 0) #define HIDIOCKMSDIRECT (HIDIOC | 1) #ifdef __cplusplus } #endif #endif /* _SYS_USB_HID_H */