#pragma once
#include "Input/InputState.h"
#include "Windows/InputDevice.h"
#include <set>
#include <windows.h>
enum class HIDControllerType {
DS4,
DS5,
SwitchPro,
};
struct HIDControllerState {
s8 stickAxes[4];
u8 triggerAxes[2];
u32 buttons;
};
struct ButtonInputMapping;
class HidInputDevice : public InputDevice {
public:
void Init() override;
int UpdateState() override;
void Shutdown() override;
static void AddSupportedDevices(std::set<u32> *deviceVIDPIDs);
private:
void ReleaseAllKeys(const ButtonInputMapping *buttonMappings, int count);
InputDeviceID DeviceID(int pad);
HIDControllerState prevState_{};
HIDControllerType subType_{};
HANDLE controller_;
int pad_ = 0;
int pollCount_ = 0;
int reportSize_ = 0;
int outReportSize_ = 0;
enum {
POLL_FREQ = 283,
};
};