190 lines
4.9 KiB
C
190 lines
4.9 KiB
C
|
/*++
|
||
|
|
||
|
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
|