From 9e2392051d5d714b41554ff926e577ccf97bb305 Mon Sep 17 00:00:00 2001 From: Themaister Date: Sat, 27 Apr 2013 12:32:03 +0200 Subject: [PATCH] Refactor libretro device type handling. Show devices in RGUI. --- frontend/frontend.c | 1 + frontend/menu/menu_common.h | 1 + frontend/menu/rgui.c | 20 ++++++++ general.h | 8 +--- retroarch.c | 92 ++++++++++++++++++++----------------- 5 files changed, 73 insertions(+), 49 deletions(-) diff --git a/frontend/frontend.c b/frontend/frontend.c index d58b952125..9c2287d05b 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -36,6 +36,7 @@ int main(int argc, char *argv[]) return rarch_main(argc, argv); #else + rarch_main_clear_state(); rarch_init_msg_queue(); int init_ret; diff --git a/frontend/menu/menu_common.h b/frontend/menu/menu_common.h index 1537eb1046..b387b0e752 100644 --- a/frontend/menu/menu_common.h +++ b/frontend/menu/menu_common.h @@ -138,6 +138,7 @@ typedef enum RGUI_SETTINGS_QUIT_RARCH, RGUI_SETTINGS_BIND_DEVICE, + RGUI_SETTINGS_BIND_DEVICE_TYPE, RGUI_SETTINGS_BIND_DPAD_EMULATION, RGUI_SETTINGS_BIND_UP, RGUI_SETTINGS_BIND_DOWN, diff --git a/frontend/menu/rgui.c b/frontend/menu/rgui.c index c4829da216..3615a0497d 100644 --- a/frontend/menu/rgui.c +++ b/frontend/menu/rgui.c @@ -584,6 +584,25 @@ static void render_text(rgui_handle_t *rgui) strlcpy(type_str, "Disabled", sizeof(type_str)); break; } + case RGUI_SETTINGS_BIND_DEVICE_TYPE: + { + const char *name; + switch (g_extern.libretro_device[port]) + { + case RETRO_DEVICE_NONE: name = "None"; break; + case RETRO_DEVICE_JOYPAD: name = "Joypad"; break; + case RETRO_DEVICE_ANALOG: name = "Joypad w/ Analog"; break; + case RETRO_DEVICE_JOYPAD_MULTITAP: name = "Multitap"; break; + case RETRO_DEVICE_MOUSE: name = "Mouse"; break; + case RETRO_DEVICE_LIGHTGUN_JUSTIFIER: name = "Justifier"; break; + case RETRO_DEVICE_LIGHTGUN_JUSTIFIERS: name = "Justifiers"; break; + case RETRO_DEVICE_LIGHTGUN_SUPER_SCOPE: name = "SuperScope"; break; + default: name = "Unknown"; break; + } + + strlcpy(type_str, name, sizeof(type_str)); + break; + } case RGUI_SETTINGS_BIND_DPAD_EMULATION: switch (g_settings.input.dpad_emulation[port]) { @@ -1427,6 +1446,7 @@ static void rgui_settings_controller_populate_entries(rgui_handle_t *rgui) { rgui_list_clear(rgui->selection_buf); rgui_list_push(rgui->selection_buf, "Device", RGUI_SETTINGS_BIND_DEVICE, 0); + rgui_list_push(rgui->selection_buf, "Device Type", RGUI_SETTINGS_BIND_DEVICE_TYPE, 0); if (driver.input && driver.input->set_keybinds) { diff --git a/general.h b/general.h index 0b38fa1ae4..60f0c588c3 100644 --- a/general.h +++ b/general.h @@ -310,13 +310,7 @@ struct global bool video_active; bool force_fullscreen; - bool disconnect_device[MAX_PLAYERS]; - bool has_mouse[MAX_PLAYERS]; - bool has_dualanalog[MAX_PLAYERS]; - bool has_scope; - bool has_justifier; - bool has_justifiers; - bool has_multitap; + unsigned libretro_device[MAX_PLAYERS]; bool rom_file_temporary; char last_rom[PATH_MAX]; diff --git a/retroarch.c b/retroarch.c index 6f30b6a7a1..b5bf034ee4 100644 --- a/retroarch.c +++ b/retroarch.c @@ -905,15 +905,15 @@ static void parse_input(int argc, char *argv[]) exit(0); case '4': - g_extern.has_multitap = true; + g_extern.libretro_device[1] = RETRO_DEVICE_JOYPAD_MULTITAP; break; case 'j': - g_extern.has_justifier = true; + g_extern.libretro_device[1] = RETRO_DEVICE_LIGHTGUN_JUSTIFIER; break; case 'J': - g_extern.has_justifiers = true; + g_extern.libretro_device[1] = RETRO_DEVICE_LIGHTGUN_JUSTIFIERS; break; case 'A': @@ -924,7 +924,7 @@ static void parse_input(int argc, char *argv[]) print_help(); rarch_fail(1, "parse_input()"); } - g_extern.has_dualanalog[port - 1] = true; + g_extern.libretro_device[port - 1] = RETRO_DEVICE_ANALOG; break; case 's': @@ -978,7 +978,7 @@ static void parse_input(int argc, char *argv[]) print_help(); rarch_fail(1, "parse_input()"); } - g_extern.has_mouse[port - 1] = true; + g_extern.libretro_device[port - 1] = RETRO_DEVICE_MOUSE; break; case 'N': @@ -989,11 +989,11 @@ static void parse_input(int argc, char *argv[]) print_help(); rarch_fail(1, "parse_input()"); } - g_extern.disconnect_device[port - 1] = true; + g_extern.libretro_device[port - 1] = RETRO_DEVICE_NONE; break; case 'p': - g_extern.has_scope = true; + g_extern.libretro_device[1] = RETRO_DEVICE_LIGHTGUN_SUPER_SCOPE; break; case 'c': @@ -1190,42 +1190,47 @@ static void init_controllers(void) { for (unsigned i = 0; i < MAX_PLAYERS; i++) { - if (g_extern.disconnect_device[i]) - { - RARCH_LOG("Disconnecting device from port %u.\n", i + 1); - pretro_set_controller_port_device(i, RETRO_DEVICE_NONE); - } - else if (g_extern.has_dualanalog[i]) - { - RARCH_LOG("Connecting dualanalog to port %u.\n", i + 1); - pretro_set_controller_port_device(i, RETRO_DEVICE_ANALOG); - } - else if (g_extern.has_mouse[i]) - { - RARCH_LOG("Connecting mouse to port %u.\n", i + 1); - pretro_set_controller_port_device(i, RETRO_DEVICE_MOUSE); - } - } + unsigned device = g_extern.libretro_device[i]; - if (g_extern.has_justifier) - { - RARCH_LOG("Connecting Justifier to port 2.\n"); - pretro_set_controller_port_device(1, RETRO_DEVICE_LIGHTGUN_JUSTIFIER); - } - else if (g_extern.has_justifiers) - { - RARCH_LOG("Connecting Justifiers to port 2.\n"); - pretro_set_controller_port_device(1, RETRO_DEVICE_LIGHTGUN_JUSTIFIERS); - } - else if (g_extern.has_multitap) - { - RARCH_LOG("Connecting Multitap to port 2.\n"); - pretro_set_controller_port_device(1, RETRO_DEVICE_JOYPAD_MULTITAP); - } - else if (g_extern.has_scope) - { - RARCH_LOG("Connecting scope to port 2.\n"); - pretro_set_controller_port_device(1, RETRO_DEVICE_LIGHTGUN_SUPER_SCOPE); + // This is default, don't bother. + if (device == RETRO_DEVICE_JOYPAD) + continue; + + pretro_set_controller_port_device(i, device); + + switch (device) + { + case RETRO_DEVICE_NONE: + RARCH_LOG("Disconnecting device from port %u.\n", i + 1); + break; + + case RETRO_DEVICE_ANALOG: + RARCH_LOG("Connecting dualanalog to port %u.\n", i + 1); + break; + + case RETRO_DEVICE_MOUSE: + RARCH_LOG("Connecting mouse to port %u.\n", i + 1); + break; + + case RETRO_DEVICE_LIGHTGUN_JUSTIFIER: + RARCH_LOG("Connecting Justifier to port %u.\n", i + 1); + break; + + case RETRO_DEVICE_LIGHTGUN_JUSTIFIERS: + RARCH_LOG("Connecting Justifiers to port %u.\n", i + 1); + break; + + case RETRO_DEVICE_JOYPAD_MULTITAP: + RARCH_LOG("Connecting Multitap to port %u.\n", i + 1); + break; + + case RETRO_DEVICE_LIGHTGUN_SUPER_SCOPE: + RARCH_LOG("Connecting scope to port %u.\n", i + 1); + break; + + default: + break; + } } } @@ -2744,6 +2749,9 @@ static void init_state(void) g_extern.video_active = true; g_extern.audio_active = true; g_extern.game_type = RARCH_CART_NORMAL; + + for (unsigned i = 0; i < MAX_PLAYERS; i++) + g_extern.libretro_device[i] = RETRO_DEVICE_JOYPAD; } void rarch_main_clear_state(void)