Skip to content

Commit 3225236

Browse files
committed
Clean up a couple of DirectInput8 things
1 parent 3561ead commit 3225236

File tree

4 files changed

+32
-35
lines changed

4 files changed

+32
-35
lines changed

Dllmain/BuildNo.rc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
#define BUILD_NUMBER 8073
1+
#define BUILD_NUMBER 8074

dinput8/IDirectInput8.cpp

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,7 @@ HRESULT m_IDirectInput8::EnumDevicesT(DWORD dwDevType, V lpCallback, LPVOID pvRe
9191
{
9292
Logging::LogDebug() << __FUNCTION__ << " (" << this << ")";
9393

94-
if (!lpCallback)
95-
{
96-
return DIERR_INVALIDPARAM;
97-
}
98-
99-
if (Config.DeviceLookupCacheTime)
94+
if (Config.DeviceLookupCacheTime && lpCallback)
10095
{
10196
auto now = std::chrono::steady_clock::now();
10297
auto& cachedData = GetEnumCache(GetProxyInterface<T>());
@@ -203,34 +198,34 @@ HRESULT m_IDirectInput8::EnumDevicesBySemanticsT(V ptszUserName, W lpdiActionFor
203198
{
204199
Logging::LogDebug() << __FUNCTION__ << " (" << this << ")";
205200

206-
if (!lpCallback)
201+
if (lpCallback)
207202
{
208-
return DIERR_INVALIDPARAM;
209-
}
210-
211-
struct EnumDevice
212-
{
213-
LPVOID pvRef = nullptr;
214-
X lpCallback = nullptr;
215-
GUID WrapperDeviceID = {};
216-
217-
static BOOL CALLBACK EnumDeviceCallback(C lpddi, D lpdid, DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef)
203+
struct EnumDevice
218204
{
219-
EnumDevice *self = (EnumDevice*)pvRef;
205+
LPVOID pvRef = nullptr;
206+
X lpCallback = nullptr;
207+
GUID WrapperDeviceID = {};
220208

221-
if (lpdid)
209+
static BOOL CALLBACK EnumDeviceCallback(C lpddi, D lpdid, DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef)
222210
{
223-
lpdid = ProxyAddressLookupTableDinput8.FindAddress<m_IDirectInputDevice8>(lpdid, self->WrapperDeviceID);
211+
EnumDevice* self = (EnumDevice*)pvRef;
212+
213+
if (lpdid)
214+
{
215+
lpdid = ProxyAddressLookupTableDinput8.FindAddress<m_IDirectInputDevice8>(lpdid, self->WrapperDeviceID);
216+
}
217+
218+
return self->lpCallback(lpddi, lpdid, dwFlags, dwRemaining, self->pvRef);
224219
}
220+
} CallbackContext;
221+
CallbackContext.pvRef = pvRef;
222+
CallbackContext.lpCallback = lpCallback;
223+
CallbackContext.WrapperDeviceID = WrapperDeviceID;
225224

226-
return self->lpCallback(lpddi, lpdid, dwFlags, dwRemaining, self->pvRef);
227-
}
228-
} CallbackContext;
229-
CallbackContext.pvRef = pvRef;
230-
CallbackContext.lpCallback = lpCallback;
231-
CallbackContext.WrapperDeviceID = WrapperDeviceID;
225+
return GetProxyInterface<T>()->EnumDevicesBySemantics(ptszUserName, lpdiActionFormat, EnumDevice::EnumDeviceCallback, &CallbackContext, dwFlags);
226+
}
232227

233-
return GetProxyInterface<T>()->EnumDevicesBySemantics(ptszUserName, lpdiActionFormat, EnumDevice::EnumDeviceCallback, &CallbackContext, dwFlags);
228+
return GetProxyInterface<T>()->EnumDevicesBySemantics(ptszUserName, lpdiActionFormat, lpCallback, pvRef, dwFlags);
234229
}
235230

236231
template HRESULT m_IDirectInput8::ConfigureDevicesT<IDirectInput8A, LPDICONFIGUREDEVICESPARAMSA>(LPDICONFIGUREDEVICESCALLBACK, LPDICONFIGUREDEVICESPARAMSA, DWORD, LPVOID);

dinput8/IDirectInput8.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ class m_IDirectInput8 : public IDirectInput8A, public IDirectInput8W, public Add
1616
template <class T, class V>
1717
struct CachedDeviceDataT
1818
{
19-
std::chrono::steady_clock::time_point lastUpdate = std::chrono::steady_clock::now();
19+
std::chrono::steady_clock::time_point lastUpdate = std::chrono::steady_clock::now() -
20+
std::chrono::seconds(Config.DeviceLookupCacheTime ? Config.DeviceLookupCacheTime - 1 : 0);
2021
DWORD dwDevType = (DWORD)-1;
2122
DWORD dwFlags = (DWORD)-1;
2223
std::vector<T> devices;

dinput8/IDirectInputDevice8.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,13 @@ HRESULT m_IDirectInputDevice8::GetDeviceState(DWORD cbData, LPVOID lpvData)
141141
HRESULT m_IDirectInputDevice8::GetMouseDeviceData(DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags)
142142
{
143143
// Check arguments
144-
if (!pdwInOut || (rgdod && cbObjectData != sizeof(DIDEVICEOBJECTDATA) && cbObjectData != sizeof(DIDEVICEOBJECTDATA_DX3)))
144+
if (!pdwInOut)
145145
{
146-
if (pdwInOut)
147-
{
148-
*pdwInOut = 0;
149-
}
146+
return DIERR_INVALIDPARAM;
147+
}
148+
if (rgdod && cbObjectData != sizeof(DIDEVICEOBJECTDATA) && cbObjectData != sizeof(DIDEVICEOBJECTDATA_DX3))
149+
{
150+
*pdwInOut = 0;
150151
return DIERR_INVALIDPARAM;
151152
}
152153
bool isPeek = (dwFlags == DIGDD_PEEK);
@@ -349,7 +350,7 @@ HRESULT m_IDirectInputDevice8::GetDeviceData(DWORD cbObjectData, LPDIDEVICEOBJEC
349350
}
350351
}
351352

352-
if (IsMouse && Config.FixHighFrequencyMouse)
353+
if (Config.FixHighFrequencyMouse && IsMouse && pdwInOut)
353354
{
354355
return GetMouseDeviceData(cbObjectData, rgdod, pdwInOut, dwFlags);
355356
}

0 commit comments

Comments
 (0)