From 4e7d4a7eda1fa022fd33007dddde1562c344c969 Mon Sep 17 00:00:00 2001 From: ergo720 Date: Tue, 17 Jul 2018 22:51:53 +0200 Subject: [PATCH] Run all xinput functions as unpatched with LLE USB --- src/CxbxKrnl/EmuXapi.cpp | 80 ++++++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 12 deletions(-) diff --git a/src/CxbxKrnl/EmuXapi.cpp b/src/CxbxKrnl/EmuXapi.cpp index 75c18e1b4..dd185b9f2 100644 --- a/src/CxbxKrnl/EmuXapi.cpp +++ b/src/CxbxKrnl/EmuXapi.cpp @@ -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();