boo/lib/inputdev/GenericPad.cpp

47 lines
1.4 KiB
C++
Raw Normal View History

2015-08-18 22:43:30 +00:00
#include "boo/inputdev/GenericPad.hpp"
#include "boo/inputdev/DeviceToken.hpp"
2018-12-08 05:17:51 +00:00
namespace boo {
2018-12-08 05:17:51 +00:00
GenericPad::GenericPad(DeviceToken* token) : TDeviceBase<IGenericPadCallback>(dev_typeid(GenericPad), token) {}
2017-09-15 17:20:52 +00:00
GenericPad::~GenericPad() {}
2018-12-08 05:17:51 +00:00
void GenericPad::deviceDisconnected() {
std::lock_guard<std::mutex> lk(m_callbackLock);
if (m_callback)
m_callback->controllerDisconnected();
2017-09-15 17:20:52 +00:00
}
2018-12-08 05:17:51 +00:00
void GenericPad::initialCycle() {
2017-09-15 22:26:39 +00:00
#if _WIN32
2017-12-06 03:20:59 +00:00
#if !WINDOWS_STORE
2018-12-08 05:17:51 +00:00
const PHIDP_PREPARSED_DATA reportDesc = getReportDescriptor();
m_parser.Parse(reportDesc);
2017-12-06 03:20:59 +00:00
#endif
2017-09-15 22:26:39 +00:00
#else
2018-12-08 05:17:51 +00:00
std::vector<uint8_t> reportDesc = getReportDescriptor();
m_parser.Parse(reportDesc.data(), reportDesc.size());
2017-09-15 22:26:39 +00:00
#endif
2018-12-08 05:17:51 +00:00
std::lock_guard<std::mutex> lk(m_callbackLock);
if (m_callback)
m_callback->controllerConnected();
}
2018-12-08 05:17:51 +00:00
void GenericPad::receivedHIDReport(const uint8_t* data, size_t length, HIDReportType tp, uint32_t message) {
std::lock_guard<std::mutex> lk(m_callbackLock);
if (length == 0 || tp != HIDReportType::Input || !m_callback)
return;
std::function<bool(const HIDMainItem&, int32_t)> func = [this](const HIDMainItem& item, int32_t value) {
m_callback->valueUpdate(item, value);
return true;
};
m_parser.ScanValues(func, data, length);
2017-09-15 17:20:52 +00:00
}
2018-12-08 05:17:51 +00:00
void GenericPad::enumerateValues(const std::function<bool(const HIDMainItem& item)>& valueCB) const {
m_parser.EnumerateValues(valueCB);
}
2018-12-08 05:17:51 +00:00
} // namespace boo