/**************************************************************************** * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY * KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR * PURPOSE. * * Copyright (c) 1994 - 1998 Microsoft Corporation. All Rights Reserved. * * File: vjoyd.h * Content: include file for describing VJoyD mini-driver communications * * ***************************************************************************/ #ifndef __VJOYD_INCLUDED__ #define __VJOYD_INCLUDED__ /* * define all types and macros necessary to include dinputd.h */ #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #ifndef FAR #define FAR #endif #ifndef NEAR #define NEAR #endif #ifndef DWORD typedef ULONG DWORD; #endif typedef DWORD FAR *LPDWORD; #ifndef LPVOID typedef void FAR *LPVOID; #endif #ifndef PVOID typedef void FAR *PVOID; #endif typedef long LONG; typedef long FAR *LPLONG; typedef char FAR *LPSTR; #ifndef WCHAR typedef unsigned short WCHAR; typedef unsigned short FAR *PWCHAR; #endif #ifndef UNICODE_STRING typedef struct UNICODE_STRING { /* us */ WORD Length; WORD MaximumLength; PWCHAR Buffer; } UNICODE_STRING, FAR *PUNICODE_STRING; #endif #define DIJ_RINGZERO #define _INC_MMSYSTEM /* * Make joyConfigChanged compile */ #ifndef WINMMAPI #define WINMMAPI __declspec(dllimport) #endif #ifndef MMRESULT typedef UINT MMRESULT; /* error return code, 0 means no error */ #endif #ifndef WINAPI #define WINAPI #endif #include #include #include #include #include "vjoydapi.h" /* * Make sure HID types have been defined */ #ifndef USAGE typedef USHORT USAGE; typedef USHORT FAR *PUSAGE; #endif #ifndef USAGE_AND_PAGE typedef struct USAGE_AND_PAGE { USAGE Usage; USAGE UsagePage; } USAGE_AND_PAGE; typedef struct USAGE_AND_PAGE FAR *PUSAGE_AND_PAGE; #endif /* * joystick ports */ #define MIN_JOY_PORT 0x200 #define MAX_JOY_PORT 0x20F #define DEFAULT_JOY_PORT 0x201 /* * Poll types * passed in the type field to a Win95 interface poll callback */ #define JOY_OEMPOLL_POLL1 0 #define JOY_OEMPOLL_POLL2 1 #define JOY_OEMPOLL_POLL3 2 #define JOY_OEMPOLL_POLL4 3 #define JOY_OEMPOLL_POLL5 4 #define JOY_OEMPOLL_POLL6 5 #define JOY_OEMPOLL_GETBUTTONS 6 #define JOY_OEMPOLL_PASSDRIVERDATA 7 /* * Axis numbers used for single axis (JOY_OEMPOLL_POLL1) polls */ #define JOY_AXIS_X 0 #define JOY_AXIS_Y 1 #define JOY_AXIS_Z 2 #define JOY_AXIS_R 3 #define JOY_AXIS_U 4 #define JOY_AXIS_V 5 /* * joystick error return values */ #define JOYERR_BASE 160 #define JOYERR_NOERROR (0) /* no error */ #define JOYERR_PARMS (JOYERR_BASE+5) /* bad parameters */ #define JOYERR_NOCANDO (JOYERR_BASE+6) /* request not completed */ #define JOYERR_UNPLUGGED (JOYERR_BASE+7) /* joystick is unplugged */ /* * constants used with JOYINFO and JOYINFOEX structures and MM_JOY* messages */ #define JOY_BUTTON1 0x0001 #define JOY_BUTTON2 0x0002 #define JOY_BUTTON3 0x0004 #define JOY_BUTTON4 0x0008 /* * constants used with JOYINFOEX structure */ #define JOY_POVCENTERED (WORD) -1 #define JOY_POVFORWARD 0 #define JOY_POVRIGHT 9000 #define JOY_POVBACKWARD 18000 #define JOY_POVLEFT 27000 #define POV_UNDEFINED (DWORD) -1 /* * List of services available for calling by VxDs * Note, many of these are for internal use only. */ #define VJOYD_Service Declare_Service #pragma warning (disable:4003) /* turn off not enough params warning */ /*MACROS*/ Begin_Service_Table(VJOYD) /* * Win95 Gold services */ VJOYD_Service ( VJOYD_Register_Device_Driver, LOCAL ) VJOYD_Service ( VJOYD_GetPosEx_Service, LOCAL ) /* * DInput services (for internal use only) */ VJOYD_Service ( VJOYD_GetInitParams_Service, LOCAL ) VJOYD_Service ( VJOYD_Poll_Service, LOCAL ) VJOYD_Service ( VJOYD_Escape_Service, LOCAL ) VJOYD_Service ( VJOYD_CtrlMsg_Service, LOCAL ) VJOYD_Service ( VJOYD_SetGain_Service, LOCAL ) VJOYD_Service ( VJOYD_SendFFCommand_Service, LOCAL ) VJOYD_Service ( VJOYD_GetFFState_Service, LOCAL ) VJOYD_Service ( VJOYD_DownloadEffect_Service, LOCAL ) VJOYD_Service ( VJOYD_DestroyEffect_Service, LOCAL ) VJOYD_Service ( VJOYD_StartEffect_Service, LOCAL ) VJOYD_Service ( VJOYD_StopEffect_Service, LOCAL ) VJOYD_Service ( VJOYD_GetEffectStatus_Service, LOCAL ) /* * Interrupt polling * Mini-drivers should call this if they are interrupt driven at the * time they are notified of a change. */ VJOYD_Service ( VJOYD_DeviceUpdateNotify_Service, LOCAL ) /* * Screen saver (internal only) */ VJOYD_Service ( VJOYD_JoystickActivity_Service, LOCAL ) /* * Registry access */ VJOYD_Service ( VJOYD_OpenTypeKey_Service, LOCAL ) VJOYD_Service ( VJOYD_OpenConfigKey_Service, LOCAL ) /* * Gameport provider (not fully supported) */ VJOYD_Service ( VJOYD_NewGameportDevNode, LOCAL ) /* * Config Changed */ VJOYD_Service ( VJOYD_ConfigChanged_Service, LOCAL ) End_Service_Table(VJOYD) /*ENDMACROS*/ #define VJOYD_Init_Order UNDEFINED_INIT_ORDER #pragma warning (default:4003) /* restore not enough params warning */ #ifndef HRESULT typedef LONG HRESULT; #endif #define MAX_MSJSTICK (16) #define MAX_POLL MAX_MSJSTICK /* * VJoyD sends this system control message to a mini-driver when it needs * the mini-driver to register it's callbacks and properties. * A mini-driver that can be loaded by some mechanism other than by VJoyD * should perform it's registration only in response to this message rather * than in response to SYS_DYNAMIC_DEVICE_INIT or SYS_DYNAMIC_DEVICE_REINIT. * * alias BEGIN_RESERVED_PRIVATE_SYSTEM_CONTROL */ #define VJOYD_REINIT_PRIVATE_SYSTEM_CONTROL 0x70000000 #define JOY_OEMPOLLRC_OK 1 #define JOY_OEMPOLLRC_FAIL 0 /* * Error codes * These are custom names for standard HRESULTs */ #define VJ_OK S_OK /* A complete success */ #define VJ_FALSE S_FALSE /* A success but not without some difficulties */ #define VJ_DEFAULT VJ_FALSE /* Mini-driver does not understand */ #define VJ_INCOMPLETE VJ_FALSE /* Some requested poll data was not returned */ #define VJERR_FAIL E_FAIL #define VJERR_NEED_DEVNODE VJERR_FAIL /* Need more resources */ #define VJERR_BAD_DEVNODE VJERR_FAIL /* Last resources were insufficient */ #define VJERR_INVALIDPARAM E_INVALIDARG #define VJERR_FAIL_HID 0x80070052 /* The device is HID, so fail VJoyD polls: MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_DUP_NAME) */ #define VJERR_FAIL_OOM E_OUTOFMEMORY /* An out of memory condition cause a failure */ #define VJERR_FAIL_DRVLOAD VJERR_FAIL /* mini driver failed to load, internal error */ #define VJERR_FAIL_POWER VJERR_FAIL /* the power state of the device caused a failure */ /* * Driver Config flags */ /* * Interface attributes (result is combination of OEM flag and VJOYD) */ #define VJDF_UNIT_ID 0x00000001L /* unit id is valid */ #define VJDF_ISHID 0x00000002L /* This is a HID device, so refuse polls */ #define VJDF_SENDSNOTIFY 0x00000004L /* Driver calls VJOYD_DeviceUpdateNotify_Service */ #define VJDF_NEWIF 0x00000080L /* use new interface (will be set by VJOYD on registration if new i/f used) */ #define VJDF_USAGES 0x00000010L /* usages are valid */ #define VJDF_GENERICNAME 0x00000020L /* The lpszOEMName string is generic name, not a whole string */ /* * Interface requirements */ #define VJDF_NONVOLATILE 0x00000100L /* This value should not be deleted on boot */ /* * Devnode requirement flags */ #define VJDF_NODEVNODE 0x00010000L /* does not get its resources via CFG_MGR */ #define VJDF_ISANALOGPORTDRIVER 0x00020000L /* it plugs into a standard gameport */ #define VJDF_NOCHAINING 0x00040000L /* one devnode per device */ /* * Polling flags * These flags are passed to and from DX5 interface mini-driver poll * callbacks. * The low WORD contains flags detailing which elements are being requested * or provided; whereas the high WORD contains flags detailing the attributes * of the data. */ #define JOYPD_X 0x00000001 #define JOYPD_Y 0x00000002 #define JOYPD_Z 0x00000004 #define JOYPD_R 0x00000008 #define JOYPD_U 0x00000010 #define JOYPD_V 0x00000020 #define JOYPD_POV0 0x00000040 #define JOYPD_POV1 0x00000080 #define JOYPD_POV2 0x00000100 #define JOYPD_POV3 0x00000200 #define JOYPD_BTN0 0x00000400 #define JOYPD_BTN1 0x00000800 #define JOYPD_BTN2 0x00001000 #define JOYPD_BTN3 0x00002000 #define JOYPD_RESERVED0 0x00004000 #define JOYPD_RESERVED1 0x00008000 #define JOYPD_ELEMENT_MASK 0x0000FFFF #define JOYPD_POSITION 0x00010000 #define JOYPD_VELOCITY 0x00020000 #define JOYPD_ACCELERATION 0x00040000 #define JOYPD_FORCE 0x00080000 #define JOYPD_ATTRIB_MASK 0x000F0000 #define MAX_JOYSTICKOEMVXDNAME 260 /* max oem vxd name length (including NULL) */ #define POV_MIN 0 #define POV_MAX 1 /**************************************************************************** * * @doc DDK | * * @struct JOYHWCAPS | * * The structure is defined only because previous versions of * this file defined it. There is no reason this should be needed. * ****************************************************************************/ typedef struct JOYHWCAPS { DWORD dwMaxButtons; DWORD dwMaxAxes; DWORD dwNumAxes; char szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; } JOYHWCAPS; typedef struct JOYHWCAPS FAR *LPJOYHWCAPS; /**************************************************************************** * * @doc DDK | * * @struct JOYPOLLDATA | * * The structure is used to collect sensor data * from a DX5 mini-driver. * * @field DWORD | dwX | * * The X axis value. * * @field DWORD | dwY | * * The X axis value. * * @field DWORD | dwZ | * * The X axis value. * * @field DWORD | dwR | * * The X axis value. * * @field DWORD | dwU | * * The X axis value. * * @field DWORD | dwV | * * The X axis value. * * @field DWORD | dwPOV0 | * * The first point of view value. * * @field DWORD | dwPOV1 | * * The second point of view value. * * @field DWORD | dwPOV2 | * * The third point of view value. * * @field DWORD | dwPOV3 | * * The fourth point of view value. * * @field DWORD | dwBTN0 | * * The first DWORD of button bits. (Buttons 1 to 32 ) * * @field DWORD | dwBTN1 | * * The second DWORD of button bits. (Buttons 33 to 64 ) * * @field DWORD | dwBTN2 | * * The third DWORD of button bits. (Buttons 65 to 96 ) * * @field DWORD | dwBTN3 | * * The fourth DWORD of button bits. (Buttons 97 to 128 ) * * @field DWORD | dwReserved0 | * * The first reserved DWORD. * * @field DWORD | dwReserved1 | * * The second reserved DWORD. * * ****************************************************************************/ typedef struct VJPOLLDATA { DWORD dwX; DWORD dwY; DWORD dwZ; DWORD dwR; DWORD dwU; DWORD dwV; DWORD dwPOV0; DWORD dwPOV1; DWORD dwPOV2; DWORD dwPOV3; DWORD dwBTN0; DWORD dwBTN1; DWORD dwBTN2; DWORD dwBTN3; DWORD dwReserved0; DWORD dwReserved1; } VJPOLLDATA; typedef struct VJPOLLDATA FAR *LPVJPOLLDATA; /**************************************************************************** * * @doc DDK | * * @struct JOYOEMPOLLDATA | * * The structure is used to collect sensor data * from a pre-DX5 mini-driver. * * @field DWORD | id | * * The id of the joystick to be polled. * * @field DWORD | do_other | * * If the poll type is JOY_OEMPOLL_POLL1, this is the axis to be * polled. * If the poll type is JOY_OEMPOLL_POLL3, this is zero if the poll * is X,Y,Z or non-zero if the poll is X,Y,R. * If the poll type is JOY_OEMPOLL_POLL5, this is zero if the poll * is X,Y,Z,R,U or non-zero if the poll is X,Y,Z,R,V. * If the poll type is JOY_OEMPOLL_PASSDRIVERDATA poll, this DWORD * is the value set in the dwReserved2 field by the caller. * Otherwise this values is undefined and should be ignored * * @field JOYPOS | jp | * * Values to hold the X,Y,Z,R,U,V values. * Note for a JOY_OEMPOLL_POLL1 poll type the requested axis value * should always be returned in jp.dwX. * * @field DWORD | dwPOV | * * The Point Of View value if not supported through button combos * or an axis value. * Note, should be left as POV_UNDEFINED if not used. * * @field DWORD | dwButtons | * * Bitmask of the button values. * * @field DWORD | dwButtonNumber | * * The one-based bit position of the lowest numbered button pressed. * Zero if no buttons are pressed. * * ****************************************************************************/ typedef struct JOYOEMPOLLDATA { DWORD id; DWORD do_other; JOYPOS jp; DWORD dwPOV; DWORD dwButtons; DWORD dwButtonNumber; } JOYOEMPOLLDATA; typedef struct JOYOEMPOLLDATA FAR *LPJOYOEMPOLLDATA; /**************************************************************************** * * @doc DDK | * * @struct JOYOEMHWCAPS | * * The structure is used to pass driver capabilites * * @field DWORD | dwMaxButtons | * * The number of buttons supported by the device. * * @field DWORD | dwMaxAxes | * * The highest axis supported by the device. * For example a device with X, Y and R has 3 axes but the highest * one is axis 4 so dwMaxAxes is 4. * * @field DWORD | dwNumAxes | * * The number of axes supported by the device. * For example a device with X, Y and R has 3 so dwNumAxes is 3. * * ****************************************************************************/ typedef struct JOYOEMHWCAPS { DWORD dwMaxButtons; DWORD dwMaxAxes; DWORD dwNumAxes; } JOYOEMHWCAPS; typedef struct JOYOEMHWCAPS FAR *LPJOYOEMHWCAPS; /**************************************************************************** * * @doc DDK | * * @struct DID_INITPARAMS | * * The structure is used to pass details of the * joystick being initialized to a particular id in DX5 drivers. * * @field DWORD | dwSize | * * Must be set to sizeof() * * @field DWORD | dwFlags | * * Flags associated with the call. * * It will be either: * VJIF_BEGIN_ACCESS if the id association is being made, or * VJIF_END_ACCESS if the id association is being broken. * Other flags may be defined in the future so all other values * should be refused. * * @field DWORD | dwUnitId | * * The id for which polling support is being requested. * * @field DWORD | dwDevnode | * * The Devnode containing hardware resources to use for this id. * * @field JOYREGHWSETTINGS | hws | * * The hardware settings flags applied to this device. * * ****************************************************************************/ typedef struct DID_INITPARAMS { DWORD dwSize; DWORD dwFlags; DWORD dwUnitId; DWORD dwDevnode; JOYREGHWSETTINGS hws; } DID_INITPARAMS; typedef struct DID_INITPARAMS FAR *LPDID_INITPARAMS; /* * DX1 callbacks */ typedef int (__stdcall *JOYOEMPOLLRTN)( int type, LPJOYOEMPOLLDATA pojd ); typedef int (__stdcall *JOYOEMHWCAPSRTN)( int joyid, LPJOYOEMHWCAPS pohwcaps ); typedef int (__stdcall *JOYOEMJOYIDRTN)( int joyid, BOOL inuse ); /* * General callbacks */ typedef HRESULT (__stdcall *JOYPOLLRTN)( DWORD dwDeviceID, LPDWORD lpdwMask, LPVJPOLLDATA lpPollData ); typedef HRESULT (__stdcall *INITIALIZERTN)( DWORD dwDeviceID, LPDID_INITPARAMS lpInitParams ); typedef HRESULT (__stdcall *ESCAPERTN)( DWORD dwDeviceID, DWORD dwEffectID, LPDIEFFESCAPE lpEscape ); typedef HRESULT (__stdcall *CTRLMSGRTN)( DWORD dwDeviceID, DWORD dwMsgId, DWORD dwParam ); /* * Force feedback callbacks */ typedef HRESULT (__stdcall *SETGAINRTN)( DWORD dwDeviceID, DWORD dwGain ); typedef HRESULT (__stdcall *SENDFFCOMMANDRTN)( DWORD dwDeviceID, DWORD dwState ); typedef HRESULT (__stdcall *GETFFSTATERTN)( DWORD dwDeviceID, LPDIDEVICESTATE lpDeviceState ); typedef HRESULT (__stdcall *DOWNLOADEFFECTRTN)( DWORD dwDeviceID, DWORD dwInternalEffectType, LPDWORD lpdwDnloadID, LPDIEFFECT lpEffect, DWORD dwFlags ); typedef HRESULT (__stdcall *DESTROYEFFECTRTN)( DWORD dwDeviceID, DWORD dwDnloadID ); typedef HRESULT (__stdcall *STARTEFFECTRTN)( DWORD dwDeviceID, DWORD dwDnloadID, DWORD dwMode, DWORD dwIterations ); typedef HRESULT (__stdcall *STOPEFFECTRTN)( DWORD dwDeviceID, DWORD dwDnloadID ); typedef HRESULT (__stdcall *GETEFFECTSTATUSRTN)( DWORD dwDeviceID, DWORD dwDnloadID, LPDWORD lpdwStatusCode ); /* * Gameport Emulation callbacks */ typedef HRESULT (__stdcall *JOYOEMGPEMULCTRL)( DWORD port, DWORD inuse ); typedef DWORD JOYOEMGPEMULTRAP; typedef HRESULT (__stdcall *JOYOEMGPPROVRTN)( DWORD function, DWORD dwParam ); /**************************************************************************** * * @doc DDK | * * @struct VJPOLLREG | * * The structure is used by a mini-driver to register polling * and other general purpose callbacks with VJoyD for DX5 interface mini- * drivers. * * @field DWORD | dwSize | * * Must be set to sizeof() * * @field JOYPOLLRTN | fpPoll | * * Poll callback. Used for all device polling. * * @field CMCONFIGHANDLER | fpCfg | * * Standard configuration manager callback. * * @field INITIALIZERTN | fpInitialize | * * Initialization callback. This callback replaces and extends the JoyId * callback used with Win95 interface mini-drivers. * * @field ESCAPERTN | fpEscape | * * Escape callback. May be sent to a device in response to an application * calling the Escape member. * * @field CTRLMSGRTN | fpCtrlMsg | * * Control message callback. Used to send notifications from VJoyD to mini- * drivers. * ****************************************************************************/ typedef struct VJPOLLREG { DWORD dwSize; JOYPOLLRTN fpPoll; CMCONFIGHANDLER fpCfg; INITIALIZERTN fpInitialize; ESCAPERTN fpEscape; CTRLMSGRTN fpCtrlMsg; } VJPOLLREG; typedef struct VJPOLLREG FAR *LPVJPOLLREG; /**************************************************************************** * * @doc DDK | * * @struct VJFORCEREG | * * The structure is used by a mini-driver to register force * feedback related callbacks with VJoyD for DX5 interface. * * @field DWORD | dwSize | * * Must be set to sizeof() * * @field SETGAINRTN | fpSetFFGain | * * Set Force Feedback Gain callback. * * @field SENDFFCOMMANDRTN | fpSendFFCommand | * * Send Force Feedback Command callback. * * @field GETFFSTATERTN | fpGetFFState | * * Get Force Feedback state callback. * * @field DOWNLOADEFFECTRTN | fpDownloadEff | * * Download effect callback. * * @field DESTROYEFFECTRTN | fpDestroyEff | * * Destroy effect callback. * * @field STARTEFFECTRTN | fpStartEff | * * Start effect callback. * * @field STOPEFFECTRTN | fpStopEff | * * Stop effect callback. * * @field GETEFFECTSTATUSRTN | fpGetStatusEff | * * Get effect status callback. * * ****************************************************************************/ typedef struct VJFORCEREG { DWORD dwSize; SETGAINRTN fpSetFFGain; SENDFFCOMMANDRTN fpSendFFCommand; GETFFSTATERTN fpGetFFState; DOWNLOADEFFECTRTN fpDownloadEff; DESTROYEFFECTRTN fpDestroyEff; STARTEFFECTRTN fpStartEff; STOPEFFECTRTN fpStopEff; GETEFFECTSTATUSRTN fpGetStatusEff; } VJFORCEREG; typedef struct VJFORCEREG FAR *LPVJFORCEREG; /**************************************************************************** * * @doc DDK * * @struct VJDEVICEDESC | * * The structure is used to describe a DX5 DDI * device. This structure has been extended since DX5. See the * VJDEVICEDESC_DX5 structure for the previous version. * * @field DWORD | dwSize | * * Must be set to sizeof(). * * @field LPSTR | lpszOEMType | * * Points to a null terminated string containing the text used to * describe the device as stored in the OEMName entry in the * registry. Renamed in Win98 (was lpszOEMName), is unused for * DX5 drivers. * * @field DWORD | dwUnitId | * * Specifies the unit id of this device. * * @field LPJOYOEMHWCAPS | lpHWCaps | * * Points to a structure which contains the device * hardware capabilities. * * @field LPJOYREGHWCONFIG | lpHWConfig | * * Points to a structure which contains the * configuration and calibration data for the device. Is unused for * DX5 drivers. * * @field UNICODE_STRING | FileName | * * An optional filename associated with the device. This is used for * HID devices to allow them to be accessed directly through the HID * stack without the joyGetPosEx restrictions. Added Win98. * * @field USAGE_AND_PAGE | Usages | * * An array of HID usages to describe what HID axis description has * been used for each WinMM axis. Added Win98. The elements are: * * Usages[0] - X * Usages[1] - Y * Usages[2] - Z * Usages[3] - R * Usages[4] - U * Usages[5] - V * Usages[6] - POV0 * Usages[7] - POV1 * Usages[8] - POV2 * Usages[9] - POV3 * * * @field LPSTR | lpszOEMName | * * Points to a null terminated string containing a friendly name * for the device. Added Win98. * * ****************************************************************************/ typedef struct VJDEVICEDESC { DWORD dwSize; LPSTR lpszOEMType; DWORD dwUnitId; LPJOYOEMHWCAPS lpHWCaps; LPJOYREGHWCONFIG lpHWConfig; UNICODE_STRING FileName; USAGE_AND_PAGE Usages[10]; LPSTR lpszOEMName; } VJDEVICEDESC ; typedef struct VJDEVICEDESC FAR *LPVJDEVICEDESC; /**************************************************************************** * * @doc DDK * * @struct VJDEVICEDESC_DX5 | * * The structure is used to describe a DX5 DDI * device. This is the DX5 version of the structure. * * @field DWORD | dwSize | * * Must be set to sizeof(). * * @field LPSTR | lpszOEMName | * * This field is ignored. * * @field DWORD | dwUnitId | * * Specifies the unit id of this device. * * @field LPJOYOEMHWCAPS | lpHWCaps | * * Points to a structure which contains the device * hardware capabilities. * * @field LPJOYREGHWCONFIG | lpHWConfig | * * This field is unused in DX5. * * ****************************************************************************/ typedef struct VJDEVICEDESC_DX5 { DWORD dwSize; LPSTR lpszOEMName; DWORD dwUnitId; LPJOYOEMHWCAPS lpHWCaps; LPJOYREGHWCONFIG lpHWConfig; } VJDEVICEDESC_DX5; typedef struct VJDEVICEDESC_DX5 FAR *LPVJDEVICEDESC_DX5; /**************************************************************************** * * @doc DDK * * @struct VJREGDRVINFO | * * The structure is used to register a DX5 DDI * driver with VJoyD. * * @field DWORD | dwSize | * * The size of the structure. * * @field DWORD | dwFunction | * * The type of registration to be performed * It must be one of the values. * * @field DWORD | dwFlags | * * Flags associated with this registration * It consists of one or more flag values. * * @field LPSTR | lpszOEMCallout | * * The name of the driver associated with this registration, * for example "msanalog.vxd" * * @field DWORD | dwFirmwareRevision | * * Specifies the firmware revision of the device. * If the revision is unknown a value of zero should be used. * * @field DWORD | dwHardwareRevision | * * Specifies the hardware revision of the device. * If the revision is unknown a value of zero should be used. * * @field DWORD | dwDriverVersion | * * Specifies the version number of the device driver. * If the revision is unknown a value of zero should be used. * * @field LPVJDEVICEDESC | lpDeviceDesc | * * Optional pointer to a structure * that describes the configuration properties of the device. * This allows drivers to supply the description of the device * rather than use the registry for this purpose. * If no description is available then the field should be * set to . * * @field LPVJPOLLREG | lpPollReg | * * Optional pointer to a structure * that contains the most common driver callbacks. * Only a very strange driver would not need to register any * of these callbacks but if that was the case, then the field * should be set to . * * @field LPVJFORCEREG | lpForceReg | * * Optional pointer to a structure * that contains all of the force feedback specific callbacks. * If the ring 0 driver does not support force feedback then * the field should be set to . * * @field DWORD | dwReserved | * * Reserved, must be set to zero. * ****************************************************************************/ typedef struct VJREGDRVINFO { DWORD dwSize; DWORD dwFunction; DWORD dwFlags; LPSTR lpszOEMCallout; DWORD dwFirmwareRevision; DWORD dwHardwareRevision; DWORD dwDriverVersion; LPVJDEVICEDESC lpDeviceDesc; LPVJPOLLREG lpPollReg; LPVJFORCEREG lpForceReg; DWORD dwReserved; } VJREGDRVINFO; typedef struct VJREGDRVINFO FAR *LPVJREGDRVINFO; /**************************************************************************** * * @doc DDK * * @struct VJCFGCHG | * * The structure is passed in the dwParam of a CtrlMsg * callback when the dwMsg type is VJCM_CONFIGCHANGED. * * @field DWORD | dwSize | * * The size of the structure. * * @field DWORD | dwChangeType | * * The type of change which has been made * It must be one of the values. * Currently the only supported value is VJCMCT_GENERAL. * * @field DWORD | dwTimeOut | * * The dwTimeOut value from the user data registry values. * This value is passed as a convenience to drivers which use it as * there are no other driver values in this structure. * ****************************************************************************/ typedef struct VJCFGCHG { DWORD dwSize; DWORD dwChangeType; DWORD dwTimeOut; } VJCFGCHG; typedef struct VJCFGCHG FAR *LPVJCFGCHG; /* * Control messages */ #define VJCM_PASSDRIVERDATA 1 /* dwParam = DWORD to pass to driver */ #define VJCM_CONFIGCHANGED 2 /* dwParam = PVJCFGCHG pointer to config changed structure */ /* * Config changed types */ #define VJCMCT_GENERAL 0x00010000L #define VJCMCT_CONFIG 0x00020000L #define VJCMCT_TYPEDATA 0x00030000L #define VJCMCT_OEMDEFN 0x00040000L #define VJCMCT_GLOBAL 0x00050000L /* * Masks */ #define VJCMCTM_MAJORMASK 0x00ff0000L #define VJCMCTM_MINORMASK 0x0000ffffL /* * Registration types */ #define VJRT_LOADED 1 /* Driver has been loaded */ #define VJRT_CHANGE 2 /* NOT IMPLEMENTED! Modify anything except driver and initialization parameters */ #define VJRT_PLUG 3 /* New instance of a device, New in Win98 */ #define VJRT_UNPLUG 4 /* Device instance is gone, New in Win98 */ /* * Driver Initialize dwFlags */ #define VJIF_BEGIN_ACCESS 0x00000001L #define VJIF_END_ACCESS 0x00000002L #endif