From 083a0d04d7f0521775914b0a5991f096ef10f184 Mon Sep 17 00:00:00 2001 From: wheremyfoodat Date: Sun, 18 Sep 2022 02:38:22 +0300 Subject: [PATCH] Make HID::GetIPCHandles fail to skip hidInit --- include/services/hid.hpp | 3 +++ src/core/services/hid.cpp | 10 +++++++++- src/core/services/service_manager.cpp | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/include/services/hid.hpp b/include/services/hid.hpp index eafae219..09776eec 100644 --- a/include/services/hid.hpp +++ b/include/services/hid.hpp @@ -7,6 +7,9 @@ class HIDService { Handle handle = KernelHandles::HID; Memory& mem; + // Service commands + void getIPCHandles(u32 messagePointer); + public: HIDService(Memory& mem) : mem(mem) {} void reset(); diff --git a/src/core/services/hid.cpp b/src/core/services/hid.cpp index d062d7bf..88efc538 100644 --- a/src/core/services/hid.cpp +++ b/src/core/services/hid.cpp @@ -2,13 +2,14 @@ namespace HIDCommands { enum : u32 { - + GetIPCHandles = 0x000A0000 }; } namespace Result { enum : u32 { Success = 0, + Failure = 0xFFFFFFFF }; } @@ -17,6 +18,13 @@ void HIDService::reset() {} void HIDService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { + case HIDCommands::GetIPCHandles: getIPCHandles(messagePointer); break; default: Helpers::panic("HID service requested. Command: %08X\n", command); } +} + +void HIDService::getIPCHandles(u32 messagePointer) { + printf("HID: getIPCHandles (Failure)\n"); + mem.write32(messagePointer + 4, Result::Failure); // Result code + mem.write32(messagePointer + 8, 0x14000000); // Translation descriptor } \ No newline at end of file diff --git a/src/core/services/service_manager.cpp b/src/core/services/service_manager.cpp index 013187b2..6a163862 100644 --- a/src/core/services/service_manager.cpp +++ b/src/core/services/service_manager.cpp @@ -64,7 +64,7 @@ void ServiceManager::getServiceHandle(u32 messagePointer) { if (service == "APT:S") { handle = KernelHandles::APT; } else if (service == "hid:USER") { - handle = KernelHandles::HID; + handle = KernelHandles::HID; } else { Helpers::panic("srv: GetServiceHandle with unknown service %s", service.c_str()); } @@ -77,6 +77,6 @@ void ServiceManager::sendCommandToService(u32 messagePointer, Handle handle) { switch (handle) { case KernelHandles::APT: apt.handleSyncRequest(messagePointer); break; case KernelHandles::HID: hid.handleSyncRequest(messagePointer); break; - default: Helpers::panic("Sent IPC message to unknown service %08X\n", handle); + default: Helpers::panic("Sent IPC message to unknown service %08X\n Command: %08X", handle, mem.read32(messagePointer)); } } \ No newline at end of file