diff --git a/include/services/service_manager.hpp b/include/services/service_manager.hpp index 8c43815f..1ca80293 100644 --- a/include/services/service_manager.hpp +++ b/include/services/service_manager.hpp @@ -27,6 +27,7 @@ class ServiceManager { // "srv:" commands void enableNotification(u32 messagePointer); void getServiceHandle(u32 messagePointer); + void receiveNotification(u32 messagePointer); void registerClient(u32 messagePointer); public: diff --git a/src/core/services/service_manager.cpp b/src/core/services/service_manager.cpp index f3fc7a10..f9f3ec80 100644 --- a/src/core/services/service_manager.cpp +++ b/src/core/services/service_manager.cpp @@ -46,6 +46,7 @@ void ServiceManager::handleSyncRequest(u32 messagePointer) { switch (header) { case Commands::EnableNotification: enableNotification(messagePointer); break; + case Commands::ReceiveNotification: receiveNotification(messagePointer); break; case Commands::RegisterClient: registerClient(messagePointer); break; case Commands::GetServiceHandle: getServiceHandle(messagePointer); break; default: Helpers::panic("Unknown \"srv:\" command: %08X", header); @@ -92,7 +93,7 @@ void ServiceManager::getServiceHandle(u32 messagePointer) { } void ServiceManager::enableNotification(u32 messagePointer) { - log("srv::EnableNotification()\n"); + log("srv::EnableNotification() (STUBBED)\n"); mem.write32(messagePointer + 4, Result::Success); // Result code mem.write32(messagePointer + 8, 0); // Translation descriptor @@ -100,6 +101,13 @@ void ServiceManager::enableNotification(u32 messagePointer) { mem.write32(messagePointer + 12, 0x69696979); } +void ServiceManager::receiveNotification(u32 messagePointer) { + log("srv::ReceiveNotification() (STUBBED)\n"); + printf("r15 = %08X", regs[15]); + mem.write32(messagePointer + 4, Result::Success); // Result code + mem.write32(messagePointer + 8, 0); // Notification ID +} + void ServiceManager::sendCommandToService(u32 messagePointer, Handle handle) { switch (handle) { case KernelHandles::APT: apt.handleSyncRequest(messagePointer); break;