Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

352 lines
8.6 KiB

/***************************************************************************
*
* Copyright (C) 1997 Microsoft Corporation. All Rights Reserved.
*
* File: digsport.h
* Content: DirectInput internal include file for HID
*
***************************************************************************/
#ifndef __DIPORT_H
#define __DIPORT_H
/* Forward define */
typedef struct _BUSDEVICE BUSDEVICE, *PBUSDEVICE;
/*****************************************************************************
*
* @doc INTERNAL
*
* @struct BUS_REGDATA
* Persistent Data, written to the registry for each gameport device.
* Contains information on how to reexpose the analog joystick device
* on reboot.
*
* @field DWORD | dwSize |
* Size of the structure.
*
* @field USHORT | uVID |
* Vendor ID.
*
* @field USHORT | uPID |
* Product ID.
*
* @field USHORT | nJoysticks |
* Number of joysticks attached to this gameport.
*
* @field USHORT | nAxes |
* Number of axes in each joystick.
*
* @field PVOID | hHardwareHandle |
* Hardware handle returned by EXPOSE IOCTL to gameenum.
* Needed to remove the joystick device.
*
* @field BOOLEAN | fAttachOnReboot |
* Flag that is cleared when a device is exposed and set when
* the device is found to be OK. Used to prevent reloading
* of a device that crashes immediately.
*
* @field JOYREGHWSSETTINGS | hws |
* Joystick Hardware settings.
*
* @field WCHAR | wszHardwareId |
* PnP hardware ID for the joystick.
*
*****************************************************************************/
typedef struct _BUS_REGDATA
{
/* Size of structure */
DWORD dwSize;
/* VID PID for this device */
USHORT uVID;
USHORT uPID;
/* Number of joysticks to expose */
USHORT nJoysticks;
USHORT nAxes;
/* Hardware settings for joystick */
PVOID hHardware;
/* Flag whether or not device should be re-exposed */
BOOLEAN fAttachOnReboot;
/* Joystick Hardware settings */
JOYREGHWSETTINGS hws;
DWORD dwFlags1;
/* An array of (zero terminated wide character
* strings). The array itself also null terminated
*/
WCHAR wszHardwareId[MAX_JOYSTRING];
} BUS_REGDATA, *PBUS_REGDATA;
/*****************************************************************************
*
* @doc INTERNAL
*
* @struct BUSDEVICEINFO
* Data about each instance of bus devices ( gameport / serial port, etc .. )
*
* @field PBUSDEVICE | pBusDevice |
* Address of the BusDevice struct.
*
* @field PSP_DEVICE_INTERFACE_DETAIL_DATA | pdidd |
* Device interface detail data.
*
* @field GUID | guid |
* Instance GUID for the device.
*
* @field int | idPort |
* Unique ID for the gameport.
*
* @field int | idJoy |
* Id of one of the joysticks attached to this gameport.
*
* @field HKEY | hk |
* Registry key that contains configuration information.
* Sadly, we must keep it open because there is no way to
* obtain the name of the key, and the only way to open the
* key is inside an enumeration.
*
* @field LPTSTR | ptszId |
* Device path to access the gameport for read / write.
*
* @field BOOL | fAttached |
* True is device is attached.
*
* @field BOOL | fDeleteIfNotConnected |
* Flag that indicates that the device should be deleted if it
* is not connected.
*
*******************************************************************************/
typedef struct _BUSDEVICEINFO
{
PBUSDEVICE pBusDevice;
PSP_DEVICE_INTERFACE_DETAIL_DATA pdidd;
GUID guid;
int idPort;
int idJoy;
HKEY hk;
LPTSTR ptszId;
BOOL fAttached;
BOOL fDeleteIfNotConnected;
} BUSDEVICEINFO, *PBUSDEVICEINFO;
/*****************************************************************************
*
* @doc INTERNAL
*
* @struct BUSDEVICELIST |
*
* Records information about all the HID devices.
*
* @field int | cbdi |
*
* Number of items in the list that are in use.
*
* @field int | cbdiAlloc |
*
* Number of items allocated in the list.
*
* @field BUSDEVICEINFO | rgbdi[0] |
*
* Variable-size array of device information structures.
*
*****************************************************************************/
typedef struct _BUSDEVICELIST
{
int cgbi;
int cgbiAlloc;
BUSDEVICEINFO rgbdi[0];
} BUSDEVICELIST, *PBUSDEVICELIST;
/*****************************************************************************
*
* @doc INTERNAL
*
* @struct BUSDEVICE |
*
* Data specific to each bus ( gameport / serialPort ).
*
* @field PBUSDEVICE | pbdl |
* List of devices on a bus.
*
* @field PCGUID | pcGuid |
* Device GUID for the bus.
*
* @field DWORD | tmLastRebuild |
* Last time the bus device list was rebuild.
*
* @field const int | ioctl_EXPOSE |
* IOCTL to expose a device.
*
* @field const int | ioclt_REMOVE |
* IOCTL to remove a device.
*
* @field const int | ioctl_DESC |
* IOCTL to obtain description of the bus.
*
* @field const int | ioctl_PARAMETERS |
*
* @field const int | ioctl_EXPOSE_SIBLING |
*
* @field const int | ioctl_REMOVE_SELF |
*
* @field const int | dw_IDS_STDPORT |
* index into the IDS String table for text associated with device.
*
* @field const int | dw_JOY_HWS_ISPORTBUS |
*
*****************************************************************************/
typedef struct _BUSDEVICE
{
D(TCHAR wszBusType[MAX_PATH];)
PBUSDEVICELIST pbdl;
PCGUID pcGuid;
DWORD tmLastRebuild;
const int ioctl_EXPOSE;
const int ioctl_REMOVE;
const int ioctl_DESC;
const int ioctl_PARAMETERS;
const int ioctl_EXPOSE_SIBLING;
const int ioctl_REMOVE_SELF;
const int dwIDS_STDPORT;
const int dwJOY_HWS_ISPORTBUS;
} BUSDEVICE, *PBUSDEVICE;
extern BUSDEVICE g_pBusDevice[];
#define cbGdlCbdi(cbdi) FIELD_OFFSET(BUSDEVICELIST, rgbdi[cbdi])
/*
* We choose our starting point at 2 devices, since most machines
* will have one gameport/serialport bus.
* The maximum number is chosen at randomn
*/
#define cgbiMax 32
#define cgbiInit 2 // Most machines will have only one gameport bus, two serialports
#define MAX_PORT_BUSES 16
PBUSDEVICEINFO INTERNAL
pbdiFromphdi
(
IN PHIDDEVICEINFO phdi
);
PHIDDEVICEINFO INTERNAL
phdiFrompbdi
(
IN PBUSDEVICEINFO pbdi
);
PBUSDEVICEINFO EXTERNAL
pbdiFromJoyId
(
IN int idJoy
);
PBUSDEVICEINFO EXTERNAL
pbdiFromGUID
(
IN PCGUID pguid
);
HRESULT EXTERNAL
DIBusDevice_Expose
(
IN HANDLE hf,
IN OUT PBUS_REGDATA pRegData
);
HRESULT INTERNAL
DIBusDevice_Remove
(
IN PBUSDEVICEINFO pbdi
);
HRESULT INTERNAL
DIBusDevice_SetRegData
(
IN HKEY hk,
IN PBUS_REGDATA pRegData
);
HRESULT INTERNAL
DIBusDevice_GetRegData
(
IN HKEY hk,
OUT PBUS_REGDATA pRegData
);
BOOL INTERNAL
DIBusDevice_BuildListEntry
(
HDEVINFO hdev,
PSP_DEVICE_INTERFACE_DATA pdid,
PBUSDEVICE pBusDevice
);
void INTERNAL
DIBus_EmptyList
(
PBUSDEVICELIST *ppbdl
);
void EXTERNAL
DIBus_FreeMemory();
HRESULT EXTERNAL
DIBus_InitId
(
PBUSDEVICELIST pbdl
);
ULONG EXTERNAL
DIBus_BuildList
(
IN BOOL fForce
);
PBUSDEVICELIST EXTERNAL
pbdlFromGUID
(
IN PCGUID pcGuid
);
HRESULT EXTERNAL
DIBusDevice_ExposeEx
(
IN PBUSDEVICELIST pbdl,
IN PBUS_REGDATA pRegData
);
HRESULT EXTERNAL
DIBusDevice_GetTypeInfo
(
PCGUID guid,
LPDIJOYTYPEINFO pjti,
DWORD fl
);
HRESULT EXTERNAL DIPort_SnapTypes(LPWSTR *ppwszz);
#endif /* __DIPORT_H */