//************************************************************************** // // MSGAME.H -- Xena Gaming Project // // Version 3.XX // // Copyright (c) 1997 Microsoft Corporation. All rights reserved. // // @doc // @header MSGAME.H | Global includes and definitions for gameport driver. //************************************************************************** #ifndef __MSGAME_H__ #define __MSGAME_H__ #ifdef SAITEK #define MSGAME_NAME "SAIGAME" #else #define MSGAME_NAME "MSGAME" #endif //--------------------------------------------------------------------------- // Public Include Files //--------------------------------------------------------------------------- #include #include #include #include #include #include //--------------------------------------------------------------------------- // Types //--------------------------------------------------------------------------- // @type GAMEPORT | Retyped to avoid long function declarations typedef GAMEENUM_PORT_PARAMETERS GAMEPORT; typedef GAMEENUM_PORT_PARAMETERS *PGAMEPORT; typedef struct { // @struct GAME_WORK_ITEM | Game change structure WORK_QUEUE_ITEM QueueItem; // @field Work queue item for passive callback PDEVICE_OBJECT DeviceObject; // @field Device object for subsequent change GAMEPORT PortInfo; // @field Game port parameters } GAME_WORK_ITEM, *PGAME_WORK_ITEM; // @type HID_REPORT_ID | Retyped for portability and readability typedef UCHAR HID_REPORT_ID; typedef UCHAR *PHID_REPORT_ID; //--------------------------------------------------------------------------- // Transaction Types //--------------------------------------------------------------------------- typedef enum { // @enum MSGAME_TRANSACTION | Device transaction types MSGAME_TRANSACT_NONE, // @emem No transaction type MSGAME_TRANSACT_RESET, // @emem Reset transaction type MSGAME_TRANSACT_DATA, // @emem Data transaction type MSGAME_TRANSACT_ID, // @emem Id transaction type MSGAME_TRANSACT_STATUS, // @emem Status transaction type MSGAME_TRANSACT_SPEED, // @emem Speed transaction type MSGAME_TRANSACT_GODIGITAL, // @emem GoDigital transaction type MSGAME_TRANSACT_GOANALOG // @emem GoAnalog transaction type } MSGAME_TRANSACTION; //--------------------------------------------------------------------------- // Local Include Files //--------------------------------------------------------------------------- #include "debug.h" #include "device.h" #include "timer.h" #include "portio.h" #define public //--------------------------------------------------------------------------- // Definitions //--------------------------------------------------------------------------- #ifdef SAITEK #define MSGAME_VENDOR_ID ((USHORT)'SA') #else #define MSGAME_VENDOR_ID ((USHORT)0x045E) #endif #define MSGAME_VERSION_NUMBER ((USHORT)3) #define MSGAME_HID_VERSION 0x0100 #define MSGAME_HID_COUNTRY 0x0000 #define MSGAME_HID_DESCRIPTORS 0x0001 #define MSGAME_AUTODETECT_ID L"Gameport\\SideWinderGameController\0\0" //--------------------------------------------------------------------------- // Structures //--------------------------------------------------------------------------- typedef struct { // @struct DEVICE_EXTENSION | Device extension data PDRIVER_OBJECT Driver; // @field A back pointer to the actual DriverObject PDEVICE_OBJECT Self; // @field A back pointer to the actual DeviceObject LONG IrpCount; // @field 1 biased count of why object sticks around BOOLEAN Started; // @field This device has been started BOOLEAN Removed; // @field This device has been removed BOOLEAN Surprised; // @field This device has been surprise removed BOOLEAN Removing; // @field This device is being removed PDEVICE_OBJECT TopOfStack; // @field The top of the device stack beneath this device GAMEPORT PortInfo; // @field Game resource info structure filled by GameEnumerator KEVENT StartEvent; // @field An event to sync the start IRP. KEVENT RemoveEvent; // @field An event to synch outstandIO to zero } DEVICE_EXTENSION, *PDEVICE_EXTENSION; //--------------------------------------------------------------------------- // 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) #define STD0(txt) #txt #define STD1(txt) STD0(txt) #define STILL_TO_DO(txt) message("\nSTILL TO DO: "__FILE__"("STD1(__LINE__)"): "#txt"\n") #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) #define EXCHANGE(x,y) ((x)^=(y)^=(x)^=(y)) #define TOUPPER(x) ((x>='a'&&x<='z')?x-'a'+'A':x) //--------------------------------------------------------------------------- // Procedures //--------------------------------------------------------------------------- NTSTATUS DriverEntry ( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING registryPath ); NTSTATUS MSGAME_CreateClose ( IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp ); NTSTATUS MSGAME_SystemControl ( IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp ); NTSTATUS MSGAME_AddDevice ( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject ); VOID MSGAME_Unload ( IN PDRIVER_OBJECT DriverObject ); VOID MSGAME_ReadRegistry ( PCHAR DeviceName, PDEVICE_VALUES DeviceValues ); NTSTATUS MSGAME_Internal_Ioctl ( IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp ); NTSTATUS MSGAME_GetDeviceDescriptor ( IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp ); NTSTATUS MSGAME_GetReportDescriptor ( IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp ); NTSTATUS MSGAME_GetAttributes ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS MSGAME_GetFeature ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS MSGAME_ReadReport ( IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp ); PWCHAR MSGAME_GetHardwareId ( IN PDEVICE_OBJECT DeviceObject ); BOOLEAN MSGAME_CompareHardwareIds ( IN PWCHAR HardwareId, IN PWCHAR DeviceId ); VOID MSGAME_FreeHardwareId ( IN PWCHAR HardwareId ); NTSTATUS MSGAME_PnP ( IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp ); NTSTATUS MSGAME_PnPComplete ( IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp, IN PVOID Context ); NTSTATUS MSGAME_StartDevice ( IN PDEVICE_EXTENSION pDevExt, IN PIRP pIrp ); VOID MSGAME_StopDevice ( IN PDEVICE_EXTENSION pDevExt, IN BOOLEAN TouchTheHardware ); NTSTATUS MSGAME_Power ( IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp ); NTSTATUS MSGAME_GetResources ( IN PDEVICE_EXTENSION pDevExt, IN PIRP pIrp ); NTSTATUS MSGAME_GetResourcesComplete ( IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp, IN PVOID Context ); VOID MSGAME_PostTransaction ( IN PPACKETINFO PacketInfo ); NTSTATUS MSGAME_CreateDevice ( IN PDEVICE_OBJECT DeviceObject ); NTSTATUS MSGAME_RemoveDevice ( IN PDEVICE_OBJECT DeviceObject ); NTSTATUS MSGAME_ChangeDevice ( IN PDEVICE_OBJECT DeviceObject ); //=========================================================================== // End //=========================================================================== #endif // __MSGAME_H__