From ee847f8ff0b1b0aec39c1b78c010bc0c08a0a613 Mon Sep 17 00:00:00 2001 From: Narr the Reg Date: Thu, 4 Jan 2024 20:37:43 -0600 Subject: hid_core: Move hid to it's own subproject --- src/hid_core/resource_manager.h | 149 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 src/hid_core/resource_manager.h (limited to 'src/hid_core/resource_manager.h') diff --git a/src/hid_core/resource_manager.h b/src/hid_core/resource_manager.h new file mode 100644 index 000000000..7a21d8eb8 --- /dev/null +++ b/src/hid_core/resource_manager.h @@ -0,0 +1,149 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include "core/hle/service/kernel_helpers.h" +#include "core/hle/service/service.h" + +namespace Core { +class System; +} + +namespace Core::Timing { +struct EventType; +} + +namespace Kernel { +class KSharedMemory; +} + +namespace Service::HID { +class AppletResource; +class CaptureButton; +class Controller_Stubbed; +class ConsoleSixAxis; +class DebugMouse; +class DebugPad; +class Digitizer; +class Gesture; +class HomeButton; +class Keyboard; +class Mouse; +class NPad; +class Palma; +class SevenSixAxis; +class SixAxis; +class SleepButton; +class TouchScreen; +class UniquePad; + +class ResourceManager { + +public: + explicit ResourceManager(Core::System& system_); + ~ResourceManager(); + + void Initialize(); + + std::shared_ptr GetAppletResource() const; + std::shared_ptr GetCaptureButton() const; + std::shared_ptr GetConsoleSixAxis() const; + std::shared_ptr GetDebugMouse() const; + std::shared_ptr GetDebugPad() const; + std::shared_ptr GetDigitizer() const; + std::shared_ptr GetGesture() const; + std::shared_ptr GetHomeButton() const; + std::shared_ptr GetKeyboard() const; + std::shared_ptr GetMouse() const; + std::shared_ptr GetNpad() const; + std::shared_ptr GetPalma() const; + std::shared_ptr GetSevenSixAxis() const; + std::shared_ptr GetSixAxis() const; + std::shared_ptr GetSleepButton() const; + std::shared_ptr GetTouchScreen() const; + std::shared_ptr GetUniquePad() const; + + Result CreateAppletResource(u64 aruid); + + Result RegisterCoreAppletResource(); + Result UnregisterCoreAppletResource(); + Result RegisterAppletResourceUserId(u64 aruid, bool bool_value); + void UnregisterAppletResourceUserId(u64 aruid); + + Result GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle, u64 aruid); + void FreeAppletResourceId(u64 aruid); + + void EnableInput(u64 aruid, bool is_enabled); + void EnableSixAxisSensor(u64 aruid, bool is_enabled); + void EnablePadInput(u64 aruid, bool is_enabled); + void EnableTouchScreen(u64 aruid, bool is_enabled); + + void UpdateControllers(std::chrono::nanoseconds ns_late); + void UpdateNpad(std::chrono::nanoseconds ns_late); + void UpdateMouseKeyboard(std::chrono::nanoseconds ns_late); + void UpdateMotion(std::chrono::nanoseconds ns_late); + +private: + Result CreateAppletResourceImpl(u64 aruid); + void InitializeHidCommonSampler(); + void InitializeTouchScreenSampler(); + void InitializeConsoleSixAxisSampler(); + void InitializeAHidSampler(); + + bool is_initialized{false}; + + mutable std::recursive_mutex shared_mutex; + std::shared_ptr applet_resource = nullptr; + + std::shared_ptr capture_button = nullptr; + std::shared_ptr console_six_axis = nullptr; + std::shared_ptr debug_mouse = nullptr; + std::shared_ptr debug_pad = nullptr; + std::shared_ptr digitizer = nullptr; + std::shared_ptr gesture = nullptr; + std::shared_ptr home_button = nullptr; + std::shared_ptr keyboard = nullptr; + std::shared_ptr mouse = nullptr; + std::shared_ptr npad = nullptr; + std::shared_ptr palma = nullptr; + std::shared_ptr seven_six_axis = nullptr; + std::shared_ptr six_axis = nullptr; + std::shared_ptr sleep_button = nullptr; + std::shared_ptr touch_screen = nullptr; + std::shared_ptr unique_pad = nullptr; + + // TODO: Create these resources + // std::shared_ptr audio_control = nullptr; + // std::shared_ptr button_config = nullptr; + // std::shared_ptr config = nullptr; + // std::shared_ptr connection = nullptr; + // std::shared_ptr custom_config = nullptr; + // std::shared_ptr digitizer = nullptr; + // std::shared_ptr hdls = nullptr; + // std::shared_ptr play_report = nullptr; + // std::shared_ptr rail = nullptr; + + Core::System& system; + KernelHelpers::ServiceContext service_context; +}; + +class IAppletResource final : public ServiceFramework { +public: + explicit IAppletResource(Core::System& system_, std::shared_ptr resource, + u64 applet_resource_user_id); + ~IAppletResource() override; + +private: + void GetSharedMemoryHandle(HLERequestContext& ctx); + + std::shared_ptr npad_update_event; + std::shared_ptr default_update_event; + std::shared_ptr mouse_keyboard_update_event; + std::shared_ptr motion_update_event; + + u64 aruid; + std::shared_ptr resource_manager; +}; + +} // namespace Service::HID -- cgit v1.2.3