forked from ShuriZma/suyu
service: set: Add more system settings and address comments
This commit is contained in:
parent
4bd4a95d84
commit
7707768f80
|
@ -75,6 +75,16 @@ void GetFirmwareVersionImpl(HLERequestContext& ctx, GetFirmwareVersionType type)
|
||||||
}
|
}
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
|
void SET_SYS::SetLanguageCode(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
language_code_setting = rp.PopEnum<LanguageCode>();
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, language_code={}", language_code_setting);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void SET_SYS::GetFirmwareVersion(HLERequestContext& ctx) {
|
void SET_SYS::GetFirmwareVersion(HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_SET, "called");
|
LOG_DEBUG(Service_SET, "called");
|
||||||
GetFirmwareVersionImpl(ctx, GetFirmwareVersionType::Version1);
|
GetFirmwareVersionImpl(ctx, GetFirmwareVersionType::Version1);
|
||||||
|
@ -103,6 +113,33 @@ void SET_SYS::SetAccountSettings(HLERequestContext& ctx) {
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SET_SYS::GetEulaVersions(HLERequestContext& ctx) {
|
||||||
|
LOG_INFO(Service_SET, "called");
|
||||||
|
|
||||||
|
ctx.WriteBuffer(eula_versions);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.Push(static_cast<u32>(eula_versions.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void SET_SYS::SetEulaVersions(HLERequestContext& ctx) {
|
||||||
|
const auto elements = ctx.GetReadBufferNumElements<EulaVersion>();
|
||||||
|
const auto buffer_data = ctx.ReadBuffer();
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, elements={}", elements);
|
||||||
|
|
||||||
|
eula_versions.resize(elements);
|
||||||
|
for (std::size_t index = 0; index < elements; index++) {
|
||||||
|
const std::size_t start_index = index * sizeof(EulaVersion);
|
||||||
|
memcpy(eula_versions.data() + start_index, buffer_data.data() + start_index,
|
||||||
|
sizeof(EulaVersion));
|
||||||
|
}
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void SET_SYS::GetColorSetId(HLERequestContext& ctx) {
|
void SET_SYS::GetColorSetId(HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_SET, "called");
|
LOG_DEBUG(Service_SET, "called");
|
||||||
|
|
||||||
|
@ -149,7 +186,7 @@ void SET_SYS::GetAccountNotificationSettings(HLERequestContext& ctx) {
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 3};
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
rb.Push(account_notifications.size());
|
rb.Push(static_cast<u32>(account_notifications.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SET_SYS::SetAccountNotificationSettings(HLERequestContext& ctx) {
|
void SET_SYS::SetAccountNotificationSettings(HLERequestContext& ctx) {
|
||||||
|
@ -275,6 +312,16 @@ void SET_SYS::GetQuestFlag(HLERequestContext& ctx) {
|
||||||
rb.PushEnum(QuestFlag::Retail);
|
rb.PushEnum(QuestFlag::Retail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SET_SYS::SetRegionCode(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
region_code = rp.PopEnum<RegionCode>();
|
||||||
|
|
||||||
|
LOG_INFO(Service_SET, "called, region_code={}", region_code);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
void SET_SYS::GetPrimaryAlbumStorage(HLERequestContext& ctx) {
|
void SET_SYS::GetPrimaryAlbumStorage(HLERequestContext& ctx) {
|
||||||
LOG_WARNING(Service_SET, "(STUBBED) called");
|
LOG_WARNING(Service_SET, "(STUBBED) called");
|
||||||
|
|
||||||
|
@ -286,7 +333,7 @@ void SET_SYS::GetPrimaryAlbumStorage(HLERequestContext& ctx) {
|
||||||
void SET_SYS::GetSleepSettings(HLERequestContext& ctx) {
|
void SET_SYS::GetSleepSettings(HLERequestContext& ctx) {
|
||||||
LOG_INFO(Service_SET, "called");
|
LOG_INFO(Service_SET, "called");
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 7};
|
IPC::ResponseBuilder rb{ctx, 5};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
rb.PushRaw(sleep_settings);
|
rb.PushRaw(sleep_settings);
|
||||||
}
|
}
|
||||||
|
@ -434,10 +481,18 @@ void SET_SYS::GetChineseTraditionalInputMethod(HLERequestContext& ctx) {
|
||||||
rb.PushEnum(ChineseTraditionalInputMethod::Unknown0);
|
rb.PushEnum(ChineseTraditionalInputMethod::Unknown0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SET_SYS::GetFieldTestingFlag(HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_SET, "(STUBBED) called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.Push<u8>(false);
|
||||||
|
}
|
||||||
|
|
||||||
SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
|
SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, nullptr, "SetLanguageCode"},
|
{0, &SET_SYS::SetLanguageCode, "SetLanguageCode"},
|
||||||
{1, nullptr, "SetNetworkSettings"},
|
{1, nullptr, "SetNetworkSettings"},
|
||||||
{2, nullptr, "GetNetworkSettings"},
|
{2, nullptr, "GetNetworkSettings"},
|
||||||
{3, &SET_SYS::GetFirmwareVersion, "GetFirmwareVersion"},
|
{3, &SET_SYS::GetFirmwareVersion, "GetFirmwareVersion"},
|
||||||
|
@ -457,8 +512,8 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
|
||||||
{18, &SET_SYS::SetAccountSettings, "SetAccountSettings"},
|
{18, &SET_SYS::SetAccountSettings, "SetAccountSettings"},
|
||||||
{19, nullptr, "GetAudioVolume"},
|
{19, nullptr, "GetAudioVolume"},
|
||||||
{20, nullptr, "SetAudioVolume"},
|
{20, nullptr, "SetAudioVolume"},
|
||||||
{21, nullptr, "GetEulaVersions"},
|
{21, &SET_SYS::GetEulaVersions, "GetEulaVersions"},
|
||||||
{22, nullptr, "SetEulaVersions"},
|
{22, &SET_SYS::SetEulaVersions, "SetEulaVersions"},
|
||||||
{23, &SET_SYS::GetColorSetId, "GetColorSetId"},
|
{23, &SET_SYS::GetColorSetId, "GetColorSetId"},
|
||||||
{24, &SET_SYS::SetColorSetId, "SetColorSetId"},
|
{24, &SET_SYS::SetColorSetId, "SetColorSetId"},
|
||||||
{25, nullptr, "GetConsoleInformationUploadFlag"},
|
{25, nullptr, "GetConsoleInformationUploadFlag"},
|
||||||
|
@ -491,7 +546,7 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
|
||||||
{54, nullptr, "SetDeviceTimeZoneLocationName"},
|
{54, nullptr, "SetDeviceTimeZoneLocationName"},
|
||||||
{55, nullptr, "GetWirelessCertificationFileSize"},
|
{55, nullptr, "GetWirelessCertificationFileSize"},
|
||||||
{56, nullptr, "GetWirelessCertificationFile"},
|
{56, nullptr, "GetWirelessCertificationFile"},
|
||||||
{57, nullptr, "SetRegionCode"},
|
{57, &SET_SYS::SetRegionCode, "SetRegionCode"},
|
||||||
{58, nullptr, "GetNetworkSystemClockContext"},
|
{58, nullptr, "GetNetworkSystemClockContext"},
|
||||||
{59, nullptr, "SetNetworkSystemClockContext"},
|
{59, nullptr, "SetNetworkSystemClockContext"},
|
||||||
{60, nullptr, "IsUserSystemClockAutomaticCorrectionEnabled"},
|
{60, nullptr, "IsUserSystemClockAutomaticCorrectionEnabled"},
|
||||||
|
@ -635,7 +690,7 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
|
||||||
{198, nullptr, "SetButtonConfigRegisteredSettingsEmbedded"},
|
{198, nullptr, "SetButtonConfigRegisteredSettingsEmbedded"},
|
||||||
{199, nullptr, "GetButtonConfigRegisteredSettings"},
|
{199, nullptr, "GetButtonConfigRegisteredSettings"},
|
||||||
{200, nullptr, "SetButtonConfigRegisteredSettings"},
|
{200, nullptr, "SetButtonConfigRegisteredSettings"},
|
||||||
{201, nullptr, "GetFieldTestingFlag"},
|
{201, &SET_SYS::GetFieldTestingFlag, "GetFieldTestingFlag"},
|
||||||
{202, nullptr, "SetFieldTestingFlag"},
|
{202, nullptr, "SetFieldTestingFlag"},
|
||||||
{203, nullptr, "GetPanelCrcMode"},
|
{203, nullptr, "GetPanelCrcMode"},
|
||||||
{204, nullptr, "SetPanelCrcMode"},
|
{204, nullptr, "SetPanelCrcMode"},
|
||||||
|
|
|
@ -118,6 +118,22 @@ private:
|
||||||
Never,
|
Never,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// This is nn::settings::system::RegionCode
|
||||||
|
enum class RegionCode : u32 {
|
||||||
|
Japan,
|
||||||
|
Usa,
|
||||||
|
Europe,
|
||||||
|
Australia,
|
||||||
|
HongKongTaiwanKorea,
|
||||||
|
China,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// This is nn::settings::system::EulaVersionClockType
|
||||||
|
enum class EulaVersionClockType : u32 {
|
||||||
|
NetworkSystemClock,
|
||||||
|
SteadyClock,
|
||||||
|
};
|
||||||
|
|
||||||
/// This is nn::settings::system::SleepFlag
|
/// This is nn::settings::system::SleepFlag
|
||||||
struct SleepFlag {
|
struct SleepFlag {
|
||||||
union {
|
union {
|
||||||
|
@ -242,10 +258,24 @@ private:
|
||||||
};
|
};
|
||||||
static_assert(sizeof(InitialLaunchSettings) == 0x20, "InitialLaunchSettings is incorrect size");
|
static_assert(sizeof(InitialLaunchSettings) == 0x20, "InitialLaunchSettings is incorrect size");
|
||||||
|
|
||||||
|
/// This is nn::settings::system::InitialLaunchSettings
|
||||||
|
struct EulaVersion {
|
||||||
|
u32 version;
|
||||||
|
RegionCode region_code;
|
||||||
|
EulaVersionClockType clock_type;
|
||||||
|
INSERT_PADDING_BYTES(0x4);
|
||||||
|
s64 posix_time;
|
||||||
|
Time::Clock::SteadyClockTimePoint timestamp;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(EulaVersion) == 0x30, "EulaVersion is incorrect size");
|
||||||
|
|
||||||
|
void SetLanguageCode(HLERequestContext& ctx);
|
||||||
void GetFirmwareVersion(HLERequestContext& ctx);
|
void GetFirmwareVersion(HLERequestContext& ctx);
|
||||||
void GetFirmwareVersion2(HLERequestContext& ctx);
|
void GetFirmwareVersion2(HLERequestContext& ctx);
|
||||||
void GetAccountSettings(HLERequestContext& ctx);
|
void GetAccountSettings(HLERequestContext& ctx);
|
||||||
void SetAccountSettings(HLERequestContext& ctx);
|
void SetAccountSettings(HLERequestContext& ctx);
|
||||||
|
void GetEulaVersions(HLERequestContext& ctx);
|
||||||
|
void SetEulaVersions(HLERequestContext& ctx);
|
||||||
void GetColorSetId(HLERequestContext& ctx);
|
void GetColorSetId(HLERequestContext& ctx);
|
||||||
void SetColorSetId(HLERequestContext& ctx);
|
void SetColorSetId(HLERequestContext& ctx);
|
||||||
void GetNotificationSettings(HLERequestContext& ctx);
|
void GetNotificationSettings(HLERequestContext& ctx);
|
||||||
|
@ -257,6 +287,7 @@ private:
|
||||||
void GetTvSettings(HLERequestContext& ctx);
|
void GetTvSettings(HLERequestContext& ctx);
|
||||||
void SetTvSettings(HLERequestContext& ctx);
|
void SetTvSettings(HLERequestContext& ctx);
|
||||||
void GetQuestFlag(HLERequestContext& ctx);
|
void GetQuestFlag(HLERequestContext& ctx);
|
||||||
|
void SetRegionCode(HLERequestContext& ctx);
|
||||||
void GetPrimaryAlbumStorage(HLERequestContext& ctx);
|
void GetPrimaryAlbumStorage(HLERequestContext& ctx);
|
||||||
void GetSleepSettings(HLERequestContext& ctx);
|
void GetSleepSettings(HLERequestContext& ctx);
|
||||||
void SetSleepSettings(HLERequestContext& ctx);
|
void SetSleepSettings(HLERequestContext& ctx);
|
||||||
|
@ -273,6 +304,7 @@ private:
|
||||||
void SetAppletLaunchFlags(HLERequestContext& ctx);
|
void SetAppletLaunchFlags(HLERequestContext& ctx);
|
||||||
void GetKeyboardLayout(HLERequestContext& ctx);
|
void GetKeyboardLayout(HLERequestContext& ctx);
|
||||||
void GetChineseTraditionalInputMethod(HLERequestContext& ctx);
|
void GetChineseTraditionalInputMethod(HLERequestContext& ctx);
|
||||||
|
void GetFieldTestingFlag(HLERequestContext& ctx);
|
||||||
|
|
||||||
AccountSettings account_settings{
|
AccountSettings account_settings{
|
||||||
.flags = {},
|
.flags = {},
|
||||||
|
@ -312,6 +344,12 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
u32 applet_launch_flag{};
|
u32 applet_launch_flag{};
|
||||||
|
|
||||||
|
std::vector<EulaVersion> eula_versions{};
|
||||||
|
|
||||||
|
RegionCode region_code;
|
||||||
|
|
||||||
|
LanguageCode language_code_setting;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Service::Set
|
} // namespace Service::Set
|
||||||
|
|
Loading…
Reference in New Issue