2014-05-24 21:05:00 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "Emu/Io/PadHandler.h"
|
|
|
|
|
#include <Xinput.h>
|
|
|
|
|
|
2016-02-01 22:51:09 +01:00
|
|
|
class XInputPadHandler final : public PadHandlerBase
|
2014-05-24 21:05:00 +02:00
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
XInputPadHandler();
|
|
|
|
|
~XInputPadHandler();
|
|
|
|
|
|
|
|
|
|
void Init(const u32 max_connect) override;
|
2017-04-29 03:02:58 +02:00
|
|
|
void SetRumble(const u32 pad, u8 largeMotor, bool smallMotor) override;
|
2016-02-01 22:51:09 +01:00
|
|
|
void Close();
|
2014-05-24 21:05:00 +02:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
typedef void (WINAPI * PFN_XINPUTENABLE)(BOOL);
|
|
|
|
|
typedef DWORD (WINAPI * PFN_XINPUTGETSTATE)(DWORD, XINPUT_STATE *);
|
2017-04-29 03:02:58 +02:00
|
|
|
typedef DWORD (WINAPI * PFN_XINPUTSETSTATE)(DWORD, XINPUT_VIBRATION *);
|
2014-05-24 21:05:00 +02:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
DWORD ThreadProcedure();
|
|
|
|
|
static DWORD WINAPI ThreadProcProxy(LPVOID parameter);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
mutable bool active;
|
|
|
|
|
HANDLE thread;
|
|
|
|
|
HMODULE library;
|
|
|
|
|
PFN_XINPUTGETSTATE xinputGetState;
|
2017-04-29 03:02:58 +02:00
|
|
|
PFN_XINPUTSETSTATE xinputSetState;
|
2014-05-24 21:05:00 +02:00
|
|
|
PFN_XINPUTENABLE xinputEnable;
|
|
|
|
|
|
|
|
|
|
};
|