set_sys.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include "common/uuid.h"
  5. #include "core/hle/service/service.h"
  6. #include "core/hle/service/time/clock_types.h"
  7. namespace Core {
  8. class System;
  9. }
  10. namespace Service::Set {
  11. class SET_SYS final : public ServiceFramework<SET_SYS> {
  12. public:
  13. explicit SET_SYS(Core::System& system_);
  14. ~SET_SYS() override;
  15. private:
  16. /// Indicates the current theme set by the system settings
  17. enum class ColorSet : u32 {
  18. BasicWhite = 0,
  19. BasicBlack = 1,
  20. };
  21. /// Indicates the current console is a retail or kiosk unit
  22. enum class QuestFlag : u8 {
  23. Retail = 0,
  24. Kiosk = 1,
  25. };
  26. /// This is nn::settings::system::TvResolution
  27. enum class TvResolution : u32 {
  28. Auto,
  29. Resolution1080p,
  30. Resolution720p,
  31. Resolution480p,
  32. };
  33. /// This is nn::settings::system::HdmiContentType
  34. enum class HdmiContentType : u32 {
  35. None,
  36. Graphics,
  37. Cinema,
  38. Photo,
  39. Game,
  40. };
  41. /// This is nn::settings::system::RgbRange
  42. enum class RgbRange : u32 {
  43. Auto,
  44. Full,
  45. Limited,
  46. };
  47. /// This is nn::settings::system::CmuMode
  48. enum class CmuMode : u32 {
  49. None,
  50. ColorInvert,
  51. HighContrast,
  52. GrayScale,
  53. };
  54. /// This is nn::settings::system::PrimaryAlbumStorage
  55. enum class PrimaryAlbumStorage : u32 {
  56. Nand,
  57. SdCard,
  58. };
  59. /// This is nn::settings::system::NotificationVolume
  60. enum class NotificationVolume : u32 {
  61. Mute,
  62. Low,
  63. High,
  64. };
  65. /// This is nn::settings::system::ChineseTraditionalInputMethod
  66. enum class ChineseTraditionalInputMethod : u32 {
  67. Unknown0 = 0,
  68. Unknown1 = 1,
  69. Unknown2 = 2,
  70. };
  71. /// This is nn::settings::system::ErrorReportSharePermission
  72. enum class ErrorReportSharePermission : u32 {
  73. NotConfirmed,
  74. Granted,
  75. Denied,
  76. };
  77. /// This is nn::settings::system::FriendPresenceOverlayPermission
  78. enum class FriendPresenceOverlayPermission : u8 {
  79. NotConfirmed,
  80. NoDisplay,
  81. FavoriteFriends,
  82. Friends,
  83. };
  84. /// This is nn::settings::system::HandheldSleepPlan
  85. enum class HandheldSleepPlan : u32 {
  86. Sleep1Min,
  87. Sleep3Min,
  88. Sleep5Min,
  89. Sleep10Min,
  90. Sleep30Min,
  91. Never,
  92. };
  93. /// This is nn::settings::system::ConsoleSleepPlan
  94. enum class ConsoleSleepPlan : u32 {
  95. Sleep1Hour,
  96. Sleep2Hour,
  97. Sleep3Hour,
  98. Sleep6Hour,
  99. Sleep12Hour,
  100. Never,
  101. };
  102. /// This is nn::settings::system::RegionCode
  103. enum class RegionCode : u32 {
  104. Japan,
  105. Usa,
  106. Europe,
  107. Australia,
  108. HongKongTaiwanKorea,
  109. China,
  110. };
  111. /// This is nn::settings::system::EulaVersionClockType
  112. enum class EulaVersionClockType : u32 {
  113. NetworkSystemClock,
  114. SteadyClock,
  115. };
  116. /// This is nn::settings::system::SleepFlag
  117. struct SleepFlag {
  118. union {
  119. u32 raw{};
  120. BitField<0, 1, u32> SleepsWhilePlayingMedia;
  121. BitField<1, 1, u32> WakesAtPowerStateChange;
  122. };
  123. };
  124. static_assert(sizeof(SleepFlag) == 4, "TvFlag is an invalid size");
  125. /// This is nn::settings::system::TvFlag
  126. struct TvFlag {
  127. union {
  128. u32 raw{};
  129. BitField<0, 1, u32> Allows4k;
  130. BitField<1, 1, u32> Allows3d;
  131. BitField<2, 1, u32> AllowsCec;
  132. BitField<3, 1, u32> PreventsScreenBurnIn;
  133. };
  134. };
  135. static_assert(sizeof(TvFlag) == 4, "TvFlag is an invalid size");
  136. /// This is nn::settings::system::InitialLaunchFlag
  137. struct InitialLaunchFlag {
  138. union {
  139. u32 raw{};
  140. BitField<0, 1, u32> InitialLaunchCompletionFlag;
  141. BitField<8, 1, u32> InitialLaunchUserAdditionFlag;
  142. BitField<16, 1, u32> InitialLaunchTimestampFlag;
  143. };
  144. };
  145. static_assert(sizeof(InitialLaunchFlag) == 4, "InitialLaunchFlag is an invalid size");
  146. /// This is nn::settings::system::NotificationFlag
  147. struct NotificationFlag {
  148. union {
  149. u32 raw{};
  150. BitField<0, 1, u32> RingtoneFlag;
  151. BitField<1, 1, u32> DownloadCompletionFlag;
  152. BitField<8, 1, u32> EnablesNews;
  153. BitField<9, 1, u32> IncomingLampFlag;
  154. };
  155. };
  156. static_assert(sizeof(NotificationFlag) == 4, "NotificationFlag is an invalid size");
  157. /// This is nn::settings::system::AccountNotificationFlag
  158. struct AccountNotificationFlag {
  159. union {
  160. u32 raw{};
  161. BitField<0, 1, u32> FriendOnlineFlag;
  162. BitField<1, 1, u32> FriendRequestFlag;
  163. BitField<8, 1, u32> CoralInvitationFlag;
  164. };
  165. };
  166. static_assert(sizeof(AccountNotificationFlag) == 4,
  167. "AccountNotificationFlag is an invalid size");
  168. /// This is nn::settings::system::TvSettings
  169. struct TvSettings {
  170. TvFlag flags;
  171. TvResolution tv_resolution;
  172. HdmiContentType hdmi_content_type;
  173. RgbRange rgb_range;
  174. CmuMode cmu_mode;
  175. u32 tv_underscan;
  176. f32 tv_gama;
  177. f32 constrast_ratio;
  178. };
  179. static_assert(sizeof(TvSettings) == 0x20, "TvSettings is an invalid size");
  180. /// This is nn::settings::system::NotificationTime
  181. struct NotificationTime {
  182. u32 hour;
  183. u32 minute;
  184. };
  185. static_assert(sizeof(NotificationTime) == 0x8, "NotificationTime is an invalid size");
  186. /// This is nn::settings::system::NotificationSettings
  187. struct NotificationSettings {
  188. NotificationFlag flags;
  189. NotificationVolume volume;
  190. NotificationTime start_time;
  191. NotificationTime stop_time;
  192. };
  193. static_assert(sizeof(NotificationSettings) == 0x18, "NotificationSettings is an invalid size");
  194. /// This is nn::settings::system::AccountSettings
  195. struct AccountSettings {
  196. u32 flags;
  197. };
  198. static_assert(sizeof(AccountSettings) == 0x4, "AccountSettings is an invalid size");
  199. /// This is nn::settings::system::AccountNotificationSettings
  200. struct AccountNotificationSettings {
  201. Common::UUID uid;
  202. AccountNotificationFlag flags;
  203. FriendPresenceOverlayPermission friend_presence_permission;
  204. FriendPresenceOverlayPermission friend_invitation_permission;
  205. INSERT_PADDING_BYTES(0x2);
  206. };
  207. static_assert(sizeof(AccountNotificationSettings) == 0x18,
  208. "AccountNotificationSettings is an invalid size");
  209. /// This is nn::settings::system::InitialLaunchSettings
  210. struct SleepSettings {
  211. SleepFlag flags;
  212. HandheldSleepPlan handheld_sleep_plan;
  213. ConsoleSleepPlan console_sleep_plan;
  214. };
  215. static_assert(sizeof(SleepSettings) == 0xc, "SleepSettings is incorrect size");
  216. /// This is nn::settings::system::InitialLaunchSettings
  217. struct InitialLaunchSettings {
  218. InitialLaunchFlag flags;
  219. INSERT_PADDING_BYTES(0x4);
  220. Time::Clock::SteadyClockTimePoint timestamp;
  221. };
  222. static_assert(sizeof(InitialLaunchSettings) == 0x20, "InitialLaunchSettings is incorrect size");
  223. /// This is nn::settings::system::InitialLaunchSettings
  224. struct EulaVersion {
  225. u32 version;
  226. RegionCode region_code;
  227. EulaVersionClockType clock_type;
  228. INSERT_PADDING_BYTES(0x4);
  229. s64 posix_time;
  230. Time::Clock::SteadyClockTimePoint timestamp;
  231. };
  232. static_assert(sizeof(EulaVersion) == 0x30, "EulaVersion is incorrect size");
  233. /// This is nn::settings::system::HomeMenuScheme
  234. struct HomeMenuScheme {
  235. u32 main;
  236. u32 back;
  237. u32 sub;
  238. u32 bezel;
  239. u32 extra;
  240. };
  241. static_assert(sizeof(HomeMenuScheme) == 0x14, "HomeMenuScheme is incorrect size");
  242. void SetLanguageCode(HLERequestContext& ctx);
  243. void GetFirmwareVersion(HLERequestContext& ctx);
  244. void GetFirmwareVersion2(HLERequestContext& ctx);
  245. void GetAccountSettings(HLERequestContext& ctx);
  246. void SetAccountSettings(HLERequestContext& ctx);
  247. void GetEulaVersions(HLERequestContext& ctx);
  248. void SetEulaVersions(HLERequestContext& ctx);
  249. void GetColorSetId(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 SetRegionCode(HLERequestContext& ctx);
  261. void GetPrimaryAlbumStorage(HLERequestContext& ctx);
  262. void GetSleepSettings(HLERequestContext& ctx);
  263. void SetSleepSettings(HLERequestContext& ctx);
  264. void GetInitialLaunchSettings(HLERequestContext& ctx);
  265. void SetInitialLaunchSettings(HLERequestContext& ctx);
  266. void GetDeviceNickName(HLERequestContext& ctx);
  267. void SetDeviceNickName(HLERequestContext& ctx);
  268. void GetProductModel(HLERequestContext& ctx);
  269. void GetMiiAuthorId(HLERequestContext& ctx);
  270. void GetAutoUpdateEnableFlag(HLERequestContext& ctx);
  271. void GetBatteryPercentageFlag(HLERequestContext& ctx);
  272. void GetErrorReportSharePermission(HLERequestContext& ctx);
  273. void GetAppletLaunchFlags(HLERequestContext& ctx);
  274. void SetAppletLaunchFlags(HLERequestContext& ctx);
  275. void GetKeyboardLayout(HLERequestContext& ctx);
  276. void GetChineseTraditionalInputMethod(HLERequestContext& ctx);
  277. void GetFieldTestingFlag(HLERequestContext& ctx);
  278. void GetHomeMenuScheme(HLERequestContext& ctx);
  279. void GetHomeMenuSchemeModel(HLERequestContext& ctx);
  280. AccountSettings account_settings{
  281. .flags = {},
  282. };
  283. ColorSet color_set = ColorSet::BasicWhite;
  284. NotificationSettings notification_settings{
  285. .flags = {0x300},
  286. .volume = NotificationVolume::High,
  287. .start_time = {.hour = 9, .minute = 0},
  288. .stop_time = {.hour = 21, .minute = 0},
  289. };
  290. std::vector<AccountNotificationSettings> account_notifications{};
  291. TvSettings tv_settings{
  292. .flags = {0xc},
  293. .tv_resolution = TvResolution::Auto,
  294. .hdmi_content_type = HdmiContentType::Game,
  295. .rgb_range = RgbRange::Auto,
  296. .cmu_mode = CmuMode::None,
  297. .tv_underscan = {},
  298. .tv_gama = 1.0f,
  299. .constrast_ratio = 0.5f,
  300. };
  301. InitialLaunchSettings launch_settings{
  302. .flags = {0x10001},
  303. .timestamp = {},
  304. };
  305. SleepSettings sleep_settings{
  306. .flags = {0x3},
  307. .handheld_sleep_plan = HandheldSleepPlan::Sleep10Min,
  308. .console_sleep_plan = ConsoleSleepPlan::Sleep1Hour,
  309. };
  310. u32 applet_launch_flag{};
  311. std::vector<EulaVersion> eula_versions{};
  312. RegionCode region_code;
  313. LanguageCode language_code_setting;
  314. };
  315. } // namespace Service::Set