From 330634ab74c90eb38ef3839b41874406b7b36887 Mon Sep 17 00:00:00 2001 From: XorTroll Date: Wed, 12 Feb 2020 22:04:30 +0100 Subject: [PATCH] Add new files --- uDaemon/include/ipc/ipc_IPrivateService.hpp | 28 +++++++++++++++++++++ uDaemon/include/ipc/ipc_IPublicService.hpp | 24 ++++++++++++++++++ uDaemon/source/ipc/ipc_IPrivateService.cpp | 26 +++++++++++++++++++ uDaemon/source/ipc/ipc_IPublicService.cpp | 6 +++++ 4 files changed, 84 insertions(+) create mode 100644 uDaemon/include/ipc/ipc_IPrivateService.hpp create mode 100644 uDaemon/include/ipc/ipc_IPublicService.hpp create mode 100644 uDaemon/source/ipc/ipc_IPrivateService.cpp create mode 100644 uDaemon/source/ipc/ipc_IPublicService.cpp diff --git a/uDaemon/include/ipc/ipc_IPrivateService.hpp b/uDaemon/include/ipc/ipc_IPrivateService.hpp new file mode 100644 index 0000000..c23bf46 --- /dev/null +++ b/uDaemon/include/ipc/ipc_IPrivateService.hpp @@ -0,0 +1,28 @@ + +#pragma once +#include +#include + +namespace ipc +{ + class IPrivateService : public ams::sf::IServiceObject + { + private: + + enum class CommandId + { + GetLatestMessage = 0 + }; + + public: + + ams::Result GetLatestMessage(ams::sf::Out msg, const ams::sf::ClientProcessId &client_pid); + + public: + + DEFINE_SERVICE_DISPATCH_TABLE + { + MAKE_SERVICE_COMMAND_META(GetLatestMessage) + }; + }; +} \ No newline at end of file diff --git a/uDaemon/include/ipc/ipc_IPublicService.hpp b/uDaemon/include/ipc/ipc_IPublicService.hpp new file mode 100644 index 0000000..964884a --- /dev/null +++ b/uDaemon/include/ipc/ipc_IPublicService.hpp @@ -0,0 +1,24 @@ + +#pragma once +#include +#include + +namespace ipc +{ + class IPublicService : public ams::sf::IServiceObject + { + private: + + enum class CommandId + { + }; + + public: + + public: + + DEFINE_SERVICE_DISPATCH_TABLE + { + }; + }; +} \ No newline at end of file diff --git a/uDaemon/source/ipc/ipc_IPrivateService.cpp b/uDaemon/source/ipc/ipc_IPrivateService.cpp new file mode 100644 index 0000000..8f8c587 --- /dev/null +++ b/uDaemon/source/ipc/ipc_IPrivateService.cpp @@ -0,0 +1,26 @@ +#include +#include +#include + +extern ams::os::Mutex g_last_menu_msg_lock; +extern am::MenuMessage g_last_menu_msg; + +namespace ipc +{ + ams::Result IPrivateService::GetLatestMessage(ams::sf::Out msg, const ams::sf::ClientProcessId &client_pid) + { + u64 program_id = 0; + UL_ASSERT(pminfoGetProgramId(&program_id, client_pid.process_id.value)); + + auto last_menu_program_id = am::LibraryAppletGetProgramIdForAppletId(am::LibraryAppletGetMenuAppletId()); + // If Menu hasn't been launched it's program ID will be 0/invalid, thus a != check wouldn't be enough + // If any of the IDs is invalid, something unexpected is happening... + if((last_menu_program_id == 0) || (program_id == 0) || (program_id != last_menu_program_id)) return RES_VALUE(Daemon, PrivateServiceInvalidProcess); + + std::scoped_lock _lock(g_last_menu_msg_lock); + msg.SetValue((u32)g_last_menu_msg); + g_last_menu_msg = am::MenuMessage::Invalid; + + return ams::ResultSuccess(); + } +} \ No newline at end of file diff --git a/uDaemon/source/ipc/ipc_IPublicService.cpp b/uDaemon/source/ipc/ipc_IPublicService.cpp new file mode 100644 index 0000000..a4d7cd7 --- /dev/null +++ b/uDaemon/source/ipc/ipc_IPublicService.cpp @@ -0,0 +1,6 @@ +#include + +namespace ipc +{ + +} \ No newline at end of file