mirror of
https://github.com/yuzu-emu/yuzu.git
synced 2024-11-14 08:44:58 +00:00
Merge pull request #12823 from german77/set-audio
service: set: Implement more Qlaunch Settings
This commit is contained in:
commit
820f1c8a16
9 changed files with 353 additions and 61 deletions
|
@ -4,6 +4,8 @@
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/hle/service/audio/audctl.h"
|
#include "core/hle/service/audio/audctl.h"
|
||||||
#include "core/hle/service/ipc_helpers.h"
|
#include "core/hle/service/ipc_helpers.h"
|
||||||
|
#include "core/hle/service/set/system_settings_server.h"
|
||||||
|
#include "core/hle/service/sm/sm.h"
|
||||||
|
|
||||||
namespace Service::Audio {
|
namespace Service::Audio {
|
||||||
|
|
||||||
|
@ -19,15 +21,15 @@ AudCtl::AudCtl(Core::System& system_) : ServiceFramework{system_, "audctl"} {
|
||||||
{6, nullptr, "IsTargetConnected"},
|
{6, nullptr, "IsTargetConnected"},
|
||||||
{7, nullptr, "SetDefaultTarget"},
|
{7, nullptr, "SetDefaultTarget"},
|
||||||
{8, nullptr, "GetDefaultTarget"},
|
{8, nullptr, "GetDefaultTarget"},
|
||||||
{9, nullptr, "GetAudioOutputMode"},
|
{9, &AudCtl::GetAudioOutputMode, "GetAudioOutputMode"},
|
||||||
{10, nullptr, "SetAudioOutputMode"},
|
{10, &AudCtl::SetAudioOutputMode, "SetAudioOutputMode"},
|
||||||
{11, nullptr, "SetForceMutePolicy"},
|
{11, nullptr, "SetForceMutePolicy"},
|
||||||
{12, &AudCtl::GetForceMutePolicy, "GetForceMutePolicy"},
|
{12, &AudCtl::GetForceMutePolicy, "GetForceMutePolicy"},
|
||||||
{13, &AudCtl::GetOutputModeSetting, "GetOutputModeSetting"},
|
{13, &AudCtl::GetOutputModeSetting, "GetOutputModeSetting"},
|
||||||
{14, nullptr, "SetOutputModeSetting"},
|
{14, &AudCtl::SetOutputModeSetting, "SetOutputModeSetting"},
|
||||||
{15, nullptr, "SetOutputTarget"},
|
{15, nullptr, "SetOutputTarget"},
|
||||||
{16, nullptr, "SetInputTargetForceEnabled"},
|
{16, nullptr, "SetInputTargetForceEnabled"},
|
||||||
{17, nullptr, "SetHeadphoneOutputLevelMode"},
|
{17, &AudCtl::SetHeadphoneOutputLevelMode, "SetHeadphoneOutputLevelMode"},
|
||||||
{18, &AudCtl::GetHeadphoneOutputLevelMode, "GetHeadphoneOutputLevelMode"},
|
{18, &AudCtl::GetHeadphoneOutputLevelMode, "GetHeadphoneOutputLevelMode"},
|
||||||
{19, nullptr, "AcquireAudioVolumeUpdateEventForPlayReport"},
|
{19, nullptr, "AcquireAudioVolumeUpdateEventForPlayReport"},
|
||||||
{20, nullptr, "AcquireAudioOutputDeviceUpdateEventForPlayReport"},
|
{20, nullptr, "AcquireAudioOutputDeviceUpdateEventForPlayReport"},
|
||||||
|
@ -40,7 +42,7 @@ AudCtl::AudCtl(Core::System& system_) : ServiceFramework{system_, "audctl"} {
|
||||||
{27, nullptr, "SetVolumeMappingTableForDev"},
|
{27, nullptr, "SetVolumeMappingTableForDev"},
|
||||||
{28, nullptr, "GetAudioOutputChannelCountForPlayReport"},
|
{28, nullptr, "GetAudioOutputChannelCountForPlayReport"},
|
||||||
{29, nullptr, "BindAudioOutputChannelCountUpdateEventForPlayReport"},
|
{29, nullptr, "BindAudioOutputChannelCountUpdateEventForPlayReport"},
|
||||||
{30, nullptr, "SetSpeakerAutoMuteEnabled"},
|
{30, &AudCtl::SetSpeakerAutoMuteEnabled, "SetSpeakerAutoMuteEnabled"},
|
||||||
{31, &AudCtl::IsSpeakerAutoMuteEnabled, "IsSpeakerAutoMuteEnabled"},
|
{31, &AudCtl::IsSpeakerAutoMuteEnabled, "IsSpeakerAutoMuteEnabled"},
|
||||||
{32, nullptr, "GetActiveOutputTarget"},
|
{32, nullptr, "GetActiveOutputTarget"},
|
||||||
{33, nullptr, "GetTargetDeviceInfo"},
|
{33, nullptr, "GetTargetDeviceInfo"},
|
||||||
|
@ -68,6 +70,9 @@ AudCtl::AudCtl(Core::System& system_) : ServiceFramework{system_, "audctl"} {
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
|
||||||
|
m_set_sys =
|
||||||
|
system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
AudCtl::~AudCtl() = default;
|
AudCtl::~AudCtl() = default;
|
||||||
|
@ -96,6 +101,33 @@ void AudCtl::GetTargetVolumeMax(HLERequestContext& ctx) {
|
||||||
rb.Push(target_max_volume);
|
rb.Push(target_max_volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudCtl::GetAudioOutputMode(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto target{rp.PopEnum<Set::AudioOutputModeTarget>()};
|
||||||
|
|
||||||
|
Set::AudioOutputMode output_mode{};
|
||||||
|
const auto result = m_set_sys->GetAudioOutputMode(output_mode, target);
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, target={}, output_mode={}", target, output_mode);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(result);
|
||||||
|
rb.PushEnum(output_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudCtl::SetAudioOutputMode(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto target{rp.PopEnum<Set::AudioOutputModeTarget>()};
|
||||||
|
const auto output_mode{rp.PopEnum<Set::AudioOutputMode>()};
|
||||||
|
|
||||||
|
const auto result = m_set_sys->SetAudioOutputMode(target, output_mode);
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, target={}, output_mode={}", target, output_mode);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(result);
|
||||||
|
}
|
||||||
|
|
||||||
void AudCtl::GetForceMutePolicy(HLERequestContext& ctx) {
|
void AudCtl::GetForceMutePolicy(HLERequestContext& ctx) {
|
||||||
LOG_WARNING(Audio, "(STUBBED) called");
|
LOG_WARNING(Audio, "(STUBBED) called");
|
||||||
|
|
||||||
|
@ -106,13 +138,31 @@ void AudCtl::GetForceMutePolicy(HLERequestContext& ctx) {
|
||||||
|
|
||||||
void AudCtl::GetOutputModeSetting(HLERequestContext& ctx) {
|
void AudCtl::GetOutputModeSetting(HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
const auto value = rp.Pop<u32>();
|
const auto target{rp.PopEnum<Set::AudioOutputModeTarget>()};
|
||||||
|
|
||||||
LOG_WARNING(Audio, "(STUBBED) called, value={}", value);
|
LOG_WARNING(Audio, "(STUBBED) called, target={}", target);
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 3};
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
rb.PushEnum(AudioOutputMode::PcmAuto);
|
rb.PushEnum(Set::AudioOutputMode::ch_7_1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudCtl::SetOutputModeSetting(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto target{rp.PopEnum<Set::AudioOutputModeTarget>()};
|
||||||
|
const auto output_mode{rp.PopEnum<Set::AudioOutputMode>()};
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, target={}, output_mode={}", target, output_mode);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudCtl::SetHeadphoneOutputLevelMode(HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Audio, "(STUBBED) called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudCtl::GetHeadphoneOutputLevelMode(HLERequestContext& ctx) {
|
void AudCtl::GetHeadphoneOutputLevelMode(HLERequestContext& ctx) {
|
||||||
|
@ -123,14 +173,28 @@ void AudCtl::GetHeadphoneOutputLevelMode(HLERequestContext& ctx) {
|
||||||
rb.PushEnum(HeadphoneOutputLevelMode::Normal);
|
rb.PushEnum(HeadphoneOutputLevelMode::Normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudCtl::SetSpeakerAutoMuteEnabled(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto is_speaker_auto_mute_enabled{rp.Pop<bool>()};
|
||||||
|
|
||||||
|
LOG_WARNING(Audio, "(STUBBED) called, is_speaker_auto_mute_enabled={}",
|
||||||
|
is_speaker_auto_mute_enabled);
|
||||||
|
|
||||||
|
const auto result = m_set_sys->SetSpeakerAutoMuteFlag(is_speaker_auto_mute_enabled);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(result);
|
||||||
|
}
|
||||||
|
|
||||||
void AudCtl::IsSpeakerAutoMuteEnabled(HLERequestContext& ctx) {
|
void AudCtl::IsSpeakerAutoMuteEnabled(HLERequestContext& ctx) {
|
||||||
const bool is_speaker_auto_mute_enabled = false;
|
bool is_speaker_auto_mute_enabled{};
|
||||||
|
const auto result = m_set_sys->GetSpeakerAutoMuteFlag(is_speaker_auto_mute_enabled);
|
||||||
|
|
||||||
LOG_WARNING(Audio, "(STUBBED) called, is_speaker_auto_mute_enabled={}",
|
LOG_WARNING(Audio, "(STUBBED) called, is_speaker_auto_mute_enabled={}",
|
||||||
is_speaker_auto_mute_enabled);
|
is_speaker_auto_mute_enabled);
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 3};
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(result);
|
||||||
rb.Push<u8>(is_speaker_auto_mute_enabled);
|
rb.Push<u8>(is_speaker_auto_mute_enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,10 @@ namespace Core {
|
||||||
class System;
|
class System;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace Service::Set {
|
||||||
|
class ISystemSettingsServer;
|
||||||
|
}
|
||||||
|
|
||||||
namespace Service::Audio {
|
namespace Service::Audio {
|
||||||
|
|
||||||
class AudCtl final : public ServiceFramework<AudCtl> {
|
class AudCtl final : public ServiceFramework<AudCtl> {
|
||||||
|
@ -17,14 +21,6 @@ public:
|
||||||
~AudCtl() override;
|
~AudCtl() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum class AudioOutputMode {
|
|
||||||
Invalid,
|
|
||||||
Pcm1ch,
|
|
||||||
Pcm2ch,
|
|
||||||
Pcm6ch,
|
|
||||||
PcmAuto,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class ForceMutePolicy {
|
enum class ForceMutePolicy {
|
||||||
Disable,
|
Disable,
|
||||||
SpeakerMuteOnHeadphoneUnplugged,
|
SpeakerMuteOnHeadphoneUnplugged,
|
||||||
|
@ -37,10 +33,18 @@ private:
|
||||||
|
|
||||||
void GetTargetVolumeMin(HLERequestContext& ctx);
|
void GetTargetVolumeMin(HLERequestContext& ctx);
|
||||||
void GetTargetVolumeMax(HLERequestContext& ctx);
|
void GetTargetVolumeMax(HLERequestContext& ctx);
|
||||||
|
void GetAudioOutputMode(HLERequestContext& ctx);
|
||||||
|
void SetAudioOutputMode(HLERequestContext& ctx);
|
||||||
void GetForceMutePolicy(HLERequestContext& ctx);
|
void GetForceMutePolicy(HLERequestContext& ctx);
|
||||||
void GetOutputModeSetting(HLERequestContext& ctx);
|
void GetOutputModeSetting(HLERequestContext& ctx);
|
||||||
|
void SetOutputModeSetting(HLERequestContext& ctx);
|
||||||
|
void SetHeadphoneOutputLevelMode(HLERequestContext& ctx);
|
||||||
void GetHeadphoneOutputLevelMode(HLERequestContext& ctx);
|
void GetHeadphoneOutputLevelMode(HLERequestContext& ctx);
|
||||||
|
void SetSpeakerAutoMuteEnabled(HLERequestContext& ctx);
|
||||||
void IsSpeakerAutoMuteEnabled(HLERequestContext& ctx);
|
void IsSpeakerAutoMuteEnabled(HLERequestContext& ctx);
|
||||||
|
void AcquireTargetNotification(HLERequestContext& ctx);
|
||||||
|
|
||||||
|
std::shared_ptr<Service::Set::ISystemSettingsServer> m_set_sys;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Service::Audio
|
} // namespace Service::Audio
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#include "common/settings.h"
|
||||||
#include "core/hle/service/set/setting_formats/system_settings.h"
|
#include "core/hle/service/set/setting_formats/system_settings.h"
|
||||||
|
|
||||||
namespace Service::Set {
|
namespace Service::Set {
|
||||||
|
@ -52,6 +53,17 @@ SystemSettings DefaultSystemSettings() {
|
||||||
settings.chinese_traditional_input_method = ChineseTraditionalInputMethod::Unknown0;
|
settings.chinese_traditional_input_method = ChineseTraditionalInputMethod::Unknown0;
|
||||||
settings.vibration_master_volume = 1.0f;
|
settings.vibration_master_volume = 1.0f;
|
||||||
|
|
||||||
|
const auto language_code =
|
||||||
|
available_language_codes[static_cast<s32>(::Settings::values.language_index.GetValue())];
|
||||||
|
const auto key_code =
|
||||||
|
std::find_if(language_to_layout.cbegin(), language_to_layout.cend(),
|
||||||
|
[=](const auto& element) { return element.first == language_code; });
|
||||||
|
|
||||||
|
settings.keyboard_layout = KeyboardLayout::EnglishUs;
|
||||||
|
if (key_code != language_to_layout.end()) {
|
||||||
|
settings.keyboard_layout = key_code->second;
|
||||||
|
}
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -213,10 +213,9 @@ struct SystemSettings {
|
||||||
// nn::settings::system::AudioVolume
|
// nn::settings::system::AudioVolume
|
||||||
std::array<u8, 0x8> audio_volume_type0;
|
std::array<u8, 0x8> audio_volume_type0;
|
||||||
std::array<u8, 0x8> audio_volume_type1;
|
std::array<u8, 0x8> audio_volume_type1;
|
||||||
// nn::settings::system::AudioOutputMode
|
AudioOutputMode audio_output_mode_hdmi;
|
||||||
s32 audio_output_mode_type0;
|
AudioOutputMode audio_output_mode_speaker;
|
||||||
s32 audio_output_mode_type1;
|
AudioOutputMode audio_output_mode_headphone;
|
||||||
s32 audio_output_mode_type2;
|
|
||||||
bool force_mute_on_headphone_removed;
|
bool force_mute_on_headphone_removed;
|
||||||
INSERT_PADDING_BYTES(0x3);
|
INSERT_PADDING_BYTES(0x3);
|
||||||
s32 headphone_volume_warning_count;
|
s32 headphone_volume_warning_count;
|
||||||
|
@ -224,9 +223,8 @@ struct SystemSettings {
|
||||||
INSERT_PADDING_BYTES(0x3);
|
INSERT_PADDING_BYTES(0x3);
|
||||||
// nn::settings::system::AudioVolume
|
// nn::settings::system::AudioVolume
|
||||||
std::array<u8, 0x8> audio_volume_type2;
|
std::array<u8, 0x8> audio_volume_type2;
|
||||||
// nn::settings::system::AudioOutputMode
|
AudioOutputMode audio_output_mode_type3;
|
||||||
s32 audio_output_mode_type3;
|
AudioOutputMode audio_output_mode_type4;
|
||||||
s32 audio_output_mode_type4;
|
|
||||||
bool hearing_protection_safeguard_flag;
|
bool hearing_protection_safeguard_flag;
|
||||||
INSERT_PADDING_BYTES(0x3);
|
INSERT_PADDING_BYTES(0x3);
|
||||||
INSERT_PADDING_BYTES(0x4); // Reserved
|
INSERT_PADDING_BYTES(0x4); // Reserved
|
||||||
|
|
|
@ -23,9 +23,12 @@ enum class AudioOutputMode : u32 {
|
||||||
|
|
||||||
/// This is nn::settings::system::AudioOutputModeTarget
|
/// This is nn::settings::system::AudioOutputModeTarget
|
||||||
enum class AudioOutputModeTarget : u32 {
|
enum class AudioOutputModeTarget : u32 {
|
||||||
|
None,
|
||||||
Hdmi,
|
Hdmi,
|
||||||
Speaker,
|
Speaker,
|
||||||
Headphone,
|
Headphone,
|
||||||
|
Type3,
|
||||||
|
Type4,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// This is nn::settings::system::AudioVolumeTarget
|
/// This is nn::settings::system::AudioVolumeTarget
|
||||||
|
@ -367,6 +370,12 @@ struct AccountNotificationSettings {
|
||||||
static_assert(sizeof(AccountNotificationSettings) == 0x18,
|
static_assert(sizeof(AccountNotificationSettings) == 0x18,
|
||||||
"AccountNotificationSettings is an invalid size");
|
"AccountNotificationSettings is an invalid size");
|
||||||
|
|
||||||
|
/// This is nn::settings::factory::BatteryLot
|
||||||
|
struct BatteryLot {
|
||||||
|
std::array<char, 0x18> lot_number;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(BatteryLot) == 0x18, "BatteryLot is an invalid size");
|
||||||
|
|
||||||
/// This is nn::settings::system::EulaVersion
|
/// This is nn::settings::system::EulaVersion
|
||||||
struct EulaVersion {
|
struct EulaVersion {
|
||||||
u32 version;
|
u32 version;
|
||||||
|
@ -436,6 +445,12 @@ struct NotificationSettings {
|
||||||
};
|
};
|
||||||
static_assert(sizeof(NotificationSettings) == 0x18, "NotificationSettings is an invalid size");
|
static_assert(sizeof(NotificationSettings) == 0x18, "NotificationSettings is an invalid size");
|
||||||
|
|
||||||
|
/// This is nn::settings::factory::SerialNumber
|
||||||
|
struct SerialNumber {
|
||||||
|
std::array<char, 0x18> serial_number;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(SerialNumber) == 0x18, "SerialNumber is an invalid size");
|
||||||
|
|
||||||
/// This is nn::settings::system::SleepSettings
|
/// This is nn::settings::system::SleepSettings
|
||||||
struct SleepSettings {
|
struct SleepSettings {
|
||||||
SleepFlag flags;
|
SleepFlag flags;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
namespace Service::Set {
|
namespace Service::Set {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
constexpr u32 SETTINGS_VERSION{1u};
|
constexpr u32 SETTINGS_VERSION{2u};
|
||||||
constexpr auto SETTINGS_MAGIC = Common::MakeMagic('y', 'u', 'z', 'u', '_', 's', 'e', 't');
|
constexpr auto SETTINGS_MAGIC = Common::MakeMagic('y', 'u', 'z', 'u', '_', 's', 'e', 't');
|
||||||
struct SettingsHeader {
|
struct SettingsHeader {
|
||||||
u64 magic;
|
u64 magic;
|
||||||
|
@ -131,10 +131,10 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_)
|
||||||
{40, &ISystemSettingsServer::SetTvSettings, "SetTvSettings"},
|
{40, &ISystemSettingsServer::SetTvSettings, "SetTvSettings"},
|
||||||
{41, nullptr, "GetEdid"},
|
{41, nullptr, "GetEdid"},
|
||||||
{42, nullptr, "SetEdid"},
|
{42, nullptr, "SetEdid"},
|
||||||
{43, nullptr, "GetAudioOutputMode"},
|
{43, &ISystemSettingsServer::GetAudioOutputMode, "GetAudioOutputMode"},
|
||||||
{44, nullptr, "SetAudioOutputMode"},
|
{44, &ISystemSettingsServer::SetAudioOutputMode, "SetAudioOutputMode"},
|
||||||
{45, &ISystemSettingsServer::IsForceMuteOnHeadphoneRemoved, "IsForceMuteOnHeadphoneRemoved"},
|
{45, &ISystemSettingsServer::GetSpeakerAutoMuteFlag , "GetSpeakerAutoMuteFlag"},
|
||||||
{46, &ISystemSettingsServer::SetForceMuteOnHeadphoneRemoved, "SetForceMuteOnHeadphoneRemoved"},
|
{46, &ISystemSettingsServer::SetSpeakerAutoMuteFlag , "SetSpeakerAutoMuteFlag"},
|
||||||
{47, &ISystemSettingsServer::GetQuestFlag, "GetQuestFlag"},
|
{47, &ISystemSettingsServer::GetQuestFlag, "GetQuestFlag"},
|
||||||
{48, &ISystemSettingsServer::SetQuestFlag, "SetQuestFlag"},
|
{48, &ISystemSettingsServer::SetQuestFlag, "SetQuestFlag"},
|
||||||
{49, nullptr, "GetDataDeletionSettings"},
|
{49, nullptr, "GetDataDeletionSettings"},
|
||||||
|
@ -155,8 +155,8 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_)
|
||||||
{64, &ISystemSettingsServer::SetPrimaryAlbumStorage, "SetPrimaryAlbumStorage"},
|
{64, &ISystemSettingsServer::SetPrimaryAlbumStorage, "SetPrimaryAlbumStorage"},
|
||||||
{65, nullptr, "GetUsb30EnableFlag"},
|
{65, nullptr, "GetUsb30EnableFlag"},
|
||||||
{66, nullptr, "SetUsb30EnableFlag"},
|
{66, nullptr, "SetUsb30EnableFlag"},
|
||||||
{67, nullptr, "GetBatteryLot"},
|
{67, &ISystemSettingsServer::GetBatteryLot, "GetBatteryLot"},
|
||||||
{68, nullptr, "GetSerialNumber"},
|
{68, &ISystemSettingsServer::GetSerialNumber, "GetSerialNumber"},
|
||||||
{69, &ISystemSettingsServer::GetNfcEnableFlag, "GetNfcEnableFlag"},
|
{69, &ISystemSettingsServer::GetNfcEnableFlag, "GetNfcEnableFlag"},
|
||||||
{70, &ISystemSettingsServer::SetNfcEnableFlag, "SetNfcEnableFlag"},
|
{70, &ISystemSettingsServer::SetNfcEnableFlag, "SetNfcEnableFlag"},
|
||||||
{71, &ISystemSettingsServer::GetSleepSettings, "GetSleepSettings"},
|
{71, &ISystemSettingsServer::GetSleepSettings, "GetSleepSettings"},
|
||||||
|
@ -184,11 +184,11 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_)
|
||||||
{93, nullptr, "AcquireFatalDirtyFlagEventHandle"},
|
{93, nullptr, "AcquireFatalDirtyFlagEventHandle"},
|
||||||
{94, nullptr, "GetFatalDirtyFlags"},
|
{94, nullptr, "GetFatalDirtyFlags"},
|
||||||
{95, &ISystemSettingsServer::GetAutoUpdateEnableFlag, "GetAutoUpdateEnableFlag"},
|
{95, &ISystemSettingsServer::GetAutoUpdateEnableFlag, "GetAutoUpdateEnableFlag"},
|
||||||
{96, nullptr, "SetAutoUpdateEnableFlag"},
|
{96, &ISystemSettingsServer::SetAutoUpdateEnableFlag, "SetAutoUpdateEnableFlag"},
|
||||||
{97, nullptr, "GetNxControllerSettings"},
|
{97, nullptr, "GetNxControllerSettings"},
|
||||||
{98, nullptr, "SetNxControllerSettings"},
|
{98, nullptr, "SetNxControllerSettings"},
|
||||||
{99, &ISystemSettingsServer::GetBatteryPercentageFlag, "GetBatteryPercentageFlag"},
|
{99, &ISystemSettingsServer::GetBatteryPercentageFlag, "GetBatteryPercentageFlag"},
|
||||||
{100, nullptr, "SetBatteryPercentageFlag"},
|
{100, &ISystemSettingsServer::SetBatteryPercentageFlag, "SetBatteryPercentageFlag"},
|
||||||
{101, nullptr, "GetExternalRtcResetFlag"},
|
{101, nullptr, "GetExternalRtcResetFlag"},
|
||||||
{102, nullptr, "SetExternalRtcResetFlag"},
|
{102, nullptr, "SetExternalRtcResetFlag"},
|
||||||
{103, nullptr, "GetUsbFullKeyEnableFlag"},
|
{103, nullptr, "GetUsbFullKeyEnableFlag"},
|
||||||
|
@ -208,12 +208,12 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_)
|
||||||
{117, nullptr, "GetHeadphoneVolumeUpdateFlag"},
|
{117, nullptr, "GetHeadphoneVolumeUpdateFlag"},
|
||||||
{118, nullptr, "SetHeadphoneVolumeUpdateFlag"},
|
{118, nullptr, "SetHeadphoneVolumeUpdateFlag"},
|
||||||
{119, nullptr, "NeedsToUpdateHeadphoneVolume"},
|
{119, nullptr, "NeedsToUpdateHeadphoneVolume"},
|
||||||
{120, nullptr, "GetPushNotificationActivityModeOnSleep"},
|
{120, &ISystemSettingsServer::GetPushNotificationActivityModeOnSleep, "GetPushNotificationActivityModeOnSleep"},
|
||||||
{121, nullptr, "SetPushNotificationActivityModeOnSleep"},
|
{121, &ISystemSettingsServer::SetPushNotificationActivityModeOnSleep, "SetPushNotificationActivityModeOnSleep"},
|
||||||
{122, nullptr, "GetServiceDiscoveryControlSettings"},
|
{122, nullptr, "GetServiceDiscoveryControlSettings"},
|
||||||
{123, nullptr, "SetServiceDiscoveryControlSettings"},
|
{123, nullptr, "SetServiceDiscoveryControlSettings"},
|
||||||
{124, &ISystemSettingsServer::GetErrorReportSharePermission, "GetErrorReportSharePermission"},
|
{124, &ISystemSettingsServer::GetErrorReportSharePermission, "GetErrorReportSharePermission"},
|
||||||
{125, nullptr, "SetErrorReportSharePermission"},
|
{125, &ISystemSettingsServer::SetErrorReportSharePermission, "SetErrorReportSharePermission"},
|
||||||
{126, &ISystemSettingsServer::GetAppletLaunchFlags, "GetAppletLaunchFlags"},
|
{126, &ISystemSettingsServer::GetAppletLaunchFlags, "GetAppletLaunchFlags"},
|
||||||
{127, &ISystemSettingsServer::SetAppletLaunchFlags, "SetAppletLaunchFlags"},
|
{127, &ISystemSettingsServer::SetAppletLaunchFlags, "SetAppletLaunchFlags"},
|
||||||
{128, nullptr, "GetConsoleSixAxisSensorAccelerationBias"},
|
{128, nullptr, "GetConsoleSixAxisSensorAccelerationBias"},
|
||||||
|
@ -225,7 +225,7 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_)
|
||||||
{134, nullptr, "GetConsoleSixAxisSensorAngularVelocityGain"},
|
{134, nullptr, "GetConsoleSixAxisSensorAngularVelocityGain"},
|
||||||
{135, nullptr, "SetConsoleSixAxisSensorAngularVelocityGain"},
|
{135, nullptr, "SetConsoleSixAxisSensorAngularVelocityGain"},
|
||||||
{136, &ISystemSettingsServer::GetKeyboardLayout, "GetKeyboardLayout"},
|
{136, &ISystemSettingsServer::GetKeyboardLayout, "GetKeyboardLayout"},
|
||||||
{137, nullptr, "SetKeyboardLayout"},
|
{137, &ISystemSettingsServer::SetKeyboardLayout, "SetKeyboardLayout"},
|
||||||
{138, nullptr, "GetWebInspectorFlag"},
|
{138, nullptr, "GetWebInspectorFlag"},
|
||||||
{139, nullptr, "GetAllowedSslHosts"},
|
{139, nullptr, "GetAllowedSslHosts"},
|
||||||
{140, nullptr, "GetHostFsMountPoint"},
|
{140, nullptr, "GetHostFsMountPoint"},
|
||||||
|
@ -291,8 +291,8 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_)
|
||||||
{200, nullptr, "SetButtonConfigRegisteredSettings"},
|
{200, nullptr, "SetButtonConfigRegisteredSettings"},
|
||||||
{201, &ISystemSettingsServer::GetFieldTestingFlag, "GetFieldTestingFlag"},
|
{201, &ISystemSettingsServer::GetFieldTestingFlag, "GetFieldTestingFlag"},
|
||||||
{202, nullptr, "SetFieldTestingFlag"},
|
{202, nullptr, "SetFieldTestingFlag"},
|
||||||
{203, nullptr, "GetPanelCrcMode"},
|
{203, &ISystemSettingsServer::GetPanelCrcMode, "GetPanelCrcMode"},
|
||||||
{204, nullptr, "SetPanelCrcMode"},
|
{204, &ISystemSettingsServer::SetPanelCrcMode, "SetPanelCrcMode"},
|
||||||
{205, nullptr, "GetNxControllerSettingsEx"},
|
{205, nullptr, "GetNxControllerSettingsEx"},
|
||||||
{206, nullptr, "SetNxControllerSettingsEx"},
|
{206, nullptr, "SetNxControllerSettingsEx"},
|
||||||
{207, nullptr, "GetHearingProtectionSafeguardFlag"},
|
{207, nullptr, "GetHearingProtectionSafeguardFlag"},
|
||||||
|
@ -349,7 +349,7 @@ bool ISystemSettingsServer::LoadSettingsFile(std::filesystem::path& path, auto&&
|
||||||
}
|
}
|
||||||
SettingsHeader hdr{};
|
SettingsHeader hdr{};
|
||||||
file.read(reinterpret_cast<char*>(&hdr), sizeof(hdr));
|
file.read(reinterpret_cast<char*>(&hdr), sizeof(hdr));
|
||||||
return hdr.magic == SETTINGS_MAGIC && hdr.version == SETTINGS_VERSION;
|
return hdr.magic == SETTINGS_MAGIC && hdr.version >= SETTINGS_VERSION;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!exists || !file_size_ok) {
|
if (!exists || !file_size_ok) {
|
||||||
|
@ -390,7 +390,7 @@ bool ISystemSettingsServer::StoreSettingsFile(std::filesystem::path& path, auto&
|
||||||
}
|
}
|
||||||
|
|
||||||
auto settings_base = path / "settings";
|
auto settings_base = path / "settings";
|
||||||
auto settings_tmp_file = settings_base;
|
std::filesystem::path settings_tmp_file = settings_base;
|
||||||
settings_tmp_file = settings_tmp_file.replace_extension("tmp");
|
settings_tmp_file = settings_tmp_file.replace_extension("tmp");
|
||||||
std::ofstream file(settings_tmp_file, std::ios::binary | std::ios::out);
|
std::ofstream file(settings_tmp_file, std::ios::binary | std::ios::out);
|
||||||
if (!file.is_open()) {
|
if (!file.is_open()) {
|
||||||
|
@ -817,7 +817,34 @@ void ISystemSettingsServer::SetTvSettings(HLERequestContext& ctx) {
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISystemSettingsServer::IsForceMuteOnHeadphoneRemoved(HLERequestContext& ctx) {
|
void ISystemSettingsServer::GetAudioOutputMode(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto target{rp.PopEnum<AudioOutputModeTarget>()};
|
||||||
|
|
||||||
|
AudioOutputMode output_mode{};
|
||||||
|
const auto result = GetAudioOutputMode(output_mode, target);
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, target={}, output_mode={}", target, output_mode);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(result);
|
||||||
|
rb.PushEnum(output_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::SetAudioOutputMode(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto target{rp.PopEnum<AudioOutputModeTarget>()};
|
||||||
|
const auto output_mode{rp.PopEnum<AudioOutputMode>()};
|
||||||
|
|
||||||
|
const auto result = SetAudioOutputMode(target, output_mode);
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, target={}, output_mode={}", target, output_mode);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::GetSpeakerAutoMuteFlag(HLERequestContext& ctx) {
|
||||||
LOG_INFO(Service_SET, "called, force_mute_on_headphone_removed={}",
|
LOG_INFO(Service_SET, "called, force_mute_on_headphone_removed={}",
|
||||||
m_system_settings.force_mute_on_headphone_removed);
|
m_system_settings.force_mute_on_headphone_removed);
|
||||||
|
|
||||||
|
@ -826,7 +853,7 @@ void ISystemSettingsServer::IsForceMuteOnHeadphoneRemoved(HLERequestContext& ctx
|
||||||
rb.PushRaw(m_system_settings.force_mute_on_headphone_removed);
|
rb.PushRaw(m_system_settings.force_mute_on_headphone_removed);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISystemSettingsServer::SetForceMuteOnHeadphoneRemoved(HLERequestContext& ctx) {
|
void ISystemSettingsServer::SetSpeakerAutoMuteFlag(HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
m_system_settings.force_mute_on_headphone_removed = rp.PopRaw<bool>();
|
m_system_settings.force_mute_on_headphone_removed = rp.PopRaw<bool>();
|
||||||
SetSaveNeeded();
|
SetSaveNeeded();
|
||||||
|
@ -969,6 +996,26 @@ void ISystemSettingsServer::SetPrimaryAlbumStorage(HLERequestContext& ctx) {
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::GetBatteryLot(HLERequestContext& ctx) {
|
||||||
|
BatteryLot battery_lot = {"YUZUEMULATOR123456789"};
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 8};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.PushRaw(battery_lot);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::GetSerialNumber(HLERequestContext& ctx) {
|
||||||
|
SerialNumber console_serial = {"YUZ10012345678"};
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 8};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.PushRaw(console_serial);
|
||||||
|
}
|
||||||
|
|
||||||
void ISystemSettingsServer::GetNfcEnableFlag(HLERequestContext& ctx) {
|
void ISystemSettingsServer::GetNfcEnableFlag(HLERequestContext& ctx) {
|
||||||
LOG_INFO(Service_SET, "called, nfc_enable_flag={}", m_system_settings.nfc_enable_flag);
|
LOG_INFO(Service_SET, "called, nfc_enable_flag={}", m_system_settings.nfc_enable_flag);
|
||||||
|
|
||||||
|
@ -1132,6 +1179,17 @@ void ISystemSettingsServer::GetAutoUpdateEnableFlag(HLERequestContext& ctx) {
|
||||||
rb.Push(m_system_settings.auto_update_enable_flag);
|
rb.Push(m_system_settings.auto_update_enable_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::SetAutoUpdateEnableFlag(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
m_system_settings.auto_update_enable_flag = rp.Pop<bool>();
|
||||||
|
SetSaveNeeded();
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, auto_update_flag={}", m_system_settings.auto_update_enable_flag);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void ISystemSettingsServer::GetBatteryPercentageFlag(HLERequestContext& ctx) {
|
void ISystemSettingsServer::GetBatteryPercentageFlag(HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_SET, "called, battery_percentage_flag={}",
|
LOG_DEBUG(Service_SET, "called, battery_percentage_flag={}",
|
||||||
m_system_settings.battery_percentage_flag);
|
m_system_settings.battery_percentage_flag);
|
||||||
|
@ -1141,6 +1199,18 @@ void ISystemSettingsServer::GetBatteryPercentageFlag(HLERequestContext& ctx) {
|
||||||
rb.Push(m_system_settings.battery_percentage_flag);
|
rb.Push(m_system_settings.battery_percentage_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::SetBatteryPercentageFlag(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
m_system_settings.battery_percentage_flag = rp.Pop<bool>();
|
||||||
|
SetSaveNeeded();
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, battery_percentage_flag={}",
|
||||||
|
m_system_settings.battery_percentage_flag);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void ISystemSettingsServer::SetExternalSteadyClockInternalOffset(HLERequestContext& ctx) {
|
void ISystemSettingsServer::SetExternalSteadyClockInternalOffset(HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_SET, "called.");
|
LOG_DEBUG(Service_SET, "called.");
|
||||||
|
|
||||||
|
@ -1164,6 +1234,27 @@ void ISystemSettingsServer::GetExternalSteadyClockInternalOffset(HLERequestConte
|
||||||
rb.Push(offset);
|
rb.Push(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::GetPushNotificationActivityModeOnSleep(HLERequestContext& ctx) {
|
||||||
|
LOG_INFO(Service_SET, "called, push_notification_activity_mode_on_sleep={}",
|
||||||
|
m_system_settings.push_notification_activity_mode_on_sleep);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.Push(m_system_settings.push_notification_activity_mode_on_sleep);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::SetPushNotificationActivityModeOnSleep(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
m_system_settings.push_notification_activity_mode_on_sleep = rp.Pop<s32>();
|
||||||
|
SetSaveNeeded();
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, push_notification_activity_mode_on_sleep={}",
|
||||||
|
m_system_settings.push_notification_activity_mode_on_sleep);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void ISystemSettingsServer::GetErrorReportSharePermission(HLERequestContext& ctx) {
|
void ISystemSettingsServer::GetErrorReportSharePermission(HLERequestContext& ctx) {
|
||||||
LOG_INFO(Service_SET, "called, error_report_share_permission={}",
|
LOG_INFO(Service_SET, "called, error_report_share_permission={}",
|
||||||
m_system_settings.error_report_share_permission);
|
m_system_settings.error_report_share_permission);
|
||||||
|
@ -1173,6 +1264,18 @@ void ISystemSettingsServer::GetErrorReportSharePermission(HLERequestContext& ctx
|
||||||
rb.PushEnum(m_system_settings.error_report_share_permission);
|
rb.PushEnum(m_system_settings.error_report_share_permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::SetErrorReportSharePermission(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
m_system_settings.error_report_share_permission = rp.PopEnum<ErrorReportSharePermission>();
|
||||||
|
SetSaveNeeded();
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, error_report_share_permission={}",
|
||||||
|
m_system_settings.error_report_share_permission);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void ISystemSettingsServer::GetAppletLaunchFlags(HLERequestContext& ctx) {
|
void ISystemSettingsServer::GetAppletLaunchFlags(HLERequestContext& ctx) {
|
||||||
LOG_INFO(Service_SET, "called, applet_launch_flag={}", m_system_settings.applet_launch_flag);
|
LOG_INFO(Service_SET, "called, applet_launch_flag={}", m_system_settings.applet_launch_flag);
|
||||||
|
|
||||||
|
@ -1193,22 +1296,22 @@ void ISystemSettingsServer::SetAppletLaunchFlags(HLERequestContext& ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISystemSettingsServer::GetKeyboardLayout(HLERequestContext& ctx) {
|
void ISystemSettingsServer::GetKeyboardLayout(HLERequestContext& ctx) {
|
||||||
const auto language_code =
|
LOG_INFO(Service_SET, "called, keyboard_layout={}", m_system_settings.keyboard_layout);
|
||||||
available_language_codes[static_cast<s32>(::Settings::values.language_index.GetValue())];
|
|
||||||
const auto key_code =
|
|
||||||
std::find_if(language_to_layout.cbegin(), language_to_layout.cend(),
|
|
||||||
[=](const auto& element) { return element.first == language_code; });
|
|
||||||
|
|
||||||
KeyboardLayout selected_keyboard_layout = KeyboardLayout::EnglishUs;
|
|
||||||
if (key_code != language_to_layout.end()) {
|
|
||||||
selected_keyboard_layout = key_code->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_INFO(Service_SET, "called, selected_keyboard_layout={}", selected_keyboard_layout);
|
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 3};
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
rb.Push(static_cast<u32>(selected_keyboard_layout));
|
rb.Push(static_cast<u32>(m_system_settings.keyboard_layout));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::SetKeyboardLayout(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
m_system_settings.keyboard_layout = rp.PopRaw<KeyboardLayout>();
|
||||||
|
SetSaveNeeded();
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, keyboard_layout={}", m_system_settings.keyboard_layout);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISystemSettingsServer::GetDeviceTimeZoneLocationUpdatedTime(HLERequestContext& ctx) {
|
void ISystemSettingsServer::GetDeviceTimeZoneLocationUpdatedTime(HLERequestContext& ctx) {
|
||||||
|
@ -1300,6 +1403,25 @@ void ISystemSettingsServer::GetFieldTestingFlag(HLERequestContext& ctx) {
|
||||||
rb.Push(m_system_settings.field_testing_flag);
|
rb.Push(m_system_settings.field_testing_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::GetPanelCrcMode(HLERequestContext& ctx) {
|
||||||
|
LOG_INFO(Service_SET, "called, panel_crc_mode={}", m_system_settings.panel_crc_mode);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.Push(m_system_settings.panel_crc_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ISystemSettingsServer::SetPanelCrcMode(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
m_system_settings.panel_crc_mode = rp.PopRaw<s32>();
|
||||||
|
SetSaveNeeded();
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, panel_crc_mode={}", m_system_settings.panel_crc_mode);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void ISystemSettingsServer::SetupSettings() {
|
void ISystemSettingsServer::SetupSettings() {
|
||||||
auto system_dir =
|
auto system_dir =
|
||||||
Common::FS::GetYuzuPath(Common::FS::YuzuPath::NANDDir) / "system/save/8000000000000050";
|
Common::FS::GetYuzuPath(Common::FS::YuzuPath::NANDDir) / "system/save/8000000000000050";
|
||||||
|
@ -1390,6 +1512,66 @@ Result ISystemSettingsServer::SetVibrationMasterVolume(f32 volume) {
|
||||||
R_SUCCEED();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result ISystemSettingsServer::GetAudioOutputMode(AudioOutputMode& out_output_mode,
|
||||||
|
AudioOutputModeTarget target) const {
|
||||||
|
switch (target) {
|
||||||
|
case AudioOutputModeTarget::Hdmi:
|
||||||
|
out_output_mode = m_system_settings.audio_output_mode_hdmi;
|
||||||
|
break;
|
||||||
|
case AudioOutputModeTarget::Speaker:
|
||||||
|
out_output_mode = m_system_settings.audio_output_mode_speaker;
|
||||||
|
break;
|
||||||
|
case AudioOutputModeTarget::Headphone:
|
||||||
|
out_output_mode = m_system_settings.audio_output_mode_headphone;
|
||||||
|
break;
|
||||||
|
case AudioOutputModeTarget::Type3:
|
||||||
|
out_output_mode = m_system_settings.audio_output_mode_type3;
|
||||||
|
break;
|
||||||
|
case AudioOutputModeTarget::Type4:
|
||||||
|
out_output_mode = m_system_settings.audio_output_mode_type4;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG_ERROR(Service_SET, "Invalid audio output mode target {}", target);
|
||||||
|
}
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result ISystemSettingsServer::SetAudioOutputMode(AudioOutputModeTarget target,
|
||||||
|
AudioOutputMode output_mode) {
|
||||||
|
switch (target) {
|
||||||
|
case AudioOutputModeTarget::Hdmi:
|
||||||
|
m_system_settings.audio_output_mode_hdmi = output_mode;
|
||||||
|
break;
|
||||||
|
case AudioOutputModeTarget::Speaker:
|
||||||
|
m_system_settings.audio_output_mode_speaker = output_mode;
|
||||||
|
break;
|
||||||
|
case AudioOutputModeTarget::Headphone:
|
||||||
|
m_system_settings.audio_output_mode_headphone = output_mode;
|
||||||
|
break;
|
||||||
|
case AudioOutputModeTarget::Type3:
|
||||||
|
m_system_settings.audio_output_mode_type3 = output_mode;
|
||||||
|
break;
|
||||||
|
case AudioOutputModeTarget::Type4:
|
||||||
|
m_system_settings.audio_output_mode_type4 = output_mode;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG_ERROR(Service_SET, "Invalid audio output mode target {}", target);
|
||||||
|
}
|
||||||
|
SetSaveNeeded();
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result ISystemSettingsServer::GetSpeakerAutoMuteFlag(bool& is_auto_mute) const {
|
||||||
|
is_auto_mute = m_system_settings.force_mute_on_headphone_removed;
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result ISystemSettingsServer::SetSpeakerAutoMuteFlag(bool is_auto_mute) {
|
||||||
|
m_system_settings.force_mute_on_headphone_removed = is_auto_mute;
|
||||||
|
SetSaveNeeded();
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
Result ISystemSettingsServer::GetExternalSteadyClockSourceId(Common::UUID& out_id) const {
|
Result ISystemSettingsServer::GetExternalSteadyClockSourceId(Common::UUID& out_id) const {
|
||||||
out_id = m_private_settings.external_clock_source_id;
|
out_id = m_private_settings.external_clock_source_id;
|
||||||
R_SUCCEED();
|
R_SUCCEED();
|
||||||
|
|
|
@ -50,6 +50,10 @@ public:
|
||||||
|
|
||||||
Result GetVibrationMasterVolume(f32& out_volume) const;
|
Result GetVibrationMasterVolume(f32& out_volume) const;
|
||||||
Result SetVibrationMasterVolume(f32 volume);
|
Result SetVibrationMasterVolume(f32 volume);
|
||||||
|
Result GetAudioOutputMode(AudioOutputMode& out_output_mode, AudioOutputModeTarget target) const;
|
||||||
|
Result SetAudioOutputMode(AudioOutputModeTarget target, AudioOutputMode output_mode);
|
||||||
|
Result GetSpeakerAutoMuteFlag(bool& is_auto_mute) const;
|
||||||
|
Result SetSpeakerAutoMuteFlag(bool auto_mute);
|
||||||
Result GetExternalSteadyClockSourceId(Common::UUID& out_id) const;
|
Result GetExternalSteadyClockSourceId(Common::UUID& out_id) const;
|
||||||
Result SetExternalSteadyClockSourceId(const Common::UUID& id);
|
Result SetExternalSteadyClockSourceId(const Common::UUID& id);
|
||||||
Result GetUserSystemClockContext(Service::PSC::Time::SystemClockContext& out_context) const;
|
Result GetUserSystemClockContext(Service::PSC::Time::SystemClockContext& out_context) const;
|
||||||
|
@ -97,8 +101,10 @@ private:
|
||||||
void GetSettingsItemValue(HLERequestContext& ctx);
|
void GetSettingsItemValue(HLERequestContext& ctx);
|
||||||
void GetTvSettings(HLERequestContext& ctx);
|
void GetTvSettings(HLERequestContext& ctx);
|
||||||
void SetTvSettings(HLERequestContext& ctx);
|
void SetTvSettings(HLERequestContext& ctx);
|
||||||
void IsForceMuteOnHeadphoneRemoved(HLERequestContext& ctx);
|
void GetAudioOutputMode(HLERequestContext& ctx);
|
||||||
void SetForceMuteOnHeadphoneRemoved(HLERequestContext& ctx);
|
void SetAudioOutputMode(HLERequestContext& ctx);
|
||||||
|
void GetSpeakerAutoMuteFlag(HLERequestContext& ctx);
|
||||||
|
void SetSpeakerAutoMuteFlag(HLERequestContext& ctx);
|
||||||
void GetDebugModeFlag(HLERequestContext& ctx);
|
void GetDebugModeFlag(HLERequestContext& ctx);
|
||||||
void GetQuestFlag(HLERequestContext& ctx);
|
void GetQuestFlag(HLERequestContext& ctx);
|
||||||
void SetQuestFlag(HLERequestContext& ctx);
|
void SetQuestFlag(HLERequestContext& ctx);
|
||||||
|
@ -111,6 +117,8 @@ private:
|
||||||
void SetUserSystemClockAutomaticCorrectionEnabled(HLERequestContext& ctx);
|
void SetUserSystemClockAutomaticCorrectionEnabled(HLERequestContext& ctx);
|
||||||
void GetPrimaryAlbumStorage(HLERequestContext& ctx);
|
void GetPrimaryAlbumStorage(HLERequestContext& ctx);
|
||||||
void SetPrimaryAlbumStorage(HLERequestContext& ctx);
|
void SetPrimaryAlbumStorage(HLERequestContext& ctx);
|
||||||
|
void GetBatteryLot(HLERequestContext& ctx);
|
||||||
|
void GetSerialNumber(HLERequestContext& ctx);
|
||||||
void GetNfcEnableFlag(HLERequestContext& ctx);
|
void GetNfcEnableFlag(HLERequestContext& ctx);
|
||||||
void SetNfcEnableFlag(HLERequestContext& ctx);
|
void SetNfcEnableFlag(HLERequestContext& ctx);
|
||||||
void GetSleepSettings(HLERequestContext& ctx);
|
void GetSleepSettings(HLERequestContext& ctx);
|
||||||
|
@ -126,13 +134,19 @@ private:
|
||||||
void SetBluetoothEnableFlag(HLERequestContext& ctx);
|
void SetBluetoothEnableFlag(HLERequestContext& ctx);
|
||||||
void GetMiiAuthorId(HLERequestContext& ctx);
|
void GetMiiAuthorId(HLERequestContext& ctx);
|
||||||
void GetAutoUpdateEnableFlag(HLERequestContext& ctx);
|
void GetAutoUpdateEnableFlag(HLERequestContext& ctx);
|
||||||
|
void SetAutoUpdateEnableFlag(HLERequestContext& ctx);
|
||||||
void GetBatteryPercentageFlag(HLERequestContext& ctx);
|
void GetBatteryPercentageFlag(HLERequestContext& ctx);
|
||||||
|
void SetBatteryPercentageFlag(HLERequestContext& ctx);
|
||||||
void SetExternalSteadyClockInternalOffset(HLERequestContext& ctx);
|
void SetExternalSteadyClockInternalOffset(HLERequestContext& ctx);
|
||||||
void GetExternalSteadyClockInternalOffset(HLERequestContext& ctx);
|
void GetExternalSteadyClockInternalOffset(HLERequestContext& ctx);
|
||||||
|
void GetPushNotificationActivityModeOnSleep(HLERequestContext& ctx);
|
||||||
|
void SetPushNotificationActivityModeOnSleep(HLERequestContext& ctx);
|
||||||
void GetErrorReportSharePermission(HLERequestContext& ctx);
|
void GetErrorReportSharePermission(HLERequestContext& ctx);
|
||||||
|
void SetErrorReportSharePermission(HLERequestContext& ctx);
|
||||||
void GetAppletLaunchFlags(HLERequestContext& ctx);
|
void GetAppletLaunchFlags(HLERequestContext& ctx);
|
||||||
void SetAppletLaunchFlags(HLERequestContext& ctx);
|
void SetAppletLaunchFlags(HLERequestContext& ctx);
|
||||||
void GetKeyboardLayout(HLERequestContext& ctx);
|
void GetKeyboardLayout(HLERequestContext& ctx);
|
||||||
|
void SetKeyboardLayout(HLERequestContext& ctx);
|
||||||
void GetDeviceTimeZoneLocationUpdatedTime(HLERequestContext& ctx);
|
void GetDeviceTimeZoneLocationUpdatedTime(HLERequestContext& ctx);
|
||||||
void SetDeviceTimeZoneLocationUpdatedTime(HLERequestContext& ctx);
|
void SetDeviceTimeZoneLocationUpdatedTime(HLERequestContext& ctx);
|
||||||
void GetUserSystemClockAutomaticCorrectionUpdatedTime(HLERequestContext& ctx);
|
void GetUserSystemClockAutomaticCorrectionUpdatedTime(HLERequestContext& ctx);
|
||||||
|
@ -141,6 +155,8 @@ private:
|
||||||
void GetHomeMenuScheme(HLERequestContext& ctx);
|
void GetHomeMenuScheme(HLERequestContext& ctx);
|
||||||
void GetHomeMenuSchemeModel(HLERequestContext& ctx);
|
void GetHomeMenuSchemeModel(HLERequestContext& ctx);
|
||||||
void GetFieldTestingFlag(HLERequestContext& ctx);
|
void GetFieldTestingFlag(HLERequestContext& ctx);
|
||||||
|
void GetPanelCrcMode(HLERequestContext& ctx);
|
||||||
|
void SetPanelCrcMode(HLERequestContext& ctx);
|
||||||
|
|
||||||
bool LoadSettingsFile(std::filesystem::path& path, auto&& default_func);
|
bool LoadSettingsFile(std::filesystem::path& path, auto&& default_func);
|
||||||
bool StoreSettingsFile(std::filesystem::path& path, auto& settings);
|
bool StoreSettingsFile(std::filesystem::path& path, auto& settings);
|
||||||
|
|
|
@ -184,7 +184,7 @@ void ResourceManager::InitializeHidCommonSampler() {
|
||||||
keyboard->SetAppletResource(applet_resource, &shared_mutex);
|
keyboard->SetAppletResource(applet_resource, &shared_mutex);
|
||||||
|
|
||||||
const auto settings =
|
const auto settings =
|
||||||
system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys");
|
system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys", true);
|
||||||
npad->SetNpadExternals(applet_resource, &shared_mutex, handheld_config, settings);
|
npad->SetNpadExternals(applet_resource, &shared_mutex, handheld_config, settings);
|
||||||
|
|
||||||
six_axis->SetAppletResource(applet_resource, &shared_mutex);
|
six_axis->SetAppletResource(applet_resource, &shared_mutex);
|
||||||
|
|
|
@ -8,7 +8,8 @@
|
||||||
namespace Service::HID {
|
namespace Service::HID {
|
||||||
|
|
||||||
HidFirmwareSettings::HidFirmwareSettings(Core::System& system) {
|
HidFirmwareSettings::HidFirmwareSettings(Core::System& system) {
|
||||||
m_set_sys = system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys");
|
m_set_sys =
|
||||||
|
system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys", true);
|
||||||
LoadSettings(true);
|
LoadSettings(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue