diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/hle/service/acc/acc.cpp | 30 | ||||
| -rw-r--r-- | src/core/hle/service/am/am.cpp | 3 | ||||
| -rw-r--r-- | src/core/hle/service/set/set.cpp | 15 | ||||
| -rw-r--r-- | src/core/hle/service/set/set.h | 2 | ||||
| -rw-r--r-- | src/core/settings.h | 2 |
5 files changed, 47 insertions, 5 deletions
diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp index 0b158e015..6d15b46ed 100644 --- a/src/core/hle/service/acc/acc.cpp +++ b/src/core/hle/service/acc/acc.cpp | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include "core/hle/service/acc/acc_su.h" | 10 | #include "core/hle/service/acc/acc_su.h" |
| 11 | #include "core/hle/service/acc/acc_u0.h" | 11 | #include "core/hle/service/acc/acc_u0.h" |
| 12 | #include "core/hle/service/acc/acc_u1.h" | 12 | #include "core/hle/service/acc/acc_u1.h" |
| 13 | #include "core/settings.h" | ||
| 13 | 14 | ||
| 14 | namespace Service::Account { | 15 | namespace Service::Account { |
| 15 | 16 | ||
| @@ -31,13 +32,14 @@ struct ProfileBase { | |||
| 31 | }; | 32 | }; |
| 32 | static_assert(sizeof(ProfileBase) == 0x38, "ProfileBase structure has incorrect size"); | 33 | static_assert(sizeof(ProfileBase) == 0x38, "ProfileBase structure has incorrect size"); |
| 33 | 34 | ||
| 35 | // TODO(ogniK): Generate a real user id based on username, md5(username) maybe? | ||
| 34 | static constexpr u128 DEFAULT_USER_ID{1ull, 0ull}; | 36 | static constexpr u128 DEFAULT_USER_ID{1ull, 0ull}; |
| 35 | 37 | ||
| 36 | class IProfile final : public ServiceFramework<IProfile> { | 38 | class IProfile final : public ServiceFramework<IProfile> { |
| 37 | public: | 39 | public: |
| 38 | explicit IProfile(u128 user_id) : ServiceFramework("IProfile"), user_id(user_id) { | 40 | explicit IProfile(u128 user_id) : ServiceFramework("IProfile"), user_id(user_id) { |
| 39 | static const FunctionInfo functions[] = { | 41 | static const FunctionInfo functions[] = { |
| 40 | {0, nullptr, "Get"}, | 42 | {0, &IProfile::Get, "Get"}, |
| 41 | {1, &IProfile::GetBase, "GetBase"}, | 43 | {1, &IProfile::GetBase, "GetBase"}, |
| 42 | {10, nullptr, "GetImageSize"}, | 44 | {10, nullptr, "GetImageSize"}, |
| 43 | {11, nullptr, "LoadImage"}, | 45 | {11, nullptr, "LoadImage"}, |
| @@ -46,14 +48,36 @@ public: | |||
| 46 | } | 48 | } |
| 47 | 49 | ||
| 48 | private: | 50 | private: |
| 51 | void Get(Kernel::HLERequestContext& ctx) { | ||
| 52 | LOG_WARNING(Service_ACC, "(STUBBED) called"); | ||
| 53 | ProfileBase profile_base{}; | ||
| 54 | profile_base.user_id = user_id; | ||
| 55 | if (Settings::values.username.size() > profile_base.username.size()) { | ||
| 56 | std::copy_n(Settings::values.username.begin(), profile_base.username.size(), | ||
| 57 | profile_base.username.begin()); | ||
| 58 | } else { | ||
| 59 | std::copy(Settings::values.username.begin(), Settings::values.username.end(), | ||
| 60 | profile_base.username.begin()); | ||
| 61 | } | ||
| 62 | |||
| 63 | IPC::ResponseBuilder rb{ctx, 16}; | ||
| 64 | rb.Push(RESULT_SUCCESS); | ||
| 65 | rb.PushRaw(profile_base); | ||
| 66 | } | ||
| 67 | |||
| 49 | void GetBase(Kernel::HLERequestContext& ctx) { | 68 | void GetBase(Kernel::HLERequestContext& ctx) { |
| 50 | LOG_WARNING(Service_ACC, "(STUBBED) called"); | 69 | LOG_WARNING(Service_ACC, "(STUBBED) called"); |
| 51 | 70 | ||
| 52 | // TODO(Subv): Retrieve this information from somewhere. | 71 | // TODO(Subv): Retrieve this information from somewhere. |
| 53 | ProfileBase profile_base{}; | 72 | ProfileBase profile_base{}; |
| 54 | profile_base.user_id = user_id; | 73 | profile_base.user_id = user_id; |
| 55 | profile_base.username = {'y', 'u', 'z', 'u'}; | 74 | if (Settings::values.username.size() > profile_base.username.size()) { |
| 56 | 75 | std::copy_n(Settings::values.username.begin(), profile_base.username.size(), | |
| 76 | profile_base.username.begin()); | ||
| 77 | } else { | ||
| 78 | std::copy(Settings::values.username.begin(), Settings::values.username.end(), | ||
| 79 | profile_base.username.begin()); | ||
| 80 | } | ||
| 57 | IPC::ResponseBuilder rb{ctx, 16}; | 81 | IPC::ResponseBuilder rb{ctx, 16}; |
| 58 | rb.Push(RESULT_SUCCESS); | 82 | rb.Push(RESULT_SUCCESS); |
| 59 | rb.PushRaw(profile_base); | 83 | rb.PushRaw(profile_base); |
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index 94d2a973d..9404d6b8c 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp | |||
| @@ -652,7 +652,8 @@ void IApplicationFunctions::GetDesiredLanguage(Kernel::HLERequestContext& ctx) { | |||
| 652 | // TODO(bunnei): This should be configurable | 652 | // TODO(bunnei): This should be configurable |
| 653 | IPC::ResponseBuilder rb{ctx, 4}; | 653 | IPC::ResponseBuilder rb{ctx, 4}; |
| 654 | rb.Push(RESULT_SUCCESS); | 654 | rb.Push(RESULT_SUCCESS); |
| 655 | rb.Push(static_cast<u64>(Service::Set::LanguageCode::EN_US)); | 655 | rb.Push( |
| 656 | static_cast<u64>(Service::Set::GetLanguageCodeFromIndex(Settings::values.language_index))); | ||
| 656 | LOG_DEBUG(Service_AM, "called"); | 657 | LOG_DEBUG(Service_AM, "called"); |
| 657 | } | 658 | } |
| 658 | 659 | ||
diff --git a/src/core/hle/service/set/set.cpp b/src/core/hle/service/set/set.cpp index 1651f6122..a461e72ec 100644 --- a/src/core/hle/service/set/set.cpp +++ b/src/core/hle/service/set/set.cpp | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include "core/hle/kernel/client_port.h" | 8 | #include "core/hle/kernel/client_port.h" |
| 9 | #include "core/hle/kernel/client_session.h" | 9 | #include "core/hle/kernel/client_session.h" |
| 10 | #include "core/hle/service/set/set.h" | 10 | #include "core/hle/service/set/set.h" |
| 11 | #include "core/settings.h" | ||
| 11 | 12 | ||
| 12 | namespace Service::Set { | 13 | namespace Service::Set { |
| 13 | 14 | ||
| @@ -31,6 +32,10 @@ constexpr std::array<LanguageCode, 17> available_language_codes = {{ | |||
| 31 | LanguageCode::ZH_HANT, | 32 | LanguageCode::ZH_HANT, |
| 32 | }}; | 33 | }}; |
| 33 | 34 | ||
| 35 | LanguageCode GetLanguageCodeFromIndex(size_t index) { | ||
| 36 | return available_language_codes.at(index); | ||
| 37 | } | ||
| 38 | |||
| 34 | void SET::GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx) { | 39 | void SET::GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx) { |
| 35 | ctx.WriteBuffer(available_language_codes); | 40 | ctx.WriteBuffer(available_language_codes); |
| 36 | 41 | ||
| @@ -49,9 +54,17 @@ void SET::GetAvailableLanguageCodeCount(Kernel::HLERequestContext& ctx) { | |||
| 49 | LOG_DEBUG(Service_SET, "called"); | 54 | LOG_DEBUG(Service_SET, "called"); |
| 50 | } | 55 | } |
| 51 | 56 | ||
| 57 | void SET::GetLanguageCode(Kernel::HLERequestContext& ctx) { | ||
| 58 | IPC::ResponseBuilder rb{ctx, 4}; | ||
| 59 | rb.Push(RESULT_SUCCESS); | ||
| 60 | rb.Push(static_cast<u64>(available_language_codes[Settings::values.language_index])); | ||
| 61 | |||
| 62 | LOG_DEBUG(Service_SET, "called {}", Settings::values.language_index); | ||
| 63 | } | ||
| 64 | |||
| 52 | SET::SET() : ServiceFramework("set") { | 65 | SET::SET() : ServiceFramework("set") { |
| 53 | static const FunctionInfo functions[] = { | 66 | static const FunctionInfo functions[] = { |
| 54 | {0, nullptr, "GetLanguageCode"}, | 67 | {0, &SET::GetLanguageCode, "GetLanguageCode"}, |
| 55 | {1, &SET::GetAvailableLanguageCodes, "GetAvailableLanguageCodes"}, | 68 | {1, &SET::GetAvailableLanguageCodes, "GetAvailableLanguageCodes"}, |
| 56 | {2, nullptr, "MakeLanguageCode"}, | 69 | {2, nullptr, "MakeLanguageCode"}, |
| 57 | {3, &SET::GetAvailableLanguageCodeCount, "GetAvailableLanguageCodeCount"}, | 70 | {3, &SET::GetAvailableLanguageCodeCount, "GetAvailableLanguageCodeCount"}, |
diff --git a/src/core/hle/service/set/set.h b/src/core/hle/service/set/set.h index a2472ec4c..4232b6162 100644 --- a/src/core/hle/service/set/set.h +++ b/src/core/hle/service/set/set.h | |||
| @@ -28,6 +28,7 @@ enum class LanguageCode : u64 { | |||
| 28 | ZH_HANS = 0x00736E61482D687A, | 28 | ZH_HANS = 0x00736E61482D687A, |
| 29 | ZH_HANT = 0x00746E61482D687A, | 29 | ZH_HANT = 0x00746E61482D687A, |
| 30 | }; | 30 | }; |
| 31 | LanguageCode GetLanguageCodeFromIndex(size_t idx); | ||
| 31 | 32 | ||
| 32 | class SET final : public ServiceFramework<SET> { | 33 | class SET final : public ServiceFramework<SET> { |
| 33 | public: | 34 | public: |
| @@ -35,6 +36,7 @@ public: | |||
| 35 | ~SET() = default; | 36 | ~SET() = default; |
| 36 | 37 | ||
| 37 | private: | 38 | private: |
| 39 | void GetLanguageCode(Kernel::HLERequestContext& ctx); | ||
| 38 | void GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx); | 40 | void GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx); |
| 39 | void GetAvailableLanguageCodeCount(Kernel::HLERequestContext& ctx); | 41 | void GetAvailableLanguageCodeCount(Kernel::HLERequestContext& ctx); |
| 40 | }; | 42 | }; |
diff --git a/src/core/settings.h b/src/core/settings.h index 8cc65e434..e826d4235 100644 --- a/src/core/settings.h +++ b/src/core/settings.h | |||
| @@ -112,6 +112,8 @@ static const std::array<const char*, NumAnalogs> mapping = {{ | |||
| 112 | struct Values { | 112 | struct Values { |
| 113 | // System | 113 | // System |
| 114 | bool use_docked_mode; | 114 | bool use_docked_mode; |
| 115 | std::string username; | ||
| 116 | int language_index; | ||
| 115 | 117 | ||
| 116 | // Controls | 118 | // Controls |
| 117 | std::array<std::string, NativeButton::NumButtons> buttons; | 119 | std::array<std::string, NativeButton::NumButtons> buttons; |