/*++ Copyright (c) Microsoft 1998, All Rights Reserved Module Name: hid.h Abstract: This module contains the declarations and definitions for use with the hid user mode client sample driver. Environment: Kernel & user mode @@BEGIN_DDKSPLIT Revision History: Nov-96 : Created by Kenneth D. Ray @@END_DDKSPLIT --*/ #ifndef HID_H #define HID_H #include "hidsdi.h" #include "setupapi.h" typedef struct _SP_FNCLASS_DEVICE_DATA { DWORD cbSize; GUID FunctionClassGuid; TCHAR DevicePath [ANYSIZE_ARRAY]; } SP_FNCLASS_DEVICE_DATA, *PSP_FNCLASS_DEVICE_DATA; BOOLEAN SetupDiGetFunctionClassDeviceInfo ( IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, OUT PSP_FNCLASS_DEVICE_DATA FunctionClassDeviceData, IN DWORD FunctionClassDeviceDataSize, OUT PDWORD RequiredSize ); #define ASSERT(x) // // A structure to hold the steady state data received from the hid device. // Each time a read packet is received we fill in this structure. // Each time we wish to write to a hid device we fill in this structure. // This structure is here only for convenience. Most real applications will // have a more efficient way of moving the hid data to the read, write, and // feature routines. // typedef struct _HID_DATA { BOOLEAN IsButtonData; UCHAR Reserved; USAGE UsagePage; // The usage page for which we are looking. ULONG Status; // The last status returned from the accessor function // when updating this field. ULONG ReportID; // ReportID for this given data structure BOOLEAN IsDataSet; // Variable to track whether a given data structure // has already been added to a report structure union { struct { ULONG UsageMin; // Variables to track the usage minimum and max ULONG UsageMax; // If equal, then only a single usage ULONG MaxUsageLength; // Usages buffer length. PUSAGE Usages; // list of usages (buttons ``down'' on the device. } ButtonData; struct { USAGE Usage; // The usage describing this value; USHORT Reserved; ULONG Value; LONG ScaledValue; } ValueData; }; } HID_DATA, *PHID_DATA; typedef struct _HID_DEVICE { PCHAR DevicePath; HANDLE HidDevice; // A file handle to the hid device. BOOL OpenedForRead; BOOL OpenedForWrite; BOOL OpenedOverlapped; BOOL OpenedExclusive; PHIDP_PREPARSED_DATA Ppd; // The opaque parser info describing this device HIDP_CAPS Caps; // The Capabilities of this hid device. HIDD_ATTRIBUTES Attributes; PCHAR InputReportBuffer; PHID_DATA InputData; // array of hid data structures ULONG InputDataLength; // Num elements in this array. PHIDP_BUTTON_CAPS InputButtonCaps; PHIDP_VALUE_CAPS InputValueCaps; PCHAR OutputReportBuffer; PHID_DATA OutputData; ULONG OutputDataLength; PHIDP_BUTTON_CAPS OutputButtonCaps; PHIDP_VALUE_CAPS OutputValueCaps; PCHAR FeatureReportBuffer; PHID_DATA FeatureData; ULONG FeatureDataLength; PHIDP_BUTTON_CAPS FeatureButtonCaps; PHIDP_VALUE_CAPS FeatureValueCaps; } HID_DEVICE, *PHID_DEVICE; BOOLEAN OpenHidDevice ( IN PCHAR DevicePath, IN BOOL HasReadAccess, IN BOOL HasWriteAccess, IN BOOL IsOverlapped, IN BOOL IsExclusive, IN BOOL GetDeviceInfo, IN OUT PHID_DEVICE HidDevice ); BOOLEAN FindKnownHidDevices ( OUT PHID_DEVICE * HidDevices, // A array of struct _HID_DEVICE OUT PULONG NumberDevices // the length of this array. ); BOOLEAN FillDeviceInfo( IN PHID_DEVICE HidDevice ); VOID CloseHidDevices ( OUT PHID_DEVICE HidDevices, // A array of struct _HID_DEVICE OUT ULONG NumberDevices // the length of this array. ); VOID CloseHidDevice ( IN PHID_DEVICE HidDevice, IN BOOL FreeDeviceInfo ); BOOLEAN Read ( PHID_DEVICE HidDevice ); BOOLEAN ReadOverlapped ( PHID_DEVICE HidDevice, HANDLE CompletionEvent ); BOOLEAN Write ( PHID_DEVICE HidDevice ); BOOLEAN UnpackReport ( IN PCHAR ReportBuffer, IN USHORT ReportBufferLength, IN HIDP_REPORT_TYPE ReportType, IN OUT PHID_DATA Data, IN ULONG DataLength, IN PHIDP_PREPARSED_DATA Ppd ); BOOLEAN SetFeature ( PHID_DEVICE HidDevice ); BOOLEAN GetFeature ( PHID_DEVICE HidDevice ); #endif