diff --git a/griffin/griffin.c b/griffin/griffin.c index dfcf19f668..61d4db8525 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -288,6 +288,7 @@ INPUT #if defined(__CELLOS_LV2__) #include "../input/ps3_input.c" +#include "../input/ps3_input_joypad.c" #include "../input/autoconf/builtin_ps3.c" #elif defined(SN_TARGET_PSP2) || defined(PSP) #include "../input/psp_input.c" diff --git a/input/ps3_input.c b/input/ps3_input.c index 28fb6ba5f4..9ec4b070ff 100644 --- a/input/ps3_input.c +++ b/input/ps3_input.c @@ -367,98 +367,3 @@ const input_driver_t input_ps3 = { ps3_input_set_rumble, ps3_input_get_joypad_driver, }; - -static const char *ps3_joypad_name(unsigned pad) -{ - return g_settings.input.device_names[pad]; -} - -static bool ps3_joypad_init(void) -{ - unsigned autoconf_pad; - - for (autoconf_pad = 0; autoconf_pad < MAX_PLAYERS; autoconf_pad++) - { - strlcpy(g_settings.input.device_names[autoconf_pad], "SixAxis Controller", sizeof(g_settings.input.device_names[autoconf_pad])); - input_config_autoconfigure_joypad(autoconf_pad, ps3_joypad_name(autoconf_pad), ps3_joypad.ident); - } - - return true; -} - -static bool ps3_joypad_button(unsigned port_num, uint16_t joykey) -{ - ps3_input_t *ps3 = (ps3_input_t*)driver.input_data; - - if (!ps3 || port_num >= MAX_PADS) - return false; - - return ps3->pad_state[port_num] & (1ULL << joykey); -} - -static int16_t ps3_joypad_axis(unsigned port_num, uint32_t joyaxis) -{ - ps3_input_t *ps3 = (ps3_input_t*)driver.input_data; - - if (!ps3 || joyaxis == AXIS_NONE || port_num >= MAX_PADS) - return 0; - - int val = 0; - - int axis = -1; - bool is_neg = false; - bool is_pos = false; - - if (AXIS_NEG_GET(joyaxis) < 4) - { - axis = AXIS_NEG_GET(joyaxis); - is_neg = true; - } - else if (AXIS_POS_GET(joyaxis) < 4) - { - axis = AXIS_POS_GET(joyaxis); - is_pos = true; - } - - switch (axis) - { - case 0: val = ps3->analog_state[port_num][0][0]; break; - case 1: val = ps3->analog_state[port_num][0][1]; break; - case 2: val = ps3->analog_state[port_num][1][0]; break; - case 3: val = ps3->analog_state[port_num][1][1]; break; - } - - if (is_neg && val > 0) - val = 0; - else if (is_pos && val < 0) - val = 0; - - return val; -} - -static void ps3_joypad_poll(void) -{ -} - -static bool ps3_joypad_query_pad(unsigned pad) -{ - ps3_input_t *ps3 = (ps3_input_t*)driver.input_data; - return (ps3 && pad < MAX_PLAYERS && ps3->pad_state[pad]); -} - - -static void ps3_joypad_destroy(void) -{ -} - -const rarch_joypad_driver_t ps3_joypad = { - ps3_joypad_init, - ps3_joypad_query_pad, - ps3_joypad_destroy, - ps3_joypad_button, - ps3_joypad_axis, - ps3_joypad_poll, - NULL, - ps3_joypad_name, - "ps3", -}; diff --git a/input/ps3_input_joypad.c b/input/ps3_input_joypad.c new file mode 100644 index 0000000000..6e85a9c1dc --- /dev/null +++ b/input/ps3_input_joypad.c @@ -0,0 +1,110 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2014 - Hans-Kristian Arntzen + * Copyright (C) 2011-2014 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +static const char *ps3_joypad_name(unsigned pad) +{ + return g_settings.input.device_names[pad]; +} + +static bool ps3_joypad_init(void) +{ + unsigned autoconf_pad; + + for (autoconf_pad = 0; autoconf_pad < MAX_PLAYERS; autoconf_pad++) + { + strlcpy(g_settings.input.device_names[autoconf_pad], "SixAxis Controller", sizeof(g_settings.input.device_names[autoconf_pad])); + input_config_autoconfigure_joypad(autoconf_pad, ps3_joypad_name(autoconf_pad), ps3_joypad.ident); + } + + return true; +} + +static bool ps3_joypad_button(unsigned port_num, uint16_t joykey) +{ + ps3_input_t *ps3 = (ps3_input_t*)driver.input_data; + + if (!ps3 || port_num >= MAX_PADS) + return false; + + return ps3->pad_state[port_num] & (1ULL << joykey); +} + +static int16_t ps3_joypad_axis(unsigned port_num, uint32_t joyaxis) +{ + ps3_input_t *ps3 = (ps3_input_t*)driver.input_data; + + if (!ps3 || joyaxis == AXIS_NONE || port_num >= MAX_PADS) + return 0; + + int val = 0; + + int axis = -1; + bool is_neg = false; + bool is_pos = false; + + if (AXIS_NEG_GET(joyaxis) < 4) + { + axis = AXIS_NEG_GET(joyaxis); + is_neg = true; + } + else if (AXIS_POS_GET(joyaxis) < 4) + { + axis = AXIS_POS_GET(joyaxis); + is_pos = true; + } + + switch (axis) + { + case 0: val = ps3->analog_state[port_num][0][0]; break; + case 1: val = ps3->analog_state[port_num][0][1]; break; + case 2: val = ps3->analog_state[port_num][1][0]; break; + case 3: val = ps3->analog_state[port_num][1][1]; break; + } + + if (is_neg && val > 0) + val = 0; + else if (is_pos && val < 0) + val = 0; + + return val; +} + +static void ps3_joypad_poll(void) +{ +} + +static bool ps3_joypad_query_pad(unsigned pad) +{ + ps3_input_t *ps3 = (ps3_input_t*)driver.input_data; + return (ps3 && pad < MAX_PLAYERS && ps3->pad_state[pad]); +} + + +static void ps3_joypad_destroy(void) +{ +} + +const rarch_joypad_driver_t ps3_joypad = { + ps3_joypad_init, + ps3_joypad_query_pad, + ps3_joypad_destroy, + ps3_joypad_button, + ps3_joypad_axis, + ps3_joypad_poll, + NULL, + ps3_joypad_name, + "ps3", +};