Skip to content

Commit 20f68be

Browse files
committed
added the hack to get XInput Guide button state
1 parent db21f17 commit 20f68be

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

specific/init_input.cpp

+16-1
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,20 @@ BOOL IsXInputDevice(DWORD dwVendorId, DWORD dwProductId) {
199199
return bIsXinputDevice;
200200
}
201201

202+
// The hack to get XInput Guide button state
203+
#ifndef XINPUT_GAMEPAD_GUIDE
204+
#define XINPUT_GAMEPAD_GUIDE (0x400)
205+
#endif // XINPUT_GAMEPAD_GUIDE
206+
static DWORD XInputGetStateExt(DWORD dwUserIndex, XINPUT_STATE *pState) {
207+
static DWORD (WINAPI *lpGetState)(DWORD, XINPUT_STATE*) = NULL;
208+
if( lpGetState == NULL ) {
209+
HMODULE hDLL = LoadLibrary("xinput1_3.dll");
210+
if( hDLL != NULL ) *(FARPROC *)&lpGetState = GetProcAddress(hDLL, MAKEINTRESOURCE(100));
211+
if( lpGetState == NULL ) lpGetState = XInputGetState;
212+
}
213+
return lpGetState(dwUserIndex, pState);
214+
}
215+
202216
static BOOL CALLBACK RawInputCallBack(HANDLE hDevice, LPGUID lpGuid, PRID_DEVICE_INFO_HID lpInfo, LPVOID lpContext) {
203217
if( hDevice == INVALID_HANDLE_VALUE || lpGuid == NULL || lpInfo == NULL || lpContext == NULL )
204218
return TRUE;
@@ -324,7 +338,7 @@ DWORD __cdecl WinInReadJoystick(int *xPos, int *yPos) {
324338
if( XInputIndex >= 0 ) {
325339
XInputEnable(TRUE);
326340
XINPUT_STATE state;
327-
if( ERROR_SUCCESS != XInputGetState(XInputIndex, &state) ) {
341+
if( ERROR_SUCCESS != XInputGetStateExt(XInputIndex, &state) ) {
328342
return 0;
329343
}
330344
if( (JoystickMovement || !XINPUT_DPAD(XInputCaps.Gamepad.wButtons)) && XInputCaps.Gamepad.sThumbLX && XInputCaps.Gamepad.sThumbLY ) {
@@ -348,6 +362,7 @@ DWORD __cdecl WinInReadJoystick(int *xPos, int *yPos) {
348362
buttonStatus |= CHK_ANY(state.Gamepad.wButtons, XINPUT_GAMEPAD_START) ? 0x200 : 0;
349363
buttonStatus |= CHK_ANY(state.Gamepad.wButtons, XINPUT_GAMEPAD_LEFT_THUMB) ? 0x400 : 0;
350364
buttonStatus |= CHK_ANY(state.Gamepad.wButtons, XINPUT_GAMEPAD_RIGHT_THUMB) ? 0x800 : 0;
365+
buttonStatus |= CHK_ANY(state.Gamepad.wButtons, XINPUT_GAMEPAD_GUIDE) ? 0x1000 : 0;
351366
return buttonStatus;
352367
}
353368

0 commit comments

Comments
 (0)