Fix: Some joystick hats not returning centered correctly on Windows HID

This commit is contained in:
Christopher Lees 2017-07-11 11:46:54 +01:00
parent 9ea1f55139
commit 471dd5bf18

View file

@ -342,15 +342,33 @@ namespace OpenTK.Platform.Windows
HatPosition GetHatPosition(uint value, HidProtocolValueCaps caps)
{
if (caps.LogicalMax == 8)
return (HatPosition)value;
else if (caps.LogicalMax == 7)
{
//Hat states are represented as a plain number from 0-8
//with centered being zero
//Padding should have already been stripped out, so just cast
if (value > 8)
{
//Value out of bounds, so return centered
return HatPosition.Centered;
}
return (HatPosition)value;
}
if (caps.LogicalMax == 7)
{
//Hat states are represented as a plain number from 0-7
//with centered being 8
if (value > 8)
{
//Return zero if our value is out of bounds ==> e.g.
//Thrustmaster T-Flight Hotas X returns 15 for the centered position
return HatPosition.Centered;
}
value++;
value %= 9;
return (HatPosition)value;
}
else
return HatPosition.Centered;
//The HID report length is unsupported
return HatPosition.Centered;
}
unsafe void UpdateAxes(RawInput* rin, Device stick)