aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/main.c2
-rw-r--r--frontend/menu.c24
-rw-r--r--frontend/pandora.c3
-rw-r--r--frontend/pandora.h2
-rw-r--r--frontend/plat_dummy.c4
-rw-r--r--frontend/plat_omap.c4
6 files changed, 35 insertions, 4 deletions
diff --git a/frontend/main.c b/frontend/main.c
index 0ed66d5..1030a32 100644
--- a/frontend/main.c
+++ b/frontend/main.c
@@ -291,7 +291,7 @@ int main(int argc, char *argv[])
// frontend stuff
in_init();
- in_probe();
+ //in_probe();
plat_init();
menu_init();
diff --git a/frontend/menu.c b/frontend/menu.c
index 0e5550d..546125f 100644
--- a/frontend/menu.c
+++ b/frontend/menu.c
@@ -20,9 +20,12 @@
#include "plugin.h"
#include "plugin_lib.h"
#include "omap.h"
+#include "pandora.h"
#include "pcnt.h"
#include "arm_utils.h"
#include "common/plat.h"
+#include "common/input.h"
+#include "linux/in_evdev.h"
#include "../libpcsxcore/misc.h"
#include "../libpcsxcore/cdrom.h"
#include "../libpcsxcore/psemu_plugin_defs.h"
@@ -136,12 +139,18 @@ static int emu_save_load_game(int load, int unused)
// propagate menu settings to the emu vars
static void menu_sync_config(void)
{
+ static int allow_abs_only_old;
+
Config.PsxAuto = 1;
if (region > 0) {
Config.PsxAuto = 0;
Config.PsxType = region - 1;
}
in_type = in_type_sel ? PSE_PAD_TYPE_ANALOGPAD : PSE_PAD_TYPE_STANDARD;
+ if (in_evdev_allow_abs_only != allow_abs_only_old) {
+ pandora_rescan_inputs();
+ allow_abs_only_old = in_evdev_allow_abs_only;
+ }
pl_frame_interval = Config.PsxType ? 20000 : 16667;
// used by P.E.Op.S. frameskip code
@@ -156,6 +165,7 @@ static void menu_set_defconfig(void)
region = 0;
in_type_sel = 0;
+ in_evdev_allow_abs_only = 0;
Config.Xa = Config.Cdda = Config.Sio =
Config.SpuIrq = Config.RCntFix = Config.VSyncWA = 0;
@@ -227,6 +237,7 @@ static const struct {
CE_INTVAL_V(iSPUIRQWait, 2),
CE_INTVAL(iUseTimer),
CE_INTVAL(warned_about_bios),
+ CE_INTVAL(in_evdev_allow_abs_only),
};
static char *get_cd_label(void)
@@ -841,6 +852,7 @@ static void keys_load_all(const char *cfg)
lprintf("config: unhandled action \"%s\"\n", act);
}
}
+ in_clean_binds();
}
static int key_config_loop_wrap(int id, int keys)
@@ -894,7 +906,17 @@ static int mh_savecfg(int id, int keys)
return 1;
}
+static int mh_input_rescan(int id, int keys)
+{
+ //menu_sync_config();
+ pandora_rescan_inputs();
+ me_update_msg("rescan complete.");
+
+ return 0;
+}
+
static const char *men_in_type_sel[] = { "Standard (SCPH-1080)", "Analog (SCPH-1150)", NULL };
+static const char h_nub_btns[] = "Experimental, keep this OFF if unsure. Select rescan after change.";
static menu_entry e_menu_keyconfig[] =
{
@@ -903,8 +925,10 @@ static menu_entry e_menu_keyconfig[] =
mee_handler_id("Emulator controls", MA_CTRL_EMU, key_config_loop_wrap),
mee_label (""),
mee_enum ("Controller", 0, in_type_sel, men_in_type_sel),
+ mee_onoff_h ("Nubs as buttons", 0, in_evdev_allow_abs_only, 1, h_nub_btns),
mee_cust_nosave("Save global config", MA_OPT_SAVECFG, mh_savecfg, mgn_saveloadcfg),
mee_cust_nosave("Save cfg for loaded game", MA_OPT_SAVECFG_GAME, mh_savecfg, mgn_saveloadcfg),
+ mee_handler ("Rescan devices", mh_input_rescan),
mee_label (""),
mee_label ("Input devices:"),
mee_label_mk (MA_CTRL_DEV_FIRST, mgn_dev_name),
diff --git a/frontend/pandora.c b/frontend/pandora.c
index b4e3a42..b82c78a 100644
--- a/frontend/pandora.c
+++ b/frontend/pandora.c
@@ -151,8 +151,9 @@ void in_update_analogs(void)
//printf("%4d %4d %4d %4d\n", in_a1[0], in_a1[1], in_a2[0], in_a2[1]);
}
-int pandora_init(void)
+int pandora_rescan_inputs(void)
{
+ in_probe();
in_set_config(in_name_to_id("evdev:gpio-keys"), IN_CFG_KEY_NAMES,
pandora_gpio_keys, sizeof(pandora_gpio_keys));
diff --git a/frontend/pandora.h b/frontend/pandora.h
index 9bab84f..9274d4d 100644
--- a/frontend/pandora.h
+++ b/frontend/pandora.h
@@ -1 +1 @@
-int pandora_init(void);
+int pandora_rescan_inputs(void);
diff --git a/frontend/plat_dummy.c b/frontend/plat_dummy.c
index 6cbe7f8..a43662b 100644
--- a/frontend/plat_dummy.c
+++ b/frontend/plat_dummy.c
@@ -54,3 +54,7 @@ void bgr888_to_rgb888(void *d, void *s, int len)
void in_update_analogs(void)
{
}
+
+void pandora_rescan_inputs(void)
+{
+}
diff --git a/frontend/plat_omap.c b/frontend/plat_omap.c
index b0490c7..516e06f 100644
--- a/frontend/plat_omap.c
+++ b/frontend/plat_omap.c
@@ -169,7 +169,9 @@ void plat_init(void)
}
g_menubg_ptr = temp_frame;
- pandora_init();
+ // hmh
+ pandora_rescan_inputs();
+
return;
fail1: