mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-12-28 07:25:32 +03:00
Implement post 4.0.0 language list features in ISettingsServer
This commit is contained in:
parent
d1c1fa214c
commit
4cd7502df2
@ -6,10 +6,12 @@
|
||||
|
||||
namespace skyline::service::settings {
|
||||
ISettingsServer::ISettingsServer(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager, Service::settings_ISettingsServer, "settings:ISettingsServer", {
|
||||
{0x1, SFUNC(ISettingsServer::GetAvailableLanguageCodes)}
|
||||
{0x1, SFUNC(ISettingsServer::GetAvailableLanguageCodes)},
|
||||
{0x2, SFUNC(ISettingsServer::MakeLanguageCode)},
|
||||
{0x5, SFUNC(ISettingsServer::GetAvailableLanguageCodes2)}
|
||||
}) {}
|
||||
|
||||
constexpr std::array<u64, 15> LanguageCodeList = {
|
||||
constexpr std::array<u64, constant::NewLanguageCodeListSize> LanguageCodeList = {
|
||||
util::MakeMagic<u64>("ja"),
|
||||
util::MakeMagic<u64>("en-US"),
|
||||
util::MakeMagic<u64>("fr"),
|
||||
@ -24,12 +26,24 @@ namespace skyline::service::settings {
|
||||
util::MakeMagic<u64>("zh-TW"),
|
||||
util::MakeMagic<u64>("en-GB"),
|
||||
util::MakeMagic<u64>("fr-CA"),
|
||||
util::MakeMagic<u64>("es-419")
|
||||
util::MakeMagic<u64>("es-419"),
|
||||
util::MakeMagic<u64>("zh-Hans"),
|
||||
util::MakeMagic<u64>("zh-Hant"),
|
||||
};
|
||||
|
||||
void ISettingsServer::GetAvailableLanguageCodes(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||
state.process->WriteMemory(LanguageCodeList.data(), request.outputBuf.at(0).address, LanguageCodeList.size() * sizeof(u64));
|
||||
state.process->WriteMemory(LanguageCodeList.data(), request.outputBuf.at(0).address, constant::OldLanguageCodeListSize * sizeof(u64));
|
||||
|
||||
response.Push<i32>(LanguageCodeList.size());
|
||||
response.Push<i32>(constant::OldLanguageCodeListSize);
|
||||
}
|
||||
|
||||
void ISettingsServer::MakeLanguageCode(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||
response.Push<u64>(LanguageCodeList.at(request.Pop<i32>()));
|
||||
}
|
||||
|
||||
void ISettingsServer::GetAvailableLanguageCodes2(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||
state.process->WriteMemory(LanguageCodeList.data(), request.outputBuf.at(0).address, constant::NewLanguageCodeListSize * sizeof(u64));
|
||||
|
||||
response.Push<i32>(constant::NewLanguageCodeListSize);
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,13 @@
|
||||
#include <services/base_service.h>
|
||||
#include <services/serviceman.h>
|
||||
|
||||
namespace skyline::service::settings {
|
||||
namespace skyline::service {
|
||||
namespace constant {
|
||||
constexpr size_t OldLanguageCodeListSize = 15; //!< The size of the pre 4.0.0 language code list
|
||||
constexpr size_t NewLanguageCodeListSize = 17; //!< The size of the post 4.0.0 language code list
|
||||
}
|
||||
|
||||
namespace settings {
|
||||
/**
|
||||
* @brief ISettingsServer or 'set' provides access to user settings (https://switchbrew.org/wiki/Settings_services#set)
|
||||
*/
|
||||
@ -15,8 +21,19 @@ namespace skyline::service::settings {
|
||||
ISettingsServer(const DeviceState &state, ServiceManager &manager);
|
||||
|
||||
/**
|
||||
* @brief This reads the available language codes that an application can use
|
||||
* @brief This reads the available language codes that an application can use (pre 4.0.0)
|
||||
*/
|
||||
void GetAvailableLanguageCodes(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||
|
||||
/**
|
||||
* @brief This converts a language code list index to it's corresponding language code
|
||||
*/
|
||||
void MakeLanguageCode(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||
|
||||
/**
|
||||
* @brief This reads the available language codes that an application can use (post 4.0.0)
|
||||
*/
|
||||
void GetAvailableLanguageCodes2(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user