From 1a07772c8f31580a017f1b7338fd790849fb675a Mon Sep 17 00:00:00 2001 From: death2droid Date: Sat, 27 Mar 2010 04:21:19 +0000 Subject: [PATCH] Commit some work based off of James333's auto reconnect patch. This still requires more work, like making the option only per Wiimote then rather the first one counting for them all. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5241 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Core/Src/ConfigManager.cpp | 6 ++++ Source/Core/Core/Src/ConfigManager.h | 1 + Source/Core/DolphinWX/Src/Frame.cpp | 36 ++++++++++++------- Source/Plugins/Plugin_Wiimote/Src/Config.cpp | 16 +++++++-- .../Plugin_Wiimote/Src/ConfigBasicDlg.cpp | 14 ++++++-- .../Plugin_Wiimote/Src/ConfigBasicDlg.h | 4 ++- .../Plugin_Wiimote/Src/EmuDefinitions.h | 1 + 7 files changed, 60 insertions(+), 18 deletions(-) diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp index 93512ed18f..29deb8b5eb 100644 --- a/Source/Core/Core/Src/ConfigManager.cpp +++ b/Source/Core/Core/Src/ConfigManager.cpp @@ -248,16 +248,22 @@ void SConfig::LoadSettings() ini.Get("Core", "TLBHack", &m_LocalCoreStartupParameter.iTLBHack, 0); ini.Get("Core", "FrameLimit", &m_Framelimit, 1); // auto frame limit by default + //Wiimote configs + ini.Get("Wiimote", "AutoReconnectRealWiimote", &m_WiiAutoReconnect, false); + // Plugins ini.Get("Core", "GFXPlugin", &m_LocalCoreStartupParameter.m_strVideoPlugin, m_DefaultGFXPlugin.c_str()); ini.Get("Core", "DSPPlugin", &m_LocalCoreStartupParameter.m_strDSPPlugin, m_DefaultDSPPlugin.c_str()); ini.Get("Core", "PadPlugin", &m_LocalCoreStartupParameter.m_strPadPlugin[0], m_DefaultPADPlugin.c_str()); ini.Get("Core", "WiiMotePlugin", &m_LocalCoreStartupParameter.m_strWiimotePlugin[0], m_DefaultWiiMotePlugin.c_str()); + + } m_SYSCONF = new SysConf(); } +// Is this still even needed???? void SConfig::LoadSettingsHLE() { IniFile ini; diff --git a/Source/Core/Core/Src/ConfigManager.h b/Source/Core/Core/Src/ConfigManager.h index 584a8f2542..edfd147311 100644 --- a/Source/Core/Core/Src/ConfigManager.h +++ b/Source/Core/Core/Src/ConfigManager.h @@ -44,6 +44,7 @@ struct SConfig // Wii Devices bool m_WiiSDCard; bool m_WiiKeyboard; + bool m_WiiAutoReconnect; // DSP HLE Audio fix bool m_EnableRE0Fix; diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index 333c5d4f46..9f793393e8 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -173,21 +173,31 @@ CPanel::CPanel( main_frame->bNoWiimoteMsg = false; else { - // The Wiimote has been disconnected, we offer reconnect here - wxMessageDialog *dlg = new wxMessageDialog( - this, - wxString::Format(wxT("Wiimote %i has been disconnected by system.\n") - wxT("Maybe this game doesn't support multi-wiimote,\n") - wxT("or maybe it is due to idle time out or other reason.\n\n") - wxT("Do you want to reconnect immediately?"), lParam + 1), - wxT("Reconnect Wiimote Confirm"), - wxYES_NO | wxSTAY_ON_TOP | wxICON_INFORMATION, //wxICON_QUESTION, - wxDefaultPosition); - - if (dlg->ShowModal() == wxID_YES) + //Auto reconnect if option is turned on. + //TODO: Make this only auto reconnect wiimotes that have the option activated. + if (SConfig::GetInstance().m_WiiAutoReconnect) + { GetUsbPointer()->AccessWiiMote(lParam | 0x100)->Activate(true); + NOTICE_LOG(WIIMOTE, "Wiimote %i has been auto-reconnected...", lParam + 1); + } + else + { + // The Wiimote has been disconnected, we offer reconnect here. + wxMessageDialog *dlg = new wxMessageDialog( + this, + wxString::Format(wxT("Wiimote %i has been disconnected by system.\n") + wxT("Maybe this game doesn't support multi-wiimote,\n") + wxT("or maybe it is due to idle time out or other reason.\n\n") + wxT("Do you want to reconnect immediately?"), lParam + 1), + wxT("Reconnect Wiimote Confirm"), + wxYES_NO | wxSTAY_ON_TOP | wxICON_INFORMATION, //wxICON_QUESTION, + wxDefaultPosition); - dlg->Destroy(); + if (dlg->ShowModal() == wxID_YES) + GetUsbPointer()->AccessWiiMote(lParam | 0x100)->Activate(true); + + dlg->Destroy(); + } } } } diff --git a/Source/Plugins/Plugin_Wiimote/Src/Config.cpp b/Source/Plugins/Plugin_Wiimote/Src/Config.cpp index a667654d9c..7bc16e6ab4 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/Config.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/Config.cpp @@ -295,7 +295,7 @@ void Config::Load() iniFile.Get(SectionName, "TiltPitchSwing", &WiiMoteEmu::WiiMapping[i].Tilt.PitchSwing, false); iniFile.Get(SectionName, "TiltPitchInvert", &WiiMoteEmu::WiiMapping[i].Tilt.PitchInvert, false); WiiMoteEmu::WiiMapping[i].Tilt.PitchRange = (WiiMoteEmu::WiiMapping[i].Tilt.PitchSwing) ? 0 : WiiMoteEmu::WiiMapping[i].Tilt.PitchDegree; - + // StickMapping iniFile.Get(SectionName, "NCStick", &WiiMoteEmu::WiiMapping[i].Stick.NC, WiiMoteEmu::FROM_KEYBOARD); iniFile.Get(SectionName, "CCStickLeft", &WiiMoteEmu::WiiMapping[i].Stick.CCL, WiiMoteEmu::FROM_KEYBOARD); @@ -326,6 +326,14 @@ void Config::Load() iniFile.Get(SectionName, "TriggerType", &WiiMoteEmu::WiiMapping[i].TriggerType, 0); } + iniFile.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "Dolphin.ini").c_str()); + for (int i = 0; i < MAX_WIIMOTES; i++) + { + char SectionName[32]; + sprintf(SectionName, "Wiimote%i", i + 1); + iniFile.Get(SectionName, "AutoReconnectRealWiimote", &WiiMoteEmu::WiiMapping[i].bWiiAutoReconnect, false); + } + Config::LoadIR(); // Load a few screen settings to. If these are added to the DirectX plugin it's probably @@ -386,7 +394,6 @@ void Config::Save() iniFile.Set(SectionName, "Upright", WiiMoteEmu::WiiMapping[i].bUpright); iniFile.Set(SectionName, "ExtensionConnected", WiiMoteEmu::WiiMapping[i].iExtensionConnected); iniFile.Set(SectionName, "MotionPlusConnected", WiiMoteEmu::WiiMapping[i].bMotionPlusConnected); - iniFile.Set(SectionName, "TiltInputWM", WiiMoteEmu::WiiMapping[i].Tilt.InputWM); iniFile.Set(SectionName, "TiltInputNC", WiiMoteEmu::WiiMapping[i].Tilt.InputNC); iniFile.Set(SectionName, "TiltRollDegree", WiiMoteEmu::WiiMapping[i].Tilt.RollDegree); @@ -438,5 +445,10 @@ void Config::Save() iniFile.Set(TmpSection, "IRLevel", iIRLevel); iniFile.Save((std::string(File::GetUserPath(D_CONFIG_IDX)) + "IR Pointer.ini").c_str()); + //Save any options that need to be accessed in Dolphin + iniFile.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "Dolphin.ini").c_str()); + iniFile.Set("Wiimote" , "AutoReconnectRealWiimote", &WiiMoteEmu::WiiMapping[0].bWiiAutoReconnect); + iniFile.Save((std::string(File::GetUserPath(D_CONFIG_IDX)) + "Dolphin.ini").c_str()); + //DEBUG_LOG(WIIMOTE, "Save()"); } diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigBasicDlg.cpp b/Source/Plugins/Plugin_Wiimote/Src/ConfigBasicDlg.cpp index b5314f6ffb..61bf588029 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/ConfigBasicDlg.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/ConfigBasicDlg.cpp @@ -41,7 +41,8 @@ BEGIN_EVENT_TABLE(WiimoteBasicConfigDialog,wxDialog) EVT_CHOICE(IDC_INPUT_SOURCE, WiimoteBasicConfigDialog::GeneralSettingsChanged) EVT_CHECKBOX(IDC_SIDEWAYSWIIMOTE, WiimoteBasicConfigDialog::GeneralSettingsChanged) EVT_CHECKBOX(IDC_UPRIGHTWIIMOTE, WiimoteBasicConfigDialog::GeneralSettingsChanged) - EVT_CHECKBOX(IDC_MOTIONPLUSCONNECTED, WiimoteBasicConfigDialog::GeneralSettingsChanged) + EVT_CHECKBOX(IDC_MOTIONPLUSCONNECTED, WiimoteBasicConfigDialog::GeneralSettingsChanged) + EVT_CHECKBOX(IDC_WIIAUTORECONNECT, WiimoteBasicConfigDialog::GeneralSettingsChanged) EVT_CHOICE(IDC_EXTCONNECTED, WiimoteBasicConfigDialog::GeneralSettingsChanged) // IR cursor EVT_COMMAND_SCROLL(IDS_WIDTH, WiimoteBasicConfigDialog::IRCursorChanged) @@ -138,7 +139,7 @@ void WiimoteBasicConfigDialog::CreateGUIControls() wxArrayString arrayStringFor_source; arrayStringFor_source.Add(wxT("Inactive")); arrayStringFor_source.Add(wxT("Emulated Wiimote")); - arrayStringFor_source.Add(wxT("Real Wiimote")); + arrayStringFor_source.Add(wxT("Real Wiimote")); wxArrayString arrayStringFor_extension; arrayStringFor_extension.Add(wxT("None")); @@ -176,6 +177,9 @@ void WiimoteBasicConfigDialog::CreateGUIControls() m_TextFoundRealWiimote[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Connected to 0 Real Wiimotes")); m_ConnectRealWiimote[i] = new wxButton(m_Controller[i], IDB_REFRESH_REAL, wxT("Refresh Real Wiimotes")); m_ConnectRealWiimote[i]->SetToolTip(wxT("This can only be done when the emulator is paused or stopped.")); + + m_WiiAutoReconnect[i] = new wxCheckBox(m_Controller[i], IDC_WIIAUTORECONNECT, wxT("Auto reconenct wiimote"), wxDefaultPosition, wxSize(-1, -1), 0, wxDefaultValidator); + m_WiiAutoReconnect[i]->SetToolTip(wxT("This makes dolphin automatically reconnect a wiimote when it has being disconnected.\nThis will cause problems when 2 controllers are connected for a 1 player game.")); //IR Pointer m_TextScreenWidth[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Width: 000")); @@ -211,10 +215,12 @@ void WiimoteBasicConfigDialog::CreateGUIControls() m_SizeExtensions[i]->Add(m_WiiMotionPlusConnected[i], 0, wxEXPAND | wxALL, 5); m_SizeExtensions[i]->Add(m_Extension[i], 0, wxEXPAND | wxALL, 5); + m_SizeReal[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Real Wiimote")); m_SizeReal[i]->Add(m_PairUpRealWiimote[i], 0, wxEXPAND | wxALL, 5); m_SizeReal[i]->Add(m_TextFoundRealWiimote[i], 0, wxEXPAND | wxALL, 5); m_SizeReal[i]->Add(m_ConnectRealWiimote[i], 0, wxEXPAND | wxALL, 5); + m_SizeReal[i]->Add(m_WiiAutoReconnect[i], 0, wxEXPAND | wxALL, 5); m_SizerIRPointerWidth[i] = new wxBoxSizer(wxHORIZONTAL); m_SizerIRPointerWidth[i]->Add(m_TextScreenLeft[i], 0, wxEXPAND | (wxTOP), 3); @@ -407,6 +413,9 @@ void WiimoteBasicConfigDialog::GeneralSettingsChanged(wxCommandEvent& event) case IDC_MOTIONPLUSCONNECTED: WiiMoteEmu::WiiMapping[m_Page].bMotionPlusConnected = m_WiiMotionPlusConnected[m_Page]->IsChecked(); break; + case IDC_WIIAUTORECONNECT: + WiiMoteEmu::WiiMapping[m_Page].bWiiAutoReconnect = m_WiiAutoReconnect[m_Page]->IsChecked(); + break; case IDC_EXTCONNECTED: // Disconnect the extension so that the game recognize the change DoExtensionConnectedDisconnected(WiiMoteEmu::EXT_NONE); @@ -483,6 +492,7 @@ void WiimoteBasicConfigDialog::UpdateGUI() m_SidewaysWiimote[m_Page]->SetValue(WiiMoteEmu::WiiMapping[m_Page].bSideways); m_UprightWiimote[m_Page]->SetValue(WiiMoteEmu::WiiMapping[m_Page].bUpright); m_WiiMotionPlusConnected[m_Page]->SetValue(WiiMoteEmu::WiiMapping[m_Page].bMotionPlusConnected); + m_WiiAutoReconnect[m_Page]->SetValue(WiiMoteEmu::WiiMapping[m_Page].bWiiAutoReconnect); m_Extension[m_Page]->SetSelection(WiiMoteEmu::WiiMapping[m_Page].iExtensionConnected); // Update the Wiimote IR pointer calibration diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigBasicDlg.h b/Source/Plugins/Plugin_Wiimote/Src/ConfigBasicDlg.h index 58c4df39b1..44ed22924a 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/ConfigBasicDlg.h +++ b/Source/Plugins/Plugin_Wiimote/Src/ConfigBasicDlg.h @@ -83,7 +83,8 @@ class WiimoteBasicConfigDialog : public wxDialog *m_WiiMotionPlusConnected[MAX_WIIMOTES], *m_CheckAR43[MAX_WIIMOTES], *m_CheckAR169[MAX_WIIMOTES], - *m_Crop[MAX_WIIMOTES]; + *m_Crop[MAX_WIIMOTES], + *m_WiiAutoReconnect[MAX_WIIMOTES]; wxStaticText *m_TextScreenWidth[MAX_WIIMOTES], *m_TextScreenHeight[MAX_WIIMOTES], @@ -127,6 +128,7 @@ class WiimoteBasicConfigDialog : public wxDialog IDC_SIDEWAYSWIIMOTE, IDC_UPRIGHTWIIMOTE, IDC_MOTIONPLUSCONNECTED, + IDC_WIIAUTORECONNECT, IDC_EXTCONNECTED, // Real diff --git a/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h b/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h index d6758a8fe2..9fa5ec8687 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h +++ b/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h @@ -295,6 +295,7 @@ struct CONTROLLER_MAPPING_WII // WII PAD MAPPING bool bSideways; bool bUpright; bool bMotionPlusConnected; + bool bWiiAutoReconnect; int iExtensionConnected; STiltMapping Tilt;