From 7431529e8971d68db8b72b7480374a66c8b7bb66 Mon Sep 17 00:00:00 2001 From: slotek Date: Wed, 29 Jul 2015 10:12:31 -0600 Subject: [PATCH] Restore generic Mac OS X joypad functionality --- input/connect/joypad_connection.c | 2 +- input/drivers_hid/iohidmanager_hid.c | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/input/connect/joypad_connection.c b/input/connect/joypad_connection.c index 227e5e321a..5beda8da98 100644 --- a/input/connect/joypad_connection.c +++ b/input/connect/joypad_connection.c @@ -105,7 +105,7 @@ int32_t pad_connection_pad_init(joypad_connection_t *joyconn, } } - return -1; + return pad; } void pad_connection_pad_deinit(joypad_connection_t *joyconn, uint32_t pad) diff --git a/input/drivers_hid/iohidmanager_hid.c b/input/drivers_hid/iohidmanager_hid.c index 565ff0bbe8..8f23c36cba 100644 --- a/input/drivers_hid/iohidmanager_hid.c +++ b/input/drivers_hid/iohidmanager_hid.c @@ -59,9 +59,11 @@ static uint64_t iohidmanager_hid_joypad_get_buttons(void *data, unsigned port) static bool iohidmanager_hid_joypad_button(void *data, unsigned port, uint16_t joykey) { + driver_t *driver = driver_get_ptr(); + cocoa_input_data_t *apple = (cocoa_input_data_t*)driver->input_data; uint64_t buttons = iohidmanager_hid_joypad_get_buttons(data, port); - if (joykey == NO_BTN) + if (!apple || joykey == NO_BTN) return false; /* Check hat. */ @@ -70,7 +72,8 @@ static bool iohidmanager_hid_joypad_button(void *data, unsigned port, uint16_t j /* Check the button. */ if ((port < MAX_USERS) && (joykey < 32)) - return ((buttons & (1 << joykey)) != 0); + return ((apple->buttons[port] & (1 << joykey)) != 0) || + ((buttons & (1 << joykey)) != 0); return false; } @@ -85,22 +88,26 @@ static bool iohidmanager_hid_joypad_rumble(void *data, unsigned pad, static int16_t iohidmanager_hid_joypad_axis(void *data, unsigned port, uint32_t joyaxis) { + driver_t *driver = driver_get_ptr(); + cocoa_input_data_t *apple = (cocoa_input_data_t*)driver->input_data; iohidmanager_hid_t *hid = (iohidmanager_hid_t*)data; int16_t val = 0; - if (joyaxis == AXIS_NONE) + if (!apple || joyaxis == AXIS_NONE) return 0; if (AXIS_NEG_GET(joyaxis) < 4) { - val = pad_connection_get_axis(&hid->slots[port], port, AXIS_NEG_GET(joyaxis)); + val = apple->axes[port][AXIS_NEG_GET(joyaxis)]; + val += pad_connection_get_axis(&hid->slots[port], port, AXIS_NEG_GET(joyaxis)); if (val >= 0) val = 0; } else if(AXIS_POS_GET(joyaxis) < 4) { - val = pad_connection_get_axis(&hid->slots[port], port, AXIS_POS_GET(joyaxis)); + val = apple->axes[port][AXIS_POS_GET(joyaxis)]; + val += pad_connection_get_axis(&hid->slots[port], port, AXIS_POS_GET(joyaxis)); if (val <= 0) val = 0;