Stubs for IDirectInputEffect and IDirectInputDevice2A methods,
as well as AddRef(), GetCapabilites(), EnumObjects(),
GetProperty(), GetObjectInfo(), GetDeviceInfo(), Initialize(),
and RunControlPanel() for IDirectInputDevice.
diff --git a/include/dinput.h b/include/dinput.h
index a29c2a5..03978e2 100644
--- a/include/dinput.h
+++ b/include/dinput.h
@@ -58,6 +58,7 @@
typedef struct IDirectInput32A IDirectInput32A,*LPDIRECTINPUT32A;
typedef struct IDirectInputDevice32A IDirectInputDevice32A,*LPDIRECTINPUTDEVICE32A;
+typedef struct IDirectInputEffect IDirectInputEffect,*LPDIRECTINPUTEFFECT;
typedef struct SysKeyboard32A SysKeyboard32A,*LPSYSKEYBOARD32A;
typedef struct SysMouse32A SysMouse32A,*LPSYSMOUSE32A;
@@ -236,6 +237,8 @@
typedef BOOL32 (CALLBACK * LPDIENUMDEVICEOBJECTSCALLBACK32W)(LPCDIDEVICEOBJECTINSTANCE32W,LPVOID);
DECL_WINELIB_TYPE_AW(LPDIENUMDEVICEOBJECTSCALLBACK)
+typedef BOOL32 (CALLBACK * LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID);
+
#define DIK_ESCAPE 0x01
#define DIK_1 0x02
#define DIK_2 0x03
@@ -529,6 +532,144 @@
#define DISCL_FOREGROUND 0x00000004
#define DISCL_BACKGROUND 0x00000008
+typedef struct DICONSTANTFORCE {
+ LONG lMagnitude;
+} DICONSTANTFORCE, *LPDICONSTANTFORCE;
+
+typedef const DICONSTANTFORCE *LPCDICONSTANTFORCE;
+
+typedef struct DIRAMPFORCE {
+ LONG lStart;
+ LONG lEnd;
+} DIRAMPFORCE, *LPDIRAMPFORCE;
+
+typedef const DIRAMPFORCE *LPCDIRAMPFORCE;
+
+typedef struct DIPERIODIC {
+ DWORD dwMagnitude;
+ LONG lOffset;
+ DWORD dwPhase;
+ DWORD dwPeriod;
+} DIPERIODIC, *LPDIPERIODIC;
+
+typedef const DIPERIODIC *LPCDIPERIODIC;
+
+typedef struct DICONDITION {
+ LONG lOffset;
+ LONG lPositiveCoefficient;
+ LONG lNegativeCoefficient;
+ DWORD dwPositiveSaturation;
+ DWORD dwNegativeSaturation;
+ LONG lDeadBand;
+} DICONDITION, *LPDICONDITION;
+
+typedef const DICONDITION *LPCDICONDITION;
+
+typedef struct DICUSTOMFORCE {
+ DWORD cChannels;
+ DWORD dwSamplePeriod;
+ DWORD cSamples;
+ LPLONG rglForceData;
+} DICUSTOMFORCE, *LPDICUSTOMFORCE;
+
+typedef const DICUSTOMFORCE *LPCDICUSTOMFORCE;
+
+typedef struct DIENVELOPE {
+ DWORD dwSize;
+ DWORD dwAttackLevel;
+ DWORD dwAttackTime;
+ DWORD dwFadeLevel;
+ DWORD dwFadeTime;
+} DIENVELOPE, *LPDIENVELOPE;
+
+typedef const DIENVELOPE *LPCDIENVELOPE;
+
+typedef struct DIEFFECT {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwDuration;
+ DWORD dwSamplePeriod;
+ DWORD dwGain;
+ DWORD dwTriggerButton;
+ DWORD dwTriggerRepeatInterval;
+ DWORD cAxes;
+ LPDWORD rgdwAxes;
+ LPLONG rglDirection;
+ LPDIENVELOPE lpEnvelope;
+ DWORD cbTypeSpecificParams;
+ LPVOID lpvTypeSpecificParams;
+} DIEFFECT, *LPDIEFFECT;
+
+typedef const DIEFFECT *LPCDIEFFECT;
+
+typedef struct DIEFFECTINFOA {
+ DWORD dwSize;
+ GUID guid;
+ DWORD dwEffType;
+ DWORD dwStaticParams;
+ DWORD dwDynamicParams;
+ CHAR tszName[MAX_PATH];
+} DIEFFECTINFOA, *LPDIEFFECTINFOA;
+
+typedef struct DIEFFECTINFOW {
+ DWORD dwSize;
+ GUID guid;
+ DWORD dwEffType;
+ DWORD dwStaticParams;
+ DWORD dwDynamicParams;
+ WCHAR tszName[MAX_PATH];
+} DIEFFECTINFOW, *LPDIEFFECTINFOW;
+
+#ifdef UNICODE
+typedef DIEFFECTINFOW DIEFFECTINFO;
+typedef LPDIEFFECTINFOW LPDIEFFECTINFO;
+#else
+typedef DIEFFECTINFOA DIEFFECTINFO;
+typedef LPDIEFFECTINFOA LPDIEFFECTINFO;
+#endif
+
+typedef const DIEFFECTINFOA *LPCDIEFFECTINFOA;
+typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW;
+typedef const DIEFFECTINFO *LPCDIEFFECTINFO;
+
+typedef BOOL32 (CALLBACK * LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID);
+typedef BOOL32 (CALLBACK * LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID);
+
+typedef struct DIEFFESCAPE {
+ DWORD dwSize;
+ DWORD dwCommand;
+ LPVOID lpvInBuffer;
+ DWORD cbInBuffer;
+ LPVOID lpvOutBuffer;
+ DWORD cbOutBuffer;
+} DIEFFESCAPE, *LPDIEFFESCAPE;
+
+#define THIS LPDIRECTINPUTEFFECT this
+typedef struct IDirectInputEffect_VTable {
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputEffect methods ***/
+ STDMETHOD(Initialize)(THIS_ HINSTANCE32,DWORD,REFGUID) PURE;
+ STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE;
+ STDMETHOD(GetParameters)(THIS_ LPDIEFFECT,DWORD) PURE;
+ STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT,DWORD) PURE;
+ STDMETHOD(Start)(THIS_ DWORD,DWORD) PURE;
+ STDMETHOD(Stop)(THIS) PURE;
+ STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE;
+ STDMETHOD(Download)(THIS) PURE;
+ STDMETHOD(Unload)(THIS) PURE;
+ STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
+} IDirectInputEffect_VTable,*LPDIRECTINPUTEFFECT_VTABLE;
+#undef THIS
+
+struct IDirectInputEffect {
+ LPDIRECTINPUTEFFECT_VTABLE lpvtbl;
+ DWORD ref;
+ GUID guid;
+};
+
#define THIS LPDIRECTINPUTDEVICE32A this
typedef struct IDirectInputDeviceA_VTable {
/*** IUnknown methods ***/
@@ -552,7 +693,19 @@
STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCE32A) PURE;
STDMETHOD(RunControlPanel)(THIS_ HWND32,DWORD) PURE;
STDMETHOD(Initialize)(THIS_ HINSTANCE32,DWORD,REFGUID) PURE;
-} IDirectInputDeviceA_VTable,*LPDIRECTINPUTDEVICEA_VTABLE;
+ /*** IDirectInputDevice2A methods ***/
+ STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;
+ STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE;
+ STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE;
+ STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;
+ STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;
+ STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;
+ STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
+ STDMETHOD(Poll)(THIS) PURE;
+ STDMETHOD(SendDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
+
+} IDirectInputDeviceA_VTable,*LPDIRECTINPUTDEVICEA_VTABLE,
+ IDirectInputDevice2A_VTable,*LPDIRECTINPUTDEVICE2A_VTABLE;
struct IDirectInputDevice32A {
LPDIRECTINPUTDEVICEA_VTABLE lpvtbl;
diff --git a/windows/dinput.c b/windows/dinput.c
index d2db6d0..1679ccb 100644
--- a/windows/dinput.c
+++ b/windows/dinput.c
@@ -418,9 +418,176 @@
*ppobj = this;
return 0;
}
+ if (!memcmp(&IID_IDirectInputDevice2A,riid,sizeof(*riid))) {
+ this->lpvtbl->fnAddRef(this);
+ *ppobj = this;
+ return 0;
+ }
return E_FAIL;
}
+static ULONG WINAPI IDirectInputDeviceA_AddRef(
+ LPDIRECTINPUTDEVICE32A this)
+{
+ return ++this->ref;
+}
+
+static HRESULT WINAPI IDirectInputDeviceA_GetCapabilities(
+ LPDIRECTINPUTDEVICE32A this,
+ LPDIDEVCAPS lpDIDevCaps)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDeviceA_EnumObjects(
+ LPDIRECTINPUTDEVICE32A this,
+ LPDIENUMDEVICEOBJECTSCALLBACK32A lpCallback,
+ LPVOID lpvRef,
+ DWORD dwFlags)
+{
+ FIXME(dinput, "stub!\n");
+ if (lpCallback)
+ lpCallback(NULL, lpvRef);
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDeviceA_GetProperty(
+ LPDIRECTINPUTDEVICE32A this,
+ REFGUID rguid,
+ LPDIPROPHEADER pdiph)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDeviceA_GetObjectInfo(
+ LPDIRECTINPUTDEVICE32A this,
+ LPDIDEVICEOBJECTINSTANCE32A pdidoi,
+ DWORD dwObj,
+ DWORD dwHow)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDeviceA_GetDeviceInfo(
+ LPDIRECTINPUTDEVICE32A this,
+ LPDIDEVICEINSTANCE32A pdidi)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDeviceA_RunControlPanel(
+ LPDIRECTINPUTDEVICE32A this,
+ HWND32 hwndOwner,
+ DWORD dwFlags)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDeviceA_Initialize(
+ LPDIRECTINPUTDEVICE32A this,
+ HINSTANCE32 hinst,
+ DWORD dwVersion,
+ REFGUID rguid)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+/******************************************************************************
+ * IDirectInputDevice2A
+ */
+
+static HRESULT WINAPI IDirectInputDevice2A_CreateEffect(
+ LPDIRECTINPUTDEVICE32A this,
+ REFGUID rguid,
+ LPCDIEFFECT lpeff,
+ LPDIRECTINPUTEFFECT *ppdef,
+ LPUNKNOWN pUnkOuter)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDevice2A_EnumEffects(
+ LPDIRECTINPUTDEVICE32A this,
+ LPDIENUMEFFECTSCALLBACKA lpCallback,
+ LPVOID lpvRef,
+ DWORD dwFlags)
+{
+ FIXME(dinput, "stub!\n");
+ if (lpCallback)
+ lpCallback(NULL, lpvRef);
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDevice2A_GetEffectInfo(
+ LPDIRECTINPUTDEVICE32A this,
+ LPDIEFFECTINFOA lpdei,
+ REFGUID rguid)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDevice2A_GetForceFeedbackState(
+ LPDIRECTINPUTDEVICE32A this,
+ LPDWORD pdwOut)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDevice2A_SendForceFeedbackCommand(
+ LPDIRECTINPUTDEVICE32A this,
+ DWORD dwFlags)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDevice2A_EnumCreatedEffectObjects(
+ LPDIRECTINPUTDEVICE32A this,
+ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback,
+ LPVOID lpvRef,
+ DWORD dwFlags)
+{
+ FIXME(dinput, "stub!\n");
+ if (lpCallback)
+ lpCallback(NULL, lpvRef);
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDevice2A_Escape(
+ LPDIRECTINPUTDEVICE32A this,
+ LPDIEFFESCAPE lpDIEEsc)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDevice2A_Poll(
+ LPDIRECTINPUTDEVICE32A this)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
+static HRESULT WINAPI IDirectInputDevice2A_SendDeviceData(
+ LPDIRECTINPUTDEVICE32A this,
+ DWORD cbObjectData,
+ LPDIDEVICEOBJECTDATA rgdod,
+ LPDWORD pdwInOut,
+ DWORD dwFlags)
+{
+ FIXME(dinput, "stub!\n");
+ return DI_OK;
+}
+
/******************************************************************************
* SysMouseA (DInput Mouse support)
*/
@@ -537,11 +704,11 @@
static IDirectInputDeviceA_VTable SysKeyboardAvt={
IDirectInputDeviceA_QueryInterface,
- (void*)2,
+ IDirectInputDeviceA_AddRef,
IDirectInputDeviceA_Release,
- (void*)4,
- (void*)5,
- (void*)6,
+ IDirectInputDeviceA_GetCapabilities,
+ IDirectInputDeviceA_EnumObjects,
+ IDirectInputDeviceA_GetProperty,
SysKeyboardA_SetProperty,
SysKeyboardA_Acquire,
SysKeyboardA_Unacquire,
@@ -550,19 +717,28 @@
IDirectInputDeviceA_SetDataFormat,
IDirectInputDeviceA_SetEventNotification,
IDirectInputDeviceA_SetCooperativeLevel,
- (void*)15,
- (void*)16,
- (void*)17,
- (void*)18,
+ IDirectInputDeviceA_GetObjectInfo,
+ IDirectInputDeviceA_GetDeviceInfo,
+ IDirectInputDeviceA_RunControlPanel,
+ IDirectInputDeviceA_Initialize,
+ IDirectInputDevice2A_CreateEffect,
+ IDirectInputDevice2A_EnumEffects,
+ IDirectInputDevice2A_GetEffectInfo,
+ IDirectInputDevice2A_GetForceFeedbackState,
+ IDirectInputDevice2A_SendForceFeedbackCommand,
+ IDirectInputDevice2A_EnumCreatedEffectObjects,
+ IDirectInputDevice2A_Escape,
+ IDirectInputDevice2A_Poll,
+ IDirectInputDevice2A_SendDeviceData,
};
static IDirectInputDeviceA_VTable SysMouseAvt={
IDirectInputDeviceA_QueryInterface,
- (void*)2,
+ IDirectInputDeviceA_AddRef,
IDirectInputDeviceA_Release,
- (void*)4,
- (void*)5,
- (void*)6,
+ IDirectInputDeviceA_GetCapabilities,
+ IDirectInputDeviceA_EnumObjects,
+ IDirectInputDeviceA_GetProperty,
IDirectInputDeviceA_SetProperty,
IDirectInputDeviceA_Acquire,
IDirectInputDeviceA_Unacquire,
@@ -571,8 +747,17 @@
SysMouseA_SetDataFormat,
IDirectInputDeviceA_SetEventNotification,
IDirectInputDeviceA_SetCooperativeLevel,
- (void*)15,
- (void*)16,
- (void*)17,
- (void*)18,
+ IDirectInputDeviceA_GetObjectInfo,
+ IDirectInputDeviceA_GetDeviceInfo,
+ IDirectInputDeviceA_RunControlPanel,
+ IDirectInputDeviceA_Initialize,
+ IDirectInputDevice2A_CreateEffect,
+ IDirectInputDevice2A_EnumEffects,
+ IDirectInputDevice2A_GetEffectInfo,
+ IDirectInputDevice2A_GetForceFeedbackState,
+ IDirectInputDevice2A_SendForceFeedbackCommand,
+ IDirectInputDevice2A_EnumCreatedEffectObjects,
+ IDirectInputDevice2A_Escape,
+ IDirectInputDevice2A_Poll,
+ IDirectInputDevice2A_SendDeviceData,
};