frontend: refactor plugin_lib for maemo
[pcsx_rearmed.git] / frontend / menu.c
index 6a07c8c..f07c737 100644 (file)
@@ -30,7 +30,7 @@
 #include "../libpcsxcore/cdrom.h"
 #include "../libpcsxcore/psemu_plugin_defs.h"
 #include "../libpcsxcore/new_dynarec/new_dynarec.h"
-#include "../plugins/dfinput/pad.h"
+#include "../plugins/dfinput/main.h"
 #include "revision.h"
 
 #define MENU_X2 1
@@ -73,7 +73,7 @@ static int last_psx_w, last_psx_h, last_psx_bpp;
 static int scaling, filter, cpu_clock, cpu_clock_st, volume_boost;
 static char rom_fname_reload[MAXPATHLEN];
 static char last_selected_fname[MAXPATHLEN];
-static int warned_about_bios, region, in_type_sel;
+static int warned_about_bios, region, in_type_sel1, in_type_sel2;
 static int memcard1_sel, memcard2_sel;
 int g_opts;
 
@@ -143,19 +143,23 @@ static void menu_sync_config(void)
                Config.PsxAuto = 0;
                Config.PsxType = region - 1;
        }
-       in_type = in_type_sel ? PSE_PAD_TYPE_ANALOGPAD : PSE_PAD_TYPE_STANDARD;
+       switch (in_type_sel1) {
+       case 1:  in_type1 = PSE_PAD_TYPE_ANALOGPAD; break;
+       case 2:  in_type1 = PSE_PAD_TYPE_GUNCON;    break;
+       default: in_type1 = PSE_PAD_TYPE_STANDARD;
+       }
+       switch (in_type_sel2) {
+       case 1:  in_type2 = PSE_PAD_TYPE_ANALOGPAD; break;
+       case 2:  in_type2 = PSE_PAD_TYPE_GUNCON;    break;
+       default: in_type2 = 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
-       pl_rearmed_cbs.gpu_peops.fFrameRateHz = Config.PsxType ? 50.0f : 59.94f;
-       pl_rearmed_cbs.gpu_peops.dwFrameRateTicks =
-               (100000*100 / (unsigned long)(pl_rearmed_cbs.gpu_peops.fFrameRateHz*100));
-
        iVolume = 768 + 128 * volume_boost;
+       pl_timing_prepare(Config.PsxType);
 }
 
 static void menu_set_defconfig(void)
@@ -165,7 +169,7 @@ static void menu_set_defconfig(void)
        volume_boost = 0;
 
        region = 0;
-       in_type_sel = 0;
+       in_type_sel1 = in_type_sel2 = 0;
        in_evdev_allow_abs_only = 0;
        Config.Xa = Config.Cdda = Config.Sio =
        Config.SpuIrq = Config.RCntFix = Config.VSyncWA = 0;
@@ -233,7 +237,8 @@ static const struct {
        CE_INTVAL(state_slot),
        CE_INTVAL(cpu_clock),
        CE_INTVAL(g_opts),
-       CE_INTVAL(in_type_sel),
+       CE_INTVAL(in_type_sel1),
+       CE_INTVAL(in_type_sel2),
        CE_INTVAL_P(frameskip),
        CE_INTVAL_P(gpu_peops.iUseDither),
        CE_INTVAL_P(gpu_peops.dwActFixes),
@@ -708,6 +713,10 @@ me_bind_action emuctrl_actions[] =
        { "Toggle Frameskip ", 1 << SACTION_TOGGLE_FSKIP },
        { "Take Screenshot  ", 1 << SACTION_SCREENSHOT },
        { "Enter Menu       ", 1 << SACTION_ENTER_MENU },
+       { "Gun Trigger      ", 1 << SACTION_GUN_TRIGGER },
+       { "Gun A button     ", 1 << SACTION_GUN_A },
+       { "Gun B button     ", 1 << SACTION_GUN_B },
+       { "Gun Offscreen Trigger", 1 << SACTION_GUN_TRIGGER2 },
        { NULL,                0 }
 };
 
@@ -943,17 +952,25 @@ static int mh_input_rescan(int id, int keys)
        return 0;
 }
 
-static const char *men_in_type_sel[] = { "Standard (SCPH-1080)", "Analog (SCPH-1150)", NULL };
+static const char *men_in_type_sel[] = {
+       "Standard (SCPH-1080)",
+       "Analog (SCPH-1150)",
+       "GunCon",
+       NULL
+};
 static const char h_nub_btns[] = "Experimental, keep this OFF if unsure. Select rescan after change.";
+static const char h_notsgun[] =  "Don't trigger (shoot) when touching screen in gun games.";
 
 static menu_entry e_menu_keyconfig[] =
 {
-       mee_handler_id("Player 1",          MA_CTRL_PLAYER1,    key_config_loop_wrap),
-       mee_handler_id("Player 2",          MA_CTRL_PLAYER2,    key_config_loop_wrap),
-       mee_handler_id("Emulator controls", MA_CTRL_EMU,        key_config_loop_wrap),
+       mee_handler_id("Player 1",              MA_CTRL_PLAYER1,    key_config_loop_wrap),
+       mee_handler_id("Player 2",              MA_CTRL_PLAYER2,    key_config_loop_wrap),
+       mee_handler_id("Emulator/Gun controls", MA_CTRL_EMU,        key_config_loop_wrap),
        mee_label     (""),
-       mee_enum      ("Controller",        0, in_type_sel,     men_in_type_sel),
+       mee_enum      ("Port 1 device",     0, in_type_sel1,    men_in_type_sel),
+       mee_enum      ("Port 2 device",     0, in_type_sel2,    men_in_type_sel),
        mee_onoff_h   ("Nubs as buttons",   0, in_evdev_allow_abs_only, 1, h_nub_btns),
+       mee_onoff_h   ("No TS Gun trigger", 0, g_opts, OPT_TSGUN_NOTRIGGER, h_notsgun),
        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),
@@ -1472,7 +1489,7 @@ static int reset_game(void)
 
 static int reload_plugins(const char *cdimg)
 {
-       pl_fbdev_buf = NULL;
+       pl_vout_buf = NULL;
 
        ClosePlugins();
 
@@ -1936,13 +1953,13 @@ static void menu_leave_emu(void)
        }
 
        memcpy(g_menubg_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h * 2);
-       if (pl_fbdev_buf != NULL && ready_to_go && last_psx_bpp == 16) {
+       if (pl_vout_buf != NULL && ready_to_go && last_psx_bpp == 16) {
                int x = max(0, g_menuscreen_w - last_psx_w);
                int y = max(0, g_menuscreen_h / 2 - last_psx_h / 2);
                int w = min(g_menuscreen_w, last_psx_w);
                int h = min(g_menuscreen_h, last_psx_h);
                u16 *d = (u16 *)g_menubg_ptr + g_menuscreen_w * y + x;
-               u16 *s = pl_fbdev_buf;
+               u16 *s = pl_vout_buf;
 
                for (; h > 0; h--, d += g_menuscreen_w, s += last_psx_w)
                        menu_darken_bg(d, s, w, 0);
@@ -2000,7 +2017,7 @@ void menu_prepare_emu(void)
                        fprintf(stderr, "Warning: GPU_open returned %d\n", ret);
        }
 
-       dfinput_activate(in_type == PSE_PAD_TYPE_ANALOGPAD);
+       dfinput_activate();
 }
 
 void me_update_msg(const char *msg)