windows-nt/Source/XPSP1/NT/multimedia/published/directx/dinput/dinputd.w

2004 lines
72 KiB
OpenEdge ABL
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
sinclude(`dimkhdr.m4')dnl This file must be preprocessed by the m4 preprocessor.
/****************************************************************************
*
* Copyright (C) 1996 Microsoft Corporation. All Rights Reserved.;public_dx3
* Copyright (C) 1996-1998 Microsoft Corporation. All Rights Reserved.;public_dx5
* Copyright (C) 1996-1998 Microsoft Corporation. All Rights Reserved.;public_dx5b2
* Copyright (C) 1995-1999 Microsoft Corporation. All Rights Reserved.;public_dx6
* Copyright (C) 1995-1999 Microsoft Corporation. All Rights Reserved.;public_dx7
* Copyright (C) 1995-2000 Microsoft Corporation. All Rights Reserved.;public_dx8
*
* File: dinputd.h
* Content: DirectInput include file for device driver implementors
begindoc
* History:
* Date By Reason
* ==== == ======
* 1996.06.17 raymondc Disk too empty
* 1998.01.06 omsharma DX5B2 version
* 1999.01.16 marcand DX7 version (1999.02.09) -> DX6.2 -> DX6.1a
enddoc
*
****************************************************************************/
#ifndef __DINPUTD_INCLUDED__
#define __DINPUTD_INCLUDED__
#ifndef DIRECTINPUT_VERSION ;public_500
#define DIRECTINPUT_VERSION 0x0300;public_dx3
#pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0300") ;public_dx3
#define DIRECTINPUT_VERSION 0x0500;public_dx5
#pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0500") ;public_dx5
#define DIRECTINPUT_VERSION 0x0600;public_dx6
#pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0600") ;public_dx6
#define DIRECTINPUT_VERSION 0x0700;public_dx7
#pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0700") ;public_dx7
#define DIRECTINPUT_VERSION 0x0800;public_800
#pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800") ;public_800
#endif ;public_500
#ifdef __cplusplus
extern "C" {
#endif
/****************************************************************************
*
* Interfaces
*
****************************************************************************/
#ifndef DIJ_RINGZERO
DEFINE_GUID(IID_IDirectInputDeviceCallback, 0x1DE12AA0,0xC9F5,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);;Internal
DEFINE_GUID(IID_IDirectInputEffectShepherd, 0x1DE12AA1,0xC9F5,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);;Internal
DEFINE_GUID(IID_IDirectInputMapShepherd, 0x6a3e3144,0x3eee,0x4aa5,0x95,0x87,0xe1,0x0a,0x21,0xfe,0xc7,0x71);;internal
DEFINE_GUID(IID_IDirectInputEffectDriver, 0x02538130,0x898F,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
DEFINE_GUID(IID_IDirectInputJoyConfig, 0x1DE12AB1,0xC9F5,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
DEFINE_GUID(IID_IDirectInputPIDDriver, 0xEEC6993A,0xB3FD,0x11D2,0xA9,0x16,0x00,0xC0,0x4F,0xB9,0x86,0x38);
DEFINE_GUID(IID_IDirectInputJoyConfig8, 0xeb0d7dfa,0x1990,0x4f27,0xb4,0xd6,0xed,0xf2,0xee,0xc4,0xa4,0x4c);
;begin_internal_800
DEFINE_GUID(IID_IDIActionFramework, 0xf4279160,0x608f,0x11d3,0x8f,0xb2,0x0, 0xc0,0x4f,0x8e,0xc6,0x27);
DEFINE_GUID(CLSID_CDirectInputActionFramework, 0x9f34af20,0x6095,0x11d3,0x8f,0xb2,0x0, 0xc0,0x4f,0x8e,0xc6,0x27);
;end_internal_800
#endif /* DIJ_RINGZERO */
/****************************************************************************
*
* IDirectInputEffectDriver
*
****************************************************************************/
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIOBJECTATTRIBUTES |
*
* The <t DIOBJECTATTRIBUTES> structure describes the
* information contained in the "Attributes" value of
* the registry key for each "object" on a device.
* device.
*
* If the "Attributes" value is absent, then default
* attributes are used.
*
* @field DWORD | dwFlags |
*
* Zero or more <c DIDOI_*> flags.
*
*
* @field WORD | wUsagePage |
*
* The HID usage page to associate with the object.
*
* @field WORD | wUsage |
*
* The HID usage to associate with the object.
*
* @devnote NOTE - this is in a different order from that in <t DIMAKEUSAGEDWORD>
*
****************************************************************************/
enddoc
typedef struct DIOBJECTATTRIBUTES {
DWORD dwFlags;
WORD wUsagePage;
WORD wUsage;
} DIOBJECTATTRIBUTES, *LPDIOBJECTATTRIBUTES;
typedef const DIOBJECTATTRIBUTES *LPCDIOBJECTATTRIBUTES;
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIFFOBJECTATTRIBUTES |
*
* The <t DIFFOBJECTATTRIBUTES> structure describes the
* information contained in the "FFAttributes" value of
* the registry key for each "object" on a force feedback
* device.
*
* If the "FFAttributes" value is absent, then the
* object is assumed not to support force feedback.
*
* @field DWORD | dwFFMaxForce |
*
* Specifies the magnitude of the maximum force that can
* be created by the actuator associated with this object.
* Force is
* expressed in Newtons and measured in relation to where
* the hand would be during normal operation of the device.
*
* If this value is zero, the object is assumed not to
* support force feedback.
*
* @field DWORD | dwFFForceResolution |
*
* Specifies the force resolution of the actuator
* associated with this object.
* The returned value represents
* the number of gradations, or subdivisions, of the
* maximum force that can be expressed by the force feedback
* system from 0 (no force) to maximum force.
*
****************************************************************************/
enddoc
typedef struct DIFFOBJECTATTRIBUTES {
DWORD dwFFMaxForce;
DWORD dwFFForceResolution;
} DIFFOBJECTATTRIBUTES, *LPDIFFOBJECTATTRIBUTES;
typedef const DIFFOBJECTATTRIBUTES *LPCDIFFOBJECTATTRIBUTES;
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIOBJECTCALIBRATION |
*
* The <t DIOBJECTCALIBRATION> structure describes the
* information contained in the "Calibration" value of
* the registry key for each axis on a device.
*
* If the "Calibration" value is absent, then the
* calibration information is taken from the joystick
* <t JOYREGHWVALUES> configuration structure.
*
* Only HID joysticks will have a "Calibration" value.
*
* @field LONG | lMin |
*
* Specifies the logical value for the axis minimum position.
*
* @field LONG | lCenter |
*
* Specifies the logical value for the axis center position.
*
* @field LONG | lMax |
*
* Specifies the logical value for the axis maximum position.
*
****************************************************************************/
enddoc
typedef struct DIOBJECTCALIBRATION {
LONG lMin;
LONG lCenter;
LONG lMax;
} DIOBJECTCALIBRATION, *LPDIOBJECTCALIBRATION;
typedef const DIOBJECTCALIBRATION *LPCDIOBJECTCALIBRATION;
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIPOVCALIBRATION |
*
* The <t DIPOVCALIBRATION> structure describes the
* information contained in the "Calibration" value of
* the registry key for each POV on a device.
*
* If the "Calibration" value is absent, then the
* calibration information is taken from the joystick
* <t JOYREGHWVALUES> configuration structure.
*
* Only HID joysticks will have a "Calibration" value.
*
* @field LONG | lMin[5] |
*
* Specifies the logical value for the POV minimum positions.
*
* @field LONG | lMax[5] |
*
* Specifies the logical value for the POV maximum positions.
*
****************************************************************************/
enddoc
typedef struct DIPOVCALIBRATION {
LONG lMin[5];
LONG lMax[5];
} DIPOVCALIBRATION, *LPDIPOVCALIBRATION;
typedef const DIPOVCALIBRATION *LPCDIPOVCALIBRATION;
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIEFFECTATTRIBUTES |
*
* The <t DIEFFECTATTRIBUTES> structure describes the
* information contained in the "Attributes" value of
* the registry key for each effect supported by
* a force feedback device.
*
* @field DWORD | dwEffectId |
*
* Arbitrary 32-bit value passed to the driver to
* identify the effect.
*
* The driver will receive this parameters as the
* <p dwEffectId> parameter to the
* <mf IDirectInputEffectDriver::DownloadEffect>
* function.
*
* @field DWORD | dwEffType |
*
* Zero or more <c DIEFT_*> values describing the effect.
*
* See "DirectInput Effect Format Types" for a description
* of how the flags should be interpreted.
*
* @field DWORD | dwStaticParams |
*
* Zero or more <c DIEP_*> values describing the
* parameters supported by the effect. For example,
* if <c DIEP_ENVELOPE> is set, then the effect
* supports an envelope.
*
* All effects should support at least
* <c DIEP_DURATION>,
* <c DIEP_AXES>, and
* <c DIEP_TYPESPECIFICPARAMS>.
*
* It is not an error for an application to attempt to use
* effect parameters which are not supported by the device.
* The unsupported parameters are merely ignored.
*
* @field DWORD | dwDynamicParams |
*
* Zero or more <c DIEP_*> values describing the
* parameters of the effect which can be modified
* while the effect is playing.
*
* If an application attempts to change a parameter
* while the effect is playing, and the driver does not
* support modifying that effect dynamically, then
* the driver shall return <c DIERR_EFFECTPLAYING>.
*
* @field DWORD | dwCoords |
*
* One or more coordinate system flags
* (<c DIEFF_CARTESIAN>,
* <c DIEFF_POLAR>,
* <c DIEFF_SPHERICAL>)
* indicating which coordinate systems are supported
* by the effect. At least one coordinate system
* must be supported.
*
* If an application attempts to set a direction in
* an unsupported coordinate system, DirectInput will
* automatically convert it to a coordinate system
* which the device does support.
*
****************************************************************************/
enddoc
typedef struct DIEFFECTATTRIBUTES {
DWORD dwEffectId;
DWORD dwEffType;
DWORD dwStaticParams;
DWORD dwDynamicParams;
DWORD dwCoords;
} DIEFFECTATTRIBUTES, *LPDIEFFECTATTRIBUTES;
typedef const DIEFFECTATTRIBUTES *LPCDIEFFECTATTRIBUTES;
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIFFDEVICEATTRIBUTES |
*
* The <t DIFFDEVICEATTRIBUTES> structure describes the
* information contained in the "Attributes" value of
* the OEMForceFeedback registry key.
*
* @field DWORD | dwFlags |
*
* To be specified later. Must be zero for now.
*
* ISSUE-2001/03/29-timgill Need to complete documentation
* see Marcus's document.
*
* @field DWORD | dwFFSamplePeriod |
*
* The minimum time between playback of
* force commands, in microseconds.
*
* @field DWORD | dwFFMinTimeResolution |
*
* The minimum amount of time, in microseconds,
* that the device can resolve. The device rounds
* any times to the nearest supported increment.
* For example, if the value of
* <e DIDEVCAPS.dwFFMinTimeResolution> is 1000,
* then the device would round any times to
* the nearest millisecond.
*
****************************************************************************/
enddoc
typedef struct DIFFDEVICEATTRIBUTES {
DWORD dwFlags;
DWORD dwFFSamplePeriod;
DWORD dwFFMinTimeResolution;
} DIFFDEVICEATTRIBUTES, *LPDIFFDEVICEATTRIBUTES;
typedef const DIFFDEVICEATTRIBUTES *LPCDIFFDEVICEATTRIBUTES;
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIDRIVERVERSIONS |
*
* The <t DIDRIVERVERSIONS> structure is used
* by the DirectInput effect driver to report
* version information back to DirectInput.
*
* The semantics of the version numbers is
* left to the discretion of the device driver.
* The only requirement is that later versions
* have numerically greater version numbers than
* earlier versions.
*
* @field DWORD | dwSize |
*
* The size of the structure.
*
* @field DWORD | dwFirmwareRevision |
*
* Specifies the firmware revision of the device.
*
* @field DWORD | dwHardwareRevision |
*
* Specifies the hardware revision of the device.
*
* @field DWORD | dwFFDriverVersion |
*
* Specifies the version number of the force feedback
* device driver.
*
****************************************************************************/
enddoc
typedef struct DIDRIVERVERSIONS {
DWORD dwSize;
DWORD dwFirmwareRevision;
DWORD dwHardwareRevision;
DWORD dwFFDriverVersion;
} DIDRIVERVERSIONS, *LPDIDRIVERVERSIONS;
typedef const DIDRIVERVERSIONS *LPCDIDRIVERVERSIONS;
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIDEVICESTATE |
*
* The <t DIDEVICESTATE> structure returns information
* about the state of a force feedback device.
*
* @field DWORD | dwSize |
*
* The size of the structure.
*
* @field DWORD | dwState |
*
* Zero or more of the <c DIGFFS_*> values indicating
* various aspects of the device state.
*
* @field DWORD | dwLoad |
*
* A value indicating the percentage of device
* memory in use. A load of zero indicates that the
* device memory is completely available. A load of
* one hundred indicates that the device is full.
*
****************************************************************************/
enddoc
typedef struct DIDEVICESTATE {
DWORD dwSize;
DWORD dwState;
DWORD dwLoad;
} DIDEVICESTATE, *LPDIDEVICESTATE;
#define DEV_STS_EFFECT_RUNNING DIEGES_PLAYING
#ifndef DIJ_RINGZERO
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIHIDFFINITINFO |
*
* The <t DIHIDFFINITINFO> structure is used by DirectInput
* to provide information to a HID force feedback driver
* about the device it is being asked to control.
*
* @field DWORD | dwSize |
*
* The size of the structure.
*
* @field LPWSTR | pwszDeviceInterface |
*
* Pointer to a null-terminated UNICODE string which
* identifies the device interface for the device.
* The driver can pass the device interface to
* the <f CreateFile> function to obtain access to the
* device.
*
****************************************************************************/
enddoc
typedef struct DIHIDFFINITINFO {
DWORD dwSize;
LPWSTR pwszDeviceInterface;
GUID GuidInstance;
} DIHIDFFINITINFO, *LPDIHIDFFINITINFO;
begin_interface(IDirectInputEffectDriver)
begin_methods()
declare_method(DeviceID,DWORD,DWORD,DWORD,DWORD,LPVOID)
declare_method(GetVersions,LPDIDRIVERVERSIONS)
declare_method(Escape,DWORD,DWORD,LPDIEFFESCAPE)
declare_method(SetGain,DWORD,DWORD)
declare_method(SendForceFeedbackCommand,DWORD,DWORD)
declare_method(GetForceFeedbackState,DWORD,LPDIDEVICESTATE)
declare_method(DownloadEffect,DWORD,DWORD,LPDWORD,LPCDIEFFECT,DWORD)
declare_method(DestroyEffect,DWORD,DWORD)
declare_method(StartEffect,DWORD,DWORD,DWORD,DWORD)
declare_method(StopEffect,DWORD,DWORD)
declare_method(GetEffectStatus,DWORD,DWORD,LPDWORD)
end_methods()
end_interface()
;begin_internal
/****************************************************************************
*
* IDirectInputEffectShepherd
*
* Special wrapper class which gates access to DirectInput
* effect drivers.
*
****************************************************************************/
/****************************************************************************
*
* @doc INTERNAL
*
* @struct SHEPHANDLE |
*
* Information that shepherds an effect handle.
*
* @field DWORD | dwEffect |
*
* The effect handle itself, possibly invalid if the device
* has since been reset.
*
* If the value is zero, then the effect has not
* been downloaded.
*
* @field DWORD | dwTag |
*
* Reset counter tag for the effect. If this value is different
* from the tag stored in shared memory, then it means that
* the device has been reset in the interim and no longer
* belongs to the caller.
*
****************************************************************************/
typedef struct SHEPHANDLE {
DWORD dwEffect;
DWORD dwTag;
} SHEPHANDLE, *PSHEPHANDLE;
begin_interface(IDirectInputEffectShepherd)
begin_methods()
declare_method(DeviceID,DWORD,DWORD,LPVOID)
declare_method(GetVersions,LPDIDRIVERVERSIONS)
declare_method(Escape,PSHEPHANDLE,LPDIEFFESCAPE)
declare_method(DeviceEscape,PSHEPHANDLE,LPDIEFFESCAPE)
declare_method(SetGain,PSHEPHANDLE,DWORD)
declare_method(SendForceFeedbackCommand,PSHEPHANDLE,DWORD)
declare_method(GetForceFeedbackState,PSHEPHANDLE,LPDIDEVICESTATE)
declare_method(DownloadEffect,DWORD,PSHEPHANDLE,LPCDIEFFECT,DWORD)
declare_method(DestroyEffect,PSHEPHANDLE)
declare_method(StartEffect,PSHEPHANDLE,DWORD,DWORD)
declare_method(StopEffect,PSHEPHANDLE)
declare_method(GetEffectStatus,PSHEPHANDLE,LPDWORD)
declare_method(SetGlobalGain,DWORD)
end_methods()
end_interface()
/****************************************************************************
*
* IDirectInputMapShepherd
*
* Special wrapper class which gates access to DirectInput mapper.
*
****************************************************************************/
;begin_if_(DIRECTINPUT_VERSION)_800
begin_interface(IDirectInputMapShepherd)
begin_methods()
declare_method(GetActionMap,REFGUID,LPCWSTR,LPDIACTIONFORMATW,LPCWSTR,LPFILETIME,DWORD)
declare_method(SaveActionMap,REFGUID,LPCWSTR,LPDIACTIONFORMATW,LPCWSTR,DWORD)
declare_method(GetImageInfo,REFGUID,LPCWSTR,LPDIDEVICEIMAGEINFOHEADERW)
end_methods()
end_interface()
;end
/****************************************************************************
*
* @doc INTERNAL
*
* @struct DIPROPINFO |
*
* Information used to describe an object being accessed.
*
* @field const GUID * | pguid |
*
* The property being accessed (if applicable).
*
* @field UINT | iobj |
*
* Zero-based index to object (or 0xFFFFFFFF if accessing the
* device).
*
* @field DWORD | dwDevType |
*
* Device type information (or 0 if accessing the device).
*
****************************************************************************/
typedef struct DIPROPINFO {
const GUID *pguid;
UINT iobj;
DWORD dwDevType;
} DIPROPINFO, *LPDIPROPINFO;
typedef const DIPROPINFO *LPCDIPROPINFO;
begindoc
/****************************************************************************
*
* @doc INTERNAL
*
* @topic Device offsets and cooked data |
*
* An unfortunate consequence of cooked data is that
* there is no easy to way to communicate to the
* <c DIDM_COOKDEVICEDATA> callback exactly what object
* needs to be cooked because the dwType for the object
* is not part of the <t DIDEVICEOBJECTDATA> structure.
*
* So we cheat.
*
* We stash the type and instance bits of the
* dwType into the high word of the
* <e DIDEVICEOBJECTDATA.dwOfs>.
*
* ISSUE-2001/03/29-timgill This cheat is not HID-friendly.
* Need to use an auxiliary translation table. But good enough
* for DX5 beta 1.
*
* @func DWORD | DICOOK_IDFROMDFOFS |
*
* Given a data format offset, extract the object id,
* which consists of the type and the instance.
*
*
* @parm DWORD | dwFakeOfs |
*
* Fake data format offset which came from
* <e DIDEVICEOBJECTDATA.dwOfs>.
*
* @func DWORD | DICOOK_OFSFROMDFOFS |
*
* Given a fake data format offset, extract the actual
* client data format offset.
*
* @parm DWORD | dwFakeOfs |
*
* Fake data format offset which came from
* <e DIDEVICEOBJECTDATA.dwOfs>.
*
* @func DWORD | DICOOK_DFOFSFROMOFSID |
*
* Given a client data format offset and an object id,
* return a fake data format offset.
*
* @parm DWORD | dwOfs |
*
* Client data format offset.
*
* @parm DWORD | dwType |
*
* Device object type descriptor.
*
****************************************************************************/
enddoc
#define DICOOK_DFOFSFROMOFSID(dwOfs, dwType) MAKELONG(dwOfs, dwType)
#define DICOOK_IDFROMDFOFS(dwFakeOfs) HIWORD(dwFakeOfs)
#define DICOOK_OFSFROMDFOFS(dwFakeOfs) LOWORD(dwFakeOfs)
/****************************************************************************
*
* IDirectInputDeviceCallback
*
* IDirectInputDevice uses it to communicate with the
* component that is responsible for collecting data from
* the appropriate hardware device.
*
* E.g., mouse, keyboard, joystick, HID.
*
* Methods should return E_NOTIMPL for anything not understood.
*
****************************************************************************/
;begin_if_(DIRECTINPUT_VERSION)_800
begin_interface(IDirectInputDeviceCallback)
begin_methods()
declare_method(GetInstance,LPVOID *)
declare_method(GetVersions,LPDIDRIVERVERSIONS)
declare_method(GetDataFormat,LPDIDATAFORMAT *)
declare_method(GetObjectInfo,LPCDIPROPINFO,LPDIDEVICEOBJECTINSTANCEW)
declare_method(GetCapabilities,LPDIDEVCAPS)
declare_method(Acquire)
declare_method(Unacquire)
declare_method(GetDeviceState,LPVOID)
declare_method(GetDeviceInfo,LPDIDEVICEINSTANCEW)
declare_method(GetProperty,LPCDIPROPINFO,LPDIPROPHEADER)
declare_method(SetProperty,LPCDIPROPINFO,LPCDIPROPHEADER)
declare_method(SetEventNotification,HANDLE)
declare_method(SetCooperativeLevel,HWND,DWORD)
declare_method(RunControlPanel,HWND,DWORD)
declare_method(CookDeviceData,DWORD,LPDIDEVICEOBJECTDATA)
declare_method(CreateEffect,LPDIRECTINPUTEFFECTSHEPHERD *)
declare_method(GetFFConfigKey,DWORD,PHKEY)
declare_method(SendDeviceData, DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD)
declare_method(Poll)
declare_method_(DWORD,GetUsage, int)
declare_method(MapUsage, DWORD, PINT)
declare_method(SetDIData, DWORD, LPVOID)
declare_method(BuildDefaultActionMap, LPDIACTIONFORMATW, DWORD, REFGUID)
end_methods()
end_interface()
#else
begin_interface(IDirectInputDeviceCallback)
begin_methods()
declare_method(GetInstance,LPVOID *)
declare_method(GetVersions,LPDIDRIVERVERSIONS)
declare_method(GetDataFormat,LPDIDATAFORMAT *)
declare_method(GetObjectInfo,LPCDIPROPINFO,LPDIDEVICEOBJECTINSTANCEW)
declare_method(GetCapabilities,LPDIDEVCAPS)
declare_method(Acquire)
declare_method(Unacquire)
declare_method(GetDeviceState,LPVOID)
declare_method(GetDeviceInfo,LPDIDEVICEINSTANCEW)
declare_method(GetProperty,LPCDIPROPINFO,LPDIPROPHEADER)
declare_method(SetProperty,LPCDIPROPINFO,LPCDIPROPHEADER)
declare_method(SetEventNotification,HANDLE)
declare_method(SetCooperativeLevel,HWND,DWORD)
declare_method(RunControlPanel,HWND,DWORD)
declare_method(CookDeviceData,UINT,LPDIDEVICEOBJECTDATA)
declare_method(CreateEffect,LPDIRECTINPUTEFFECTSHEPHERD *)
declare_method(GetFFConfigKey,DWORD,PHKEY)
declare_method(SendDeviceData, LPCDIDEVICEOBJECTDATA, LPDWORD, DWORD)
declare_method(Poll)
declare_method_(DWORD,GetUsage, int)
declare_method(MapUsage, DWORD, PINT)
declare_method(SetDIData, DWORD, LPVOID)
end_methods()
end_interface()
;end
/****************************************************************************
*
* Emulation flags
*
* These bits can be put into the Emulation flag in the registry
* key REGSTR_PATH_DINPUT as the DWORD value of REGSTR_VAL_EMULATION.
*
* Warning! If you use more than fifteen bits of emulation, then
* you also have to mess with DIGETEMFL() and DIMAKEEMFL() in
* dinputv.h.
*
****************************************************************************/
#define DIEMFL_MOUSE 0x00000001 /* Force mouse emulation */
#define DIEMFL_KBD 0x00000002 /* Force keyboard emulation */
#define DIEMFL_JOYSTICK 0x00000004 /* Force joystick emulation */
#define DIEMFL_KBD2 0x00000008 /* Force keyboard emulation 2 */
#define DIEMFL_MOUSE2 0x00000010 /* Force mouse emulation 2 */
/****************************************************************************
*
* IDirectInputActionFramework
* Framework interface for configuring devices
*
****************************************************************************/
;begin_if_(DIRECTINPUT_VERSION)_800
begin_interface(IDirectInputActionFramework)
begin_methods()
declare_method(ConfigureDevices, LPDICONFIGUREDEVICESCALLBACK, LPDICONFIGUREDEVICESPARAMS%, DWORD, LPVOID)
end_methods()
end_interface()
;end
;end_internal
#endif /* DIJ_RINGZERO */
/****************************************************************************
*
* IDirectInputJoyConfig
*
****************************************************************************/
/****************************************************************************
*
* Definitions copied from the DDK
*
****************************************************************************/
#ifndef JOY_HW_NONE
/* pre-defined joystick types */
#define JOY_HW_NONE 0
#define JOY_HW_CUSTOM 1
#define JOY_HW_2A_2B_GENERIC 2
#define JOY_HW_2A_4B_GENERIC 3
#define JOY_HW_2B_GAMEPAD 4
#define JOY_HW_2B_FLIGHTYOKE 5
#define JOY_HW_2B_FLIGHTYOKETHROTTLE 6
#define JOY_HW_3A_2B_GENERIC 7
#define JOY_HW_3A_4B_GENERIC 8
#define JOY_HW_4B_GAMEPAD 9
#define JOY_HW_4B_FLIGHTYOKE 10
#define JOY_HW_4B_FLIGHTYOKETHROTTLE 11
#define JOY_HW_TWO_2A_2B_WITH_Y 12
#define JOY_HW_LASTENTRY 13
;begin_internal
#define JOY_HW_PREDEFMIN JOY_HW_2A_2B_GENERIC
#ifdef WINNT
#define JOY_HW_PREDEFMAX JOY_HW_LASTENTRY
#else
#define JOY_HW_PREDEFMAX (JOY_HW_LASTENTRY-1)
#endif
;end_internal
/* calibration flags */
#define JOY_ISCAL_XY 0x00000001l /* XY are calibrated */
#define JOY_ISCAL_Z 0x00000002l /* Z is calibrated */
#define JOY_ISCAL_R 0x00000004l /* R is calibrated */
#define JOY_ISCAL_U 0x00000008l /* U is calibrated */
#define JOY_ISCAL_V 0x00000010l /* V is calibrated */
#define JOY_ISCAL_POV 0x00000020l /* POV is calibrated */
/* point of view constants */
#define JOY_POV_NUMDIRS 4
#define JOY_POVVAL_FORWARD 0
#define JOY_POVVAL_BACKWARD 1
#define JOY_POVVAL_LEFT 2
#define JOY_POVVAL_RIGHT 3
/* Specific settings for joystick hardware */
#define JOY_HWS_HASZ 0x00000001l /* has Z info? */
#define JOY_HWS_HASPOV 0x00000002l /* point of view hat present */
#define JOY_HWS_POVISBUTTONCOMBOS 0x00000004l /* pov done through combo of buttons */
#define JOY_HWS_POVISPOLL 0x00000008l /* pov done through polling */
#define JOY_HWS_ISYOKE 0x00000010l /* joystick is a flight yoke */
#define JOY_HWS_ISGAMEPAD 0x00000020l /* joystick is a game pad */
#define JOY_HWS_ISCARCTRL 0x00000040l /* joystick is a car controller */
/* X defaults to J1 X axis */
#define JOY_HWS_XISJ1Y 0x00000080l /* X is on J1 Y axis */
#define JOY_HWS_XISJ2X 0x00000100l /* X is on J2 X axis */
#define JOY_HWS_XISJ2Y 0x00000200l /* X is on J2 Y axis */
/* Y defaults to J1 Y axis */
#define JOY_HWS_YISJ1X 0x00000400l /* Y is on J1 X axis */
#define JOY_HWS_YISJ2X 0x00000800l /* Y is on J2 X axis */
#define JOY_HWS_YISJ2Y 0x00001000l /* Y is on J2 Y axis */
/* Z defaults to J2 Y axis */
#define JOY_HWS_ZISJ1X 0x00002000l /* Z is on J1 X axis */
#define JOY_HWS_ZISJ1Y 0x00004000l /* Z is on J1 Y axis */
#define JOY_HWS_ZISJ2X 0x00008000l /* Z is on J2 X axis */
/* POV defaults to J2 Y axis, if it is not button based */
#define JOY_HWS_POVISJ1X 0x00010000l /* pov done through J1 X axis */
#define JOY_HWS_POVISJ1Y 0x00020000l /* pov done through J1 Y axis */
#define JOY_HWS_POVISJ2X 0x00040000l /* pov done through J2 X axis */
/* R defaults to J2 X axis */
#define JOY_HWS_HASR 0x00080000l /* has R (4th axis) info */
#define JOY_HWS_RISJ1X 0x00100000l /* R done through J1 X axis */
#define JOY_HWS_RISJ1Y 0x00200000l /* R done through J1 Y axis */
#define JOY_HWS_RISJ2Y 0x00400000l /* R done through J2 X axis */
/* U & V for future hardware */
#define JOY_HWS_HASU 0x00800000l /* has U (5th axis) info */
#define JOY_HWS_HASV 0x01000000l /* has V (6th axis) info */
/* Usage settings */
#define JOY_US_HASRUDDER 0x00000001l /* joystick configured with rudder */
#define JOY_US_PRESENT 0x00000002l /* is joystick actually present? */
#define JOY_US_ISOEM 0x00000004l /* joystick is an OEM defined type */
/* reserved for future use -> as link to next possible dword */
#define JOY_US_RESERVED 0x80000000l /* reserved */
begindoc
/****************************************************************************
*
* @doc DDK
*
* Flags set in <mf DIJOYTYPEINFO::dwFlags1>.
*
* @define JOYTYPE_ZEROGAMEENUMOEMDATA | 0x00000001 |
*
* Zero the data passed to the gameport enumerator rather than
* passing the default information.
*
* @define JOYTYPE_NOAUTODETECTGAMEPORT | 0x00000002 |
*
* Device does not support Autodetect gameport
*
* @define JOYTYPE_NOHIDDIRECT | 0x00000004 |
*
* This device should be read using the legacy method for this device
* rather than directly through HID.
*
* @define JOYTYPE_ANALOGCOMPAT | 0x00000008 |
*
* This device needs the analog compatible ID to be exposed in
* addition to the HW ID specified for the device.
*
* @define DIJOYTYPE_DEFAULTPROPSHEET | 0x80000000 |
*
* Override the OEM provided control panel property sheet page.
* In some rare cases, the user may choose to use the default property
* sheet page to calibrate / test a device.
*
****************************************************************************/
enddoc
;begin_public_5B2
/* Settings for TypeInfo Flags1 */
#define JOYTYPE_ZEROGAMEENUMOEMDATA 0x00000001l /* Zero GameEnum's OEM data field */
#define JOYTYPE_NOAUTODETECTGAMEPORT 0x00000002l /* Device does not support Autodetect gameport*/
#define JOYTYPE_NOHIDDIRECT 0x00000004l /* Do not use HID directly for this device */
#define JOYTYPE_ANALOGCOMPAT 0x00000008l /* Expose the analog compatible ID */
#define JOYTYPE_DEFAULTPROPSHEET 0x80000000l /* CPL overrides custom property sheet */
#define JOYTYPE_FLAGS1_SETVALID 0x80000000l ;internal
#define JOYTYPE_FLAGS1_GETVALID 0x8000000Fl ;internal
;end_public_5B2
begindoc
/****************************************************************************
*
* @doc DDK
*
* Flags set in <mf DIJOYTYPEINFO::dwFlags2>.
*
* @parm DWORD | dwFlags2 |
*
* Contains flags used to modify the default classification and
* behavior of devices of this type.
*
* A type override may be retrieved from this value using
* <f GET_DIDEVICE_TYPE> and a subtype override by using
* <f GET_DIDEVICE_SUBTYPE>.
* In addition four pairs of bits allow the sub-devices of a
* compound device to be selectively hidden or revealed.
* In each pair, it is an error for both bits to be set but if
* neither bit is set, the default behavior will be used.
*
* @xref <f GET_DIDEVICE_TYPE>,
* <f GET_DIDEVICE_SUBTYPE>.
*
* @define JOYTYPE_DEVICEHIDE | 0x00010000 |
*
* Do not enumerate unclassified devices related to this type
* unless the <c DIEDFL_INCLUDEHIDDEN> flag is passed to device
* enumeration.
*
* @define JOYTYPE_MOUSEHIDE | 0x00020000 |
*
* Do not enumerate mouse devices related to this type unless
* the <c DIEDFL_INCLUDEHIDDEN> flag is passed to device enumeration.
*
* @define JOYTYPE_KEYBHIDE | 0x000400000 |
*
* Do not enumerate keyboard devices related to this type unless
* the <c DIEDFL_INCLUDEHIDDEN> flag is passed to device enumeration.
*
* @define JOYTYPE_GAMEHIDE | 0x00080000 |
*
* Do not enumerate game devices related to this type unless the
* <c DIEDFL_INCLUDEHIDDEN> flag is passed to device enumeration.
*
* @define JOYTYPE_HIDEACTIVE | 0x00100000 |
*
* Set to indicate that the <c JOYTYPE_*HIDE> flags should be acted
* upon.
*
* @define JOYTYPE_INFOMASK | 0x00E00000 |
*
* Mask for bits used to modify type specific behaviors.
*
* @define JOYTYPE_INFODEFAULT | 0x00000000 |
*
* Value to indicate that default logic should be used for axis
* selection.
*
* @define JOYTYPE_INFOYYPEDALS | 0x00200000 |
*
* Value for a DI8DEVTYPE_DRIVING device to indicate that the axis
* reported through WinMM as the Y axis should be represented as a
* combined accelerate/brake value.
*
* @define JOYTYPE_INFOZYPEDALS | 0x00400000 |
*
* Value for a DI8DEVTYPE_DRIVING device to indicate that the axes
* reported through WinMM as Z and Y should be represented as the
* accelerate and brake pedal values.
*
* @define JOYTYPE_INFOYRPEDALS | 0x00600000 |
*
* Value for a DI8DEVTYPE_DRIVING device to indicate that the axes
* reported through WinMM as Y and R should be represented as the
* accelerate and brake pedal values.
*
* @define JOYTYPE_INFOZRPEDALS | 0x00800000 |
*
* Value for a DI8DEVTYPE_DRIVING device to indicate that the axes
* reported through WinMM as Z and R should be represented as the
* accelerate and brake pedal values.
*
* @define JOYTYPE_INFOZISSLIDER | 0x00200000 |
*
* Value for a game controller other than DI8DEVTYPE_DRIVING device
* to indicate that the axis reported through HID as a Z axis should
* be represented as a slider value. Other axes that can reported
* as a Z axis in DirectInput 5 (such as sliders and throttles) are
* always reported as sliders in DirectInput 8.
*
* @define JOYTYPE_INFOZISZ | 0x00400000 |
*
* Value for a game controller other than DI8DEVTYPE_DRIVING device
* to indicate that the axis reported through WinMM as a Z axis
* should be represented as a Z axis.
*
* @define JOYTYPE_ENABLEINPUTREPORT | 0x01000000 |
*
* DINPUT will call GetInputReport() during HID acquisition to obtain
* the initial device state.
*
****************************************************************************/
enddoc
;begin_public_dx8
/* Settings for TypeInfo Flags2 */
#define JOYTYPE_DEVICEHIDE 0x00010000l /* Hide unclassified devices */
#define JOYTYPE_MOUSEHIDE 0x00020000l /* Hide mice */
#define JOYTYPE_KEYBHIDE 0x00040000l /* Hide keyboards */
#define JOYTYPE_GAMEHIDE 0x00080000l /* Hide game controllers */
#define JOYTYPE_HIDEACTIVE 0x00100000l /* Hide flags are active */
#define JOYTYPE_INFOMASK 0x00E00000l /* Mask for type specific info */
#define JOYTYPE_INFODEFAULT 0x00000000l /* Use default axis mappings */
#define JOYTYPE_INFOYYPEDALS 0x00200000l /* Use Y as a combined pedals axis */
#define JOYTYPE_INFOZYPEDALS 0x00400000l /* Use Z for accelerate, Y for brake */
#define JOYTYPE_INFOYRPEDALS 0x00600000l /* Use Y for accelerate, R for brake */
#define JOYTYPE_INFOZRPEDALS 0x00800000l /* Use Z for accelerate, R for brake */
#define JOYTYPE_INFOZISSLIDER 0x00200000l /* Use Z as a slider */
#define JOYTYPE_INFOZISZ 0x00400000l /* Use Z as Z axis */
#define JOYTYPE_ENABLEINPUTREPORT 0x01000000l /* Enable initial input reports */
#define JOYTYPE_FLAGS2_SETVALID 0x01FFFFFFl ;internal
#define JOYTYPE_FLAGS2_GETVALID 0x01FFFFFFl ;internal
;end_public_dx8
/* struct for storing x,y, z, and rudder values */
typedef struct joypos_tag {
DWORD dwX;
DWORD dwY;
DWORD dwZ;
DWORD dwR;
DWORD dwU;
DWORD dwV;
} JOYPOS, FAR *LPJOYPOS;
;begin_internal
#define iJoyPosAxisX 0 /* The order in which */
#define iJoyPosAxisY 1 /* axes appear */
#define iJoyPosAxisZ 2 /* in a JOYPOS */
#define iJoyPosAxisR 3
#define iJoyPosAxisU 4
#define iJoyPosAxisV 5
#define cJoyPosAxisMax 6
#define cJoyPosButtonMax 32
;end_internal
/* struct for storing ranges */
typedef struct joyrange_tag {
JOYPOS jpMin;
JOYPOS jpMax;
JOYPOS jpCenter;
} JOYRANGE,FAR *LPJOYRANGE;
/*
* dwTimeout - value at which to timeout joystick polling
* jrvRanges - range of values app wants returned for axes
* jpDeadZone - area around center to be considered
* as "dead". specified as a percentage
* (0-100). Only X & Y handled by system driver
*/
typedef struct joyreguservalues_tag {
DWORD dwTimeOut;
JOYRANGE jrvRanges;
JOYPOS jpDeadZone;
} JOYREGUSERVALUES, FAR *LPJOYREGUSERVALUES;
typedef struct joyreghwsettings_tag {
DWORD dwFlags;
DWORD dwNumButtons;
} JOYREGHWSETTINGS, FAR *LPJOYHWSETTINGS;
/* range of values returned by the hardware (filled in by calibration) */
/*
* jrvHardware - values returned by hardware
* dwPOVValues - POV values returned by hardware
* dwCalFlags - what has been calibrated
*/
typedef struct joyreghwvalues_tag {
JOYRANGE jrvHardware;
DWORD dwPOVValues[JOY_POV_NUMDIRS];
DWORD dwCalFlags;
} JOYREGHWVALUES, FAR *LPJOYREGHWVALUES;
/* hardware configuration */
/*
* hws - hardware settings
* dwUsageSettings - usage settings
* hwv - values returned by hardware
* dwType - type of joystick
* dwReserved - reserved for OEM drivers
*/
typedef struct joyreghwconfig_tag {
JOYREGHWSETTINGS hws;
DWORD dwUsageSettings;
JOYREGHWVALUES hwv;
DWORD dwType;
DWORD dwReserved;
} JOYREGHWCONFIG, FAR *LPJOYREGHWCONFIG;
/* joystick calibration info structure */
typedef struct joycalibrate_tag {
UINT wXbase;
UINT wXdelta;
UINT wYbase;
UINT wYdelta;
UINT wZbase;
UINT wZdelta;
} JOYCALIBRATE;
typedef JOYCALIBRATE FAR *LPJOYCALIBRATE;
#endif
#ifndef DIJ_RINGZERO
#define MAX_JOYSTRING 256
typedef BOOL (FAR PASCAL * LPDIJOYTYPECALLBACK)(LPCWSTR, LPVOID);
#ifndef MAX_JOYSTICKOEMVXDNAME
#define MAX_JOYSTICKOEMVXDNAME 260
#endif
begindoc
/****************************************************************************
*
* @doc DDK
*
* @define DITC_REGHWSETTINGS | 0x00000001 |
*
* Parameter to <mf IDirectInputJoyConfig::GetTypeInfo>
* and <mf IDirectInputJoyConfig::SetTypeInfo>
* indicating that the registry hardware settings for
* the joystick are valid or are being requested.
*
* @define DITC_CLSIDCONFIG | 0x00000002 |
*
* Parameter to
* <mf IDirectInputJoyConfig::GetTypeInfo> or
* <mf IDirectInputJoyConfig::SetTypeInfo> indicating
* that the joystick configuration <t CLSID>
* is valid or is being requested. If the value is
* all-zeros, then there is no custom configuration
* for this joystick type.
*
* @define DITC_DISPLAYNAME | 0x00000004 |
*
* Parameter to
* <mf IDirectInputJoyConfig::GetTypeInfo> or
* <mf IDirectInputJoyConfig::SetTypeInfo> indicating
* that the display name for the joystick type
* is valid or is being requested.
*
* @define DITC_CALLOUT | 0x00000008 |
*
* Parameter to
* <mf IDirectInputJoyConfig::GetTypeInfo> or
* <mf IDirectInputJoyConfig::SetTypeInfo> indicating
* that the callout for the joystick type
* is valid or is being requested.
*
* @define DITC_HARDWAREID | 0x00000010 |
* Parameter to
* <mf IDirectInputJoyConfig::GetTypeInfo> or
* <mf IDirectInputJoyConfig::SetTypeInfo> indicating
* that the Hardware ID for the joystick type
* is valid or is being requested.
* This field is new for DX6.1a
*
* @define DITC_FLAGS1 | 0x00000020 |
* Parameter to
* <mf IDirectInputJoyConfig::GetTypeInfo> or
* <mf IDirectInputJoyConfig::SetTypeInfo> indicating
* that the dwFlags1 field for the joystick type
* is valid or is being requested.
* This field is new for DX6.1a
*
* @define DITC_FLAGS2 | 0x00000040 |
* Parameter to
* <mf IDirectInputJoyConfig::GetTypeInfo> or
* <mf IDirectInputJoyConfig::SetTypeInfo> indicating
* that the dwFlags2 field for the joystick type
* is valid or is being requested.
* This field is new for DX8
*
* @define DITC_MAPFILE | 0x00000080 |
* Parameter to
* <mf IDirectInputJoyConfig::GetTypeInfo> or
* <mf IDirectInputJoyConfig::SetTypeInfo> indicating
* that the dwFlags2 field for the joystick type
* is valid or is being requested.
* This field is new for DX8
*
* @doc INTERNAL
*
* @define DITC_VOLATILEREGKEY | 0x80000000 |
*
* Internal flag to
* <mf IDirectInputJoyConfig::SetTypeInfo>
* indicating that a volatile registry key
* should be used to store Config information
* for this type.
*
****************************************************************************/
enddoc
#define DITC_REGHWSETTINGS 0x00000001
#define DITC_CLSIDCONFIG 0x00000002
#define DITC_DISPLAYNAME 0x00000004
#define DITC_CALLOUT 0x00000008
#define DITC_HARDWAREID 0x00000010;public_5B2
#define DITC_FLAGS1 0x00000020;public_5B2
#define DITC_FLAGS2 0x00000040;public_800
#define DITC_MAPFILE 0x00000080;public_800
#define DITC_INREGISTRY 0x0000000F;internal_dx5
#define DITC_GETVALID 0x0000000F;internal_dx5
#define DITC_SETVALID 0x0000000F;internal_dx5
#define DITC_VOLATILEREGKEY 0x80000000;internal
#define DITC_INREGISTRY_DX5 0x0000000F;internal
#define DITC_GETVALID_DX5 0x0000000F;internal
#define DITC_SETVALID_DX5 0x0000000F;internal
#define DITC_INREGISTRY_DX6 0x0000003F;internal_800
#define DITC_GETVALID_DX6 0x0000003F;internal_800
#define DITC_SETVALID_DX6 0x0000003F;internal_800
#define DITC_INREGISTRY 0x0000003F;internal_dx7
#define DITC_GETVALID 0x0000003F;internal_dx7
#define DITC_SETVALID 0x0000003F;internal_dx7
#define DITC_INREGISTRY 0x000000FF;internal_800
#define DITC_GETVALID 0x000000FF;internal_800
#define DITC_SETVALID 0x000000FF;internal_800
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIJOYTYPEINFO |
*
* The <t DIJOYTYPEINFO> structure contains
* information about a joystick type.
*
* A "joystick type" describes how DirectInput should
* communicate with the device and how it should report
* device data. For example, "A Frobozz Industries
* SuperStick 5X is a three-axis, five-button joystick
* with the third axis reported as the first bit on
* the second pot."
*
* DirectInput comes with the following predefined joystick
* types, all with axes in their default locations.
*
* Two-axis, two-button joystick
*
* Two-axis, four-button joystick
*
* Two-button gamepad
*
* Two-button flight yoke
*
* Two-button flight yoke with throttle
*
* Three-axis, two-button joystick
*
* Three-axis, four-button joystick
*
* Four-button gamepad
*
* Four-button flight yoke
*
* Four-button flight yoke with throttle
*
* If the joystick type has the
* <c JOY_HWS_ISGAMEPORTDRIVER> flag set in
* the <e JOYHWSETTINGS.dwFlags> field of
* the <t JOYHWSETTINGS> structure, then
* the <e DIJOYTYPEINFO.wszCallout> field of
* the <t DIJOYTYPEINFO> structure contains the
* name of a driver which can be used as a global driver.
* The joystick type should be shown on the list of
* global drivers and not shown on the list of
* assignable joystick types.
*
* @field DWORD | dwSize |
*
* Specifies the size, in bytes, of the structure.
* This field "must" be initialized by the application
* before calling any DirectInput method.
*
* @field JOYREGHWSETTINGS | hws |
*
* Joystick hardware settings, as documented in the
* mmddk.h header file.
*
* @field CLSID | clsidConfig |
*
* <t CLSID> for the joystick type configuration object.
* Pass this <t CLSID> to <f CoCreateInstance> to create
* a configuration object.
*
* This field is all-zero if the type does not have
* custom configuration.
*
* @field WCHAR | wszDisplayName[MAX_JOYSTRING] |
*
* The display name for the joystick type. The display name
* is the name that should be used to display the name of
* the joystick type to the end-user.
*
* @field WCHAR | wszCallout[MAX_JOYSTICKOEMVXDNAME] |
*
* The device that is responsible for handling polling
* for devices of this type. This is a null string if the global
* polling callout is to be used.
*
;begin_if_(DIRECTINPUT_VERSION)_5B2
* @field WCHAR | wszHardwareId[MAX_JOYSTRING] |
* The hardware ID for the joystick type. The hardware ID is used
* by Plug and Play on WINNT50 to find the drivers for the joystick.
* This field is new for DX6.1a
*
* @field DWORD | dwFlags1 |
* Additional flags pertinent to device type.
*
* @field DWORD | dwFlags2 |
* Additional flags used to override the way a device is handled.
*
* @field WCHAR | wszMapFile[MAX_JOYSTRING] |
*
* Full path and file name of the IHV supplied semantic map file.
;end
*
*
****************************************************************************/
enddoc
;begin_public_5B2
/* This structure is defined for DirectX 5.0 compatibility */
typedef struct DIJOYTYPEINFO_DX5 {
DWORD dwSize;
JOYREGHWSETTINGS hws;
CLSID clsidConfig;
WCHAR wszDisplayName[MAX_JOYSTRING];
WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];
} DIJOYTYPEINFO_DX5, *LPDIJOYTYPEINFO_DX5;
typedef const DIJOYTYPEINFO_DX5 *LPCDIJOYTYPEINFO_DX5;
;end_public_5B2
;begin_public_800
/* This structure is defined for DirectX 6.1 compatibility */
typedef struct DIJOYTYPEINFO_DX6 {
DWORD dwSize;
JOYREGHWSETTINGS hws;
CLSID clsidConfig;
WCHAR wszDisplayName[MAX_JOYSTRING];
WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];
WCHAR wszHardwareId[MAX_JOYSTRING];
DWORD dwFlags1;
} DIJOYTYPEINFO_DX6, *LPDIJOYTYPEINFO_DX6;
typedef const DIJOYTYPEINFO_DX6 *LPCDIJOYTYPEINFO_DX6;
;end_public_800
typedef struct DIJOYTYPEINFO {
DWORD dwSize;
JOYREGHWSETTINGS hws;
CLSID clsidConfig;
WCHAR wszDisplayName[MAX_JOYSTRING];
WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];
;begin_if_(DIRECTINPUT_VERSION)_5B2
WCHAR wszHardwareId[MAX_JOYSTRING];
DWORD dwFlags1;
;begin_if_(DIRECTINPUT_VERSION)_800
DWORD dwFlags2;
WCHAR wszMapFile[MAX_JOYSTRING];
;end
;end
} DIJOYTYPEINFO, *LPDIJOYTYPEINFO;
typedef const DIJOYTYPEINFO *LPCDIJOYTYPEINFO;
;begin_internal_5B2
/*
* Name for the 8.0 structure, in places where we specifically care.
*/
typedef DIJOYTYPEINFO DIJOYTYPEINFO_DX8;
typedef LPDIJOYTYPEINFO *LPDIJOYTYPEINFO_DX8;
BOOL static __inline
IsValidSizeDIJOYTYPEINFO(DWORD cb)
{
return cb == sizeof(DIJOYTYPEINFO_DX8) ||
cb == sizeof(DIJOYTYPEINFO_DX6) ||
cb == sizeof(DIJOYTYPEINFO_DX5);
}
;end_internal
begindoc
/****************************************************************************
*
* @doc DDK
*
* @define DIJC_GUIDINSTANCE | 0x00000001 |
*
* Parameter to
* <mf IDirectInputJoyConfig::GetConfig> indicating
* that the instance <t GUID> for the joystick
* is being requested. An application can pass the
* instance <t GUID> to <mf IDirectInput::CreateDevice>
* to obtain an <i IDirectInputDevice> interface to
* the joystick.
*
*
* @define DIJC_REGHWCONFIGTYPE | 0x00000002 |
*
* Parameter to
* <mf IDirectInputJoyConfig::GetConfig> or
* <mf IDirectInputJoyConfig::SetConfig> indicating
* that the hardware configuration for the joystick
* (<e DIJOYCONFIG.hwc>)
* and the joystick type name (<e DIJOYCONFIG.wszType>)
* are valid or are being requested.
*
* Note that the hardware configuration and type
* name cannot be set separately.
*
* @define DIJC_GAIN | 0x00000004 |
*
* Parameter to
* <mf IDirectInputJoyConfig::GetConfig> or
* <mf IDirectInputJoyConfig::SetConfig> indicating
* that the force feedback gain for the joystick
* is valid or is being requested.
*
* @define DIJC_CALLOUT | 0x00000008 |
*
* Parameter to
* <mf IDirectInputJoyConfig::GetConfig> or
* <mf IDirectInputJoyConfig::SetConfig> indicating
* that the joystick polling callout
* is valid or is being requested.
*
;begin_public_5B2
* @define DIJC_GAMEPORT | 0x00000010 |
* Parameter to
* <mf IDirectInputJoyConfig::GetConfig> or
* <mf IDirectInputJoyConfig::SetConfig> indicating
* the gameport Emulator to use for the joystick.
;end_public_5B2
*
* @doc INTERNAL
*
* @define DIJC_UPDATEALIAS | 0x80000000 |
*
* Internal flag to
* <mf IDirectInputJoyConfig::SetConfig>
* indicating that we should also update alias
* device calibrations. The value in the calibration
* structure consists of VJOYD-style calibration information.
* It needs to be converted to DirectInput-style calibration
* information if the recipient wishes it to be such.
*
****************************************************************************/
enddoc
#define DIJC_GUIDINSTANCE 0x00000001
#define DIJC_REGHWCONFIGTYPE 0x00000002
#define DIJC_GAIN 0x00000004
#define DIJC_CALLOUT 0x00000008
#define DIJC_WDMGAMEPORT 0x00000010;public_5b2
#define DIJC_UPDATEALIAS 0x80000000;internal
#define DIJC_INREGISTRY 0x0000000E;internal_dx5
#define DIJC_GETVALID 0x0000000F;internal_dx5
#define DIJC_SETVALID 0x0000000E;internal_dx5
#define DIJC_INREGISTRY_DX5 0x0000000E;internal_5b2
#define DIJC_GETVALID_DX5 0x0000000F;internal_5b2
#define DIJC_SETVALID_DX5 0x0000000E;internal_5b2
#define DIJC_INREGISTRY 0x0000001E;internal_5b2
#define DIJC_GETVALID 0x0000001F;internal_5b2
#define DIJC_SETVALID 0x0000001F;internal_5b2
#define DIJC_INTERNALSETVALID 0x8000001F;internal_5b2
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIJOYCONFIG |
*
* The <t DIJOYCONFIG> structure contains information
* about a joystick's configuration.
*
* @field DWORD | dwSize |
*
* Specifies the size, in bytes, of the structure.
* This field "must" be initialized by the application
* before calling any DirectInput method.
*
* @field GUID | guidInstance |
*
* The instance guid for the joystick.
*
* @field JOYREGHWCONFIG | hwc |
*
* Joystick hardware configuration, as documented in the
* mmddk.h header file.
*
* @field DWORD | dwGain |
*
* Global gain setting. This value is applied to all
* force feedback effects as a "master volume control".
*
* @field WCHAR | wszType[MAX_JOYSTRING] |
*
* The joystick type for the joystick.
* It must be one of the values enumerated by
* <mf IDirectInputJoyConfig::EnumTypes>.
*
* @field WCHAR | wszCallout[MAX_JOYSTRING] |
*
* The callout driver for the joystick.
*
;begin_if_(DIRECTINPUT_VERSION)_5B2
* @field GUID | guidGameport |
*
* A GUID that identifies the Gameport being used for this joystick.
* Available gameports can be found by enumurating with the
* <mf IDirectInputJoyConfig::GetTypeInfo> interface and studying devices which
* have the flags JOY_HWS_ISGAMEPORTBUS set in <mf DIJOYTYPEINFO::hws->dwFlags> field.
*
* Alternatively, you can set this GUID to GUID_GAMEENUM_BUS_ENUMERATOR. This will
* expose the device on all unused gameports. Devices that report a "not connected"
* status will be subsequently removed.
;end
*
*
****************************************************************************/
enddoc
;begin_public_5B2
/* This structure is defined for DirectX 5.0 compatibility */
typedef struct DIJOYCONFIG_DX5 {
DWORD dwSize;
GUID guidInstance;
JOYREGHWCONFIG hwc;
DWORD dwGain;
WCHAR wszType[MAX_JOYSTRING];
WCHAR wszCallout[MAX_JOYSTRING];
} DIJOYCONFIG_DX5, *LPDIJOYCONFIG_DX5;
typedef const DIJOYCONFIG_DX5 *LPCDIJOYCONFIG_DX5;
;end_public_5B2
typedef struct DIJOYCONFIG {
DWORD dwSize;
GUID guidInstance;
JOYREGHWCONFIG hwc;
DWORD dwGain;
WCHAR wszType[MAX_JOYSTRING];
WCHAR wszCallout[MAX_JOYSTRING];
;begin_if_(DIRECTINPUT_VERSION)_5B2
GUID guidGameport;
;end
} DIJOYCONFIG, *LPDIJOYCONFIG;
typedef const DIJOYCONFIG *LPCDIJOYCONFIG;
;begin_internal_5B2
/*
* Name for the 6.? structure, in places where we specifically care.
*/
typedef DIJOYCONFIG DIJOYCONFIG_DX6;
typedef DIJOYCONFIG *LPDIJOYCONFIG_DX6;
BOOL static __inline
IsValidSizeDIJOYCONFIG(DWORD cb)
{
return cb == sizeof(DIJOYCONFIG_DX6) ||
cb == sizeof(DIJOYCONFIG_DX5);
}
;end_internal_5B2
begindoc
/****************************************************************************
*
* @doc DDK
*
* @define DIJU_USERVALUES | 0x00000001 |
*
* Parameter to
* <mf IDirectInputJoyConfig::GetUserValues> or
* <mf IDirectInputJoyConfig::SetUserValues> indicating
* that the user configuration settings
* (<e DIJOYUSERVALUES.ruv>)
* is valid or is being requested.
*
* @define DIJU_GLOBALDRIVER | 0x00000002 |
*
* Parameter to
* <mf IDirectInputJoyConfig::GetUserValues> or
* <mf IDirectInputJoyConfig::SetUserValues> indicating
* that the global port driver
* (<e DIJOYUSERVALUES.wszGlobalDriver>)
* is valid or is being requested.
*
* A list of valid global drivers can be obtained by
* enumerating the list of joystick types.
* If the joystick type has the
* <c JOY_HWS_ISGAMEPORTDRIVER> flag set in
* the <e JOYHWSETTINGS.dwFlags> field of
* the <t JOYHWSETTINGS> structure, then
* the <e DIJOYTYPEINFO.wszCallout> field of
* the <t DIJOYTYPEINFO> structure contains the
* name of a driver which can be used as a global driver.
*
* @define DIJU_GAMEPORTEMULATOR | 0x00000004 |
*
* Parameter to
* <mf IDirectInputJoyConfig::GetUserValues> or
* <mf IDirectInputJoyConfig::SetUserValues> indicating
* that the gameport emulator driver
* (<e DIJOYUSERVALUES.wszGameportEmulator>).
* is valid or is being requested.
*
* A list of valid gameport emulators can be obtained by
* enumerating the list of joystick types.
* If the joystick type has the
* <c JOY_HWS_ISGAMEPORTEMULATOR> flag set in
* the <e JOYHWSETTINGS.dwFlags> field of
* the <t JOYHWSETTINGS> structure, then
* the <e DIJOYTYPEINFO.wszCallout> field of
* the <t DIJOYTYPEINFO> structure contains the
* name of a driver which can be used as a
* gameport emulator.
*
*
****************************************************************************/
enddoc
#define DIJU_USERVALUES 0x00000001
#define DIJU_GLOBALDRIVER 0x00000002
#define DIJU_GAMEPORTEMULATOR 0x00000004
#define DIJU_INDRIVERREGISTRY 0x00000006;internal
#define DIJU_GETVALID 0x00000007;internal
#define DIJU_SETVALID 0x80000007;internal
begindoc
/****************************************************************************
*
* @doc DDK
*
* @struct DIJOYUSERVALUES |
*
* The <t DIJOYUSERVALUES> structure contains information
* about the user's joystick settings.
*
* @field DWORD | dwSize |
*
* Specifies the size, in bytes, of the structure.
* This field "must" be initialized by the application
* before calling any DirectInput method.
*
* @field JOYREGUSERVALUES | ruv |
*
* Joystick user configuration, as documented in the
* mmddk.h header file.
*
* In addition to the fields documented in the mmddk.h
* header file, the heretofore unused
* jrvRanges.jpCenter field
* contains the user saturation levels for each axis.
*
* A control panel application sets the dead zone and
* saturation values based on the values set by the
* end-user during calibration or fine-tuning.
* "Dead zone" can be interpreted as "sensitivity in the
* center" and "Saturation" can be interpreted as
* "sensitive along the edges".
*
* @field WCHAR | wszGlobalDriver[MAX_JOYSTRING] |
*
* The global port driver.
*
* @field WCHAR | wszGameportEmulator[MAX_JOYSTRING] |
*
* The gameport emulator.
*
****************************************************************************/
enddoc
typedef struct DIJOYUSERVALUES {
DWORD dwSize;
JOYREGUSERVALUES ruv;
WCHAR wszGlobalDriver[MAX_JOYSTRING];
WCHAR wszGameportEmulator[MAX_JOYSTRING];
} DIJOYUSERVALUES, *LPDIJOYUSERVALUES;
typedef const DIJOYUSERVALUES *LPCDIJOYUSERVALUES;
DEFINE_GUID(GUID_KeyboardClass, 0x4D36E96B,0xE325,0x11CE,0xBF,0xC1,0x08,0x00,0x2B,0xE1,0x03,0x18);
DEFINE_GUID(GUID_MediaClass, 0x4D36E96C,0xE325,0x11CE,0xBF,0xC1,0x08,0x00,0x2B,0xE1,0x03,0x18);
DEFINE_GUID(GUID_MouseClass, 0x4D36E96F,0xE325,0x11CE,0xBF,0xC1,0x08,0x00,0x2B,0xE1,0x03,0x18);
DEFINE_GUID(GUID_HIDClass, 0x745A17A0,0x74D3,0x11D0,0xB6,0xFE,0x00,0xA0,0xC9,0x0F,0x57,0xDA);
begin_interface(IDirectInputJoyConfig)
begin_methods()
declare_method(Acquire)
declare_method(Unacquire)
declare_method(SetCooperativeLevel, HWND, DWORD)
declare_method(SendNotify)
declare_method(EnumTypes, LPDIJOYTYPECALLBACK, LPVOID)
declare_method(GetTypeInfo, LPCWSTR, LPDIJOYTYPEINFO, DWORD)
declare_method(SetTypeInfo, LPCWSTR, LPCDIJOYTYPEINFO, DWORD)
declare_method(DeleteType, LPCWSTR)
declare_method(GetConfig, UINT, LPDIJOYCONFIG, DWORD)
declare_method(SetConfig, UINT, LPCDIJOYCONFIG, DWORD)
declare_method(DeleteConfig, UINT)
declare_method(GetUserValues, LPDIJOYUSERVALUES, DWORD)
declare_method(SetUserValues, LPCDIJOYUSERVALUES, DWORD)
declare_method(AddNewHardware, HWND, REFGUID)
declare_method(OpenTypeKey, LPCWSTR, DWORD, PHKEY)
declare_method(OpenConfigKey, UINT, DWORD, PHKEY)
end_methods()
end_interface()
#endif /* DIJ_RINGZERO */
;begin_if_(DIRECTINPUT_VERSION)_800
#ifndef DIJ_RINGZERO
begin_interface(IDirectInputJoyConfig8)
begin_methods()
declare_method(Acquire)
declare_method(Unacquire)
declare_method(SetCooperativeLevel, HWND, DWORD)
declare_method(SendNotify)
declare_method(EnumTypes, LPDIJOYTYPECALLBACK, LPVOID)
declare_method(GetTypeInfo, LPCWSTR, LPDIJOYTYPEINFO, DWORD)
declare_method(SetTypeInfo, LPCWSTR, LPCDIJOYTYPEINFO, DWORD, LPWSTR)
declare_method(DeleteType, LPCWSTR)
declare_method(GetConfig, UINT, LPDIJOYCONFIG, DWORD)
declare_method(SetConfig, UINT, LPCDIJOYCONFIG, DWORD)
declare_method(DeleteConfig, UINT)
declare_method(GetUserValues, LPDIJOYUSERVALUES, DWORD)
declare_method(SetUserValues, LPCDIJOYUSERVALUES, DWORD)
declare_method(AddNewHardware, HWND, REFGUID)
declare_method(OpenTypeKey, LPCWSTR, DWORD, PHKEY)
declare_method(OpenAppStatusKey, PHKEY)
end_methods()
end_interface()
#endif /* DIJ_RINGZERO */
/****************************************************************************
*
* Notification Messages
*
****************************************************************************/
/* RegisterWindowMessage with this to get DirectInput notification messages */
#define DIRECTINPUT_NOTIFICATION_MSGSTRINGA "DIRECTINPUT_NOTIFICATION_MSGSTRING"
#define DIRECTINPUT_NOTIFICATION_MSGSTRINGW L"DIRECTINPUT_NOTIFICATION_MSGSTRING"
#ifdef UNICODE
#define DIRECTINPUT_NOTIFICATION_MSGSTRING DIRECTINPUT_NOTIFICATION_MSGSTRINGW
#else
#define DIRECTINPUT_NOTIFICATION_MSGSTRING DIRECTINPUT_NOTIFICATION_MSGSTRINGA
#endif
begindoc
/****************************************************************************
*
* @doc DDK
*
* @define DIMSGWP_NEWAPPSTART | 0x00000001 |
*
* <e MSG.wParam> value of message sent to notify applications that
* a DirectInput has been initialized by an application that has not
* been used by the current user before.
*
* @define DIMSGWP_APPSTART | 0x00000002 |
*
* <e MSG.wParam> value of message sent to notify applications that
* a DirectInput has been initialized by an application that did not
* use mapper functions on any previous run by the current user.
*
* @define DIMSGWP_MAPPERAPPSTART | 0x00000004 |
*
* <e MSG.wParam> value of message sent to notify applications that
* a DirectInput has been initialized by an application that uses
* semantic mapper functions.
*
****************************************************************************/
enddoc
#define DIMSGWP_NEWAPPSTART 0x00000001
#define DIMSGWP_DX8APPSTART 0x00000002
#define DIMSGWP_DX8MAPPERAPPSTART 0x00000003
;end
begindoc
/****************************************************************************
*
* @doc DDK
*
* @define DIRECTINPUT_REGSTR_VAL_APPIDFLAG | "AppIdFlag" |
*
* Registry value under the key opened by
* <mf IDirectInputJoyConfig::OpenAppStatusKey> containing
* information about how the AppID (appliction ID) can be composed.
* By default, AppID is composed by application name, time, and size.
* AppIDFlag = DIAPPIDFLAG_NOTIME :
* composed by appliction name and size
* AppIDFlag = DIAPPIDFLAG_NOSIZE :
* composed by appliction name and time
* AppIDFlag = DIAPPIDFLAG_NOTIME | DIAPPIDFLAG_NOSIZE :
* composed only by appliction name
*
* @define DIRECTINPUT_REGSTR_KEY_LASTAPP | "MostRecentApplication" |
*
* Registry key under the key opened by
* <mf IDirectInputJoyConfig::OpenAppStatusKey> containing
* information about the most recent application to run without
* using a mapper function.
*
* @define DIRECTINPUT_REGSTR_KEY_LASTMAPAPP | "MostRecentMapperApplication" |
*
* Registry key under the key opened by
* <mf IDirectInputJoyConfig::OpenAppStatusKey> containing
* information about the most recent mapper application to run.
*
* @define DIRECTINPUT_REGSTR_VAL_VERSION | "Version" |
*
* Registry value under one of the subkeys of the key opened by
* <mf IDirectInputJoyConfig::OpenAppStatusKey>. The REG_BINARY
* value is the DWORD DIRECTINPUT_VERSION passed by the application
* to initialize DirectInput.
*
* @define DIRECTINPUT_REGSTR_VAL_NAME | "Name" |
*
* Registry value under one of the subkeys of the key opened by
* <mf IDirectInputJoyConfig::OpenAppStatusKey>. The REG_SZ value
* is the application filename in upper case.
*
* @define DIRECTINPUT_REGSTR_VAL_ID | "Id" |
*
* Registry value under either <c DIRECTINPUT_REGSTR_KEY_LASTMAPAPP>
* or <c DIRECTINPUT_REGSTR_KEY_LASTAPP> subkeys of the key opened by
* <mf IDirectInputJoyConfig::OpenAppStatusKey>. The REG_SZ value
* is the application id value. For DirectX 8 applications, this is
* also the key name of a sibling key specific to this application.
*
* @define DIRECTINPUT_REGSTR_VAL_MAPPER | "UsesMapper" |
*
* Registry value under one of DirectX 8 application subkeys of the
* key opened by <mf IDirectInputJoyConfig::OpenAppStatusKey>. The
* REG_BINARY value a DWORD with value 0 if the application has not
* used mapper functionality or 1 if it has.
*
* @define DIRECTINPUT_REGSTR_VAL_LASTSTART | "MostRecentStart" |
*
* Registry value under either <c DIRECTINPUT_REGSTR_KEY_LASTMAPAPP>
* or <c DIRECTINPUT_REGSTR_KEY_LASTAPP> subkeys of the key opened by
* <mf IDirectInputJoyConfig::OpenAppStatusKey>. The REG_BINARY
* value is a <t FILETIME> of the time the key contents were written.
*
****************************************************************************/
enddoc
#define DIAPPIDFLAG_NOTIME 0x00000001
#define DIAPPIDFLAG_NOSIZE 0x00000002
#define DIRECTINPUT_REGSTR_VAL_APPIDFLAGA "AppIdFlag"
#define DIRECTINPUT_REGSTR_KEY_LASTAPPA "MostRecentApplication"
#define DIRECTINPUT_REGSTR_KEY_LASTMAPAPPA "MostRecentMapperApplication"
#define DIRECTINPUT_REGSTR_VAL_VERSIONA "Version"
#define DIRECTINPUT_REGSTR_VAL_NAMEA "Name"
#define DIRECTINPUT_REGSTR_VAL_IDA "Id"
#define DIRECTINPUT_REGSTR_VAL_MAPPERA "UsesMapper"
#define DIRECTINPUT_REGSTR_VAL_LASTSTARTA "MostRecentStart"
#define DIRECTINPUT_REGSTR_VAL_APPIDFLAGW L"AppIdFlag"
#define DIRECTINPUT_REGSTR_KEY_LASTAPPW L"MostRecentApplication"
#define DIRECTINPUT_REGSTR_KEY_LASTMAPAPPW L"MostRecentMapperApplication"
#define DIRECTINPUT_REGSTR_VAL_VERSIONW L"Version"
#define DIRECTINPUT_REGSTR_VAL_NAMEW L"Name"
#define DIRECTINPUT_REGSTR_VAL_IDW L"Id"
#define DIRECTINPUT_REGSTR_VAL_MAPPERW L"UsesMapper"
#define DIRECTINPUT_REGSTR_VAL_LASTSTARTW L"MostRecentStart"
#ifdef UNICODE
#define DIRECTINPUT_REGSTR_VAL_APPIDFLAG DIRECTINPUT_REGSTR_VAL_APPIDFLAGW
#define DIRECTINPUT_REGSTR_KEY_LASTAPP DIRECTINPUT_REGSTR_KEY_LASTAPPW
#define DIRECTINPUT_REGSTR_KEY_LASTMAPAPP DIRECTINPUT_REGSTR_KEY_LASTMAPAPPW
#define DIRECTINPUT_REGSTR_VAL_VERSION DIRECTINPUT_REGSTR_VAL_VERSIONW
#define DIRECTINPUT_REGSTR_VAL_NAME DIRECTINPUT_REGSTR_VAL_NAMEW
#define DIRECTINPUT_REGSTR_VAL_ID DIRECTINPUT_REGSTR_VAL_IDW
#define DIRECTINPUT_REGSTR_VAL_MAPPER DIRECTINPUT_REGSTR_VAL_MAPPERW
#define DIRECTINPUT_REGSTR_VAL_LASTSTART DIRECTINPUT_REGSTR_VAL_LASTSTARTW
#else
#define DIRECTINPUT_REGSTR_VAL_APPIDFLAG DIRECTINPUT_REGSTR_VAL_APPIDFLAGA
#define DIRECTINPUT_REGSTR_KEY_LASTAPP DIRECTINPUT_REGSTR_KEY_LASTAPPA
#define DIRECTINPUT_REGSTR_KEY_LASTMAPAPP DIRECTINPUT_REGSTR_KEY_LASTMAPAPPA
#define DIRECTINPUT_REGSTR_VAL_VERSION DIRECTINPUT_REGSTR_VAL_VERSIONA
#define DIRECTINPUT_REGSTR_VAL_NAME DIRECTINPUT_REGSTR_VAL_NAMEA
#define DIRECTINPUT_REGSTR_VAL_ID DIRECTINPUT_REGSTR_VAL_IDA
#define DIRECTINPUT_REGSTR_VAL_MAPPER DIRECTINPUT_REGSTR_VAL_MAPPERA
#define DIRECTINPUT_REGSTR_VAL_LASTSTART DIRECTINPUT_REGSTR_VAL_LASTSTARTA
#endif
;begin_internal_dx7
/*
* Because the registry strings are new to DX8, we need to duplicate them
* for internal use in the DX8 version of DI7. (Yuck)
*/
#define DIRECTINPUT_REGSTR_KEY_LASTAPP TEXT("MostRecentApplication")
#define DIRECTINPUT_REGSTR_KEY_LASTMAPAPP TEXT("MostRecentMapperApplication")
#define DIRECTINPUT_REGSTR_VAL_VERSION TEXT("Version")
#define DIRECTINPUT_REGSTR_VAL_NAME TEXT("Name")
#define DIRECTINPUT_REGSTR_VAL_ID TEXT("Id")
#define DIRECTINPUT_REGSTR_VAL_MAPPER TEXT("UsesMapper")
#define DIRECTINPUT_REGSTR_VAL_LASTSTART TEXT("MostRecentStart")
;end_internal_dx7
/****************************************************************************
*
* Return Codes
*
****************************************************************************/
#define DIERR_NOMOREITEMS \
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NO_MORE_ITEMS)
/*
* Device driver-specific codes.
*/
#define DIERR_DRIVERFIRST 0x80040300L
#define DIERR_DRIVERLAST 0x800403FFL
/*
* Unless the specific driver has been precisely identified, no meaning
* should be attributed to these values other than that the driver
* originated the error. However, to illustrate the types of error that
* may be causing the failure, the PID force feedback driver distributed
* with DirectX 7 could return the following errors:
*
* DIERR_DRIVERFIRST + 1
* The requested usage was not found.
* DIERR_DRIVERFIRST + 2
* The parameter block couldn't be downloaded to the device.
* DIERR_DRIVERFIRST + 3
* PID initialization failed.
* DIERR_DRIVERFIRST + 4
* The provided values couldn't be scaled.
*/
/*
* Device installer errors.
*/
/*
* Registry entry or DLL for class installer invalid
* or class installer not found.
*/
#define DIERR_INVALIDCLASSINSTALLER 0x80040400L
/*
* The user cancelled the install operation.
*/
#define DIERR_CANCELLED 0x80040401L
/*
* The INF file for the selected device could not be
* found or is invalid or is damaged.
*/
#define DIERR_BADINF 0x80040402L
begindoc
/****************************************************************************
*
* @doc DDK
*
* @define DIDIFT_DELETE | 0x01000000 |
*
* Flag in <e DIDEVICEIMAGEINFO.dwFlags> used by vendor
* to delete particular image data from default map file.
*
****************************************************************************/
enddoc
/****************************************************************************
*
* Map files
*
****************************************************************************/
/*
* Delete particular data from default map file.
*/
#define DIDIFT_DELETE 0x01000000
#ifdef __cplusplus
};
#endif
#endif /* __DINPUTD_INCLUDED__ */