352 lines
8.6 KiB
C
352 lines
8.6 KiB
C
|
/***************************************************************************
|
|||
|
*
|
|||
|
* 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 */
|
|||
|
|