diff options
| -rw-r--r-- | src/core/hle/service/am/am.h | 24 | ||||
| -rw-r--r-- | src/core/hle/service/set/set.cpp | 60 | ||||
| -rw-r--r-- | src/core/hle/service/set/set.h | 61 | ||||
| -rw-r--r-- | src/core/hle/service/set/set_sys.cpp | 310 | ||||
| -rw-r--r-- | src/core/hle/service/set/set_sys.h | 284 |
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 | ||
| 23 | namespace Service::AM { | 23 | namespace Service::AM { |
| 24 | 24 | ||
| 25 | // This is nn::settings::Language | ||
| 26 | enum 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 | |||
| 49 | class AppletMessageQueue { | 25 | class AppletMessageQueue { |
| 50 | public: | 26 | public: |
| 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 | ||
| 12 | namespace Service::Set { | 12 | namespace Service::Set { |
| 13 | namespace { | 13 | namespace { |
| 14 | constexpr 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 | |||
| 35 | enum 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 | |||
| 53 | constexpr 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 | |||
| 74 | constexpr std::size_t PRE_4_0_0_MAX_ENTRIES = 0xF; | 14 | constexpr std::size_t PRE_4_0_0_MAX_ENTRIES = 0xF; |
| 75 | constexpr std::size_t POST_4_0_0_MAX_ENTRIES = 0x40; | 15 | constexpr 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 | |||
| 36 | enum 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 | |||
| 54 | constexpr 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 | |||
| 75 | static 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 | |||
| 35 | LanguageCode GetLanguageCodeFromIndex(std::size_t idx); | 96 | LanguageCode GetLanguageCodeFromIndex(std::size_t idx); |
| 36 | 97 | ||
| 37 | class SET final : public ServiceFramework<SET> { | 98 | class 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 | ||
| 13 | namespace Service::Set { | 15 | namespace 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 | ||
| 88 | void 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 | |||
| 96 | void 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 | |||
| 86 | void SET_SYS::GetColorSetId(HLERequestContext& ctx) { | 106 | void 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 | ||
| 95 | void SET_SYS::SetColorSetId(HLERequestContext& ctx) { | 114 | void 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 | |||
| 124 | void 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 | |||
| 132 | void 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 | |||
| 145 | void 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 | |||
| 155 | void 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 | ||
| 247 | void 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 | |||
| 255 | void 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 | |||
| 270 | void 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 | |||
| 278 | void 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 | |||
| 286 | void 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 | |||
| 294 | void 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 | |||
| 306 | void 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 | |||
| 313 | void 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 | |||
| 180 | void SET_SYS::GetDeviceNickName(HLERequestContext& ctx) { | 324 | void 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 | |||
| 333 | void 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 | |||
| 344 | void 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 | |||
| 353 | void 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 | |||
| 363 | void 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 | |||
| 373 | void 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 | |||
| 384 | void 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 | |||
| 392 | void 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 | |||
| 400 | void 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 | |||
| 410 | void 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 | |||
| 429 | void 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 | ||
| 187 | SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} { | 437 | SET_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 | ||
| 8 | namespace Core { | 10 | namespace Core { |
| 9 | class System; | 11 | class 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 |