diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/set/set.cpp | 21 | ||||
| -rw-r--r-- | src/core/hle/service/set/set.h | 1 |
2 files changed, 20 insertions, 2 deletions
diff --git a/src/core/hle/service/set/set.cpp b/src/core/hle/service/set/set.cpp index 40a9144f9..1afc43f75 100644 --- a/src/core/hle/service/set/set.cpp +++ b/src/core/hle/service/set/set.cpp | |||
| @@ -35,6 +35,8 @@ constexpr std::array<LanguageCode, 17> available_language_codes = {{ | |||
| 35 | constexpr std::size_t pre4_0_0_max_entries = 0xF; | 35 | constexpr std::size_t pre4_0_0_max_entries = 0xF; |
| 36 | constexpr std::size_t post4_0_0_max_entries = 0x40; | 36 | constexpr std::size_t post4_0_0_max_entries = 0x40; |
| 37 | 37 | ||
| 38 | constexpr ResultCode ERR_INVALID_LANGUAGE{ErrorModule::Settings, 625}; | ||
| 39 | |||
| 38 | LanguageCode GetLanguageCodeFromIndex(std::size_t index) { | 40 | LanguageCode GetLanguageCodeFromIndex(std::size_t index) { |
| 39 | return available_language_codes.at(index); | 41 | return available_language_codes.at(index); |
| 40 | } | 42 | } |
| @@ -67,6 +69,21 @@ void SET::GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx) { | |||
| 67 | PushResponseLanguageCode(ctx, pre4_0_0_max_entries); | 69 | PushResponseLanguageCode(ctx, pre4_0_0_max_entries); |
| 68 | } | 70 | } |
| 69 | 71 | ||
| 72 | void SET::MakeLanguageCode(Kernel::HLERequestContext& ctx) { | ||
| 73 | IPC::RequestParser rp{ctx}; | ||
| 74 | const auto index = rp.Pop<u32>(); | ||
| 75 | |||
| 76 | if (index >= available_language_codes.size()) { | ||
| 77 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 78 | rb.Push(ERR_INVALID_LANGUAGE); | ||
| 79 | return; | ||
| 80 | } | ||
| 81 | |||
| 82 | IPC::ResponseBuilder rb{ctx, 4}; | ||
| 83 | rb.Push(RESULT_SUCCESS); | ||
| 84 | rb.PushEnum(available_language_codes[index]); | ||
| 85 | } | ||
| 86 | |||
| 70 | void SET::GetAvailableLanguageCodes2(Kernel::HLERequestContext& ctx) { | 87 | void SET::GetAvailableLanguageCodes2(Kernel::HLERequestContext& ctx) { |
| 71 | LOG_DEBUG(Service_SET, "called"); | 88 | LOG_DEBUG(Service_SET, "called"); |
| 72 | 89 | ||
| @@ -95,14 +112,14 @@ void SET::GetLanguageCode(Kernel::HLERequestContext& ctx) { | |||
| 95 | 112 | ||
| 96 | IPC::ResponseBuilder rb{ctx, 4}; | 113 | IPC::ResponseBuilder rb{ctx, 4}; |
| 97 | rb.Push(RESULT_SUCCESS); | 114 | rb.Push(RESULT_SUCCESS); |
| 98 | rb.Push(static_cast<u64>(available_language_codes[Settings::values.language_index])); | 115 | rb.PushEnum(available_language_codes[Settings::values.language_index]); |
| 99 | } | 116 | } |
| 100 | 117 | ||
| 101 | SET::SET() : ServiceFramework("set") { | 118 | SET::SET() : ServiceFramework("set") { |
| 102 | static const FunctionInfo functions[] = { | 119 | static const FunctionInfo functions[] = { |
| 103 | {0, &SET::GetLanguageCode, "GetLanguageCode"}, | 120 | {0, &SET::GetLanguageCode, "GetLanguageCode"}, |
| 104 | {1, &SET::GetAvailableLanguageCodes, "GetAvailableLanguageCodes"}, | 121 | {1, &SET::GetAvailableLanguageCodes, "GetAvailableLanguageCodes"}, |
| 105 | {2, nullptr, "MakeLanguageCode"}, | 122 | {2, &SET::MakeLanguageCode, "MakeLanguageCode"}, |
| 106 | {3, &SET::GetAvailableLanguageCodeCount, "GetAvailableLanguageCodeCount"}, | 123 | {3, &SET::GetAvailableLanguageCodeCount, "GetAvailableLanguageCodeCount"}, |
| 107 | {4, nullptr, "GetRegionCode"}, | 124 | {4, nullptr, "GetRegionCode"}, |
| 108 | {5, &SET::GetAvailableLanguageCodes2, "GetAvailableLanguageCodes2"}, | 125 | {5, &SET::GetAvailableLanguageCodes2, "GetAvailableLanguageCodes2"}, |
diff --git a/src/core/hle/service/set/set.h b/src/core/hle/service/set/set.h index 266f13e46..31f9cb296 100644 --- a/src/core/hle/service/set/set.h +++ b/src/core/hle/service/set/set.h | |||
| @@ -38,6 +38,7 @@ public: | |||
| 38 | private: | 38 | private: |
| 39 | void GetLanguageCode(Kernel::HLERequestContext& ctx); | 39 | void GetLanguageCode(Kernel::HLERequestContext& ctx); |
| 40 | void GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx); | 40 | void GetAvailableLanguageCodes(Kernel::HLERequestContext& ctx); |
| 41 | void MakeLanguageCode(Kernel::HLERequestContext& ctx); | ||
| 41 | void GetAvailableLanguageCodes2(Kernel::HLERequestContext& ctx); | 42 | void GetAvailableLanguageCodes2(Kernel::HLERequestContext& ctx); |
| 42 | void GetAvailableLanguageCodeCount(Kernel::HLERequestContext& ctx); | 43 | void GetAvailableLanguageCodeCount(Kernel::HLERequestContext& ctx); |
| 43 | void GetAvailableLanguageCodeCount2(Kernel::HLERequestContext& ctx); | 44 | void GetAvailableLanguageCodeCount2(Kernel::HLERequestContext& ctx); |