Config: Port WiimoteEnableSpeaker setting to new config system.

This commit is contained in:
Admiral H. Curtiss 2022-01-06 05:32:26 +01:00
parent 8c554d2e64
commit 2354fb4466
No known key found for this signature in database
GPG Key ID: F051B4C4044F33FB
10 changed files with 56 additions and 12 deletions

View File

@ -108,6 +108,7 @@ bool IsSettingSaveable(const Config::Location& config_location)
&Config::MAIN_WII_SD_CARD.GetLocation(), &Config::MAIN_WII_SD_CARD.GetLocation(),
&Config::MAIN_WII_KEYBOARD.GetLocation(), &Config::MAIN_WII_KEYBOARD.GetLocation(),
&Config::MAIN_WIIMOTE_CONTINUOUS_SCANNING.GetLocation(), &Config::MAIN_WIIMOTE_CONTINUOUS_SCANNING.GetLocation(),
&Config::MAIN_WIIMOTE_ENABLE_SPEAKER.GetLocation(),
// UI.General // UI.General

View File

@ -111,7 +111,6 @@ void SConfig::SaveCoreSettings(IniFile& ini)
{ {
core->Set(fmt::format("SIDevice{}", i), m_SIDevice[i]); core->Set(fmt::format("SIDevice{}", i), m_SIDevice[i]);
} }
core->Set("WiimoteEnableSpeaker", m_WiimoteEnableSpeaker);
core->Set("WiimoteControllerInterface", connect_wiimotes_for_ciface); core->Set("WiimoteControllerInterface", connect_wiimotes_for_ciface);
core->Set("MMU", bMMU); core->Set("MMU", bMMU);
} }
@ -140,7 +139,6 @@ void SConfig::LoadCoreSettings(IniFile& ini)
core->Get(fmt::format("SIDevice{}", i), &m_SIDevice[i], core->Get(fmt::format("SIDevice{}", i), &m_SIDevice[i],
(i == 0) ? SerialInterface::SIDEVICE_GC_CONTROLLER : SerialInterface::SIDEVICE_NONE); (i == 0) ? SerialInterface::SIDEVICE_GC_CONTROLLER : SerialInterface::SIDEVICE_NONE);
} }
core->Get("WiimoteEnableSpeaker", &m_WiimoteEnableSpeaker, false);
core->Get("WiimoteControllerInterface", &connect_wiimotes_for_ciface, false); core->Get("WiimoteControllerInterface", &connect_wiimotes_for_ciface, false);
core->Get("MMU", &bMMU, bMMU); core->Get("MMU", &bMMU, bMMU);
core->Get("BBDumpPort", &iBBDumpPort, -1); core->Get("BBDumpPort", &iBBDumpPort, -1);

View File

@ -50,7 +50,6 @@ struct BootParameters;
struct SConfig struct SConfig
{ {
// Wii Devices // Wii Devices
bool m_WiimoteEnableSpeaker;
bool connect_wiimotes_for_ciface; bool connect_wiimotes_for_ciface;
// Settings // Settings

View File

@ -73,7 +73,7 @@ void stopdamnwav()
void SpeakerLogic::SpeakerData(const u8* data, int length, float speaker_pan) void SpeakerLogic::SpeakerData(const u8* data, int length, float speaker_pan)
{ {
// TODO: should we still process samples for the decoder state? // TODO: should we still process samples for the decoder state?
if (!SConfig::GetInstance().m_WiimoteEnableSpeaker) if (!m_speaker_enabled)
return; return;
if (reg_data.sample_rate == 0 || length == 0) if (reg_data.sample_rate == 0 || length == 0)
@ -186,6 +186,11 @@ void SpeakerLogic::DoState(PointerWrap& p)
p.Do(reg_data); p.Do(reg_data);
} }
void SpeakerLogic::SetSpeakerEnabled(bool enabled)
{
m_speaker_enabled = enabled;
}
int SpeakerLogic::BusRead(u8 slave_addr, u8 addr, int count, u8* data_out) int SpeakerLogic::BusRead(u8 slave_addr, u8 addr, int count, u8* data_out)
{ {
if (I2C_ADDR != slave_addr) if (I2C_ADDR != slave_addr)

View File

@ -29,6 +29,8 @@ public:
void Reset(); void Reset();
void DoState(PointerWrap& p); void DoState(PointerWrap& p);
void SetSpeakerEnabled(bool enabled);
private: private:
// Pan is -1.0 to +1.0 // Pan is -1.0 to +1.0
void SpeakerData(const u8* data, int length, float speaker_pan); void SpeakerData(const u8* data, int length, float speaker_pan);
@ -71,6 +73,8 @@ private:
ADPCMState adpcm_state{}; ADPCMState adpcm_state{};
ControllerEmu::SettingValue<double> m_speaker_pan_setting; ControllerEmu::SettingValue<double> m_speaker_pan_setting;
bool m_speaker_enabled = false;
}; };
} // namespace WiimoteEmu } // namespace WiimoteEmu

View File

@ -17,8 +17,7 @@
#include "Common/MathUtil.h" #include "Common/MathUtil.h"
#include "Common/MsgHandler.h" #include "Common/MsgHandler.h"
#include "Core/Config/SYSCONFSettings.h" #include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h" #include "Core/Core.h"
#include "Core/HW/Wiimote.h" #include "Core/HW/Wiimote.h"
#include "Core/Movie.h" #include "Core/Movie.h"
@ -297,6 +296,14 @@ Wiimote::Wiimote(const unsigned int index) : m_index(index)
m_hotkeys->AddInput(_trans("Upright Hold"), false); m_hotkeys->AddInput(_trans("Upright Hold"), false);
Reset(); Reset();
m_config_changed_callback_id = Config::AddConfigChangedCallback([this] { RefreshConfig(); });
RefreshConfig();
}
Wiimote::~Wiimote()
{
Config::RemoveConfigChangedCallback(m_config_changed_callback_id);
} }
std::string Wiimote::GetName() const std::string Wiimote::GetName() const
@ -726,6 +733,11 @@ void Wiimote::SetRumble(bool on)
m_rumble->controls.front()->control_ref->State(on); m_rumble->controls.front()->control_ref->State(on);
} }
void Wiimote::RefreshConfig()
{
m_speaker_logic.SetSpeakerEnabled(Config::Get(Config::MAIN_WIIMOTE_ENABLE_SPEAKER));
}
void Wiimote::StepDynamics() void Wiimote::StepDynamics()
{ {
EmulateSwing(&m_swing_state, m_swing, 1.f / ::Wiimote::UPDATE_FREQ); EmulateSwing(&m_swing_state, m_swing, 1.f / ::Wiimote::UPDATE_FREQ);

View File

@ -109,6 +109,7 @@ public:
static constexpr u16 BUTTON_HOME = 0x8000; static constexpr u16 BUTTON_HOME = 0x8000;
explicit Wiimote(unsigned int index); explicit Wiimote(unsigned int index);
~Wiimote();
std::string GetName() const override; std::string GetName() const override;
void LoadDefaults(const ControllerInterface& ciface) override; void LoadDefaults(const ControllerInterface& ciface) override;
@ -144,6 +145,8 @@ private:
// This is the region exposed over bluetooth: // This is the region exposed over bluetooth:
static constexpr int EEPROM_FREE_SIZE = 0x1700; static constexpr int EEPROM_FREE_SIZE = 0x1700;
void RefreshConfig();
void StepDynamics(); void StepDynamics();
void UpdateButtonsStatus(); void UpdateButtonsStatus();
@ -297,5 +300,7 @@ private:
PositionalState m_shake_state; PositionalState m_shake_state;
IMUCursorState m_imu_cursor_state; IMUCursorState m_imu_cursor_state;
size_t m_config_changed_callback_id;
}; };
} // namespace WiimoteEmu } // namespace WiimoteEmu

View File

@ -142,7 +142,16 @@ void AddWiimoteToPool(std::unique_ptr<Wiimote> wiimote)
s_wiimote_pool.emplace_back(WiimotePoolEntry{std::move(wiimote)}); s_wiimote_pool.emplace_back(WiimotePoolEntry{std::move(wiimote)});
} }
Wiimote::Wiimote() = default; Wiimote::Wiimote()
{
m_config_changed_callback_id = Config::AddConfigChangedCallback([this] { RefreshConfig(); });
RefreshConfig();
}
Wiimote::~Wiimote()
{
Config::RemoveConfigChangedCallback(m_config_changed_callback_id);
}
void Wiimote::Shutdown() void Wiimote::Shutdown()
{ {
@ -263,7 +272,7 @@ void Wiimote::InterruptDataOutput(const u8* data, const u32 size)
} }
} }
else if (rpt[1] == u8(OutputReportID::SpeakerData) && else if (rpt[1] == u8(OutputReportID::SpeakerData) &&
(!SConfig::GetInstance().m_WiimoteEnableSpeaker || !m_speaker_enable || m_speaker_mute)) (!m_speaker_enabled_in_dolphin_config || !m_speaker_enable || m_speaker_mute))
{ {
rpt.resize(3); rpt.resize(3);
// Translate undesired speaker data reports into rumble reports. // Translate undesired speaker data reports into rumble reports.
@ -804,6 +813,11 @@ void Wiimote::ThreadFunc()
DisconnectInternal(); DisconnectInternal();
} }
void Wiimote::RefreshConfig()
{
m_speaker_enabled_in_dolphin_config = Config::Get(Config::MAIN_WIIMOTE_ENABLE_SPEAKER);
}
int Wiimote::GetIndex() const int Wiimote::GetIndex() const
{ {
return m_index; return m_index;

View File

@ -51,7 +51,7 @@ public:
Wiimote(Wiimote&&) = delete; Wiimote(Wiimote&&) = delete;
Wiimote& operator=(Wiimote&&) = delete; Wiimote& operator=(Wiimote&&) = delete;
virtual ~Wiimote() {} ~Wiimote() override;
// This needs to be called in derived destructors! // This needs to be called in derived destructors!
void Shutdown(); void Shutdown();
@ -125,6 +125,8 @@ private:
void ThreadFunc(); void ThreadFunc();
void RefreshConfig();
bool m_is_linked = false; bool m_is_linked = false;
// We track the speaker state to convert unnecessary speaker data into rumble reports. // We track the speaker state to convert unnecessary speaker data into rumble reports.
@ -144,6 +146,10 @@ private:
Common::SPSCQueue<Report> m_read_reports; Common::SPSCQueue<Report> m_read_reports;
Common::SPSCQueue<Report> m_write_reports; Common::SPSCQueue<Report> m_write_reports;
bool m_speaker_enabled_in_dolphin_config = false;
size_t m_config_changed_callback_id;
}; };
class WiimoteScannerBackend class WiimoteScannerBackend
@ -209,5 +215,4 @@ void InitAdapterClass();
void HandleWiimotesInControllerInterfaceSettingChange(); void HandleWiimotesInControllerInterfaceSettingChange();
void PopulateDevices(); void PopulateDevices();
void ProcessWiimotePool(); void ProcessWiimotePool();
} // namespace WiimoteReal } // namespace WiimoteReal

View File

@ -305,7 +305,7 @@ void WiimoteControllersWidget::LoadSettings()
} }
m_wiimote_real_balance_board->setChecked(WiimoteCommon::GetSource(WIIMOTE_BALANCE_BOARD) == m_wiimote_real_balance_board->setChecked(WiimoteCommon::GetSource(WIIMOTE_BALANCE_BOARD) ==
WiimoteSource::Real); WiimoteSource::Real);
m_wiimote_speaker_data->setChecked(SConfig::GetInstance().m_WiimoteEnableSpeaker); m_wiimote_speaker_data->setChecked(Config::Get(Config::MAIN_WIIMOTE_ENABLE_SPEAKER));
m_wiimote_ciface->setChecked(SConfig::GetInstance().connect_wiimotes_for_ciface); m_wiimote_ciface->setChecked(SConfig::GetInstance().connect_wiimotes_for_ciface);
m_wiimote_continuous_scanning->setChecked(Config::Get(Config::MAIN_WIIMOTE_CONTINUOUS_SCANNING)); m_wiimote_continuous_scanning->setChecked(Config::Get(Config::MAIN_WIIMOTE_CONTINUOUS_SCANNING));
@ -319,7 +319,8 @@ void WiimoteControllersWidget::LoadSettings()
void WiimoteControllersWidget::SaveSettings() void WiimoteControllersWidget::SaveSettings()
{ {
SConfig::GetInstance().m_WiimoteEnableSpeaker = m_wiimote_speaker_data->isChecked(); Config::SetBaseOrCurrent(Config::MAIN_WIIMOTE_ENABLE_SPEAKER,
m_wiimote_speaker_data->isChecked());
SConfig::GetInstance().connect_wiimotes_for_ciface = m_wiimote_ciface->isChecked(); SConfig::GetInstance().connect_wiimotes_for_ciface = m_wiimote_ciface->isChecked();
Config::SetBaseOrCurrent(Config::MAIN_WIIMOTE_CONTINUOUS_SCANNING, Config::SetBaseOrCurrent(Config::MAIN_WIIMOTE_CONTINUOUS_SCANNING,
m_wiimote_continuous_scanning->isChecked()); m_wiimote_continuous_scanning->isChecked());