2019-06-18 21:29:09 -04:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "input/InputProvider.h"
|
|
|
|
#include <thread>
|
2019-06-19 20:00:57 -04:00
|
|
|
#include <Windows.h>
|
|
|
|
#include <Xinput.h>
|
2019-06-18 21:29:09 -04:00
|
|
|
|
|
|
|
class CInputProviderXInput : public CInputProvider
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CInputProviderXInput();
|
|
|
|
virtual ~CInputProviderXInput();
|
|
|
|
|
|
|
|
uint32 GetId() const override;
|
|
|
|
std::string GetTargetDescription(const BINDINGTARGET&) const override;
|
2023-10-30 22:09:03 +00:00
|
|
|
std::vector<DEVICEINFO> GetDevices() const override;
|
2023-10-30 22:03:15 +00:00
|
|
|
void SetVibration(DeviceIdType deviceId, uint8 largeMotor, uint8 smallMotor) override;
|
2019-06-18 21:29:09 -04:00
|
|
|
|
|
|
|
private:
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
MAX_DEVICES = 4,
|
2019-06-19 19:04:21 -04:00
|
|
|
MAX_BUTTONS = 16
|
|
|
|
};
|
|
|
|
|
|
|
|
enum KEYID
|
|
|
|
{
|
|
|
|
KEYID_LTHUMB_X,
|
|
|
|
KEYID_LTHUMB_Y,
|
|
|
|
KEYID_RTHUMB_X,
|
|
|
|
KEYID_RTHUMB_Y,
|
|
|
|
KEYID_LTRIGGER,
|
|
|
|
KEYID_RTRIGGER,
|
|
|
|
KEYID_DPAD_UP,
|
|
|
|
KEYID_DPAD_DOWN,
|
|
|
|
KEYID_DPAD_LEFT,
|
|
|
|
KEYID_DPAD_RIGHT,
|
|
|
|
KEYID_START,
|
|
|
|
KEYID_BACK,
|
|
|
|
KEYID_LTHUMB,
|
|
|
|
KEYID_RTHUMB,
|
|
|
|
KEYID_LSHOULDER,
|
|
|
|
KEYID_RSHOULDER,
|
|
|
|
KEYID_A,
|
|
|
|
KEYID_B,
|
|
|
|
KEYID_X,
|
|
|
|
KEYID_Y,
|
|
|
|
KEYID_MAX
|
2019-06-18 21:29:09 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
struct DEVICE_STATE
|
|
|
|
{
|
|
|
|
bool connected = false;
|
2019-06-19 19:04:21 -04:00
|
|
|
uint32 idleTime = 0;
|
|
|
|
bool lTriggerPressed = false;
|
|
|
|
bool rTriggerPressed = false;
|
|
|
|
uint16 buttonState = 0;
|
|
|
|
uint32 packetNumber = 0;
|
2019-06-18 21:29:09 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
void PollDevices();
|
2019-06-19 20:00:57 -04:00
|
|
|
void UpdateConnectedDevice(uint32, const XINPUT_STATE&);
|
|
|
|
void UpdateDisconnectedDevice(uint32);
|
2019-06-19 19:04:21 -04:00
|
|
|
void ReportButton(uint32, KEYID, bool);
|
2019-06-19 20:19:33 -04:00
|
|
|
void ReportAxis(uint32, KEYID, int32);
|
2019-06-18 21:29:09 -04:00
|
|
|
|
|
|
|
bool m_pollingEnabled = true;
|
|
|
|
std::thread m_pollingThread;
|
|
|
|
|
2019-06-19 19:04:21 -04:00
|
|
|
static const char* g_keyNames[KEYID_MAX];
|
|
|
|
static const KEYID g_buttonToKey[MAX_BUTTONS];
|
2019-06-18 21:29:09 -04:00
|
|
|
DEVICE_STATE m_states[MAX_DEVICES];
|
|
|
|
};
|