Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Config: Add an ini setting to control real Wii Remote report duplication. #9846

Merged
merged 1 commit into from Jul 13, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions Source/Core/Core/Config/MainSettings.cpp
Expand Up @@ -109,6 +109,8 @@ const Info<DiscIO::Region> MAIN_FALLBACK_REGION{{System::Main, "Core", "Fallback
const Info<bool> MAIN_AUTO_DISC_CHANGE{{System::Main, "Core", "AutoDiscChange"}, false};
const Info<bool> MAIN_ALLOW_SD_WRITES{{System::Main, "Core", "WiiSDCardAllowWrites"}, true};
const Info<bool> MAIN_ENABLE_SAVESTATES{{System::Main, "Core", "EnableSaveStates"}, false};
const Info<bool> MAIN_REAL_WII_REMOTE_REPEAT_REPORTS{
{System::Main, "Core", "RealWiiRemoteRepeatReports"}, true};

// Main.Display

Expand Down
1 change: 1 addition & 0 deletions Source/Core/Core/Config/MainSettings.h
Expand Up @@ -87,6 +87,7 @@ extern const Info<bool> MAIN_AUTO_DISC_CHANGE;
extern const Info<bool> MAIN_ALLOW_SD_WRITES;
extern const Info<bool> MAIN_ENABLE_SAVESTATES;
extern const Info<DiscIO::Region> MAIN_FALLBACK_REGION;
extern const Info<bool> MAIN_REAL_WII_REMOTE_REPEAT_REPORTS;

// Main.DSP

Expand Down
7 changes: 4 additions & 3 deletions Source/Core/Core/ConfigLoaders/IsSettingSaveable.cpp
Expand Up @@ -26,7 +26,7 @@ bool IsSettingSaveable(const Config::Location& config_location)

if (config_location.system == Config::System::Main)
{
for (const std::string& section :
for (const std::string_view section :
{"NetPlay", "General", "Display", "Network", "Analytics", "AndroidOverlayButtons"})
{
if (config_location.section == section)
Expand All @@ -47,7 +47,7 @@ bool IsSettingSaveable(const Config::Location& config_location)
}
}

static constexpr std::array<const Config::Location*, 17> s_setting_saveable = {
static constexpr auto s_setting_saveable = {
// Main.Core

&Config::MAIN_DEFAULT_ISO.GetLocation(),
Expand All @@ -63,6 +63,7 @@ bool IsSettingSaveable(const Config::Location& config_location)
&Config::MAIN_GFX_BACKEND.GetLocation(),
&Config::MAIN_ENABLE_SAVESTATES.GetLocation(),
&Config::MAIN_FALLBACK_REGION.GetLocation(),
&Config::MAIN_REAL_WII_REMOTE_REPEAT_REPORTS.GetLocation(),

// Main.Interface

Expand All @@ -78,7 +79,7 @@ bool IsSettingSaveable(const Config::Location& config_location)
&Config::MAIN_USE_DISCORD_PRESENCE.GetLocation(),
};

return std::any_of(s_setting_saveable.cbegin(), s_setting_saveable.cend(),
return std::any_of(begin(s_setting_saveable), end(s_setting_saveable),
[&config_location](const Config::Location* location) {
return *location == config_location;
});
Expand Down
8 changes: 7 additions & 1 deletion Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp
Expand Up @@ -16,6 +16,7 @@
#include "Common/IniFile.h"
#include "Common/Swap.h"
#include "Common/Thread.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/HW/Wiimote.h"
Expand Down Expand Up @@ -437,12 +438,17 @@ void Wiimote::Update()
{
// Wii remotes send input at 200hz once a Wii enables "sniff mode" on the connection.
// PC bluetooth stacks do not enable sniff mode causing remotes to send input at only 100hz.
//
// Commercial games do not send speaker data unless input rates approach 200hz.
// Some games will also present input issues.
// e.g. Super Mario Galaxy's star cursor drops in and out.
//
// If we want speaker data we must pretend input is at 200hz.
// We duplicate data reports to accomplish this.
// Unfortunately this breaks detection of motion gestures in some games.
// e.g. Sonic and the Secret Rings, Jett Rocket
jordan-woyak marked this conversation as resolved.
Show resolved Hide resolved
const bool repeat_reports_to_maintain_200hz = SConfig::GetInstance().m_WiimoteEnableSpeaker;
const bool repeat_reports_to_maintain_200hz =
Config::Get(Config::MAIN_REAL_WII_REMOTE_REPEAT_REPORTS);

const Report& rpt = ProcessReadQueue(repeat_reports_to_maintain_200hz);

Expand Down