Refactor set_default_keybinds callback into set_keybinds - remove

set_analog_dpad_mapping and have it go through set_keybinds - expand
functionality of set_keybinds
This commit is contained in:
twinaphex 2013-03-14 02:24:57 +01:00
parent 4fa8d0f3c6
commit ede829c354
15 changed files with 1428 additions and 1208 deletions

View File

@ -278,7 +278,7 @@ static void *android_input_init(void)
dpad_state[i].dzone_min = -0.99f;
dpad_state[i].dzone_max = 0.99f;
g_settings.input.dpad_emulation[i] = DPAD_EMULATION_LSTICK;
g_settings.input.dpad_emulation[i] = ANALOG_DPAD_LSTICK;
}
if ((dlopen("/system/lib/libandroid.so", RTLD_LOCAL | RTLD_LAZY)) == 0)
@ -309,13 +309,16 @@ int zeus_id = -1;
int zeus_second_id = -1;
static unsigned zeus_port;
static void android_set_default_keybinds(unsigned device, unsigned port, unsigned id)
static void android_input_set_keybinds(void *data, unsigned device,
unsigned port, unsigned id, unsigned keybind_action)
{
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS))
{
/* eight 8-bit values are packed into one uint64_t
* one for each of the 8 pads */
unsigned shift = 8 + (port * 8);
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_LSTICK;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_LSTICK;
// NOTE - we have to add '1' to the bit mask because
// RETRO_DEVICE_ID_JOYPAD_B is 0
@ -352,7 +355,7 @@ static void android_set_default_keybinds(unsigned device, unsigned port, unsigne
keycode_lut[AKEYCODE_BUTTON_START] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
break;
case DEVICE_ICONTROLPAD_BLUEZ_IME:
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_NONE;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_DPAD_DOWN] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
keycode_lut[AKEYCODE_DPAD_LEFT] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift);
@ -415,7 +418,7 @@ static void android_set_default_keybinds(unsigned device, unsigned port, unsigne
#endif
break;
case DEVICE_TOMMO_NEOGEOX_ARCADE:
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_NONE;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_DPAD_DOWN] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
keycode_lut[AKEYCODE_DPAD_LEFT] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift);
@ -458,7 +461,7 @@ static void android_set_default_keybinds(unsigned device, unsigned port, unsigne
keycode_lut[AKEYCODE_BUTTON_R1] |= ((RETRO_DEVICE_ID_JOYPAD_R2+1) << shift);
break;
case DEVICE_IDROID_X360:
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_NONE;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_DPAD_DOWN] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
keycode_lut[AKEYCODE_DPAD_LEFT] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift);
@ -660,7 +663,7 @@ static void android_set_default_keybinds(unsigned device, unsigned port, unsigne
keycode_lut[AKEYCODE_ESCAPE] |= ((RARCH_QUIT_KEY+1) << shift);
break;
case DEVICE_PLAYSTATION3_VERSION1:
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_NONE;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_DPAD_DOWN] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
keycode_lut[AKEYCODE_DPAD_LEFT] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift);
@ -680,7 +683,7 @@ static void android_set_default_keybinds(unsigned device, unsigned port, unsigne
keycode_lut[AKEYCODE_BUTTON_1] |= ((RARCH_MENU_TOGGLE+1) << shift);
break;
case DEVICE_PLAYSTATION3_VERSION2:
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_NONE;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_DPAD_DOWN] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
keycode_lut[AKEYCODE_DPAD_LEFT] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift);
@ -700,7 +703,7 @@ static void android_set_default_keybinds(unsigned device, unsigned port, unsigne
keycode_lut[AKEYCODE_BUTTON_THUMBR] |= ((RETRO_DEVICE_ID_JOYPAD_R3+1) << shift);
break;
case DEVICE_MOGA:
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_NONE;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_DPAD_DOWN] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
keycode_lut[AKEYCODE_DPAD_LEFT] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift);
@ -729,7 +732,7 @@ static void android_set_default_keybinds(unsigned device, unsigned port, unsigne
keycode_lut[AKEYCODE_UNKNOWN] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
break;
case DEVICE_JXD_S7300B:
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_NONE;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_DPAD_DOWN] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
keycode_lut[AKEYCODE_DPAD_LEFT] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift);
@ -841,7 +844,7 @@ static void android_set_default_keybinds(unsigned device, unsigned port, unsigne
keycode_lut[AKEYCODE_BUTTON_L2] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
break;
case DEVICE_MAYFLASH_WII_CLASSIC:
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_NONE;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
keycode_lut[AKEYCODE_BUTTON_12] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_BUTTON_14] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
@ -860,7 +863,7 @@ static void android_set_default_keybinds(unsigned device, unsigned port, unsigne
keycode_lut[AKEYCODE_BUTTON_10] |= ((RETRO_DEVICE_ID_JOYPAD_START+1) << shift);
break;
case DEVICE_SZMY_POWER_DUAL_BOX_WII:
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_NONE;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
keycode_lut[AKEYCODE_BUTTON_13] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
keycode_lut[AKEYCODE_BUTTON_15] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift);
@ -1051,7 +1054,7 @@ static void android_set_default_keybinds(unsigned device, unsigned port, unsigne
keycode_lut[AKEYCODE_BUTTON_R1]|= ((RETRO_DEVICE_ID_JOYPAD_R+1) << shift);
break;
case DEVICE_CCPCREATIONS_WIIUSE_IME:
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_NONE;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
/* Player 1 */
keycode_lut[AKEYCODE_DPAD_UP] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift);
@ -1159,6 +1162,7 @@ static void android_set_default_keybinds(unsigned device, unsigned port, unsigne
}
keycode_lut[AKEYCODE_MENU] |= ((RARCH_MENU_TOGGLE + 1) << shift);
}
}
// Handle all events. If our activity is in pause state, block until we're unpaused.
@ -1269,7 +1273,7 @@ static void android_input_poll(void *data)
if (source & ~(AINPUT_SOURCE_TOUCHSCREEN | AINPUT_SOURCE_MOUSE))
{
if (g_settings.input.dpad_emulation[state_id] != DPAD_EMULATION_NONE)
if (g_settings.input.dpad_emulation[state_id] != ANALOG_DPAD_NONE)
engine_handle_dpad(event, motion_pointer, state_id, msg, sizeof(msg), source, debug_enable);
}
else
@ -1400,6 +1404,6 @@ const input_driver_t input_android = {
android_input_state,
android_input_key_pressed,
android_input_free_input,
android_set_default_keybinds,
android_input_set_keybinds,
"android_input",
};

View File

@ -202,8 +202,9 @@ void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned
if (source == AINPUT_SOURCE_KEYBOARD)
device = DEVICE_KEYBOARD_RETROPAD;
if (driver.input->set_default_keybinds)
driver.input->set_default_keybinds(device, port, id);
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data, device, port, id,
(1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS));
}
if (name_buf[0] != 0)

View File

@ -85,22 +85,22 @@ const char *rarch_input_find_platform_key_label(uint64_t joykey)
return "Unknown";
}
void rarch_input_set_keybind(unsigned player, unsigned keybind_action, uint64_t default_retro_joypad_id)
void rarch_input_set_keybind(unsigned port, unsigned keybind_action, uint64_t id)
{
uint64_t *key = &g_settings.input.binds[player][default_retro_joypad_id].joykey;
uint64_t *key = &g_settings.input.binds[port][id].joykey;
switch (keybind_action)
{
case KEYBIND_DECREMENT:
case KEYBINDS_ACTION_DECREMENT_BIND:
*key = rarch_input_find_previous_platform_key(*key);
break;
case KEYBIND_INCREMENT:
case KEYBINDS_ACTION_INCREMENT_BIND:
*key = rarch_input_find_next_platform_key(*key);
break;
case KEYBIND_DEFAULT:
*key = g_settings.input.binds[player][default_retro_joypad_id].def_joykey;
case KEYBINDS_ACTION_SET_DEFAULT_BIND:
*key = g_settings.input.binds[port][id].def_joykey;
break;
default:

View File

@ -19,14 +19,6 @@
#include "../driver.h"
enum keybind_set_id
{
KEYBIND_NOACTION = 0,
KEYBIND_DECREMENT,
KEYBIND_INCREMENT,
KEYBIND_DEFAULT
};
const char *rarch_input_find_platform_key_label(uint64_t joykey);
void rarch_input_set_keybind(unsigned player, unsigned keybind_action, uint64_t default_retro_joypad_id);

View File

@ -199,6 +199,27 @@ typedef struct audio_driver
#define GET_HAT_DIR(x) (x & HAT_MASK)
#define GET_HAT(x) (x & (~HAT_MASK))
enum analog_dpad_bind_enums
{
ANALOG_DPAD_NONE = 0,
ANALOG_DPAD_LSTICK,
ANALOG_DPAD_RSTICK,
ANALOG_DPAD_LAST
};
enum keybind_set_id
{
KEYBINDS_ACTION_NONE = 0,
KEYBINDS_ACTION_DECREMENT_BIND,
KEYBINDS_ACTION_INCREMENT_BIND,
KEYBINDS_ACTION_SET_DEFAULT_BIND,
KEYBINDS_ACTION_SET_DEFAULT_BINDS,
KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE,
KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK,
KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK,
KEYBINDS_ACTION_LAST
};
typedef struct input_driver
{
void *(*init)(void);
@ -206,10 +227,7 @@ typedef struct input_driver
int16_t (*input_state)(void *data, const struct retro_keybind **retro_keybinds, unsigned port, unsigned device, unsigned index, unsigned id);
bool (*key_pressed)(void *data, int key);
void (*free)(void *data);
void (*set_default_keybinds)(unsigned device, unsigned port, unsigned id);
#ifdef RARCH_CONSOLE
void (*set_analog_dpad_mapping)(unsigned device, unsigned map_dpad_enum, unsigned controller_id);
#endif
void (*set_keybinds)(void *data, unsigned device, unsigned port, unsigned id, unsigned keybind_action);
const char *ident;
} input_driver_t;

View File

@ -516,13 +516,13 @@ static void render_text(rgui_handle_t *rgui)
case RGUI_SETTINGS_BIND_DPAD_EMULATION:
switch(g_settings.input.dpad_emulation[port])
{
case DPAD_EMULATION_NONE:
case ANALOG_DPAD_NONE:
snprintf(type_str, sizeof(type_str), "None");
break;
case DPAD_EMULATION_LSTICK:
case ANALOG_DPAD_LSTICK:
snprintf(type_str, sizeof(type_str), "Left Stick");
break;
case DPAD_EMULATION_RSTICK:
case ANALOG_DPAD_RSTICK:
snprintf(type_str, sizeof(type_str), "Right Stick");
break;
}
@ -899,22 +899,64 @@ static int rgui_settings_toggle_setting(unsigned setting, rgui_action_t action,
else if (action == RGUI_ACTION_RIGHT)
g_settings.input.device[port]++;
g_settings.input.device[port] %= RARCH_DEVICE_LAST;
if (driver.input->set_default_keybinds)
driver.input->set_default_keybinds(g_settings.input.device[port], port, 0);
driver.input->set_analog_dpad_mapping(g_settings.input.device[port], g_settings.input.dpad_emulation[port], port);
if (driver.input->set_keybinds)
{
unsigned keybind_action = (1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS);
switch (g_settings.input.dpad_emulation[port])
{
case ANALOG_DPAD_LSTICK:
keybind_action |= (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK);
break;
case ANALOG_DPAD_RSTICK:
keybind_action |= (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK);
break;
case ANALOG_DPAD_NONE:
keybind_action |= (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE);
break;
default:
break;
}
driver.input->set_keybinds(driver.input_data, g_settings.input.device[port], port, 0,
keybind_action);
}
break;
#endif
#ifdef RARCH_CONSOLE
case RGUI_SETTINGS_BIND_DPAD_EMULATION:
g_settings.input.dpad_emulation[port] += DPAD_EMULATION_LAST;
g_settings.input.dpad_emulation[port] += ANALOG_DPAD_LAST;
if (action == RGUI_ACTION_START)
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_LSTICK;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_LSTICK;
else if (action == RGUI_ACTION_LEFT)
g_settings.input.dpad_emulation[port]--;
else if (action == RGUI_ACTION_RIGHT)
g_settings.input.dpad_emulation[port]++;
g_settings.input.dpad_emulation[port] %= DPAD_EMULATION_LAST;
driver.input->set_analog_dpad_mapping(g_settings.input.device[port], g_settings.input.dpad_emulation[port], port);
g_settings.input.dpad_emulation[port] %= ANALOG_DPAD_LAST;
if (driver.input->set_keybinds)
{
unsigned keybind_action = 0;
switch (g_settings.input.dpad_emulation[port])
{
case ANALOG_DPAD_LSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK);
break;
case ANALOG_DPAD_RSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK);
break;
case ANALOG_DPAD_NONE:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE);
break;
default:
break;
}
if (keybind_action)
driver.input->set_keybinds(driver.input_data, g_settings.input.device[port], port, 0,
keybind_action);
}
break;
case RGUI_SETTINGS_BIND_UP:
case RGUI_SETTINGS_BIND_DOWN:
@ -933,14 +975,14 @@ static int rgui_settings_toggle_setting(unsigned setting, rgui_action_t action,
case RGUI_SETTINGS_BIND_L3:
case RGUI_SETTINGS_BIND_R3:
{
unsigned keybind_action;
unsigned keybind_action = KEYBINDS_ACTION_NONE;
if (action == RGUI_ACTION_START)
keybind_action = KEYBIND_DEFAULT;
keybind_action = KEYBINDS_ACTION_SET_DEFAULT_BIND;
else if (action == RGUI_ACTION_LEFT)
keybind_action = KEYBIND_DECREMENT;
keybind_action = KEYBINDS_ACTION_DECREMENT_BIND;
else if (action == RGUI_ACTION_RIGHT)
keybind_action = KEYBIND_INCREMENT;
keybind_action = KEYBINDS_ACTION_INCREMENT_BIND;
else
break;

View File

@ -571,15 +571,15 @@ static void populate_setting_item(void *data, unsigned input)
snprintf(current_item->text, sizeof(current_item->text), "D-Pad Emulation");
switch(g_settings.input.dpad_emulation[currently_selected_controller_menu])
{
case DPAD_EMULATION_NONE:
case ANALOG_DPAD_NONE:
snprintf(current_item->comment, sizeof(current_item->comment), "[%s] from Controller %d is mapped to D-pad.", "None", currently_selected_controller_menu+1);
snprintf(current_item->setting_text, sizeof(current_item->setting_text), "None");
break;
case DPAD_EMULATION_LSTICK:
case ANALOG_DPAD_LSTICK:
snprintf(current_item->comment, sizeof(current_item->comment), "[%s] from Controller %d is mapped to D-pad.", "Left Stick", currently_selected_controller_menu+1);
snprintf(current_item->setting_text, sizeof(current_item->setting_text), "Left Stick");
break;
case DPAD_EMULATION_RSTICK:
case ANALOG_DPAD_RSTICK:
snprintf(current_item->comment, sizeof(current_item->comment), "[%s] from Controller %d is mapped to D-pad.", "Right Stick", currently_selected_controller_menu+1);
snprintf(current_item->setting_text, sizeof(current_item->setting_text), "Right Stick");
break;
@ -1105,16 +1105,16 @@ int select_directory(void *data, void *state)
static void set_keybind_digital(uint64_t default_retro_joypad_id, uint64_t input)
{
unsigned keybind_action = KEYBIND_NOACTION;
unsigned keybind_action = KEYBINDS_ACTION_NONE;
if(input & (1ULL << RMENU_DEVICE_NAV_LEFT))
keybind_action = KEYBIND_DECREMENT;
keybind_action = KEYBINDS_ACTION_DECREMENT_BIND;
if((input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B)))
keybind_action = KEYBIND_INCREMENT;
keybind_action = KEYBINDS_ACTION_INCREMENT_BIND;
if(input & (1ULL << RMENU_DEVICE_NAV_START))
keybind_action = KEYBIND_DEFAULT;
keybind_action = KEYBINDS_ACTION_SET_DEFAULT_BIND;
rarch_input_set_keybind(currently_selected_controller_menu, keybind_action, default_retro_joypad_id);
}
@ -1949,36 +1949,55 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input)
case SETTING_DPAD_EMULATION:
if(input & (1ULL << RMENU_DEVICE_NAV_LEFT))
{
if (driver.input->set_keybinds)
{
unsigned keybind_action = 0;
switch(g_settings.input.dpad_emulation[currently_selected_controller_menu])
{
case DPAD_EMULATION_NONE:
case ANALOG_DPAD_NONE:
break;
case DPAD_EMULATION_LSTICK:
driver.input->set_analog_dpad_mapping(0, DPAD_EMULATION_NONE, currently_selected_controller_menu);
case ANALOG_DPAD_LSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE);
break;
case DPAD_EMULATION_RSTICK:
driver.input->set_analog_dpad_mapping(0, DPAD_EMULATION_LSTICK, currently_selected_controller_menu);
case ANALOG_DPAD_RSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK);
break;
default:
break;
}
if (keybind_action)
driver.input->set_keybinds(driver.input_data, g_settings.input.device[currently_selected_controller_menu], currently_selected_controller_menu, 0, keybind_action);
}
}
if((input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B)))
{
if (driver.input->set_keybinds)
{
unsigned keybind_action = 0;
switch(g_settings.input.dpad_emulation[currently_selected_controller_menu])
{
case DPAD_EMULATION_NONE:
driver.input->set_analog_dpad_mapping(0, DPAD_EMULATION_LSTICK, currently_selected_controller_menu);
case ANALOG_DPAD_NONE:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK);
break;
case DPAD_EMULATION_LSTICK:
driver.input->set_analog_dpad_mapping(0, DPAD_EMULATION_RSTICK, currently_selected_controller_menu);
case ANALOG_DPAD_LSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK);
break;
case DPAD_EMULATION_RSTICK:
case ANALOG_DPAD_RSTICK:
break;
}
if (keybind_action)
driver.input->set_keybinds(driver.input_data, g_settings.input.device[currently_selected_controller_menu], currently_selected_controller_menu, 0, keybind_action);
}
}
if(input & (1ULL << RMENU_DEVICE_NAV_START))
driver.input->set_analog_dpad_mapping(0, DPAD_EMULATION_LSTICK, currently_selected_controller_menu);
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data, g_settings.input.device[currently_selected_controller_menu], currently_selected_controller_menu, 0, (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK));
break;
case SETTING_CONTROLS_RETRO_DEVICE_ID_JOYPAD_UP:
set_keybind_digital(RETRO_DEVICE_ID_JOYPAD_UP, input);
@ -2041,8 +2060,9 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input)
#endif
case SETTING_CONTROLS_DEFAULT_ALL:
if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B)) || (input & (1ULL << RMENU_DEVICE_NAV_START)))
if (driver.input->set_default_keybinds)
driver.input->set_default_keybinds(g_settings.input.device[currently_selected_controller_menu], currently_selected_controller_menu, 0);
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data, g_settings.input.device[currently_selected_controller_menu], currently_selected_controller_menu, 0,
(1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS));
break;
}

View File

@ -385,13 +385,13 @@ static void set_dpad_emulation_label(unsigned port, char *str, size_t sizeof_str
{
switch(g_settings.input.dpad_emulation[port])
{
case DPAD_EMULATION_NONE:
case ANALOG_DPAD_NONE:
snprintf(str, sizeof_str, "D-Pad Emulation: None");
break;
case DPAD_EMULATION_LSTICK:
case ANALOG_DPAD_LSTICK:
snprintf(str, sizeof_str, "D-Pad Emulation: Left Stick");
break;
case DPAD_EMULATION_RSTICK:
case ANALOG_DPAD_RSTICK:
snprintf(str, sizeof_str, "D-Pad Emulation: Right Stick");
break;
}
@ -452,17 +452,25 @@ HRESULT CRetroArchControls::OnControlNavigate(
switch(current_index)
{
case SETTING_CONTROLS_DPAD_EMULATION:
if (driver.input->set_keybinds)
{
unsigned keybind_action = 0;
switch(g_settings.input.dpad_emulation[controlno])
{
case DPAD_EMULATION_NONE:
case ANALOG_DPAD_NONE:
break;
case DPAD_EMULATION_LSTICK:
driver.input->set_analog_dpad_mapping(0, DPAD_EMULATION_NONE, controlno);
case ANALOG_DPAD_LSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE);
break;
case DPAD_EMULATION_RSTICK:
driver.input->set_analog_dpad_mapping(0, DPAD_EMULATION_LSTICK, controlno);
case ANALOG_DPAD_RSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK);
break;
}
if (keybind_action)
driver.input->set_keybinds(driver.input_data, g_settings.input.device[controlno], controlno, 0, keybind_action);
}
break;
case SETTING_CONTROLS_DEFAULT_ALL:
break;
@ -480,22 +488,30 @@ HRESULT CRetroArchControls::OnControlNavigate(
switch(current_index)
{
case SETTING_CONTROLS_DPAD_EMULATION:
if (driver.input->set_keybinds)
{
unsigned keybind_action = 0;
switch(g_settings.input.dpad_emulation[controlno])
{
case DPAD_EMULATION_NONE:
driver.input->set_analog_dpad_mapping(0, DPAD_EMULATION_LSTICK, controlno);
case ANALOG_DPAD_NONE:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK);
break;
case DPAD_EMULATION_LSTICK:
driver.input->set_analog_dpad_mapping(0, DPAD_EMULATION_RSTICK, controlno);
case ANALOG_DPAD_LSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK);
break;
case DPAD_EMULATION_RSTICK:
case ANALOG_DPAD_RSTICK:
break;
}
if (keybind_action)
driver.input->set_keybinds(driver.input_data, g_settings.input.device[currently_selected_controller_menu], currently_selected_controller_menu, 0, keybind_action);
}
break;
case SETTING_CONTROLS_DEFAULT_ALL:
break;
default:
rarch_input_set_keybind(controlno, KEYBIND_INCREMENT, current_index);
rarch_input_set_keybind(controlno, KEYBINDS_ACTION_INCREMENT_BIND, current_index);
snprintf(button, sizeof(button), "%s #%d: %s",
g_settings.input.binds[controlno][current_index].desc, controlno,
rarch_input_find_platform_key_label(g_settings.input.binds[controlno][current_index].joykey));
@ -534,8 +550,10 @@ HRESULT CRetroArchControls::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled
case SETTING_CONTROLS_DPAD_EMULATION:
break;
case SETTING_CONTROLS_DEFAULT_ALL:
if (driver.input->set_default_keybinds)
driver.input->set_default_keybinds(g_settings.input.device[controlno], controlno, 0);
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data,
g_settings.input.device[controlno], controlno, 0,
(1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS));
for(i = 0; i < RARCH_FIRST_META_KEY; i++)
{

View File

@ -101,14 +101,6 @@ extern "C" {
#define MAX_PLAYERS 8
enum dpad_emu_enums
{
DPAD_EMULATION_NONE = 0,
DPAD_EMULATION_LSTICK,
DPAD_EMULATION_RSTICK,
DPAD_EMULATION_LAST
};
enum menu_enums
{
MODE_GAME = 0,

View File

@ -163,89 +163,13 @@ static void power_callback(void)
}
#endif
static void gx_input_set_analog_dpad_mapping(unsigned device, unsigned map_dpad_enum, unsigned controller_id)
{
switch (device)
{
#ifdef HW_RVL
case GX_DEVICE_WIIMOTE:
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_UP].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_RIGHT].joykey;
break;
case GX_DEVICE_NUNCHUK:
if (map_dpad_enum == DPAD_EMULATION_NONE)
{
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_UP].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_RIGHT].joykey;
}
else
{
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_UP_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_RIGHT_DPAD].joykey;
}
break;
case GX_DEVICE_CLASSIC:
if (map_dpad_enum == DPAD_EMULATION_NONE)
{
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_JOYPAD_UP].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_JOYPAD_RIGHT].joykey;
}
else if (map_dpad_enum == DPAD_EMULATION_LSTICK)
{
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_LSTICK_UP_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_LSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_LSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_LSTICK_RIGHT_DPAD].joykey;
}
else if (map_dpad_enum == DPAD_EMULATION_RSTICK)
{
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_RSTICK_UP_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_RSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_RSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_RSTICK_RIGHT_DPAD].joykey;
}
break;
#endif
case GX_DEVICE_GAMECUBE:
if (map_dpad_enum == DPAD_EMULATION_NONE)
{
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_GC_ID_JOYPAD_UP].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_GC_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_GC_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_GC_ID_JOYPAD_RIGHT].joykey;
}
else if (map_dpad_enum == DPAD_EMULATION_LSTICK)
{
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_GC_ID_LSTICK_UP_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_GC_ID_LSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_GC_ID_LSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_GC_ID_LSTICK_RIGHT_DPAD].joykey;
}
else if (map_dpad_enum == DPAD_EMULATION_RSTICK)
{
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_GC_ID_RSTICK_UP_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_GC_ID_RSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_GC_ID_RSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_GC_ID_RSTICK_RIGHT_DPAD].joykey;
}
break;
default:
break;
}
}
static void gx_set_default_keybinds(unsigned device, unsigned port, unsigned id)
static void gx_input_set_keybinds(void *data, unsigned device, unsigned port,
unsigned id, unsigned keybind_action)
{
(void)id;
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS))
{
switch (device)
{
#ifdef HW_RVL
@ -330,7 +254,113 @@ static void gx_set_default_keybinds(unsigned device, unsigned port, unsigned id)
g_settings.input.binds[port][i].id = i;
g_settings.input.binds[port][i].joykey = g_settings.input.binds[port][i].def_joykey;
}
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_LSTICK;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_LSTICK;
}
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK))
{
switch (device)
{
#ifdef HW_RVL
case GX_DEVICE_WIIMOTE:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_RIGHT].joykey;
break;
case GX_DEVICE_NUNCHUK:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_UP_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_RIGHT_DPAD].joykey;
break;
case GX_DEVICE_CLASSIC:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_RSTICK_UP_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_RSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_RSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_RSTICK_RIGHT_DPAD].joykey;
break;
#endif
case GX_DEVICE_GAMECUBE:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_GC_ID_RSTICK_UP_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_GC_ID_RSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_GC_ID_RSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_GC_ID_RSTICK_RIGHT_DPAD].joykey;
break;
default:
break;
}
}
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK))
{
switch (device)
{
#ifdef HW_RVL
case GX_DEVICE_WIIMOTE:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_RIGHT].joykey;
break;
case GX_DEVICE_NUNCHUK:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_UP_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_LSTICK_RIGHT_DPAD].joykey;
break;
case GX_DEVICE_CLASSIC:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_LSTICK_UP_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_LSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_LSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_LSTICK_RIGHT_DPAD].joykey;
break;
#endif
case GX_DEVICE_GAMECUBE:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_GC_ID_LSTICK_UP_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_GC_ID_LSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_GC_ID_LSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_GC_ID_LSTICK_RIGHT_DPAD].joykey;
break;
default:
break;
}
}
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE))
{
switch (device)
{
#ifdef HW_RVL
case GX_DEVICE_WIIMOTE:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_RIGHT].joykey;
break;
case GX_DEVICE_NUNCHUK:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_WIIMOTE_ID_JOYPAD_RIGHT].joykey;
break;
case GX_DEVICE_CLASSIC:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_JOYPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_CLASSIC_ID_JOYPAD_RIGHT].joykey;
break;
#endif
case GX_DEVICE_GAMECUBE:
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[GX_DEVICE_GC_ID_JOYPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[GX_DEVICE_GC_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[GX_DEVICE_GC_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[GX_DEVICE_GC_ID_JOYPAD_RIGHT].joykey;
break;
default:
break;
}
}
}
static void *gx_input_init(void)
@ -345,10 +375,34 @@ static void *gx_input_init(void)
#endif
for(unsigned i = 0; i < MAX_PLAYERS; i++)
gx_set_default_keybinds(0, i, 0);
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data, 0, i, 0,
(1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS));
for(unsigned i = 0; i < MAX_PADS; i++)
gx_input_set_analog_dpad_mapping(g_settings.input.device[i], g_settings.input.dpad_emulation[i], i);
{
unsigned keybind_action = 0;
switch (g_settings.input.dpad_emulation[i])
{
case ANALOG_DPAD_LSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK);
break;
case ANALOG_DPAD_RSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK);
break;
case ANALOG_DPAD_NONE:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE);
break;
default:
break;
}
if (keybind_action)
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data, 0, i, 0,
keybind_action);
}
return (void*)-1;
}
@ -372,7 +426,7 @@ static void gx_input_poll(void *data)
{
uint32_t down = 0;
uint64_t *state_cur = &pad_state[port];
bool dpad_emulation = (g_settings.input.dpad_emulation[port] != DPAD_EMULATION_NONE);
bool dpad_emulation = (g_settings.input.dpad_emulation[port] != ANALOG_DPAD_NONE);
#ifdef HW_RVL
uint32_t type = 0;
@ -547,7 +601,7 @@ static void gx_input_poll(void *data)
uint64_t *state_p1 = &pad_state[0];
uint64_t *lifecycle_state = &g_extern.lifecycle_state;
bool dpad_emulation = (g_settings.input.dpad_emulation[0] != DPAD_EMULATION_NONE);
bool dpad_emulation = (g_settings.input.dpad_emulation[0] != ANALOG_DPAD_NONE);
*lifecycle_state &= ~(
(1ULL << RARCH_FAST_FORWARD_HOLD_KEY) |
@ -644,7 +698,6 @@ const input_driver_t input_gx = {
.input_state = gx_input_state,
.key_pressed = gx_input_key_pressed,
.free = gx_input_free_input,
.set_default_keybinds = gx_set_default_keybinds,
.set_analog_dpad_mapping = gx_input_set_analog_dpad_mapping,
.set_keybinds = gx_input_set_keybinds,
.ident = "gx",
};

View File

@ -51,32 +51,23 @@ static void nullinput_input_free_input(void *data)
(void)data;
}
#ifdef RARCH_CONSOLE
static void nullinput_set_default_keybinds(unsigned device, unsigned port, unsigned id)
static void nullinput_set_keybinds(void *data, unsigned device,
unsigned port, unsigned id, unsigned keybind_action)
{
(void)data;
(void)device;
(void)port;
(void)id;
(void)keybind_action;
}
static void nullinput_set_analog_dpad_mapping(unsigned device, unsigned map_dpad_enum, unsigned controller_id)
{
(void)device;
(void)map_dpad_enum;
(void)controller_id;
}
#endif
const input_driver_t input_null = {
nullinput_input_init,
nullinput_input_poll,
nullinput_input_state,
nullinput_input_key_pressed,
nullinput_input_free_input,
nullinput_set_default_keybinds,
#ifdef RARCH_CONSOLE
nullinput_set_analog_dpad_mapping,
#endif
nullinput_set_keybinds,
"null",
};

View File

@ -125,7 +125,7 @@ static void ps3_input_poll(void *data)
if (state_tmp.len != 0)
{
uint64_t *state_cur = &state[i];
bool dpad_emulation = (g_settings.input.dpad_emulation[i] != DPAD_EMULATION_NONE);
bool dpad_emulation = (g_settings.input.dpad_emulation[i] != ANALOG_DPAD_NONE);
*state_cur = 0;
#ifdef __PSL1GHT__
*state_cur |= (state_tmp.BTN_LEFT) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_LEFT) : 0;
@ -190,7 +190,7 @@ static void ps3_input_poll(void *data)
uint64_t *state_p1 = &state[0];
uint64_t *lifecycle_state = &g_extern.lifecycle_state;
bool dpad_emulation = (g_settings.input.dpad_emulation[0] != DPAD_EMULATION_NONE);
bool dpad_emulation = (g_settings.input.dpad_emulation[0] != ANALOG_DPAD_NONE);
*lifecycle_state &= ~(
(1ULL << RARCH_FAST_FORWARD_HOLD_KEY) |
@ -391,55 +391,55 @@ do_deinit:
RetroArch PS3 INPUT DRIVER
============================================================ */
static void ps3_input_set_analog_dpad_mapping(unsigned device, unsigned map_dpad_enum, unsigned controller_id)
{
(void)device;
switch(map_dpad_enum)
{
case DPAD_EMULATION_NONE:
g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_NONE;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_UP].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey;
break;
case DPAD_EMULATION_LSTICK:
g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_LSTICK;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RARCH_ANALOG_LEFT_Y_DPAD_UP].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RARCH_ANALOG_LEFT_Y_DPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RARCH_ANALOG_LEFT_X_DPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RARCH_ANALOG_LEFT_X_DPAD_RIGHT].joykey;
break;
case DPAD_EMULATION_RSTICK:
g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_RSTICK;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RARCH_ANALOG_RIGHT_Y_DPAD_UP].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RARCH_ANALOG_RIGHT_Y_DPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RARCH_ANALOG_RIGHT_X_DPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RARCH_ANALOG_RIGHT_X_DPAD_RIGHT].joykey;
break;
}
}
static void ps3_input_free_input(void *data)
{
(void)data;
//cellPadEnd();
}
static void ps3_set_default_keybinds(unsigned device, unsigned port, unsigned id)
static void ps3_input_set_keybinds(void *data, unsigned device,
unsigned port, unsigned id, unsigned keybind_action)
{
(void)device;
(void)id;
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS))
{
for (int i = 0; i < RARCH_CUSTOM_BIND_LIST_END; i++)
{
g_settings.input.binds[port][i].id = i;
g_settings.input.binds[port][i].def_joykey = platform_keys[i].joykey;
g_settings.input.binds[port][i].joykey = g_settings.input.binds[port][i].def_joykey;
}
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_LSTICK;
}
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_LSTICK;
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE))
{
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey;
}
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK))
{
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_LSTICK;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RARCH_ANALOG_LEFT_Y_DPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RARCH_ANALOG_LEFT_Y_DPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RARCH_ANALOG_LEFT_X_DPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RARCH_ANALOG_LEFT_X_DPAD_RIGHT].joykey;
}
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK))
{
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_RSTICK;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RARCH_ANALOG_RIGHT_Y_DPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RARCH_ANALOG_RIGHT_Y_DPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RARCH_ANALOG_RIGHT_X_DPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RARCH_ANALOG_RIGHT_X_DPAD_RIGHT].joykey;
}
}
static void* ps3_input_init(void)
@ -450,10 +450,34 @@ static void* ps3_input_init(void)
#endif
for(unsigned i = 0; i < MAX_PLAYERS; i++)
ps3_set_default_keybinds(0, i, 0);
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data, 0, i, 0,
(1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS));
for (unsigned i = 0; i < MAX_PADS; i++)
ps3_input_set_analog_dpad_mapping(0, g_settings.input.dpad_emulation[i], i);
for(unsigned i = 0; i < MAX_PADS; i++)
{
unsigned keybind_action = 0;
switch (g_settings.input.dpad_emulation[i])
{
case ANALOG_DPAD_LSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK);
break;
case ANALOG_DPAD_RSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK);
break;
case ANALOG_DPAD_NONE:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE);
break;
default:
break;
}
if (keybind_action)
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data, 0, i, 0,
keybind_action);
}
return (void*)-1;
}
@ -469,8 +493,7 @@ const input_driver_t input_ps3 = {
.input_state = ps3_input_state,
.key_pressed = ps3_input_key_pressed,
.free = ps3_input_free_input,
.set_default_keybinds = ps3_set_default_keybinds,
.set_analog_dpad_mapping = ps3_input_set_analog_dpad_mapping,
.set_keybinds = ps3_input_set_keybinds,
.ident = "ps3",
};

View File

@ -141,27 +141,27 @@ static int16_t psp_input_state(void *data, const struct retro_keybind **binds,
return retval;
}
static void psp_input_set_analog_dpad_mapping(unsigned device, unsigned map_dpad_enum, unsigned controller_id)
{
(void)device;
}
static void psp_free_input(void *data)
static void psp_input_free_input(void *data)
{
(void)data;
}
static void psp_set_default_keybinds(unsigned device, unsigned port, unsigned id)
static void psp_input_set_keybinds(void *data, unsigned device, unsigned port,
unsigned id, unsigned keybind_action)
{
(void)device;
(void)id;
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS))
{
for (unsigned i = 0; i < RARCH_CUSTOM_BIND_LIST_END; i++)
{
g_settings.input.binds[port][i].id = i;
g_settings.input.binds[port][i].def_joykey = platform_keys[i].joykey;
g_settings.input.binds[port][i].joykey = g_settings.input.binds[port][i].def_joykey;
}
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_LSTICK;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_LSTICK;
}
}
static void* psp_input_initialize(void)
@ -172,12 +172,39 @@ static void* psp_input_initialize(void)
sceCtrlSetSamplingMode(DEFAULT_SAMPLING_MODE);
for(unsigned i = 0; i < MAX_PLAYERS; i++)
psp_set_default_keybinds(0, i, 0);
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data, 0, i, 0,
(1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS));
for(unsigned i = 0; i < MAX_PADS; i++)
{
unsigned keybind_action = 0;
switch (g_settings.input.dpad_emulation[i])
{
case ANALOG_DPAD_LSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK);
break;
case ANALOG_DPAD_RSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK);
break;
case ANALOG_DPAD_NONE:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE);
break;
default:
break;
}
if (keybind_action)
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data, 0, i, 0,
action);
}
return (void*)-1;
}
static bool psp_key_pressed(void *data, int key)
static bool psp_input_key_pressed(void *data, int key)
{
(void)data;
@ -195,9 +222,8 @@ const input_driver_t input_psp = {
.init = psp_input_initialize,
.poll = psp_input_poll,
.input_state = psp_input_state,
.key_pressed = psp_key_pressed,
.free = psp_free_input,
.set_default_keybinds = psp_set_default_keybinds,
.set_analog_dpad_mapping = psp_input_set_analog_dpad_mapping,
.key_pressed = psp_input_key_pressed,
.free = psp_input_free_input,
.set_keybinds = psp_input_set_keybinds,
.ident = "psp",
};

View File

@ -137,7 +137,7 @@ static void xdk_input_poll(void *data)
continue;
uint64_t *state_cur = &state[i];
bool dpad_emulation = (g_settings.input.dpad_emulation[i] != DPAD_EMULATION_NONE);
bool dpad_emulation = (g_settings.input.dpad_emulation[i] != ANALOG_DPAD_NONE);
*state_cur = 0;
*state_cur |= ((state_tmp.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_B]) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_A) : 0);
@ -176,7 +176,7 @@ static void xdk_input_poll(void *data)
pads_connected += (XInputGetState(i, &state_tmp) == ERROR_DEVICE_NOT_CONNECTED) ? 0 : 1;
uint64_t *state_cur = &state[i];
bool dpad_emulation = (g_settings.input.dpad_emulation[i] != DPAD_EMULATION_NONE);
bool dpad_emulation = (g_settings.input.dpad_emulation[i] != ANALOG_DPAD_NONE);
*state_cur = 0;
*state_cur |= ((state_tmp.Gamepad.wButtons & XINPUT_GAMEPAD_B) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_A) : 0);
@ -212,7 +212,7 @@ static void xdk_input_poll(void *data)
uint64_t *state_p1 = &state[0];
uint64_t *lifecycle_state = &g_extern.lifecycle_state;
bool dpad_emulation = (g_settings.input.dpad_emulation[0] != DPAD_EMULATION_NONE);
bool dpad_emulation = (g_settings.input.dpad_emulation[0] != ANALOG_DPAD_NONE);
*lifecycle_state &= ~(
(1ULL << RARCH_FAST_FORWARD_HOLD_KEY) |
@ -269,11 +269,14 @@ static void xdk_input_free_input(void *data)
(void)data;
}
static void xdk_set_default_keybinds(unsigned device, unsigned port, unsigned id)
static void xdk_input_set_keybinds(void *data, unsigned device,
unsigned port, unsigned id, unsigned keybind_action)
{
(void)device;
(void)id;
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS))
{
for (int i = 0; i < RARCH_CUSTOM_BIND_LIST_END; i++)
{
g_settings.input.binds[port][i].id = i;
@ -281,36 +284,34 @@ static void xdk_set_default_keybinds(unsigned device, unsigned port, unsigned id
g_settings.input.binds[port][i].joykey = g_settings.input.binds[port][i].def_joykey;
}
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_LSTICK;
}
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_LSTICK;
}
static void xdk_input_set_analog_dpad_mapping(unsigned device, unsigned map_dpad_enum, unsigned controller_id)
{
(void)device;
switch(map_dpad_enum)
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE))
{
case DPAD_EMULATION_NONE:
g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_NONE;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_UP].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey;
break;
case DPAD_EMULATION_LSTICK:
g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_LSTICK;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RARCH_ANALOG_LEFT_Y_DPAD_UP].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RARCH_ANALOG_LEFT_Y_DPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RARCH_ANALOG_LEFT_X_DPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RARCH_ANALOG_LEFT_X_DPAD_RIGHT].joykey;
break;
case DPAD_EMULATION_RSTICK:
g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_RSTICK;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RARCH_ANALOG_RIGHT_Y_DPAD_UP].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RARCH_ANALOG_RIGHT_Y_DPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RARCH_ANALOG_RIGHT_X_DPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RARCH_ANALOG_RIGHT_X_DPAD_RIGHT].joykey;
break;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_NONE;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey;
}
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK))
{
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_LSTICK;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RARCH_ANALOG_LEFT_Y_DPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RARCH_ANALOG_LEFT_Y_DPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RARCH_ANALOG_LEFT_X_DPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RARCH_ANALOG_LEFT_X_DPAD_RIGHT].joykey;
}
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK))
{
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_RSTICK;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[RARCH_ANALOG_RIGHT_Y_DPAD_UP].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[RARCH_ANALOG_RIGHT_Y_DPAD_DOWN].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[RARCH_ANALOG_RIGHT_X_DPAD_LEFT].joykey;
g_settings.input.binds[port][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[RARCH_ANALOG_RIGHT_X_DPAD_RIGHT].joykey;
}
}
@ -336,10 +337,34 @@ static void *xdk_input_init(void)
#endif
for(unsigned i = 0; i < MAX_PLAYERS; i++)
xdk_set_default_keybinds(0, i, 0);
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data, 0, i, 0,
(1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS));
for(unsigned i = 0; i < MAX_PADS; i++)
xdk_input_set_analog_dpad_mapping(0, g_settings.input.dpad_emulation[i], i);
{
unsigned keybind_action = 0;
switch (g_settings.input.dpad_emulation[i])
{
case ANALOG_DPAD_LSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK);
break;
case ANALOG_DPAD_RSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK);
break;
case ANALOG_DPAD_NONE:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE);
break;
default:
break;
}
if (keybind_action)
if (driver.input->set_keybinds)
driver.input->set_keybinds(driver.input_data, 0, i, 0,
action);
}
return (void*)-1;
}
@ -356,7 +381,6 @@ const input_driver_t input_xinput =
xdk_input_state,
xdk_input_key_pressed,
xdk_input_free_input,
xdk_set_default_keybinds,
xdk_input_set_analog_dpad_mapping,
xdk_input_set_keybinds,
"xinput"
};

View File

@ -82,34 +82,51 @@ static void xenon360_input_free_input(void *data)
(void)data;
}
static void xenon360_input_set_default_keybinds(unsigned device, unsigned port, unsigned id)
static void xenon360_input_set_keybinds(void *data, unsigned device,
unsigned port, unsigned id, unsigned keybind_action)
{
(void)data;
(void)device;
(void)id;
if (keybind_action & (1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS))
{
for (unsigned i = 0; i < RARCH_CUSTOM_BIND_LIST_END; i++)
{
g_settings.input.binds[port][i].id = i;
g_settings.input.binds[port][i].joykey = g_settings.input.binds[port][i].def_joykey;
}
g_settings.input.dpad_emulation[port] = DPAD_EMULATION_LSTICK;
}
static void xenon360_input_set_analog_dpad_mapping(unsigned device, unsigned map_dpad_enum, unsigned controller_id)
{
(void)device;
(void)map_dpad_enum;
(void)controller_id;
g_settings.input.dpad_emulation[port] = ANALOG_DPAD_LSTICK;
}
}
static void* xenon360_input_init(void)
{
for(unsigned i = 0; i < MAX_PLAYERS; i++)
xenon360_input_set_default_keybinds(0, i, 0);
xenon360_input_set_keybinds(driver.input_data, 0, i,
(1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS));
for(unsigned i = 0; i < MAX_PADS; i++)
xenon360_input_set_analog_dpad_mapping(0, g_settings.input.dpad_emulation[i], i);
{
unsigned keybind_action = 0;
switch (g_settings.input.dpad_emulation[i])
{
case ANALOG_DPAD_LSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_LSTICK);
break;
case ANALOG_DPAD_RSTICK:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_RSTICK);
break;
case ANALOG_DPAD_NONE:
keybind_action = (1ULL << KEYBINDS_ACTION_SET_ANALOG_DPAD_NONE);
default:
break;
}
if (keybind_action)
xenon360_input_set_keybinds(driver.input_data, 0, i, keybind_action);
}
return (void*)-1;
}
@ -126,7 +143,6 @@ const input_driver_t input_xenon360 = {
.input_state = xenon360_input_state,
.key_pressed = xenon360_input_key_pressed,
.free = xenon360_input_free_input,
.set_default_keybinds = xenon360_input_set_default_keybinds,
.set_analog_dpad_mapping = xenon360_input_set_analog_dpad_mapping,
.set_keybinds = xenon360_input_set_keybinds,
.ident = "xenon360",
};