summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/service/am/am.h24
-rw-r--r--src/core/hle/service/set/set.cpp60
-rw-r--r--src/core/hle/service/set/set.h61
-rw-r--r--src/core/hle/service/set/set_sys.cpp310
-rw-r--r--src/core/hle/service/set/set_sys.h284
5 files changed, 625 insertions, 114 deletions
diff --git a/src/core/hle/service/am/am.h b/src/core/hle/service/am/am.h
index d4fd163da..054ef4a9f 100644
--- a/src/core/hle/service/am/am.h
+++ b/src/core/hle/service/am/am.h
@@ -22,30 +22,6 @@ class Nvnflinger;
22 22
23namespace Service::AM { 23namespace Service::AM {
24 24
25// This is nn::settings::Language
26enum SystemLanguage {
27 Japanese = 0,
28 English = 1, // en-US
29 French = 2,
30 German = 3,
31 Italian = 4,
32 Spanish = 5,
33 Chinese = 6,
34 Korean = 7,
35 Dutch = 8,
36 Portuguese = 9,
37 Russian = 10,
38 Taiwanese = 11,
39 BritishEnglish = 12, // en-GB
40 CanadianFrench = 13,
41 LatinAmericanSpanish = 14, // es-419
42 // 4.0.0+
43 SimplifiedChinese = 15,
44 TraditionalChinese = 16,
45 // 10.1.0+
46 BrazilianPortuguese = 17,
47};
48
49class AppletMessageQueue { 25class AppletMessageQueue {
50public: 26public:
51 // This is nn::am::AppletMessage 27 // This is nn::am::AppletMessage
diff --git a/src/core/hle/service/set/set.cpp b/src/core/hle/service/set/set.cpp
index 83f888c54..2082b8ef7 100644
--- a/src/core/hle/service/set/set.cpp
+++ b/src/core/hle/service/set/set.cpp
@@ -11,66 +11,6 @@
11 11
12namespace Service::Set { 12namespace Service::Set {
13namespace { 13namespace {
14constexpr std::array<LanguageCode, 18> available_language_codes = {{
15 LanguageCode::JA,
16 LanguageCode::EN_US,
17 LanguageCode::FR,
18 LanguageCode::DE,
19 LanguageCode::IT,
20 LanguageCode::ES,
21 LanguageCode::ZH_CN,
22 LanguageCode::KO,
23 LanguageCode::NL,
24 LanguageCode::PT,
25 LanguageCode::RU,
26 LanguageCode::ZH_TW,
27 LanguageCode::EN_GB,
28 LanguageCode::FR_CA,
29 LanguageCode::ES_419,
30 LanguageCode::ZH_HANS,
31 LanguageCode::ZH_HANT,
32 LanguageCode::PT_BR,
33}};
34
35enum class KeyboardLayout : u64 {
36 Japanese = 0,
37 EnglishUs = 1,
38 EnglishUsInternational = 2,
39 EnglishUk = 3,
40 French = 4,
41 FrenchCa = 5,
42 Spanish = 6,
43 SpanishLatin = 7,
44 German = 8,
45 Italian = 9,
46 Portuguese = 10,
47 Russian = 11,
48 Korean = 12,
49 ChineseSimplified = 13,
50 ChineseTraditional = 14,
51};
52
53constexpr std::array<std::pair<LanguageCode, KeyboardLayout>, 18> language_to_layout{{
54 {LanguageCode::JA, KeyboardLayout::Japanese},
55 {LanguageCode::EN_US, KeyboardLayout::EnglishUs},
56 {LanguageCode::FR, KeyboardLayout::French},
57 {LanguageCode::DE, KeyboardLayout::German},
58 {LanguageCode::IT, KeyboardLayout::Italian},
59 {LanguageCode::ES, KeyboardLayout::Spanish},
60 {LanguageCode::ZH_CN, KeyboardLayout::ChineseSimplified},
61 {LanguageCode::KO, KeyboardLayout::Korean},
62 {LanguageCode::NL, KeyboardLayout::EnglishUsInternational},
63 {LanguageCode::PT, KeyboardLayout::Portuguese},
64 {LanguageCode::RU, KeyboardLayout::Russian},
65 {LanguageCode::ZH_TW, KeyboardLayout::ChineseTraditional},
66 {LanguageCode::EN_GB, KeyboardLayout::EnglishUk},
67 {LanguageCode::FR_CA, KeyboardLayout::FrenchCa},
68 {LanguageCode::ES_419, KeyboardLayout::SpanishLatin},
69 {LanguageCode::ZH_HANS, KeyboardLayout::ChineseSimplified},
70 {LanguageCode::ZH_HANT, KeyboardLayout::ChineseTraditional},
71 {LanguageCode::PT_BR, KeyboardLayout::Portuguese},
72}};
73
74constexpr std::size_t PRE_4_0_0_MAX_ENTRIES = 0xF; 14constexpr std::size_t PRE_4_0_0_MAX_ENTRIES = 0xF;
75constexpr std::size_t POST_4_0_0_MAX_ENTRIES = 0x40; 15constexpr std::size_t POST_4_0_0_MAX_ENTRIES = 0x40;
76 16
diff --git a/src/core/hle/service/set/set.h b/src/core/hle/service/set/set.h
index 7fd3a7654..b61a3560d 100644
--- a/src/core/hle/service/set/set.h
+++ b/src/core/hle/service/set/set.h
@@ -32,6 +32,67 @@ enum class LanguageCode : u64 {
32 ZH_HANT = 0x00746E61482D687A, 32 ZH_HANT = 0x00746E61482D687A,
33 PT_BR = 0x00000052422D7470, 33 PT_BR = 0x00000052422D7470,
34}; 34};
35
36enum class KeyboardLayout : u64 {
37 Japanese = 0,
38 EnglishUs = 1,
39 EnglishUsInternational = 2,
40 EnglishUk = 3,
41 French = 4,
42 FrenchCa = 5,
43 Spanish = 6,
44 SpanishLatin = 7,
45 German = 8,
46 Italian = 9,
47 Portuguese = 10,
48 Russian = 11,
49 Korean = 12,
50 ChineseSimplified = 13,
51 ChineseTraditional = 14,
52};
53
54constexpr std::array<LanguageCode, 18> available_language_codes = {{
55 LanguageCode::JA,
56 LanguageCode::EN_US,
57 LanguageCode::FR,
58 LanguageCode::DE,
59 LanguageCode::IT,
60 LanguageCode::ES,
61 LanguageCode::ZH_CN,
62 LanguageCode::KO,
63 LanguageCode::NL,
64 LanguageCode::PT,
65 LanguageCode::RU,
66 LanguageCode::ZH_TW,
67 LanguageCode::EN_GB,
68 LanguageCode::FR_CA,
69 LanguageCode::ES_419,
70 LanguageCode::ZH_HANS,
71 LanguageCode::ZH_HANT,
72 LanguageCode::PT_BR,
73}};
74
75static constexpr std::array<std::pair<LanguageCode, KeyboardLayout>, 18> language_to_layout{{
76 {LanguageCode::JA, KeyboardLayout::Japanese},
77 {LanguageCode::EN_US, KeyboardLayout::EnglishUs},
78 {LanguageCode::FR, KeyboardLayout::French},
79 {LanguageCode::DE, KeyboardLayout::German},
80 {LanguageCode::IT, KeyboardLayout::Italian},
81 {LanguageCode::ES, KeyboardLayout::Spanish},
82 {LanguageCode::ZH_CN, KeyboardLayout::ChineseSimplified},
83 {LanguageCode::KO, KeyboardLayout::Korean},
84 {LanguageCode::NL, KeyboardLayout::EnglishUsInternational},
85 {LanguageCode::PT, KeyboardLayout::Portuguese},
86 {LanguageCode::RU, KeyboardLayout::Russian},
87 {LanguageCode::ZH_TW, KeyboardLayout::ChineseTraditional},
88 {LanguageCode::EN_GB, KeyboardLayout::EnglishUk},
89 {LanguageCode::FR_CA, KeyboardLayout::FrenchCa},
90 {LanguageCode::ES_419, KeyboardLayout::SpanishLatin},
91 {LanguageCode::ZH_HANS, KeyboardLayout::ChineseSimplified},
92 {LanguageCode::ZH_HANT, KeyboardLayout::ChineseTraditional},
93 {LanguageCode::PT_BR, KeyboardLayout::Portuguese},
94}};
95
35LanguageCode GetLanguageCodeFromIndex(std::size_t idx); 96LanguageCode GetLanguageCodeFromIndex(std::size_t idx);
36 97
37class SET final : public ServiceFramework<SET> { 98class SET final : public ServiceFramework<SET> {
diff --git a/src/core/hle/service/set/set_sys.cpp b/src/core/hle/service/set/set_sys.cpp
index 2e38d1cfc..297e78379 100644
--- a/src/core/hle/service/set/set_sys.cpp
+++ b/src/core/hle/service/set/set_sys.cpp
@@ -4,10 +4,12 @@
4#include "common/assert.h" 4#include "common/assert.h"
5#include "common/logging/log.h" 5#include "common/logging/log.h"
6#include "common/settings.h" 6#include "common/settings.h"
7#include "common/string_util.h"
7#include "core/file_sys/errors.h" 8#include "core/file_sys/errors.h"
8#include "core/file_sys/system_archive/system_version.h" 9#include "core/file_sys/system_archive/system_version.h"
9#include "core/hle/service/filesystem/filesystem.h" 10#include "core/hle/service/filesystem/filesystem.h"
10#include "core/hle/service/ipc_helpers.h" 11#include "core/hle/service/ipc_helpers.h"
12#include "core/hle/service/set/set.h"
11#include "core/hle/service/set/set_sys.h" 13#include "core/hle/service/set/set_sys.h"
12 14
13namespace Service::Set { 15namespace Service::Set {
@@ -83,21 +85,86 @@ void SET_SYS::GetFirmwareVersion2(HLERequestContext& ctx) {
83 GetFirmwareVersionImpl(ctx, GetFirmwareVersionType::Version2); 85 GetFirmwareVersionImpl(ctx, GetFirmwareVersionType::Version2);
84} 86}
85 87
88void SET_SYS::GetAccountSettings(HLERequestContext& ctx) {
89 LOG_INFO(Service_SET, "called");
90
91 IPC::ResponseBuilder rb{ctx, 3};
92 rb.Push(ResultSuccess);
93 rb.PushRaw(account_settings);
94}
95
96void SET_SYS::SetAccountSettings(HLERequestContext& ctx) {
97 IPC::RequestParser rp{ctx};
98 account_settings = rp.PopRaw<AccountSettings>();
99
100 LOG_INFO(Service_SET, "called, account_settings_flags={}", account_settings.flags);
101
102 IPC::ResponseBuilder rb{ctx, 2};
103 rb.Push(ResultSuccess);
104}
105
86void SET_SYS::GetColorSetId(HLERequestContext& ctx) { 106void SET_SYS::GetColorSetId(HLERequestContext& ctx) {
87 LOG_DEBUG(Service_SET, "called"); 107 LOG_DEBUG(Service_SET, "called");
88 108
89 IPC::ResponseBuilder rb{ctx, 3}; 109 IPC::ResponseBuilder rb{ctx, 3};
90
91 rb.Push(ResultSuccess); 110 rb.Push(ResultSuccess);
92 rb.PushEnum(color_set); 111 rb.PushEnum(color_set);
93} 112}
94 113
95void SET_SYS::SetColorSetId(HLERequestContext& ctx) { 114void SET_SYS::SetColorSetId(HLERequestContext& ctx) {
96 LOG_DEBUG(Service_SET, "called");
97
98 IPC::RequestParser rp{ctx}; 115 IPC::RequestParser rp{ctx};
99 color_set = rp.PopEnum<ColorSet>(); 116 color_set = rp.PopEnum<ColorSet>();
100 117
118 LOG_DEBUG(Service_SET, "called, color_set={}", color_set);
119
120 IPC::ResponseBuilder rb{ctx, 2};
121 rb.Push(ResultSuccess);
122}
123
124void SET_SYS::GetNotificationSettings(HLERequestContext& ctx) {
125 LOG_INFO(Service_SET, "called");
126
127 IPC::ResponseBuilder rb{ctx, 8};
128 rb.Push(ResultSuccess);
129 rb.PushRaw(notification_settings);
130}
131
132void SET_SYS::SetNotificationSettings(HLERequestContext& ctx) {
133 IPC::RequestParser rp{ctx};
134 notification_settings = rp.PopRaw<NotificationSettings>();
135
136 LOG_INFO(Service_SET, "called, flags={}, volume={}, head_time={}:{}, tailt_time={}:{}",
137 notification_settings.flags.raw, notification_settings.volume,
138 notification_settings.start_time.hour, notification_settings.start_time.minute,
139 notification_settings.stop_time.hour, notification_settings.stop_time.minute);
140
141 IPC::ResponseBuilder rb{ctx, 2};
142 rb.Push(ResultSuccess);
143}
144
145void SET_SYS::GetAccountNotificationSettings(HLERequestContext& ctx) {
146 LOG_INFO(Service_SET, "called");
147
148 ctx.WriteBuffer(account_notifications);
149
150 IPC::ResponseBuilder rb{ctx, 3};
151 rb.Push(ResultSuccess);
152 rb.Push(account_notifications.size());
153}
154
155void SET_SYS::SetAccountNotificationSettings(HLERequestContext& ctx) {
156 const auto elements = ctx.GetReadBufferNumElements<AccountNotificationSettings>();
157 const auto buffer_data = ctx.ReadBuffer();
158
159 LOG_INFO(Service_SET, "called, elements={}", elements);
160
161 account_notifications.resize(elements);
162 for (std::size_t index = 0; index < elements; index++) {
163 const std::size_t start_index = index * sizeof(AccountNotificationSettings);
164 memcpy(account_notifications.data() + start_index, buffer_data.data() + start_index,
165 sizeof(AccountNotificationSettings));
166 }
167
101 IPC::ResponseBuilder rb{ctx, 2}; 168 IPC::ResponseBuilder rb{ctx, 2};
102 rb.Push(ResultSuccess); 169 rb.Push(ResultSuccess);
103} 170}
@@ -177,11 +244,194 @@ void SET_SYS::GetSettingsItemValue(HLERequestContext& ctx) {
177 rb.Push(response); 244 rb.Push(response);
178} 245}
179 246
247void SET_SYS::GetTvSettings(HLERequestContext& ctx) {
248 LOG_INFO(Service_SET, "called");
249
250 IPC::ResponseBuilder rb{ctx, 10};
251 rb.Push(ResultSuccess);
252 rb.PushRaw(tv_settings);
253}
254
255void SET_SYS::SetTvSettings(HLERequestContext& ctx) {
256 IPC::RequestParser rp{ctx};
257 tv_settings = rp.PopRaw<TvSettings>();
258
259 LOG_INFO(Service_SET,
260 "called, flags={}, cmu_mode={}, constrast_ratio={}, hdmi_content_type={}, "
261 "rgb_range={}, tv_gama={}, tv_resolution={}, tv_underscan={}",
262 tv_settings.flags.raw, tv_settings.cmu_mode, tv_settings.constrast_ratio,
263 tv_settings.hdmi_content_type, tv_settings.rgb_range, tv_settings.tv_gama,
264 tv_settings.tv_resolution, tv_settings.tv_underscan);
265
266 IPC::ResponseBuilder rb{ctx, 2};
267 rb.Push(ResultSuccess);
268}
269
270void SET_SYS::GetQuestFlag(HLERequestContext& ctx) {
271 LOG_WARNING(Service_SET, "(STUBBED) called");
272
273 IPC::ResponseBuilder rb{ctx, 3};
274 rb.Push(ResultSuccess);
275 rb.PushEnum(QuestFlag::Retail);
276}
277
278void SET_SYS::GetPrimaryAlbumStorage(HLERequestContext& ctx) {
279 LOG_WARNING(Service_SET, "(STUBBED) called");
280
281 IPC::ResponseBuilder rb{ctx, 3};
282 rb.Push(ResultSuccess);
283 rb.PushEnum(PrimaryAlbumStorage::SdCard);
284}
285
286void SET_SYS::GetSleepSettings(HLERequestContext& ctx) {
287 LOG_INFO(Service_SET, "called");
288
289 IPC::ResponseBuilder rb{ctx, 7};
290 rb.Push(ResultSuccess);
291 rb.PushRaw(sleep_settings);
292}
293
294void SET_SYS::SetSleepSettings(HLERequestContext& ctx) {
295 IPC::RequestParser rp{ctx};
296 sleep_settings = rp.PopRaw<SleepSettings>();
297
298 LOG_INFO(Service_SET, "called, flags={}, handheld_sleep_plan={}, console_sleep_plan={}",
299 sleep_settings.flags.raw, sleep_settings.handheld_sleep_plan,
300 sleep_settings.console_sleep_plan);
301
302 IPC::ResponseBuilder rb{ctx, 2};
303 rb.Push(ResultSuccess);
304}
305
306void SET_SYS::GetInitialLaunchSettings(HLERequestContext& ctx) {
307 LOG_INFO(Service_SET, "called");
308 IPC::ResponseBuilder rb{ctx, 10};
309 rb.Push(ResultSuccess);
310 rb.PushRaw(launch_settings);
311}
312
313void SET_SYS::SetInitialLaunchSettings(HLERequestContext& ctx) {
314 IPC::RequestParser rp{ctx};
315 launch_settings = rp.PopRaw<InitialLaunchSettings>();
316
317 LOG_INFO(Service_SET, "called, flags={}, timestamp={}", launch_settings.flags.raw,
318 launch_settings.timestamp.time_point);
319
320 IPC::ResponseBuilder rb{ctx, 2};
321 rb.Push(ResultSuccess);
322}
323
180void SET_SYS::GetDeviceNickName(HLERequestContext& ctx) { 324void SET_SYS::GetDeviceNickName(HLERequestContext& ctx) {
181 LOG_DEBUG(Service_SET, "called"); 325 LOG_DEBUG(Service_SET, "called");
326
327 ctx.WriteBuffer(::Settings::values.device_name.GetValue());
328
182 IPC::ResponseBuilder rb{ctx, 2}; 329 IPC::ResponseBuilder rb{ctx, 2};
183 rb.Push(ResultSuccess); 330 rb.Push(ResultSuccess);
184 ctx.WriteBuffer(::Settings::values.device_name.GetValue()); 331}
332
333void SET_SYS::SetDeviceNickName(HLERequestContext& ctx) {
334 const std::string device_name = Common::StringFromBuffer(ctx.ReadBuffer());
335
336 LOG_INFO(Service_SET, "called, device_name={}", device_name);
337
338 ::Settings::values.device_name = device_name;
339
340 IPC::ResponseBuilder rb{ctx, 2};
341 rb.Push(ResultSuccess);
342}
343
344void SET_SYS::GetProductModel(HLERequestContext& ctx) {
345 const u32 product_model = 1;
346
347 LOG_WARNING(Service_SET, "(STUBBED) called, product_model={}", product_model);
348 IPC::ResponseBuilder rb{ctx, 3};
349 rb.Push(ResultSuccess);
350 rb.Push(product_model);
351}
352
353void SET_SYS::GetMiiAuthorId(HLERequestContext& ctx) {
354 const auto author_id = Common::UUID::MakeDefault();
355
356 LOG_WARNING(Service_SET, "(STUBBED) called, author_id={}", author_id.FormattedString());
357
358 IPC::ResponseBuilder rb{ctx, 6};
359 rb.Push(ResultSuccess);
360 rb.PushRaw(author_id);
361}
362
363void SET_SYS::GetAutoUpdateEnableFlag(HLERequestContext& ctx) {
364 u8 auto_update_flag{};
365
366 LOG_WARNING(Service_SET, "(STUBBED) called, auto_update_flag={}", auto_update_flag);
367
368 IPC::ResponseBuilder rb{ctx, 3};
369 rb.Push(ResultSuccess);
370 rb.Push(auto_update_flag);
371}
372
373void SET_SYS::GetBatteryPercentageFlag(HLERequestContext& ctx) {
374 u8 battery_percentage_flag{1};
375
376 LOG_WARNING(Service_SET, "(STUBBED) called, battery_percentage_flag={}",
377 battery_percentage_flag);
378
379 IPC::ResponseBuilder rb{ctx, 3};
380 rb.Push(ResultSuccess);
381 rb.Push(battery_percentage_flag);
382}
383
384void SET_SYS::GetErrorReportSharePermission(HLERequestContext& ctx) {
385 LOG_WARNING(Service_SET, "(STUBBED) called");
386
387 IPC::ResponseBuilder rb{ctx, 3};
388 rb.Push(ResultSuccess);
389 rb.PushEnum(ErrorReportSharePermission::Denied);
390}
391
392void SET_SYS::GetAppletLaunchFlags(HLERequestContext& ctx) {
393 LOG_INFO(Service_SET, "called, applet_launch_flag={}", applet_launch_flag);
394
395 IPC::ResponseBuilder rb{ctx, 3};
396 rb.Push(ResultSuccess);
397 rb.Push(applet_launch_flag);
398}
399
400void SET_SYS::SetAppletLaunchFlags(HLERequestContext& ctx) {
401 IPC::RequestParser rp{ctx};
402 applet_launch_flag = rp.Pop<u32>();
403
404 LOG_INFO(Service_SET, "called, applet_launch_flag={}", applet_launch_flag);
405
406 IPC::ResponseBuilder rb{ctx, 2};
407 rb.Push(ResultSuccess);
408}
409
410void SET_SYS::GetKeyboardLayout(HLERequestContext& ctx) {
411 const auto language_code =
412 available_language_codes[static_cast<s32>(::Settings::values.language_index.GetValue())];
413 const auto key_code =
414 std::find_if(language_to_layout.cbegin(), language_to_layout.cend(),
415 [=](const auto& element) { return element.first == language_code; });
416
417 KeyboardLayout selected_keyboard_layout = KeyboardLayout::EnglishUs;
418 if (key_code != language_to_layout.end()) {
419 selected_keyboard_layout = key_code->second;
420 }
421
422 LOG_INFO(Service_SET, "called, selected_keyboard_layout={}", selected_keyboard_layout);
423
424 IPC::ResponseBuilder rb{ctx, 3};
425 rb.Push(ResultSuccess);
426 rb.Push(static_cast<u32>(selected_keyboard_layout));
427}
428
429void SET_SYS::GetChineseTraditionalInputMethod(HLERequestContext& ctx) {
430 LOG_WARNING(Service_SET, "(STUBBED) called");
431
432 IPC::ResponseBuilder rb{ctx, 3};
433 rb.Push(ResultSuccess);
434 rb.PushEnum(ChineseTraditionalInputMethod::Unknown0);
185} 435}
186 436
187SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} { 437SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
@@ -203,8 +453,8 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
203 {14, nullptr, "SetExternalSteadyClockSourceId"}, 453 {14, nullptr, "SetExternalSteadyClockSourceId"},
204 {15, nullptr, "GetUserSystemClockContext"}, 454 {15, nullptr, "GetUserSystemClockContext"},
205 {16, nullptr, "SetUserSystemClockContext"}, 455 {16, nullptr, "SetUserSystemClockContext"},
206 {17, nullptr, "GetAccountSettings"}, 456 {17, &SET_SYS::GetAccountSettings, "GetAccountSettings"},
207 {18, nullptr, "SetAccountSettings"}, 457 {18, &SET_SYS::SetAccountSettings, "SetAccountSettings"},
208 {19, nullptr, "GetAudioVolume"}, 458 {19, nullptr, "GetAudioVolume"},
209 {20, nullptr, "SetAudioVolume"}, 459 {20, nullptr, "SetAudioVolume"},
210 {21, nullptr, "GetEulaVersions"}, 460 {21, nullptr, "GetEulaVersions"},
@@ -215,23 +465,23 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
215 {26, nullptr, "SetConsoleInformationUploadFlag"}, 465 {26, nullptr, "SetConsoleInformationUploadFlag"},
216 {27, nullptr, "GetAutomaticApplicationDownloadFlag"}, 466 {27, nullptr, "GetAutomaticApplicationDownloadFlag"},
217 {28, nullptr, "SetAutomaticApplicationDownloadFlag"}, 467 {28, nullptr, "SetAutomaticApplicationDownloadFlag"},
218 {29, nullptr, "GetNotificationSettings"}, 468 {29, &SET_SYS::GetNotificationSettings, "GetNotificationSettings"},
219 {30, nullptr, "SetNotificationSettings"}, 469 {30, &SET_SYS::SetNotificationSettings, "SetNotificationSettings"},
220 {31, nullptr, "GetAccountNotificationSettings"}, 470 {31, &SET_SYS::GetAccountNotificationSettings, "GetAccountNotificationSettings"},
221 {32, nullptr, "SetAccountNotificationSettings"}, 471 {32, &SET_SYS::SetAccountNotificationSettings, "SetAccountNotificationSettings"},
222 {35, nullptr, "GetVibrationMasterVolume"}, 472 {35, nullptr, "GetVibrationMasterVolume"},
223 {36, nullptr, "SetVibrationMasterVolume"}, 473 {36, nullptr, "SetVibrationMasterVolume"},
224 {37, &SET_SYS::GetSettingsItemValueSize, "GetSettingsItemValueSize"}, 474 {37, &SET_SYS::GetSettingsItemValueSize, "GetSettingsItemValueSize"},
225 {38, &SET_SYS::GetSettingsItemValue, "GetSettingsItemValue"}, 475 {38, &SET_SYS::GetSettingsItemValue, "GetSettingsItemValue"},
226 {39, nullptr, "GetTvSettings"}, 476 {39, &SET_SYS::GetTvSettings, "GetTvSettings"},
227 {40, nullptr, "SetTvSettings"}, 477 {40, &SET_SYS::SetTvSettings, "SetTvSettings"},
228 {41, nullptr, "GetEdid"}, 478 {41, nullptr, "GetEdid"},
229 {42, nullptr, "SetEdid"}, 479 {42, nullptr, "SetEdid"},
230 {43, nullptr, "GetAudioOutputMode"}, 480 {43, nullptr, "GetAudioOutputMode"},
231 {44, nullptr, "SetAudioOutputMode"}, 481 {44, nullptr, "SetAudioOutputMode"},
232 {45, nullptr, "IsForceMuteOnHeadphoneRemoved"}, 482 {45, nullptr, "IsForceMuteOnHeadphoneRemoved"},
233 {46, nullptr, "SetForceMuteOnHeadphoneRemoved"}, 483 {46, nullptr, "SetForceMuteOnHeadphoneRemoved"},
234 {47, nullptr, "GetQuestFlag"}, 484 {47, &SET_SYS::GetQuestFlag, "GetQuestFlag"},
235 {48, nullptr, "SetQuestFlag"}, 485 {48, nullptr, "SetQuestFlag"},
236 {49, nullptr, "GetDataDeletionSettings"}, 486 {49, nullptr, "GetDataDeletionSettings"},
237 {50, nullptr, "SetDataDeletionSettings"}, 487 {50, nullptr, "SetDataDeletionSettings"},
@@ -247,7 +497,7 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
247 {60, nullptr, "IsUserSystemClockAutomaticCorrectionEnabled"}, 497 {60, nullptr, "IsUserSystemClockAutomaticCorrectionEnabled"},
248 {61, nullptr, "SetUserSystemClockAutomaticCorrectionEnabled"}, 498 {61, nullptr, "SetUserSystemClockAutomaticCorrectionEnabled"},
249 {62, nullptr, "GetDebugModeFlag"}, 499 {62, nullptr, "GetDebugModeFlag"},
250 {63, nullptr, "GetPrimaryAlbumStorage"}, 500 {63, &SET_SYS::GetPrimaryAlbumStorage, "GetPrimaryAlbumStorage"},
251 {64, nullptr, "SetPrimaryAlbumStorage"}, 501 {64, nullptr, "SetPrimaryAlbumStorage"},
252 {65, nullptr, "GetUsb30EnableFlag"}, 502 {65, nullptr, "GetUsb30EnableFlag"},
253 {66, nullptr, "SetUsb30EnableFlag"}, 503 {66, nullptr, "SetUsb30EnableFlag"},
@@ -255,15 +505,15 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
255 {68, nullptr, "GetSerialNumber"}, 505 {68, nullptr, "GetSerialNumber"},
256 {69, nullptr, "GetNfcEnableFlag"}, 506 {69, nullptr, "GetNfcEnableFlag"},
257 {70, nullptr, "SetNfcEnableFlag"}, 507 {70, nullptr, "SetNfcEnableFlag"},
258 {71, nullptr, "GetSleepSettings"}, 508 {71, &SET_SYS::GetSleepSettings, "GetSleepSettings"},
259 {72, nullptr, "SetSleepSettings"}, 509 {72, &SET_SYS::SetSleepSettings, "SetSleepSettings"},
260 {73, nullptr, "GetWirelessLanEnableFlag"}, 510 {73, nullptr, "GetWirelessLanEnableFlag"},
261 {74, nullptr, "SetWirelessLanEnableFlag"}, 511 {74, nullptr, "SetWirelessLanEnableFlag"},
262 {75, nullptr, "GetInitialLaunchSettings"}, 512 {75, &SET_SYS::GetInitialLaunchSettings, "GetInitialLaunchSettings"},
263 {76, nullptr, "SetInitialLaunchSettings"}, 513 {76, &SET_SYS::SetInitialLaunchSettings, "SetInitialLaunchSettings"},
264 {77, &SET_SYS::GetDeviceNickName, "GetDeviceNickName"}, 514 {77, &SET_SYS::GetDeviceNickName, "GetDeviceNickName"},
265 {78, nullptr, "SetDeviceNickName"}, 515 {78, &SET_SYS::SetDeviceNickName, "SetDeviceNickName"},
266 {79, nullptr, "GetProductModel"}, 516 {79, &SET_SYS::GetProductModel, "GetProductModel"},
267 {80, nullptr, "GetLdnChannel"}, 517 {80, nullptr, "GetLdnChannel"},
268 {81, nullptr, "SetLdnChannel"}, 518 {81, nullptr, "SetLdnChannel"},
269 {82, nullptr, "AcquireTelemetryDirtyFlagEventHandle"}, 519 {82, nullptr, "AcquireTelemetryDirtyFlagEventHandle"},
@@ -274,16 +524,16 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
274 {87, nullptr, "SetPtmFuelGaugeParameter"}, 524 {87, nullptr, "SetPtmFuelGaugeParameter"},
275 {88, nullptr, "GetBluetoothEnableFlag"}, 525 {88, nullptr, "GetBluetoothEnableFlag"},
276 {89, nullptr, "SetBluetoothEnableFlag"}, 526 {89, nullptr, "SetBluetoothEnableFlag"},
277 {90, nullptr, "GetMiiAuthorId"}, 527 {90, &SET_SYS::GetMiiAuthorId, "GetMiiAuthorId"},
278 {91, nullptr, "SetShutdownRtcValue"}, 528 {91, nullptr, "SetShutdownRtcValue"},
279 {92, nullptr, "GetShutdownRtcValue"}, 529 {92, nullptr, "GetShutdownRtcValue"},
280 {93, nullptr, "AcquireFatalDirtyFlagEventHandle"}, 530 {93, nullptr, "AcquireFatalDirtyFlagEventHandle"},
281 {94, nullptr, "GetFatalDirtyFlags"}, 531 {94, nullptr, "GetFatalDirtyFlags"},
282 {95, nullptr, "GetAutoUpdateEnableFlag"}, 532 {95, &SET_SYS::GetAutoUpdateEnableFlag, "GetAutoUpdateEnableFlag"},
283 {96, nullptr, "SetAutoUpdateEnableFlag"}, 533 {96, nullptr, "SetAutoUpdateEnableFlag"},
284 {97, nullptr, "GetNxControllerSettings"}, 534 {97, nullptr, "GetNxControllerSettings"},
285 {98, nullptr, "SetNxControllerSettings"}, 535 {98, nullptr, "SetNxControllerSettings"},
286 {99, nullptr, "GetBatteryPercentageFlag"}, 536 {99, &SET_SYS::GetBatteryPercentageFlag, "GetBatteryPercentageFlag"},
287 {100, nullptr, "SetBatteryPercentageFlag"}, 537 {100, nullptr, "SetBatteryPercentageFlag"},
288 {101, nullptr, "GetExternalRtcResetFlag"}, 538 {101, nullptr, "GetExternalRtcResetFlag"},
289 {102, nullptr, "SetExternalRtcResetFlag"}, 539 {102, nullptr, "SetExternalRtcResetFlag"},
@@ -308,10 +558,10 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
308 {121, nullptr, "SetPushNotificationActivityModeOnSleep"}, 558 {121, nullptr, "SetPushNotificationActivityModeOnSleep"},
309 {122, nullptr, "GetServiceDiscoveryControlSettings"}, 559 {122, nullptr, "GetServiceDiscoveryControlSettings"},
310 {123, nullptr, "SetServiceDiscoveryControlSettings"}, 560 {123, nullptr, "SetServiceDiscoveryControlSettings"},
311 {124, nullptr, "GetErrorReportSharePermission"}, 561 {124, &SET_SYS::GetErrorReportSharePermission, "GetErrorReportSharePermission"},
312 {125, nullptr, "SetErrorReportSharePermission"}, 562 {125, nullptr, "SetErrorReportSharePermission"},
313 {126, nullptr, "GetAppletLaunchFlags"}, 563 {126, &SET_SYS::GetAppletLaunchFlags, "GetAppletLaunchFlags"},
314 {127, nullptr, "SetAppletLaunchFlags"}, 564 {127, &SET_SYS::SetAppletLaunchFlags, "SetAppletLaunchFlags"},
315 {128, nullptr, "GetConsoleSixAxisSensorAccelerationBias"}, 565 {128, nullptr, "GetConsoleSixAxisSensorAccelerationBias"},
316 {129, nullptr, "SetConsoleSixAxisSensorAccelerationBias"}, 566 {129, nullptr, "SetConsoleSixAxisSensorAccelerationBias"},
317 {130, nullptr, "GetConsoleSixAxisSensorAngularVelocityBias"}, 567 {130, nullptr, "GetConsoleSixAxisSensorAngularVelocityBias"},
@@ -320,7 +570,7 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
320 {133, nullptr, "SetConsoleSixAxisSensorAccelerationGain"}, 570 {133, nullptr, "SetConsoleSixAxisSensorAccelerationGain"},
321 {134, nullptr, "GetConsoleSixAxisSensorAngularVelocityGain"}, 571 {134, nullptr, "GetConsoleSixAxisSensorAngularVelocityGain"},
322 {135, nullptr, "SetConsoleSixAxisSensorAngularVelocityGain"}, 572 {135, nullptr, "SetConsoleSixAxisSensorAngularVelocityGain"},
323 {136, nullptr, "GetKeyboardLayout"}, 573 {136, &SET_SYS::GetKeyboardLayout, "GetKeyboardLayout"},
324 {137, nullptr, "SetKeyboardLayout"}, 574 {137, nullptr, "SetKeyboardLayout"},
325 {138, nullptr, "GetWebInspectorFlag"}, 575 {138, nullptr, "GetWebInspectorFlag"},
326 {139, nullptr, "GetAllowedSslHosts"}, 576 {139, nullptr, "GetAllowedSslHosts"},
@@ -354,7 +604,7 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
354 {167, nullptr, "SetUsb30DeviceEnableFlag"}, 604 {167, nullptr, "SetUsb30DeviceEnableFlag"},
355 {168, nullptr, "GetThemeId"}, 605 {168, nullptr, "GetThemeId"},
356 {169, nullptr, "SetThemeId"}, 606 {169, nullptr, "SetThemeId"},
357 {170, nullptr, "GetChineseTraditionalInputMethod"}, 607 {170, &SET_SYS::GetChineseTraditionalInputMethod, "GetChineseTraditionalInputMethod"},
358 {171, nullptr, "SetChineseTraditionalInputMethod"}, 608 {171, nullptr, "SetChineseTraditionalInputMethod"},
359 {172, nullptr, "GetPtmCycleCountReliability"}, 609 {172, nullptr, "GetPtmCycleCountReliability"},
360 {173, nullptr, "SetPtmCycleCountReliability"}, 610 {173, nullptr, "SetPtmCycleCountReliability"},
@@ -391,6 +641,10 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
391 {204, nullptr, "SetPanelCrcMode"}, 641 {204, nullptr, "SetPanelCrcMode"},
392 {205, nullptr, "GetNxControllerSettingsEx"}, 642 {205, nullptr, "GetNxControllerSettingsEx"},
393 {206, nullptr, "SetNxControllerSettingsEx"}, 643 {206, nullptr, "SetNxControllerSettingsEx"},
644 {207, nullptr, "GetHearingProtectionSafeguardFlag"},
645 {208, nullptr, "SetHearingProtectionSafeguardFlag"},
646 {209, nullptr, "GetHearingProtectionSafeguardRemainingTime"},
647 {210, nullptr, "SetHearingProtectionSafeguardRemainingTime"},
394 }; 648 };
395 // clang-format on 649 // clang-format on
396 650
diff --git a/src/core/hle/service/set/set_sys.h b/src/core/hle/service/set/set_sys.h
index 1efbcc97a..16624d3fd 100644
--- a/src/core/hle/service/set/set_sys.h
+++ b/src/core/hle/service/set/set_sys.h
@@ -3,7 +3,9 @@
3 3
4#pragma once 4#pragma once
5 5
6#include "common/uuid.h"
6#include "core/hle/service/service.h" 7#include "core/hle/service/service.h"
8#include "core/hle/service/time/clock_types.h"
7 9
8namespace Core { 10namespace Core {
9class System; 11class System;
@@ -23,15 +25,293 @@ private:
23 BasicBlack = 1, 25 BasicBlack = 1,
24 }; 26 };
25 27
26 void GetSettingsItemValueSize(HLERequestContext& ctx); 28 /// Indicates the current console is a retail or kiosk unit
27 void GetSettingsItemValue(HLERequestContext& ctx); 29 enum class QuestFlag : u8 {
30 Retail = 0,
31 Kiosk = 1,
32 };
33
34 /// This is nn::settings::system::TvResolution
35 enum class TvResolution : u32 {
36 Auto,
37 Resolution1080p,
38 Resolution720p,
39 Resolution480p,
40 };
41
42 /// This is nn::settings::system::HdmiContentType
43 enum class HdmiContentType : u32 {
44 None,
45 Graphics,
46 Cinema,
47 Photo,
48 Game,
49 };
50
51 /// This is nn::settings::system::RgbRange
52 enum class RgbRange : u32 {
53 Auto,
54 Full,
55 Limited,
56 };
57
58 /// This is nn::settings::system::CmuMode
59 enum class CmuMode : u32 {
60 None,
61 ColorInvert,
62 HighContrast,
63 GrayScale,
64 };
65
66 /// This is nn::settings::system::PrimaryAlbumStorage
67 enum class PrimaryAlbumStorage : u32 {
68 Nand,
69 SdCard,
70 };
71
72 /// This is nn::settings::system::NotificationVolume
73 enum class NotificationVolume : u32 {
74 Mute,
75 Low,
76 High,
77 };
78
79 /// This is nn::settings::system::ChineseTraditionalInputMethod
80 enum class ChineseTraditionalInputMethod : u32 {
81 Unknown0 = 0,
82 Unknown1 = 1,
83 Unknown2 = 2,
84 };
85
86 /// This is nn::settings::system::ErrorReportSharePermission
87 enum class ErrorReportSharePermission : u32 {
88 NotConfirmed,
89 Granted,
90 Denied,
91 };
92
93 /// This is nn::settings::system::FriendPresenceOverlayPermission
94 enum class FriendPresenceOverlayPermission : u8 {
95 NotConfirmed,
96 NoDisplay,
97 FavoriteFriends,
98 Friends,
99 };
100
101 /// This is nn::settings::system::HandheldSleepPlan
102 enum class HandheldSleepPlan : u32 {
103 Sleep1Min,
104 Sleep3Min,
105 Sleep5Min,
106 Sleep10Min,
107 Sleep30Min,
108 Never,
109 };
110
111 /// This is nn::settings::system::ConsoleSleepPlan
112 enum class ConsoleSleepPlan : u32 {
113 Sleep1Hour,
114 Sleep2Hour,
115 Sleep3Hour,
116 Sleep6Hour,
117 Sleep12Hour,
118 Never,
119 };
120
121 /// This is nn::settings::system::SleepFlag
122 struct SleepFlag {
123 union {
124 u32 raw{};
125
126 BitField<0, 1, u32> SleepsWhilePlayingMedia;
127 BitField<1, 1, u32> WakesAtPowerStateChange;
128 };
129 };
130 static_assert(sizeof(SleepFlag) == 4, "TvFlag is an invalid size");
131
132 /// This is nn::settings::system::TvFlag
133 struct TvFlag {
134 union {
135 u32 raw{};
136
137 BitField<0, 1, u32> Allows4k;
138 BitField<1, 1, u32> Allows3d;
139 BitField<2, 1, u32> AllowsCec;
140 BitField<3, 1, u32> PreventsScreenBurnIn;
141 };
142 };
143 static_assert(sizeof(TvFlag) == 4, "TvFlag is an invalid size");
144
145 /// This is nn::settings::system::InitialLaunchFlag
146 struct InitialLaunchFlag {
147 union {
148 u32 raw{};
149
150 BitField<0, 1, u32> InitialLaunchCompletionFlag;
151 BitField<8, 1, u32> InitialLaunchUserAdditionFlag;
152 BitField<16, 1, u32> InitialLaunchTimestampFlag;
153 };
154 };
155 static_assert(sizeof(InitialLaunchFlag) == 4, "InitialLaunchFlag is an invalid size");
156
157 /// This is nn::settings::system::NotificationFlag
158 struct NotificationFlag {
159 union {
160 u32 raw{};
161
162 BitField<0, 1, u32> RingtoneFlag;
163 BitField<1, 1, u32> DownloadCompletionFlag;
164 BitField<8, 1, u32> EnablesNews;
165 BitField<9, 1, u32> IncomingLampFlag;
166 };
167 };
168 static_assert(sizeof(NotificationFlag) == 4, "NotificationFlag is an invalid size");
169
170 /// This is nn::settings::system::AccountNotificationFlag
171 struct AccountNotificationFlag {
172 union {
173 u32 raw{};
174
175 BitField<0, 1, u32> FriendOnlineFlag;
176 BitField<1, 1, u32> FriendRequestFlag;
177 BitField<8, 1, u32> CoralInvitationFlag;
178 };
179 };
180 static_assert(sizeof(AccountNotificationFlag) == 4,
181 "AccountNotificationFlag is an invalid size");
182
183 /// This is nn::settings::system::TvSettings
184 struct TvSettings {
185 TvFlag flags;
186 TvResolution tv_resolution;
187 HdmiContentType hdmi_content_type;
188 RgbRange rgb_range;
189 CmuMode cmu_mode;
190 u32 tv_underscan;
191 f32 tv_gama;
192 f32 constrast_ratio;
193 };
194 static_assert(sizeof(TvSettings) == 0x20, "TvSettings is an invalid size");
195
196 /// This is nn::settings::system::NotificationTime
197 struct NotificationTime {
198 u32 hour;
199 u32 minute;
200 };
201 static_assert(sizeof(NotificationTime) == 0x8, "NotificationTime is an invalid size");
202
203 /// This is nn::settings::system::NotificationSettings
204 struct NotificationSettings {
205 NotificationFlag flags;
206 NotificationVolume volume;
207 NotificationTime start_time;
208 NotificationTime stop_time;
209 };
210 static_assert(sizeof(NotificationSettings) == 0x18, "NotificationSettings is an invalid size");
211
212 /// This is nn::settings::system::AccountSettings
213 struct AccountSettings {
214 u32 flags;
215 };
216 static_assert(sizeof(AccountSettings) == 0x4, "AccountSettings is an invalid size");
217
218 /// This is nn::settings::system::AccountNotificationSettings
219 struct AccountNotificationSettings {
220 Common::UUID uid;
221 AccountNotificationFlag flags;
222 FriendPresenceOverlayPermission friend_presence_permission;
223 FriendPresenceOverlayPermission friend_invitation_permission;
224 INSERT_PADDING_BYTES(0x2);
225 };
226 static_assert(sizeof(AccountNotificationSettings) == 0x18,
227 "AccountNotificationSettings is an invalid size");
228
229 /// This is nn::settings::system::InitialLaunchSettings
230 struct SleepSettings {
231 SleepFlag flags;
232 HandheldSleepPlan handheld_sleep_plan;
233 ConsoleSleepPlan console_sleep_plan;
234 };
235 static_assert(sizeof(SleepSettings) == 0xc, "SleepSettings is incorrect size");
236
237 /// This is nn::settings::system::InitialLaunchSettings
238 struct InitialLaunchSettings {
239 InitialLaunchFlag flags;
240 INSERT_PADDING_BYTES(0x4);
241 Time::Clock::SteadyClockTimePoint timestamp;
242 };
243 static_assert(sizeof(InitialLaunchSettings) == 0x20, "InitialLaunchSettings is incorrect size");
244
28 void GetFirmwareVersion(HLERequestContext& ctx); 245 void GetFirmwareVersion(HLERequestContext& ctx);
29 void GetFirmwareVersion2(HLERequestContext& ctx); 246 void GetFirmwareVersion2(HLERequestContext& ctx);
247 void GetAccountSettings(HLERequestContext& ctx);
248 void SetAccountSettings(HLERequestContext& ctx);
30 void GetColorSetId(HLERequestContext& ctx); 249 void GetColorSetId(HLERequestContext& ctx);
31 void SetColorSetId(HLERequestContext& ctx); 250 void SetColorSetId(HLERequestContext& ctx);
251 void GetNotificationSettings(HLERequestContext& ctx);
252 void SetNotificationSettings(HLERequestContext& ctx);
253 void GetAccountNotificationSettings(HLERequestContext& ctx);
254 void SetAccountNotificationSettings(HLERequestContext& ctx);
255 void GetSettingsItemValueSize(HLERequestContext& ctx);
256 void GetSettingsItemValue(HLERequestContext& ctx);
257 void GetTvSettings(HLERequestContext& ctx);
258 void SetTvSettings(HLERequestContext& ctx);
259 void GetQuestFlag(HLERequestContext& ctx);
260 void GetPrimaryAlbumStorage(HLERequestContext& ctx);
261 void GetSleepSettings(HLERequestContext& ctx);
262 void SetSleepSettings(HLERequestContext& ctx);
263 void GetInitialLaunchSettings(HLERequestContext& ctx);
264 void SetInitialLaunchSettings(HLERequestContext& ctx);
32 void GetDeviceNickName(HLERequestContext& ctx); 265 void GetDeviceNickName(HLERequestContext& ctx);
266 void SetDeviceNickName(HLERequestContext& ctx);
267 void GetProductModel(HLERequestContext& ctx);
268 void GetMiiAuthorId(HLERequestContext& ctx);
269 void GetAutoUpdateEnableFlag(HLERequestContext& ctx);
270 void GetBatteryPercentageFlag(HLERequestContext& ctx);
271 void GetErrorReportSharePermission(HLERequestContext& ctx);
272 void GetAppletLaunchFlags(HLERequestContext& ctx);
273 void SetAppletLaunchFlags(HLERequestContext& ctx);
274 void GetKeyboardLayout(HLERequestContext& ctx);
275 void GetChineseTraditionalInputMethod(HLERequestContext& ctx);
276
277 AccountSettings account_settings{
278 .flags = {},
279 };
33 280
34 ColorSet color_set = ColorSet::BasicWhite; 281 ColorSet color_set = ColorSet::BasicWhite;
282
283 NotificationSettings notification_settings{
284 .flags = {0x300},
285 .volume = NotificationVolume::High,
286 .start_time = {.hour = 9, .minute = 0},
287 .stop_time = {.hour = 21, .minute = 0},
288 };
289
290 std::vector<AccountNotificationSettings> account_notifications{};
291
292 TvSettings tv_settings{
293 .flags = {0xc},
294 .tv_resolution = TvResolution::Auto,
295 .hdmi_content_type = HdmiContentType::Game,
296 .rgb_range = RgbRange::Auto,
297 .cmu_mode = CmuMode::None,
298 .tv_underscan = {},
299 .tv_gama = 1.0f,
300 .constrast_ratio = 0.5f,
301 };
302
303 InitialLaunchSettings launch_settings{
304 .flags = {0x10001},
305 .timestamp = {},
306 };
307
308 SleepSettings sleep_settings{
309 .flags = {0x3},
310 .handheld_sleep_plan = HandheldSleepPlan::Sleep10Min,
311 .console_sleep_plan = ConsoleSleepPlan::Sleep1Hour,
312 };
313
314 u32 applet_launch_flag{};
35}; 315};
36 316
37} // namespace Service::Set 317} // namespace Service::Set