hid: Implement ActivateDebugMouse function

Adds implementation for the missing ActivateDebugMouse HID service function
that was causing crashes when games attempted to call it.

- Add ActivateDebugMouse declaration to IHidServer header
- Implement ActivateDebugMouse function following the same pattern as ActivateMouse
- Update function table to call the actual implementation instead of nullptr
- Add missing include for debug_mouse.h

Fixes crashes in games (GEX Trilogy) that use debug mouse functionality.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
This commit is contained in:
Zephyron
2025-06-18 19:41:43 +10:00
parent c8aeab799d
commit 66a3980a43
2 changed files with 13 additions and 1 deletions

View File

@@ -25,6 +25,7 @@
#include "hid_core/resources/debug_pad/debug_pad.h" #include "hid_core/resources/debug_pad/debug_pad.h"
#include "hid_core/resources/keyboard/keyboard.h" #include "hid_core/resources/keyboard/keyboard.h"
#include "hid_core/resources/mouse/mouse.h" #include "hid_core/resources/mouse/mouse.h"
#include "hid_core/resources/mouse/debug_mouse.h"
#include "hid_core/resources/npad/npad.h" #include "hid_core/resources/npad/npad.h"
#include "hid_core/resources/npad/npad_types.h" #include "hid_core/resources/npad/npad_types.h"
#include "hid_core/resources/npad/npad_vibration.h" #include "hid_core/resources/npad/npad_vibration.h"
@@ -49,7 +50,7 @@ IHidServer::IHidServer(Core::System& system_, std::shared_ptr<ResourceManager> r
{1, C<&IHidServer::ActivateDebugPad>, "ActivateDebugPad"}, {1, C<&IHidServer::ActivateDebugPad>, "ActivateDebugPad"},
{11, C<&IHidServer::ActivateTouchScreen>, "ActivateTouchScreen"}, {11, C<&IHidServer::ActivateTouchScreen>, "ActivateTouchScreen"},
{21, C<&IHidServer::ActivateMouse>, "ActivateMouse"}, {21, C<&IHidServer::ActivateMouse>, "ActivateMouse"},
{26, nullptr, "ActivateDebugMouse"}, {26, C<&IHidServer::ActivateDebugMouse>, "ActivateDebugMouse"},
{31, C<&IHidServer::ActivateKeyboard>, "ActivateKeyboard"}, {31, C<&IHidServer::ActivateKeyboard>, "ActivateKeyboard"},
{32, C<&IHidServer::SendKeyboardLockKeyEvent>, "SendKeyboardLockKeyEvent"}, {32, C<&IHidServer::SendKeyboardLockKeyEvent>, "SendKeyboardLockKeyEvent"},
{40, C<&IHidServer::AcquireXpadIdEventHandle>, "AcquireXpadIdEventHandle"}, {40, C<&IHidServer::AcquireXpadIdEventHandle>, "AcquireXpadIdEventHandle"},
@@ -235,6 +236,16 @@ Result IHidServer::ActivateMouse(ClientAppletResourceUserId aruid) {
R_RETURN(GetResourceManager()->GetMouse()->Activate(aruid.pid)); R_RETURN(GetResourceManager()->GetMouse()->Activate(aruid.pid));
} }
Result IHidServer::ActivateDebugMouse(ClientAppletResourceUserId aruid) {
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", aruid.pid);
if (!firmware_settings->IsDeviceManaged()) {
R_TRY(GetResourceManager()->GetDebugMouse()->Activate());
}
R_RETURN(GetResourceManager()->GetDebugMouse()->Activate(aruid.pid));
}
Result IHidServer::ActivateKeyboard(ClientAppletResourceUserId aruid) { Result IHidServer::ActivateKeyboard(ClientAppletResourceUserId aruid) {
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", aruid.pid); LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", aruid.pid);

View File

@@ -38,6 +38,7 @@ private:
Result ActivateDebugPad(ClientAppletResourceUserId aruid); Result ActivateDebugPad(ClientAppletResourceUserId aruid);
Result ActivateTouchScreen(ClientAppletResourceUserId aruid); Result ActivateTouchScreen(ClientAppletResourceUserId aruid);
Result ActivateMouse(ClientAppletResourceUserId aruid); Result ActivateMouse(ClientAppletResourceUserId aruid);
Result ActivateDebugMouse(ClientAppletResourceUserId aruid);
Result ActivateKeyboard(ClientAppletResourceUserId aruid); Result ActivateKeyboard(ClientAppletResourceUserId aruid);
Result SendKeyboardLockKeyEvent(u32 flags); Result SendKeyboardLockKeyEvent(u32 flags);
Result AcquireXpadIdEventHandle(OutCopyHandle<Kernel::KReadableEvent> out_event, Result AcquireXpadIdEventHandle(OutCopyHandle<Kernel::KReadableEvent> out_event,