|
@@ -53,29 +53,19 @@ typedef struct _GLFWjoyelementNS
|
|
|
//
|
|
|
static long getElementValue(_GLFWjoystick* js, _GLFWjoyelementNS* element)
|
|
|
{
|
|
|
- IOReturn result = kIOReturnSuccess;
|
|
|
IOHIDValueRef valueRef;
|
|
|
long value = 0;
|
|
|
|
|
|
- if (js && element && js->ns.device)
|
|
|
+ if (js->ns.device)
|
|
|
{
|
|
|
- result = IOHIDDeviceGetValue(js->ns.device,
|
|
|
- element->native,
|
|
|
- &valueRef);
|
|
|
-
|
|
|
- if (kIOReturnSuccess == result)
|
|
|
+ if (IOHIDDeviceGetValue(js->ns.device,
|
|
|
+ element->native,
|
|
|
+ &valueRef) == kIOReturnSuccess)
|
|
|
{
|
|
|
value = IOHIDValueGetIntegerValue(valueRef);
|
|
|
-
|
|
|
- // Record min and max for auto calibration
|
|
|
- if (value < element->minimum)
|
|
|
- element->minimum = value;
|
|
|
- if (value > element->maximum)
|
|
|
- element->maximum = value;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // Auto user scale
|
|
|
return value;
|
|
|
}
|
|
|
|
|
@@ -349,8 +339,13 @@ int _glfwPlatformPollJoystick(int jid, int mode)
|
|
|
CFArrayGetValueAtIndex(js->ns.axes, i);
|
|
|
|
|
|
const long value = getElementValue(js, axis);
|
|
|
- const long delta = axis->maximum - axis->minimum;
|
|
|
+ // Perform auto calibration
|
|
|
+ if (value < axis->minimum)
|
|
|
+ axis->minimum = value;
|
|
|
+ if (value > axis->maximum)
|
|
|
+ axis->maximum = value;
|
|
|
|
|
|
+ const long delta = axis->maximum - axis->minimum;
|
|
|
if (delta == 0)
|
|
|
_glfwInputJoystickAxis(jid, i, value);
|
|
|
else
|
|
@@ -365,7 +360,7 @@ int _glfwPlatformPollJoystick(int jid, int mode)
|
|
|
{
|
|
|
_GLFWjoyelementNS* button = (_GLFWjoyelementNS*)
|
|
|
CFArrayGetValueAtIndex(js->ns.buttons, i);
|
|
|
- const char value = getElementValue(js, button) ? 1 : 0;
|
|
|
+ const char value = getElementValue(js, button) - button->minimum;
|
|
|
_glfwInputJoystickButton(jid, i, value);
|
|
|
}
|
|
|
|
|
@@ -386,7 +381,7 @@ int _glfwPlatformPollJoystick(int jid, int mode)
|
|
|
|
|
|
_GLFWjoyelementNS* hat = (_GLFWjoyelementNS*)
|
|
|
CFArrayGetValueAtIndex(js->ns.hats, i);
|
|
|
- long state = getElementValue(js, hat);
|
|
|
+ long state = getElementValue(js, hat) - hat->minimum;
|
|
|
if (state < 0 || state > 8)
|
|
|
state = 8;
|
|
|
|