Reverted change to the cached input states
This commit is contained in:
parent
2fb4ea73de
commit
ee0df62039
|
@ -521,8 +521,8 @@ DWORD WINAPI XTL::EMUPATCH(XInputGetCapabilities)
|
|||
if(dwPort == 0)
|
||||
{
|
||||
pCapabilities->SubType = XINPUT_DEVSUBTYPE_GC_GAMEPAD;
|
||||
ZeroMemory(&pCapabilities->Gamepad, sizeof(XINPUT_GAMEPAD));
|
||||
ZeroMemory(&pCapabilities->Rumble, sizeof(XINPUT_RUMBLE));
|
||||
pCapabilities->In.Gamepad = {};
|
||||
pCapabilities->Out.Rumble = {};
|
||||
|
||||
ret = ERROR_SUCCESS;
|
||||
}
|
||||
|
@ -611,14 +611,64 @@ DWORD WINAPI XTL::EMUPATCH(XInputSetState)
|
|||
|
||||
if(pph != NULL)
|
||||
{
|
||||
int v;
|
||||
|
||||
//
|
||||
// Check if this device is already being polled
|
||||
//
|
||||
|
||||
bool found = false;
|
||||
|
||||
for(v=0;v<XINPUT_SETSTATE_SLOTS;v++)
|
||||
{
|
||||
if(g_pXInputSetStateStatus[v].hDevice == hDevice)
|
||||
{
|
||||
found = true;
|
||||
|
||||
if(pFeedback->Header.dwStatus == ERROR_SUCCESS)
|
||||
{
|
||||
ret = ERROR_SUCCESS;
|
||||
|
||||
// remove from slot
|
||||
g_pXInputSetStateStatus[v].hDevice = NULL;
|
||||
g_pXInputSetStateStatus[v].pFeedback = NULL;
|
||||
g_pXInputSetStateStatus[v].dwLatency = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// If device was not already slotted, queue it
|
||||
//
|
||||
|
||||
if(!found)
|
||||
{
|
||||
for(v=0;v<XINPUT_SETSTATE_SLOTS;v++)
|
||||
{
|
||||
if(g_pXInputSetStateStatus[v].hDevice == 0)
|
||||
{
|
||||
g_pXInputSetStateStatus[v].hDevice = hDevice;
|
||||
g_pXInputSetStateStatus[v].dwLatency = 0;
|
||||
g_pXInputSetStateStatus[v].pFeedback = pFeedback;
|
||||
|
||||
pFeedback->Header.dwStatus = ERROR_IO_PENDING;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(v == XINPUT_SETSTATE_SLOTS)
|
||||
{
|
||||
CxbxKrnlCleanup("Ran out of XInputSetStateStatus slots!");
|
||||
}
|
||||
}
|
||||
|
||||
if (pph->dwPort == 0)
|
||||
{
|
||||
if (g_XInputEnabled)
|
||||
{
|
||||
XTL::EmuXInputSetState(pFeedback);
|
||||
}
|
||||
|
||||
ret = ERROR_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -202,8 +202,18 @@ typedef struct _XINPUT_CAPABILITIES
|
|||
{
|
||||
BYTE SubType;
|
||||
WORD Reserved;
|
||||
XINPUT_GAMEPAD Gamepad;
|
||||
XINPUT_RUMBLE Rumble;
|
||||
|
||||
union
|
||||
{
|
||||
XINPUT_GAMEPAD Gamepad;
|
||||
}
|
||||
In;
|
||||
|
||||
union
|
||||
{
|
||||
XINPUT_RUMBLE Rumble;
|
||||
}
|
||||
Out;
|
||||
}
|
||||
XINPUT_CAPABILITIES, *PXINPUT_CAPABILITIES;
|
||||
|
||||
|
@ -259,23 +269,27 @@ XINPUT_STATE, *PXINPUT_STATE;
|
|||
// ******************************************************************
|
||||
// * XINPUT_FEEDBACK_HEADER
|
||||
// ******************************************************************
|
||||
#pragma pack(1)
|
||||
#include "AlignPrefix1.h"
|
||||
typedef struct _XINPUT_FEEDBACK_HEADER
|
||||
{
|
||||
DWORD dwStatus;
|
||||
HANDLE OPTIONAL hEvent;
|
||||
BYTE Reserved[58];
|
||||
}
|
||||
#include "AlignPosfix1.h"
|
||||
XINPUT_FEEDBACK_HEADER, *PXINPUT_FEEDBACK_HEADER;
|
||||
#pragma pack()
|
||||
|
||||
// ******************************************************************
|
||||
// * XINPUT_FEEDBACK
|
||||
// ******************************************************************
|
||||
typedef struct _XINPUT_FEEDBACK
|
||||
{
|
||||
XINPUT_FEEDBACK_HEADER Header;
|
||||
XINPUT_RUMBLE Rumble;
|
||||
XINPUT_FEEDBACK_HEADER Header;
|
||||
|
||||
union
|
||||
{
|
||||
XINPUT_RUMBLE Rumble;
|
||||
};
|
||||
}
|
||||
XINPUT_FEEDBACK, *PXINPUT_FEEDBACK;
|
||||
|
||||
|
|
Loading…
Reference in New Issue