221 lines
4.7 KiB
C
221 lines
4.7 KiB
C
/*++
|
|
|
|
Copyright (c) 1996, 1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
hidir.h
|
|
|
|
--*/
|
|
#ifndef __HIDIR_H__
|
|
#define __HIDIR_H__
|
|
|
|
#include <hidusage.h>
|
|
|
|
//
|
|
// Declarations of HID descriptor formats
|
|
//
|
|
|
|
#include <PSHPACK1.H>
|
|
|
|
typedef UCHAR HID_REPORT_DESCRIPTOR, *PHID_REPORT_DESCRIPTOR;
|
|
|
|
typedef UCHAR HID_PHYSICAL_DESCRIPTOR, *PHID_PHYSICAL_DESCRIPTOR;
|
|
|
|
typedef struct _HIDIR_DESCRIPTOR
|
|
{
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
USHORT bcdHID;
|
|
UCHAR bCountry;
|
|
UCHAR bNumDescriptors;
|
|
|
|
/*
|
|
* This is an array of one OR MORE descriptors.
|
|
*/
|
|
struct _HIDIR_DESCRIPTOR_DESC_LIST {
|
|
UCHAR bDescriptorType;
|
|
USHORT wDescriptorLength;
|
|
} DescriptorList [1];
|
|
|
|
} HIDIR_DESCRIPTOR, * PHIDIR_DESCRIPTOR;
|
|
|
|
#include <POPPACK.H>
|
|
|
|
// Pool
|
|
#define HIDIR_POOL_TAG 'IdiH'
|
|
#define ALLOCATEPOOL(poolType, size) ExAllocatePoolWithTag((poolType), (size), HIDIR_POOL_TAG)
|
|
|
|
//
|
|
// Device Extension
|
|
//
|
|
// This data structure is hooked onto HIDCLASS' device extension, so both drivers can
|
|
// have their own private data on each device object.
|
|
//
|
|
|
|
#define HIDIR_REPORT_SIZE sizeof(ULONG)
|
|
#define HIDIR_TABLE_ENTRY_SIZE(rl) (sizeof(ULONG) + (((rl)+0x00000003)&(~0x00000003)))
|
|
|
|
typedef struct _USAGE_TABLE_ENTRY {
|
|
ULONG IRString;
|
|
UCHAR UsageString[1];
|
|
} USAGE_TABLE_ENTRY, *PUSAGE_TABLE_ENTRY;
|
|
|
|
typedef struct _HIDIR_EXTENSION
|
|
{
|
|
// What state has pnp got me in?
|
|
ULONG DeviceState;
|
|
|
|
// Ref counting
|
|
LONG NumPendingRequests;
|
|
KEVENT AllRequestsCompleteEvent;
|
|
|
|
// My hid bth device object.
|
|
PDEVICE_OBJECT DeviceObject;
|
|
|
|
// Descriptors: HID, report, and physical
|
|
HIDIR_DESCRIPTOR HidDescriptor;
|
|
PHID_REPORT_DESCRIPTOR ReportDescriptor;
|
|
ULONG ReportLength;
|
|
|
|
BOOLEAN QueryRemove;
|
|
|
|
// VID, PID, and version
|
|
USHORT VendorID;
|
|
USHORT ProductID;
|
|
USHORT VersionNumber;
|
|
|
|
ULONG NumUsages;
|
|
PUCHAR MappingTable;
|
|
USAGE_TABLE_ENTRY PreviousButton;
|
|
BOOLEAN ValidUsageSentLastTime[3];
|
|
|
|
BOOLEAN KeyboardReportIdValid;
|
|
UCHAR KeyboardReportId;
|
|
BOOLEAN StandbyReportIdValid;
|
|
UCHAR StandbyReportId;
|
|
|
|
DEVICE_POWER_STATE DevicePowerState;
|
|
KTIMER IgnoreStandbyTimer;
|
|
} HIDIR_EXTENSION, *PHIDIR_EXTENSION;
|
|
|
|
#define DEVICE_STATE_NONE 0
|
|
#define DEVICE_STATE_STARTING 1
|
|
#define DEVICE_STATE_RUNNING 2
|
|
#define DEVICE_STATE_STOPPING 3
|
|
#define DEVICE_STATE_STOPPED 4
|
|
#define DEVICE_STATE_REMOVING 5
|
|
|
|
//
|
|
// Device Extension Macros
|
|
//
|
|
|
|
#define GET_MINIDRIVER_HIDIR_EXTENSION(DO) ((PHIDIR_EXTENSION) (((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->MiniDeviceExtension))
|
|
|
|
#define GET_NEXT_DEVICE_OBJECT(DO) (((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->NextDeviceObject)
|
|
|
|
//
|
|
// Turn on debug printing and breaking, if appropriate
|
|
//
|
|
|
|
#if DBG
|
|
#define DBGPrint(arg) DbgPrint arg
|
|
#define DBGBREAK DbgBreakPoint()
|
|
#else
|
|
#define DBGPrint(arg)
|
|
#define DBGBREAK
|
|
#endif
|
|
|
|
//
|
|
// Function prototypes
|
|
//
|
|
|
|
NTSTATUS
|
|
DriverEntry(
|
|
IN PDRIVER_OBJECT DriverObject,
|
|
IN PUNICODE_STRING registryPath
|
|
);
|
|
|
|
NTSTATUS
|
|
HidIrIoctl(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
NTSTATUS
|
|
HidIrPnP(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
NTSTATUS
|
|
HidIrPower(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
NTSTATUS
|
|
HidIrAddDevice(
|
|
IN PDRIVER_OBJECT DriverObject,
|
|
IN PDEVICE_OBJECT FunctionalDeviceObject
|
|
);
|
|
|
|
VOID
|
|
HidIrUnload(
|
|
IN PDRIVER_OBJECT DriverObject
|
|
);
|
|
|
|
NTSTATUS
|
|
HidIrGetDeviceAttributes(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
NTSTATUS
|
|
HidIrGetHidDescriptor(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp,
|
|
IN USHORT DescriptorType
|
|
);
|
|
|
|
NTSTATUS
|
|
HidIrReadReport(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp,
|
|
OUT BOOLEAN *NeedsCompletion
|
|
);
|
|
|
|
NTSTATUS
|
|
HidIrIncrementPendingRequestCount(
|
|
IN PHIDIR_EXTENSION DeviceExtension
|
|
);
|
|
|
|
VOID
|
|
HidIrDecrementPendingRequestCount(
|
|
IN PHIDIR_EXTENSION DeviceExtension
|
|
);
|
|
|
|
NTSTATUS
|
|
HidIrSystemControl(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
NTSTATUS
|
|
HidIrSynchronousCompletion(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp,
|
|
IN PVOID Context
|
|
);
|
|
|
|
NTSTATUS
|
|
HidIrCallDriverSynchronous(
|
|
PDEVICE_OBJECT DeviceObject,
|
|
PIRP Irp
|
|
);
|
|
|
|
extern ULONG RunningMediaCenter;
|
|
|
|
#endif // _HIDIR_H__
|
|
|