@@ -11,11 +11,14 @@

#include "Common/ChunkFile.h"
#include "Common/CommonTypes.h"
#include "Common/Config/Config.h"
#include "Common/FileUtil.h"
#include "Common/IniFile.h"
#include "Common/Swap.h"
#include "Common/Thread.h"

#include "Core/Config/MainSettings.h"
#include "Core/Config/WiimoteSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/HW/Wiimote.h"
@@ -25,6 +28,7 @@
#include "Core/HW/WiimoteReal/IOLinux.h"
#include "Core/HW/WiimoteReal/IOWin.h"
#include "Core/HW/WiimoteReal/IOhidapi.h"

#include "InputCommon/ControllerInterface/Wiimote/WiimoteController.h"
#include "InputCommon/InputConfig.h"

@@ -78,8 +82,11 @@ static void TryToFillWiimoteSlot(u32 index)
{
std::lock_guard lk(g_wiimotes_mutex);

if (g_wiimotes[index] || WiimoteCommon::GetSource(index) != WiimoteSource::Real)
if (g_wiimotes[index] ||
Config::Get(Config::GetInfoForWiimoteSource(index)) != WiimoteSource::Real)
{
return;
}

// If the pool is empty, attempt to steal from ControllerInterface.
if (s_wiimote_pool.empty())
@@ -531,19 +538,23 @@ static unsigned int CalculateWantedWiimotes()
std::lock_guard lk(g_wiimotes_mutex);
// Figure out how many real Wiimotes are required
unsigned int wanted_wiimotes = 0;
for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)
if (WiimoteCommon::GetSource(i) == WiimoteSource::Real && !g_wiimotes[i])
for (int i = 0; i < MAX_WIIMOTES; ++i)
{
if (Config::Get(Config::GetInfoForWiimoteSource(i)) == WiimoteSource::Real && !g_wiimotes[i])
++wanted_wiimotes;
}
return wanted_wiimotes;
}

static unsigned int CalculateWantedBB()
{
std::lock_guard lk(g_wiimotes_mutex);
unsigned int wanted_bb = 0;
if (WiimoteCommon::GetSource(WIIMOTE_BALANCE_BOARD) == WiimoteSource::Real &&
if (Config::Get(Config::WIIMOTE_BB_SOURCE) == WiimoteSource::Real &&
!g_wiimotes[WIIMOTE_BALANCE_BOARD])
{
++wanted_bb;
}
return wanted_bb;
}

@@ -823,32 +834,6 @@ int Wiimote::GetIndex() const
return m_index;
}

void LoadSettings()
{
std::string ini_filename = File::GetUserPath(D_CONFIG_IDX) + WIIMOTE_INI_NAME ".ini";

IniFile inifile;
inifile.Load(ini_filename);

for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)
{
std::string secname("Wiimote");
secname += static_cast<char>('1' + i);
IniFile::Section& sec = *inifile.GetOrCreateSection(secname);

unsigned int source = 0;
sec.Get("Source", &source, i ? int(WiimoteSource::None) : int(WiimoteSource::Emulated));
WiimoteCommon::SetSource(i, WiimoteSource(source));
}

std::string secname("BalanceBoard");
IniFile::Section& sec = *inifile.GetOrCreateSection(secname);

unsigned int bb_source = 0;
sec.Get("Source", &bb_source, int(WiimoteSource::None));
WiimoteCommon::SetSource(WIIMOTE_BALANCE_BOARD, WiimoteSource(bb_source));
}

// config dialog calls this when some settings change
void Initialize(::Wiimote::InitializeMode init_mode)
{
@@ -924,7 +909,7 @@ void Pause()
// Called from the Wiimote scanner thread (or UI thread on source change)
static bool TryToConnectWiimoteToSlot(std::unique_ptr<Wiimote>& wm, unsigned int i)
{
if (WiimoteCommon::GetSource(i) != WiimoteSource::Real || g_wiimotes[i])
if (Config::Get(Config::GetInfoForWiimoteSource(i)) != WiimoteSource::Real || g_wiimotes[i])
return false;

if (!wm->Connect(i))
@@ -36,6 +36,7 @@
#include "Core/Boot/Boot.h"
#include "Core/Config/MainSettings.h"
#include "Core/Config/SYSCONFSettings.h"
#include "Core/Config/WiimoteSettings.h"
#include "Core/ConfigLoaders/MovieConfigLoader.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
@@ -176,7 +177,7 @@ std::string GetInputDisplay()
s_controllers[i] = ControllerType::GC;
else
s_controllers[i] = ControllerType::None;
s_wiimotes[i] = WiimoteCommon::GetSource(i) != WiimoteSource::None;
s_wiimotes[i] = Config::Get(Config::GetInfoForWiimoteSource(i)) != WiimoteSource::None;
}
}

@@ -513,7 +514,7 @@ void ChangeWiiPads(bool instantly)

for (int i = 0; i < MAX_WIIMOTES; ++i)
{
wiimotes[i] = WiimoteCommon::GetSource(i) != WiimoteSource::None;
wiimotes[i] = Config::Get(Config::GetInfoForWiimoteSource(i)) != WiimoteSource::None;
}

// This is important for Wiimotes, because they can desync easily if they get re-activated
@@ -525,7 +526,8 @@ void ChangeWiiPads(bool instantly)
{
const bool is_using_wiimote = IsUsingWiimote(i);

WiimoteCommon::SetSource(i, is_using_wiimote ? WiimoteSource::Emulated : WiimoteSource::None);
Config::SetCurrent(Config::GetInfoForWiimoteSource(i),
is_using_wiimote ? WiimoteSource::Emulated : WiimoteSource::None);
if (bt != nullptr)
bt->AccessWiimoteByIndex(i)->Activate(is_using_wiimote);
}
@@ -37,6 +37,7 @@
#include "Core/Config/MainSettings.h"
#include "Core/Config/NetplaySettings.h"
#include "Core/Config/SessionSettings.h"
#include "Core/Config/WiimoteSettings.h"
#include "Core/ConfigManager.h"
#include "Core/GeckoCode.h"
#include "Core/HW/EXI/EXI.h"
@@ -1741,8 +1742,8 @@ bool NetPlayClient::StartGame(const std::string& path)

for (unsigned int i = 0; i < 4; ++i)
{
WiimoteCommon::SetSource(i,
m_wiimote_map[i] > 0 ? WiimoteSource::Emulated : WiimoteSource::None);
Config::SetCurrent(Config::GetInfoForWiimoteSource(i),
m_wiimote_map[i] > 0 ? WiimoteSource::Emulated : WiimoteSource::None);
}

// boot game
@@ -176,6 +176,7 @@
<ClInclude Include="Core\Config\SessionSettings.h" />
<ClInclude Include="Core\Config\SYSCONFSettings.h" />
<ClInclude Include="Core\Config\UISettings.h" />
<ClInclude Include="Core\Config\WiimoteSettings.h" />
<ClInclude Include="Core\ConfigLoaders\BaseConfigLoader.h" />
<ClInclude Include="Core\ConfigLoaders\GameConfigLoader.h" />
<ClInclude Include="Core\ConfigLoaders\IsSettingSaveable.h" />
@@ -763,6 +764,7 @@
<ClCompile Include="Core\Config\SessionSettings.cpp" />
<ClCompile Include="Core\Config\SYSCONFSettings.cpp" />
<ClCompile Include="Core\Config\UISettings.cpp" />
<ClCompile Include="Core\Config\WiimoteSettings.cpp" />
<ClCompile Include="Core\ConfigLoaders\BaseConfigLoader.cpp" />
<ClCompile Include="Core\ConfigLoaders\GameConfigLoader.cpp" />
<ClCompile Include="Core\ConfigLoaders\IsSettingSaveable.cpp" />
@@ -17,7 +17,10 @@
#include <map>
#include <optional>

#include "Common/Config/Config.h"

#include "Core/Config/MainSettings.h"
#include "Core/Config/WiimoteSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/HW/Wiimote.h"
@@ -301,9 +304,9 @@ void WiimoteControllersWidget::LoadSettings()
{
for (size_t i = 0; i < m_wiimote_groups.size(); i++)
{
m_wiimote_boxes[i]->setCurrentIndex(int(WiimoteCommon::GetSource(u32(i))));
m_wiimote_boxes[i]->setCurrentIndex(int(Config::Get(Config::GetInfoForWiimoteSource(int(i)))));
}
m_wiimote_real_balance_board->setChecked(WiimoteCommon::GetSource(WIIMOTE_BALANCE_BOARD) ==
m_wiimote_real_balance_board->setChecked(Config::Get(Config::WIIMOTE_BB_SOURCE) ==
WiimoteSource::Real);
m_wiimote_speaker_data->setChecked(Config::Get(Config::MAIN_WIIMOTE_ENABLE_SPEAKER));
m_wiimote_ciface->setChecked(Config::Get(Config::MAIN_CONNECT_WIIMOTES_FOR_CONTROLLER_INTERFACE));
@@ -328,17 +331,15 @@ void WiimoteControllersWidget::SaveSettings()
Config::SetBaseOrCurrent(Config::MAIN_BLUETOOTH_PASSTHROUGH_ENABLED,
m_wiimote_passthrough->isChecked());

WiimoteCommon::SetSource(WIIMOTE_BALANCE_BOARD, m_wiimote_real_balance_board->isChecked() ?
WiimoteSource::Real :
WiimoteSource::None);
const WiimoteSource bb_source =
m_wiimote_real_balance_board->isChecked() ? WiimoteSource::Real : WiimoteSource::None;
Config::SetBaseOrCurrent(Config::WIIMOTE_BB_SOURCE, bb_source);

for (size_t i = 0; i < m_wiimote_groups.size(); i++)
{
const int index = m_wiimote_boxes[i]->currentIndex();
WiimoteCommon::SetSource(u32(i), WiimoteSource(index));
Config::SetBaseOrCurrent(Config::GetInfoForWiimoteSource(int(i)), WiimoteSource(index));
}

UICommon::SaveWiimoteSources();

SConfig::GetInstance().SaveSettings();
}
@@ -39,6 +39,7 @@
#include "Core/CommonTitles.h"
#include "Core/Config/MainSettings.h"
#include "Core/Config/NetplaySettings.h"
#include "Core/Config/WiimoteSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/FreeLookManager.h"
@@ -1735,7 +1736,7 @@ void MainWindow::OnStartRecording()
controllers[i] = Movie::ControllerType::GC;
else
controllers[i] = Movie::ControllerType::None;
wiimotes[i] = WiimoteCommon::GetSource(i) != WiimoteSource::None;
wiimotes[i] = Config::Get(Config::GetInfoForWiimoteSource(i)) != WiimoteSource::None;
}

if (Movie::BeginRecordingInput(controllers, wiimotes))
@@ -1795,7 +1796,7 @@ void MainWindow::ShowTASInput()

for (int i = 0; i < num_wii_controllers; i++)
{
if (WiimoteCommon::GetSource(i) == WiimoteSource::Emulated &&
if (Config::Get(Config::GetInfoForWiimoteSource(i)) == WiimoteSource::Emulated &&
(!Core::IsRunning() || SConfig::GetInstance().bWii))
{
m_wii_tas_input_windows[i]->show();
@@ -108,7 +108,6 @@ void Init()
SConfig::Init();
Discord::Init();
Common::Log::LogManager::Init();
WiimoteReal::LoadSettings();
GCAdapter::Init();
VideoBackendBase::ActivateBackend(Config::Get(Config::MAIN_GFX_BACKEND));

@@ -358,29 +357,6 @@ void SetUserDirectory(std::string custom_path)
File::SetUserPath(D_USER_IDX, std::move(user_path));
}

void SaveWiimoteSources()
{
std::string ini_filename = File::GetUserPath(D_CONFIG_IDX) + WIIMOTE_INI_NAME ".ini";

IniFile inifile;
inifile.Load(ini_filename);

for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)
{
std::string secname("Wiimote");
secname += (char)('1' + i);
IniFile::Section& sec = *inifile.GetOrCreateSection(secname);

sec.Set("Source", int(WiimoteCommon::GetSource(i)));
}

std::string secname("BalanceBoard");
IniFile::Section& sec = *inifile.GetOrCreateSection(secname);
sec.Set("Source", int(WiimoteCommon::GetSource(WIIMOTE_BALANCE_BOARD)));

inifile.Save(ini_filename);
}

bool TriggerSTMPowerEvent()
{
const auto ios = IOS::HLE::GetIOS();
@@ -27,8 +27,6 @@ void SetUserDirectory(std::string custom_path);

bool TriggerSTMPowerEvent();

void SaveWiimoteSources();

// Return a pretty file size string from byte count.
// e.g. 1134278 -> "1.08 MiB"
std::string FormatSize(u64 bytes, int decimals = 2);