Stub pl::RequestLoad and pl::GetSharedFontInOrderOfPriority

Co-Authored-By: Timotej Leginus <35149140+timleg002@users.noreply.github.com>
This commit is contained in:
lynxnb 2022-10-14 15:29:26 +02:00 committed by Billy Laws
parent 782f9e37ee
commit a7be4fd1e1
2 changed files with 49 additions and 1 deletions

View File

@ -7,6 +7,11 @@
namespace skyline::service::pl {
IPlatformServiceManager::IPlatformServiceManager(const DeviceState &state, ServiceManager &manager, SharedFontCore &core) : BaseService(state, manager), core(core) {}
Result IPlatformServiceManager::RequestLoad(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
Logger::Debug("Requested a shared font to be loaded: {}", request.Pop<u32>());
return {};
}
Result IPlatformServiceManager::GetLoadState(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
constexpr u32 FontLoaded{1}; //!< "All fonts have been loaded into memory"
response.Push(FontLoaded);
@ -30,4 +35,33 @@ namespace skyline::service::pl {
response.copyHandles.push_back(handle);
return {};
}
Result IPlatformServiceManager::GetSharedFontInOrderOfPriority(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
auto languageCode{request.Pop<u64>()};
std::vector<u32> fontCodes{};
std::vector<u32> fontOffsets{};
std::vector<u32> fontSizes{};
// TODO: actual font priority
for (u32 i{}; i < core.fonts.size(); i++) {
fontCodes.push_back(i);
auto region{core.fonts.at(i)};
fontOffsets.push_back(region.offset);
fontSizes.push_back(region.length);
}
std::memset(request.outputBuf.at(0).data(), 0, request.outputBuf.at(0).size());
std::memset(request.outputBuf.at(1).data(), 0, request.outputBuf.at(1).size());
std::memset(request.outputBuf.at(2).data(), 0, request.outputBuf.at(2).size());
request.outputBuf.at(0).copy_from(fontCodes);
request.outputBuf.at(1).copy_from(fontOffsets);
request.outputBuf.at(2).copy_from(fontSizes);
response.Push<u8>(1); // Fonts are loaded
response.Push(static_cast<u32>(fontCodes.size()));
return {};
}
}

View File

@ -20,6 +20,12 @@ namespace skyline::service::pl {
public:
IPlatformServiceManager(const DeviceState &state, ServiceManager &manager, SharedFontCore &core);
/**
* @brief Requests a shared font to be loaded
* @url https://switchbrew.org/wiki/Shared_Database_services#RequestLoad
*/
Result RequestLoad(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
/**
* @brief Returns the loading state of the requested font
* @url https://switchbrew.org/wiki/Shared_Database_services#GetLoadState
@ -44,11 +50,19 @@ namespace skyline::service::pl {
*/
Result GetSharedMemoryNativeHandle(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
/**
* @brief Returns shared fonts information in order of priority, a bool to specify if the fonts are loaded or not and the font count
* @url https://switchbrew.org/wiki/Shared_Database_services#GetSharedFontInOrderOfPriority
*/
Result GetSharedFontInOrderOfPriority(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
SERVICE_DECL(
SFUNC(0x0, IPlatformServiceManager, RequestLoad),
SFUNC(0x1, IPlatformServiceManager, GetLoadState),
SFUNC(0x2, IPlatformServiceManager, GetSize),
SFUNC(0x3, IPlatformServiceManager, GetSharedMemoryAddressOffset),
SFUNC(0x4, IPlatformServiceManager, GetSharedMemoryNativeHandle)
SFUNC(0x4, IPlatformServiceManager, GetSharedMemoryNativeHandle),
SFUNC(0x5, IPlatformServiceManager, GetSharedFontInOrderOfPriority)
)
};
}