Run all xinput functions as unpatched with LLE USB

This commit is contained in:
ergo720 2018-07-17 22:51:53 +02:00
parent e6de7b99d1
commit 4e7d4a7eda
1 changed files with 68 additions and 12 deletions

View File

@ -289,9 +289,13 @@ VOID WINAPI XTL::EMUPATCH(XInitDevices)
g_hInputHandle[v] = 0;
}
*/
InitXboxControllerHostBridge();
if (bLLE_USB) {
XB_trampoline(VOID, WINAPI, XInitDevices, (DWORD, PXDEVICE_PREALLOC_TYPE));
XB_XInitDevices(dwPreallocTypeCount, PreallocTypes);
}
else {
InitXboxControllerHostBridge();
}
}
bool TitleIsJSRF()
@ -392,7 +396,12 @@ DWORD WINAPI XTL::EMUPATCH(XGetDevices)
{
FUNC_EXPORTS
LOG_FUNC_ONE_ARG(DeviceType);
LOG_FUNC_ONE_ARG(DeviceType);
if (bLLE_USB) {
XB_trampoline(DWORD, WINAPI, XGetDevices, (PXPP_DEVICE_TYPE));
RETURN(XB_XGetDevices(DeviceType));
}
UCHAR oldIrql = xboxkrnl::KeRaiseIrqlToDpcLevel();
@ -445,7 +454,12 @@ BOOL WINAPI XTL::EMUPATCH(XGetDeviceChanges)
LOG_FUNC_ARG(DeviceType)
LOG_FUNC_ARG(pdwInsertions)
LOG_FUNC_ARG(pdwRemovals)
LOG_FUNC_END;
LOG_FUNC_END;
if (bLLE_USB) {
XB_trampoline(BOOL, WINAPI, XGetDeviceChanges, (PXPP_DEVICE_TYPE, PDWORD, PDWORD));
RETURN(XB_XGetDeviceChanges(DeviceType, pdwInsertions, pdwRemovals));
}
BOOL ret = FALSE;
@ -520,7 +534,12 @@ HANDLE WINAPI XTL::EMUPATCH(XInputOpen)
LOG_FUNC_ARG(dwPort)
LOG_FUNC_ARG(dwSlot)
LOG_FUNC_ARG(pPollingParameters)
LOG_FUNC_END;
LOG_FUNC_END;
if (bLLE_USB) {
XB_trampoline(HANDLE, WINAPI, XInputOpen, (PXPP_DEVICE_TYPE, DWORD, DWORD, PX_XINPUT_POLLING_PARAMETERS));
RETURN(XB_XInputOpen(DeviceType, dwPort, dwSlot, pPollingParameters));
}
X_POLLING_PARAMETERS_HANDLE *pph = 0;
//OLD_XINPUT
@ -622,7 +641,13 @@ VOID WINAPI XTL::EMUPATCH(XInputClose)
{
FUNC_EXPORTS
LOG_FUNC_ONE_ARG(hDevice);
LOG_FUNC_ONE_ARG(hDevice);
if (bLLE_USB) {
XB_trampoline(VOID, WINAPI, XInputClose, (HANDLE));
XB_XInputClose(hDevice);
return;
}
X_POLLING_PARAMETERS_HANDLE *pph = (X_POLLING_PARAMETERS_HANDLE*)hDevice;
DWORD dwPort = pph->dwPort;
@ -675,7 +700,13 @@ DWORD WINAPI XTL::EMUPATCH(XInputPoll)
{
FUNC_EXPORTS
LOG_FUNC_ONE_ARG(hDevice);
LOG_FUNC_ONE_ARG(hDevice);
if (bLLE_USB) {
XB_trampoline(DWORD, WINAPI, XInputPoll, (HANDLE));
RETURN(XB_XInputPoll(hDevice));
}
//OLD_XINPUT
/* X_POLLING_PARAMETERS_HANDLE *pph = (X_POLLING_PARAMETERS_HANDLE*)hDevice;
@ -752,7 +783,12 @@ DWORD WINAPI XTL::EMUPATCH(XInputGetCapabilities)
LOG_FUNC_BEGIN
LOG_FUNC_ARG(hDevice)
LOG_FUNC_ARG_OUT(pCapabilities)
LOG_FUNC_END;
LOG_FUNC_END;
if (bLLE_USB) {
XB_trampoline(DWORD, WINAPI, XInputGetCapabilities, (HANDLE, PX_XINPUT_CAPABILITIES));
RETURN(XB_XInputGetCapabilities(hDevice, pCapabilities));
}
DWORD ret = ERROR_DEVICE_NOT_CONNECTED;
@ -1032,7 +1068,12 @@ DWORD WINAPI XTL::EMUPATCH(XInputGetState)
LOG_FUNC_BEGIN
LOG_FUNC_ARG(hDevice)
LOG_FUNC_ARG_OUT(pState)
LOG_FUNC_END;
LOG_FUNC_END;
if (bLLE_USB) {
XB_trampoline(DWORD, WINAPI, XInputGetState, (HANDLE, PX_XINPUT_STATE));
RETURN(XB_XInputGetState(hDevice, pState));
}
DWORD ret = ERROR_INVALID_HANDLE;
//OLD_XINPUT
@ -1124,6 +1165,11 @@ DWORD WINAPI XTL::EMUPATCH(XInputSetState)
LOG_FUNC_ARG(hDevice)
LOG_FUNC_ARG(pFeedback)
LOG_FUNC_END;
if (bLLE_USB) {
XB_trampoline(DWORD, WINAPI, XInputSetState, (HANDLE, PX_XINPUT_FEEDBACK));
RETURN(XB_XInputSetState(hDevice, pFeedback));
}
DWORD ret = ERROR_IO_PENDING;
//OLD_XINPUT
@ -1900,7 +1946,12 @@ DWORD WINAPI XTL::EMUPATCH(XGetDeviceEnumerationStatus)()
{
FUNC_EXPORTS
LOG_FUNC();
LOG_FUNC();
if (bLLE_USB) {
XB_trampoline(DWORD, WINAPI, XGetDeviceEnumerationStatus, ());
RETURN(XB_XGetDeviceEnumerationStatus());
}
LOG_UNIMPLEMENTED();
@ -1921,7 +1972,12 @@ DWORD WINAPI XTL::EMUPATCH(XInputGetDeviceDescription)
LOG_FUNC_BEGIN
LOG_FUNC_ARG(hDevice)
LOG_FUNC_ARG(pDescription)
LOG_FUNC_END;
LOG_FUNC_END;
if (bLLE_USB) {
XB_trampoline(DWORD, WINAPI, XInputGetDeviceDescription, (HANDLE, PVOID));
RETURN(XB_XInputGetDeviceDescription(hDevice, pDescription));
}
// TODO: Lightgun support?
LOG_UNIMPLEMENTED();