|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
buttons.h
Abstract: Contains definitions of all constants and data types for the serial pen hid driver.
Environment:
Kernel mode
Author:
Michael Tsang (MikeTs) 13-Apr-2000
Revision History:
--*/
#ifndef _BUTTONS_H
#define _BUTTONS_H
//
// Constants
//
#define HBUT_POOL_TAG 'tubH'
#define STUCK_DETECTION_RETRIES 5
#define MAX_STUCK_COUNT 6
// dwfHBut flag values
#define HBUTF_DEVICE_STARTED 0x00000001
#define HBUTF_DEVICE_REMOVED 0x00000002
#define HBUTF_INTERRUPT_CONNECTED 0x00000004
#define HBUTF_DEBOUNCE_TIMER_SET 0x00000008
//
// Macros
//
#define GET_MINIDRIVER_DEVICE_EXTENSION(DO) \
((PDEVICE_EXTENSION)(((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->MiniDeviceExtension)) #define GET_NEXT_DEVICE_OBJECT(DO) \
(((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->NextDeviceObject)
//
// Type Definitions
//
typedef struct _DEVICE_EXTENSION { #ifdef DEBUG
LIST_ENTRY List; //list of of other tablet devices
#endif
ULONG dwfHBut; //flags
IO_REMOVE_LOCK RemoveLock; //to protect IRP_MN_REMOVE_DEVICE
CM_PARTIAL_RESOURCE_DESCRIPTOR IORes;//button port resource
CM_PARTIAL_RESOURCE_DESCRIPTOR IRQRes;//button IRQ resource
PKINTERRUPT InterruptObject; //location of the interrupt object
KSPIN_LOCK SpinLock; LIST_ENTRY PendingIrpList; LARGE_INTEGER DebounceTime; KTIMER DebounceTimer; KDPC TimerDpc; UCHAR LastButtonState; UCHAR StuckButtonsMask; UCHAR bStuckCount; } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
//
// Global Data Declarations
//
//
// Function prototypes
//
// buttons.c
NTSTATUS EXTERNAL DriverEntry( IN PDRIVER_OBJECT DrvObj, IN PUNICODE_STRING RegPath );
NTSTATUS EXTERNAL HbutCreateClose( IN PDEVICE_OBJECT DevObj, IN PIRP Irp );
NTSTATUS EXTERNAL HbutAddDevice( IN PDRIVER_OBJECT DrvObj, IN PDEVICE_OBJECT DevObj );
VOID EXTERNAL HbutUnload( IN PDRIVER_OBJECT DrvObj );
// pnp.c
NTSTATUS EXTERNAL HbutPnp( IN PDEVICE_OBJECT DevObj, IN PIRP Irp );
NTSTATUS EXTERNAL HbutPower( IN PDEVICE_OBJECT DevObj, IN PIRP Irp );
NTSTATUS INTERNAL StartDevice( IN PDEVICE_OBJECT DevObj, IN PIRP Irp );
VOID INTERNAL RemoveDevice( PDEVICE_OBJECT DevObj, PIRP Irp );
NTSTATUS INTERNAL SendSyncIrp( IN PDEVICE_OBJECT DevObj, IN PIRP Irp, IN BOOLEAN fCopyToNext );
NTSTATUS INTERNAL IrpCompletion( IN PDEVICE_OBJECT DevObj, IN PIRP Irp, IN PKEVENT Event );
// ioctl.c
NTSTATUS EXTERNAL HbutInternalIoctl( IN PDEVICE_OBJECT DevObj, IN PIRP Irp );
NTSTATUS INTERNAL GetDeviceDescriptor( IN PDEVICE_OBJECT DevObj, IN PIRP Irp );
NTSTATUS INTERNAL GetReportDescriptor( IN PDEVICE_OBJECT DevObj, IN PIRP Irp );
NTSTATUS INTERNAL ReadReport( IN PDEVICE_OBJECT DevObj, IN PIRP Irp );
VOID EXTERNAL ReadReportCanceled( IN PDEVICE_OBJECT DevObj, IN PIRP Irp );
NTSTATUS INTERNAL GetString( PDEVICE_OBJECT DevObj, PIRP Irp );
NTSTATUS INTERNAL GetAttributes( PDEVICE_OBJECT DevObj, PIRP Irp );
// oembutton.c
BOOLEAN EXTERNAL OemInterruptServiceRoutine( IN PKINTERRUPT Interrupt, IN PDEVICE_EXTENSION DevExt );
VOID EXTERNAL OemButtonDebounceDpc( IN PKDPC Dpc, IN PDEVICE_EXTENSION DevExt, IN PVOID SysArg1, IN PVOID SysArg2 );
// misc.c
PCM_PARTIAL_RESOURCE_DESCRIPTOR INTERNAL RtlUnpackPartialDesc( IN UCHAR ResType, IN PCM_RESOURCE_LIST ResList, IN OUT PULONG Count );
#endif //ifndef _BUTTONS_H
|