From cff2d0e19e164d879b57bab9d06306fa70a1049e Mon Sep 17 00:00:00 2001 From: Narr the Reg Date: Fri, 17 Nov 2023 11:46:26 -0600 Subject: service: hid: Create appropriate hid resources --- src/core/hle/service/hid/resource_manager.cpp | 155 ++++++++++++++++++-------- 1 file changed, 106 insertions(+), 49 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 d6f42c646..e76d4eea9 100644 --- a/src/core/hle/service/hid/resource_manager.cpp +++ b/src/core/hle/service/hid/resource_manager.cpp @@ -9,14 +9,15 @@ #include "core/hle/service/hid/resource_manager.h" #include "core/hle/service/ipc_helpers.h" -#include "core/hle/service/hid/controllers/console_sixaxis.h" -#include "core/hle/service/hid/controllers/controller_base.h" +#include "core/hle/service/hid/controllers/console_six_axis.h" #include "core/hle/service/hid/controllers/debug_pad.h" #include "core/hle/service/hid/controllers/gesture.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/six_axis.h" #include "core/hle/service/hid/controllers/stubbed.h" #include "core/hle/service/hid/controllers/touchscreen.h" #include "core/hle/service/hid/controllers/xpad.h" @@ -42,76 +43,132 @@ void ResourceManager::Initialize() { } u8* shared_memory = system.Kernel().GetHidSharedMem().GetPointer(); - MakeController(HidController::DebugPad, shared_memory); - MakeController(HidController::Touchscreen, shared_memory); - MakeController(HidController::Mouse, shared_memory); - MakeController(HidController::Keyboard, shared_memory); - MakeController(HidController::XPad, shared_memory); - MakeController(HidController::HomeButton, shared_memory); - MakeController(HidController::SleepButton, shared_memory); - MakeController(HidController::CaptureButton, shared_memory); - MakeController(HidController::InputDetector, shared_memory); - MakeController(HidController::UniquePad, shared_memory); - MakeControllerWithServiceContext(HidController::NPad, shared_memory); - MakeController(HidController::Gesture, shared_memory); - MakeController(HidController::ConsoleSixAxisSensor, shared_memory); - MakeController(HidController::DebugMouse, shared_memory); - MakeControllerWithServiceContext(HidController::Palma, shared_memory); + debug_pad = std::make_shared(system.HIDCore(), shared_memory); + mouse = std::make_shared(system.HIDCore(), shared_memory); + debug_mouse = std::make_shared(system.HIDCore(), shared_memory); + keyboard = std::make_shared(system.HIDCore(), shared_memory); + unique_pad = std::make_shared(system.HIDCore(), shared_memory); + npad = std::make_shared(system.HIDCore(), shared_memory, service_context); + gesture = std::make_shared(system.HIDCore(), shared_memory); + touch_screen = std::make_shared(system.HIDCore(), shared_memory); + xpad = std::make_shared(system.HIDCore(), shared_memory); + + palma = std::make_shared(system.HIDCore(), shared_memory, service_context); + + home_button = std::make_shared(system.HIDCore(), shared_memory); + sleep_button = std::make_shared(system.HIDCore(), shared_memory); + capture_button = std::make_shared(system.HIDCore(), shared_memory); + + six_axis = std::make_shared(system.HIDCore(), npad); + console_six_axis = std::make_shared(system.HIDCore(), shared_memory); + seven_six_axis = std::make_shared(system); + + home_button->SetCommonHeaderOffset(0x4C00); + sleep_button->SetCommonHeaderOffset(0x4E00); + capture_button->SetCommonHeaderOffset(0x5000); + unique_pad->SetCommonHeaderOffset(0x5A00); + debug_mouse->SetCommonHeaderOffset(0x3DC00); // Homebrew doesn't try to activate some controllers, so we activate them by default - GetController(HidController::NPad).Activate(); - GetController(HidController::Touchscreen).Activate(); - - GetController(HidController::HomeButton).SetCommonHeaderOffset(0x4C00); - GetController(HidController::SleepButton).SetCommonHeaderOffset(0x4E00); - GetController(HidController::CaptureButton).SetCommonHeaderOffset(0x5000); - GetController(HidController::InputDetector).SetCommonHeaderOffset(0x5200); - GetController(HidController::UniquePad).SetCommonHeaderOffset(0x5A00); - GetController(HidController::DebugMouse).SetCommonHeaderOffset(0x3DC00); + npad->Activate(); + six_axis->Activate(); + touch_screen->Activate(); system.HIDCore().ReloadInputDevices(); is_initialized = true; } +std::shared_ptr ResourceManager::GetCaptureButton() const { + return capture_button; +} + +std::shared_ptr ResourceManager::GetConsoleSixAxis() const { + return console_six_axis; +} + +std::shared_ptr ResourceManager::GetDebugMouse() const { + return debug_mouse; +} + +std::shared_ptr ResourceManager::GetDebugPad() const { + return debug_pad; +} + +std::shared_ptr ResourceManager::GetGesture() const { + return gesture; +} + +std::shared_ptr ResourceManager::GetHomeButton() const { + return home_button; +} + +std::shared_ptr ResourceManager::GetKeyboard() const { + return keyboard; +} + +std::shared_ptr ResourceManager::GetMouse() const { + return mouse; +} + +std::shared_ptr ResourceManager::GetNpad() const { + return npad; +} + +std::shared_ptr ResourceManager::GetPalma() const { + return palma; +} + +std::shared_ptr ResourceManager::GetSevenSixAxis() const { + return seven_six_axis; +} + +std::shared_ptr ResourceManager::GetSixAxis() const { + return six_axis; +} + +std::shared_ptr ResourceManager::GetSleepButton() const { + return sleep_button; +} + +std::shared_ptr ResourceManager::GetTouchScreen() const { + return touch_screen; +} + +std::shared_ptr ResourceManager::GetUniquePad() const { + return unique_pad; +} void ResourceManager::UpdateControllers(std::uintptr_t user_data, std::chrono::nanoseconds ns_late) { auto& core_timing = system.CoreTiming(); - - for (const auto& controller : controllers) { - // Keyboard has it's own update event - if (controller == controllers[static_cast(HidController::Keyboard)]) { - continue; - } - // Mouse has it's own update event - if (controller == controllers[static_cast(HidController::Mouse)]) { - continue; - } - // Npad has it's own update event - if (controller == controllers[static_cast(HidController::NPad)]) { - continue; - } - controller->OnUpdate(core_timing); - } + debug_pad->OnUpdate(core_timing); + unique_pad->OnUpdate(core_timing); + gesture->OnUpdate(core_timing); + touch_screen->OnUpdate(core_timing); + palma->OnUpdate(core_timing); + home_button->OnUpdate(core_timing); + sleep_button->OnUpdate(core_timing); + capture_button->OnUpdate(core_timing); + xpad->OnUpdate(core_timing); } void ResourceManager::UpdateNpad(std::uintptr_t user_data, std::chrono::nanoseconds ns_late) { auto& core_timing = system.CoreTiming(); - - controllers[static_cast(HidController::NPad)]->OnUpdate(core_timing); + npad->OnUpdate(core_timing); } void ResourceManager::UpdateMouseKeyboard(std::uintptr_t user_data, std::chrono::nanoseconds ns_late) { auto& core_timing = system.CoreTiming(); - - controllers[static_cast(HidController::Mouse)]->OnUpdate(core_timing); - controllers[static_cast(HidController::Keyboard)]->OnUpdate(core_timing); + mouse->OnUpdate(core_timing); + debug_mouse->OnUpdate(core_timing); + keyboard->OnUpdate(core_timing); } void ResourceManager::UpdateMotion(std::uintptr_t user_data, std::chrono::nanoseconds ns_late) { auto& core_timing = system.CoreTiming(); - - controllers[static_cast(HidController::NPad)]->OnMotionUpdate(core_timing); + six_axis->OnUpdate(core_timing); + seven_six_axis->OnUpdate(core_timing); + console_six_axis->OnUpdate(core_timing); } IAppletResource::IAppletResource(Core::System& system_, std::shared_ptr resource) -- cgit v1.2.3