HIDGamepadElement.cpp [plain text]
#include "config.h"
#include "HIDGamepadElement.h"
#if ENABLE(GAMEPAD) && PLATFORM(MAC)
namespace WebCore {
#pragma mark HIDGamepadElement
HIDGamepadElement::HIDGamepadElement(const HIDElement& element)
: HIDElement(element)
{
}
void HIDGamepadElement::refreshCurrentValue()
{
IOHIDValueRef value;
if (IOHIDDeviceGetValue(IOHIDElementGetDevice(rawElement()), rawElement(), &value) == kIOReturnSuccess)
gamepadValueChanged(value);
}
double HIDGamepadElement::normalizedValue()
{
return (double)(physicalValue() - physicalMin()) / (double)(physicalMax() - physicalMin());
}
#pragma mark HIDGamepadButton
HIDInputType HIDGamepadButton::gamepadValueChanged(IOHIDValueRef value)
{
valueChanged(value);
m_value.setValue(normalizedValue());
return m_value.value() > 0.5 ? HIDInputType::ButtonPress : HIDInputType::NotAButtonPress;
}
#pragma mark HIDGamepadAxis
HIDInputType HIDGamepadAxis::gamepadValueChanged(IOHIDValueRef value)
{
valueChanged(value);
m_value.setValue(normalizedValue());
return HIDInputType::NotAButtonPress;
}
double HIDGamepadAxis::normalizedValue()
{
return (HIDGamepadElement::normalizedValue() * 2.0) - 1.0;
}
#pragma mark HIDGamepadHatswitch
HIDInputType HIDGamepadHatswitch::gamepadValueChanged(IOHIDValueRef value)
{
valueChanged(value);
for (size_t i = 0; i < 4; ++i)
m_buttonValues[i].setValue(0.0);
switch (physicalValue()) {
case 0:
m_buttonValues[0].setValue(1.0);
break;
case 45:
m_buttonValues[0].setValue(1.0);
m_buttonValues[1].setValue(1.0);
break;
case 90:
m_buttonValues[1].setValue(1.0);
break;
case 135:
m_buttonValues[1].setValue(1.0);
m_buttonValues[2].setValue(1.0);
break;
case 180:
m_buttonValues[2].setValue(1.0);
break;
case 225:
m_buttonValues[2].setValue(1.0);
m_buttonValues[3].setValue(1.0);
break;
case 270:
m_buttonValues[3].setValue(1.0);
break;
case 315:
m_buttonValues[3].setValue(1.0);
m_buttonValues[0].setValue(1.0);
break;
default:
break;
};
return HIDInputType::ButtonPress;
}
double HIDGamepadHatswitch::normalizedValue()
{
RELEASE_ASSERT_NOT_REACHED();
}
}
#endif // ENABLE(GAMEPAD) && PLATFORM(MAC)