From 865abfc37c5b3e8945d833bd44db428ad720bd58 Mon Sep 17 00:00:00 2001 From: Narr the Reg Date: Sun, 31 Dec 2023 00:42:23 -0600 Subject: service: hid: Use applet resource to get latest shared memory handle --- src/core/hle/service/hid/resource_manager.cpp | 107 ++++++++++++++++---------- 1 file changed, 66 insertions(+), 41 deletions(-) (limited to 'src/core/hle/service/hid/resource_manager.cpp') diff --git a/src/core/hle/service/hid/resource_manager.cpp b/src/core/hle/service/hid/resource_manager.cpp index 6c6cbd802..7b689d085 100644 --- a/src/core/hle/service/hid/resource_manager.cpp +++ b/src/core/hle/service/hid/resource_manager.cpp @@ -10,18 +10,23 @@ #include "core/hle/service/ipc_helpers.h" #include "core/hle/service/hid/controllers/applet_resource.h" +#include "core/hle/service/hid/controllers/capture_button.h" #include "core/hle/service/hid/controllers/console_six_axis.h" +#include "core/hle/service/hid/controllers/debug_mouse.h" #include "core/hle/service/hid/controllers/debug_pad.h" +#include "core/hle/service/hid/controllers/digitizer.h" #include "core/hle/service/hid/controllers/gesture.h" +#include "core/hle/service/hid/controllers/home_button.h" #include "core/hle/service/hid/controllers/keyboard.h" #include "core/hle/service/hid/controllers/mouse.h" #include "core/hle/service/hid/controllers/npad.h" #include "core/hle/service/hid/controllers/palma.h" #include "core/hle/service/hid/controllers/seven_six_axis.h" -#include "core/hle/service/hid/controllers/shared_memory_format.h" #include "core/hle/service/hid/controllers/six_axis.h" -#include "core/hle/service/hid/controllers/stubbed.h" +#include "core/hle/service/hid/controllers/sleep_button.h" #include "core/hle/service/hid/controllers/touchscreen.h" +#include "core/hle/service/hid/controllers/types/shared_memory_format.h" +#include "core/hle/service/hid/controllers/unique_pad.h" namespace Service::HID { @@ -46,42 +51,13 @@ void ResourceManager::Initialize() { } system.HIDCore().ReloadInputDevices(); - is_initialized = true; -} - -void ResourceManager::InitializeController(u64 aruid) { - SharedMemoryFormat* shared_memory = nullptr; - const auto result = applet_resource->GetSharedMemoryFormat(&shared_memory, aruid); - if (result.IsError()) { - return; - } - - debug_pad = std::make_shared(system.HIDCore(), shared_memory->debug_pad); - mouse = std::make_shared(system.HIDCore(), shared_memory->mouse); - debug_mouse = std::make_shared(system.HIDCore(), shared_memory->debug_mouse); - keyboard = std::make_shared(system.HIDCore(), shared_memory->keyboard); - unique_pad = std::make_shared(system.HIDCore(), shared_memory->unique_pad.header); - npad = std::make_shared(system.HIDCore(), shared_memory->npad, service_context); - gesture = std::make_shared(system.HIDCore(), shared_memory->gesture); - touch_screen = std::make_shared(system.HIDCore(), shared_memory->touch_screen); - palma = std::make_shared(system.HIDCore(), service_context); + InitializeHidCommonSampler(); + InitializeTouchScreenSampler(); + InitializeConsoleSixAxisSampler(); + InitializeAHidSampler(); - home_button = std::make_shared(system.HIDCore(), shared_memory->home_button.header); - sleep_button = - std::make_shared(system.HIDCore(), shared_memory->sleep_button.header); - capture_button = - std::make_shared(system.HIDCore(), shared_memory->capture_button.header); - digitizer = std::make_shared(system.HIDCore(), shared_memory->digitizer.header); - - six_axis = std::make_shared(system.HIDCore(), npad); - console_six_axis = std::make_shared(system.HIDCore(), shared_memory->console); - seven_six_axis = std::make_shared(system); - - // Homebrew doesn't try to activate some controllers, so we activate them by default - npad->Activate(); - six_axis->Activate(); - touch_screen->Activate(); + is_initialized = true; } std::shared_ptr ResourceManager::GetAppletResource() const { @@ -165,16 +141,65 @@ Result ResourceManager::CreateAppletResource(u64 aruid) { if (result.IsError()) { return result; } + + // Homebrew doesn't try to activate some controllers, so we activate them by default + npad->Activate(); + six_axis->Activate(); + touch_screen->Activate(); + return GetNpad()->Activate(aruid); } Result ResourceManager::CreateAppletResourceImpl(u64 aruid) { std::scoped_lock lock{shared_mutex}; - const auto result = applet_resource->CreateAppletResource(aruid); - if (result.IsSuccess()) { - InitializeController(aruid); - } - return result; + return applet_resource->CreateAppletResource(aruid); +} + +void ResourceManager::InitializeHidCommonSampler() { + debug_pad = std::make_shared(system.HIDCore()); + mouse = std::make_shared(system.HIDCore()); + debug_mouse = std::make_shared(system.HIDCore()); + keyboard = std::make_shared(system.HIDCore()); + unique_pad = std::make_shared(system.HIDCore()); + npad = std::make_shared(system.HIDCore(), service_context); + gesture = std::make_shared(system.HIDCore()); + home_button = std::make_shared(system.HIDCore()); + sleep_button = std::make_shared(system.HIDCore()); + capture_button = std::make_shared(system.HIDCore()); + digitizer = std::make_shared(system.HIDCore()); + + palma = std::make_shared(system.HIDCore(), service_context); + six_axis = std::make_shared(system.HIDCore(), npad); + + debug_pad->SetAppletResource(applet_resource); + digitizer->SetAppletResource(applet_resource); + keyboard->SetAppletResource(applet_resource); + npad->SetAppletResource(applet_resource); + six_axis->SetAppletResource(applet_resource); + mouse->SetAppletResource(applet_resource); + debug_mouse->SetAppletResource(applet_resource); + home_button->SetAppletResource(applet_resource); + sleep_button->SetAppletResource(applet_resource); + capture_button->SetAppletResource(applet_resource); +} + +void ResourceManager::InitializeTouchScreenSampler() { + gesture = std::make_shared(system.HIDCore()); + touch_screen = std::make_shared(system.HIDCore()); + + touch_screen->SetAppletResource(applet_resource); + gesture->SetAppletResource(applet_resource); +} + +void ResourceManager::InitializeConsoleSixAxisSampler() { + console_six_axis = std::make_shared(system.HIDCore()); + seven_six_axis = std::make_shared(system); + + console_six_axis->SetAppletResource(applet_resource); +} + +void ResourceManager::InitializeAHidSampler() { + // TODO } Result ResourceManager::RegisterCoreAppletResource() { -- cgit v1.2.3