diff options
| author | 2024-01-04 20:37:43 -0600 | |
|---|---|---|
| committer | 2024-01-05 11:41:15 -0600 | |
| commit | ee847f8ff0b1b0aec39c1b78c010bc0c08a0a613 (patch) | |
| tree | 3b95cbb74be05f0ce7a007353f1f9f95e1ed3901 /src/hid_core/resources/mouse | |
| parent | Merge pull request #12437 from ameerj/gl-amd-fixes (diff) | |
| download | yuzu-ee847f8ff0b1b0aec39c1b78c010bc0c08a0a613.tar.gz yuzu-ee847f8ff0b1b0aec39c1b78c010bc0c08a0a613.tar.xz yuzu-ee847f8ff0b1b0aec39c1b78c010bc0c08a0a613.zip | |
hid_core: Move hid to it's own subproject
Diffstat (limited to 'src/hid_core/resources/mouse')
| -rw-r--r-- | src/hid_core/resources/mouse/debug_mouse.cpp | 64 | ||||
| -rw-r--r-- | src/hid_core/resources/mouse/debug_mouse.h | 34 | ||||
| -rw-r--r-- | src/hid_core/resources/mouse/mouse.cpp | 64 | ||||
| -rw-r--r-- | src/hid_core/resources/mouse/mouse.h | 34 | ||||
| -rw-r--r-- | src/hid_core/resources/mouse/mouse_types.h | 8 |
5 files changed, 204 insertions, 0 deletions
diff --git a/src/hid_core/resources/mouse/debug_mouse.cpp b/src/hid_core/resources/mouse/debug_mouse.cpp new file mode 100644 index 000000000..5f6f6e8e1 --- /dev/null +++ b/src/hid_core/resources/mouse/debug_mouse.cpp | |||
| @@ -0,0 +1,64 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "core/core_timing.h" | ||
| 5 | #include "core/frontend/emu_window.h" | ||
| 6 | #include "hid_core/frontend/emulated_devices.h" | ||
| 7 | #include "hid_core/hid_core.h" | ||
| 8 | #include "hid_core/resources/applet_resource.h" | ||
| 9 | #include "hid_core/resources/mouse/debug_mouse.h" | ||
| 10 | #include "hid_core/resources/shared_memory_format.h" | ||
| 11 | |||
| 12 | namespace Service::HID { | ||
| 13 | |||
| 14 | DebugMouse::DebugMouse(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} { | ||
| 15 | emulated_devices = hid_core.GetEmulatedDevices(); | ||
| 16 | } | ||
| 17 | |||
| 18 | DebugMouse::~DebugMouse() = default; | ||
| 19 | |||
| 20 | void DebugMouse::OnInit() {} | ||
| 21 | void DebugMouse::OnRelease() {} | ||
| 22 | |||
| 23 | void DebugMouse::OnUpdate(const Core::Timing::CoreTiming& core_timing) { | ||
| 24 | std::scoped_lock shared_lock{*shared_mutex}; | ||
| 25 | const u64 aruid = applet_resource->GetActiveAruid(); | ||
| 26 | auto* data = applet_resource->GetAruidData(aruid); | ||
| 27 | |||
| 28 | if (data == nullptr || !data->flag.is_assigned) { | ||
| 29 | return; | ||
| 30 | } | ||
| 31 | |||
| 32 | MouseSharedMemoryFormat& shared_memory = data->shared_memory_format->debug_mouse; | ||
| 33 | |||
| 34 | if (!IsControllerActivated()) { | ||
| 35 | shared_memory.mouse_lifo.buffer_count = 0; | ||
| 36 | shared_memory.mouse_lifo.buffer_tail = 0; | ||
| 37 | return; | ||
| 38 | } | ||
| 39 | |||
| 40 | next_state = {}; | ||
| 41 | |||
| 42 | const auto& last_entry = shared_memory.mouse_lifo.ReadCurrentEntry().state; | ||
| 43 | next_state.sampling_number = last_entry.sampling_number + 1; | ||
| 44 | |||
| 45 | if (Settings::values.mouse_enabled) { | ||
| 46 | const auto& mouse_button_state = emulated_devices->GetMouseButtons(); | ||
| 47 | const auto& mouse_position_state = emulated_devices->GetMousePosition(); | ||
| 48 | const auto& mouse_wheel_state = emulated_devices->GetMouseWheel(); | ||
| 49 | next_state.attribute.is_connected.Assign(1); | ||
| 50 | next_state.x = static_cast<s32>(mouse_position_state.x * Layout::ScreenUndocked::Width); | ||
| 51 | next_state.y = static_cast<s32>(mouse_position_state.y * Layout::ScreenUndocked::Height); | ||
| 52 | next_state.delta_x = next_state.x - last_entry.x; | ||
| 53 | next_state.delta_y = next_state.y - last_entry.y; | ||
| 54 | next_state.delta_wheel_x = mouse_wheel_state.x - last_mouse_wheel_state.x; | ||
| 55 | next_state.delta_wheel_y = mouse_wheel_state.y - last_mouse_wheel_state.y; | ||
| 56 | |||
| 57 | last_mouse_wheel_state = mouse_wheel_state; | ||
| 58 | next_state.button = mouse_button_state; | ||
| 59 | } | ||
| 60 | |||
| 61 | shared_memory.mouse_lifo.WriteNextEntry(next_state); | ||
| 62 | } | ||
| 63 | |||
| 64 | } // namespace Service::HID | ||
diff --git a/src/hid_core/resources/mouse/debug_mouse.h b/src/hid_core/resources/mouse/debug_mouse.h new file mode 100644 index 000000000..006b53da6 --- /dev/null +++ b/src/hid_core/resources/mouse/debug_mouse.h | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "hid_core/hid_types.h" | ||
| 7 | #include "hid_core/resources/controller_base.h" | ||
| 8 | |||
| 9 | namespace Core::HID { | ||
| 10 | class HIDCore; | ||
| 11 | class EmulatedDevices; | ||
| 12 | } // namespace Core::HID | ||
| 13 | |||
| 14 | namespace Service::HID { | ||
| 15 | class DebugMouse final : public ControllerBase { | ||
| 16 | public: | ||
| 17 | explicit DebugMouse(Core::HID::HIDCore& hid_core_); | ||
| 18 | ~DebugMouse() override; | ||
| 19 | |||
| 20 | // Called when the controller is initialized | ||
| 21 | void OnInit() override; | ||
| 22 | |||
| 23 | // When the controller is released | ||
| 24 | void OnRelease() override; | ||
| 25 | |||
| 26 | // When the controller is requesting an update for the shared memory | ||
| 27 | void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; | ||
| 28 | |||
| 29 | private: | ||
| 30 | Core::HID::MouseState next_state{}; | ||
| 31 | Core::HID::AnalogStickState last_mouse_wheel_state{}; | ||
| 32 | Core::HID::EmulatedDevices* emulated_devices = nullptr; | ||
| 33 | }; | ||
| 34 | } // namespace Service::HID | ||
diff --git a/src/hid_core/resources/mouse/mouse.cpp b/src/hid_core/resources/mouse/mouse.cpp new file mode 100644 index 000000000..53a8938a1 --- /dev/null +++ b/src/hid_core/resources/mouse/mouse.cpp | |||
| @@ -0,0 +1,64 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "core/core_timing.h" | ||
| 5 | #include "core/frontend/emu_window.h" | ||
| 6 | #include "hid_core/frontend/emulated_devices.h" | ||
| 7 | #include "hid_core/hid_core.h" | ||
| 8 | #include "hid_core/resources/applet_resource.h" | ||
| 9 | #include "hid_core/resources/mouse/mouse.h" | ||
| 10 | #include "hid_core/resources/shared_memory_format.h" | ||
| 11 | |||
| 12 | namespace Service::HID { | ||
| 13 | |||
| 14 | Mouse::Mouse(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} { | ||
| 15 | emulated_devices = hid_core.GetEmulatedDevices(); | ||
| 16 | } | ||
| 17 | |||
| 18 | Mouse::~Mouse() = default; | ||
| 19 | |||
| 20 | void Mouse::OnInit() {} | ||
| 21 | void Mouse::OnRelease() {} | ||
| 22 | |||
| 23 | void Mouse::OnUpdate(const Core::Timing::CoreTiming& core_timing) { | ||
| 24 | std::scoped_lock shared_lock{*shared_mutex}; | ||
| 25 | const u64 aruid = applet_resource->GetActiveAruid(); | ||
| 26 | auto* data = applet_resource->GetAruidData(aruid); | ||
| 27 | |||
| 28 | if (data == nullptr || !data->flag.is_assigned) { | ||
| 29 | return; | ||
| 30 | } | ||
| 31 | |||
| 32 | MouseSharedMemoryFormat& shared_memory = data->shared_memory_format->mouse; | ||
| 33 | |||
| 34 | if (!IsControllerActivated()) { | ||
| 35 | shared_memory.mouse_lifo.buffer_count = 0; | ||
| 36 | shared_memory.mouse_lifo.buffer_tail = 0; | ||
| 37 | return; | ||
| 38 | } | ||
| 39 | |||
| 40 | next_state = {}; | ||
| 41 | |||
| 42 | const auto& last_entry = shared_memory.mouse_lifo.ReadCurrentEntry().state; | ||
| 43 | next_state.sampling_number = last_entry.sampling_number + 1; | ||
| 44 | |||
| 45 | if (Settings::values.mouse_enabled) { | ||
| 46 | const auto& mouse_button_state = emulated_devices->GetMouseButtons(); | ||
| 47 | const auto& mouse_position_state = emulated_devices->GetMousePosition(); | ||
| 48 | const auto& mouse_wheel_state = emulated_devices->GetMouseWheel(); | ||
| 49 | next_state.attribute.is_connected.Assign(1); | ||
| 50 | next_state.x = static_cast<s32>(mouse_position_state.x * Layout::ScreenUndocked::Width); | ||
| 51 | next_state.y = static_cast<s32>(mouse_position_state.y * Layout::ScreenUndocked::Height); | ||
| 52 | next_state.delta_x = next_state.x - last_entry.x; | ||
| 53 | next_state.delta_y = next_state.y - last_entry.y; | ||
| 54 | next_state.delta_wheel_x = mouse_wheel_state.x - last_mouse_wheel_state.x; | ||
| 55 | next_state.delta_wheel_y = mouse_wheel_state.y - last_mouse_wheel_state.y; | ||
| 56 | |||
| 57 | last_mouse_wheel_state = mouse_wheel_state; | ||
| 58 | next_state.button = mouse_button_state; | ||
| 59 | } | ||
| 60 | |||
| 61 | shared_memory.mouse_lifo.WriteNextEntry(next_state); | ||
| 62 | } | ||
| 63 | |||
| 64 | } // namespace Service::HID | ||
diff --git a/src/hid_core/resources/mouse/mouse.h b/src/hid_core/resources/mouse/mouse.h new file mode 100644 index 000000000..e9ac6ad36 --- /dev/null +++ b/src/hid_core/resources/mouse/mouse.h | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "hid_core/hid_types.h" | ||
| 7 | #include "hid_core/resources/controller_base.h" | ||
| 8 | |||
| 9 | namespace Core::HID { | ||
| 10 | class HIDCore; | ||
| 11 | class EmulatedDevices; | ||
| 12 | } // namespace Core::HID | ||
| 13 | |||
| 14 | namespace Service::HID { | ||
| 15 | class Mouse final : public ControllerBase { | ||
| 16 | public: | ||
| 17 | explicit Mouse(Core::HID::HIDCore& hid_core_); | ||
| 18 | ~Mouse() override; | ||
| 19 | |||
| 20 | // Called when the controller is initialized | ||
| 21 | void OnInit() override; | ||
| 22 | |||
| 23 | // When the controller is released | ||
| 24 | void OnRelease() override; | ||
| 25 | |||
| 26 | // When the controller is requesting an update for the shared memory | ||
| 27 | void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; | ||
| 28 | |||
| 29 | private: | ||
| 30 | Core::HID::MouseState next_state{}; | ||
| 31 | Core::HID::AnalogStickState last_mouse_wheel_state{}; | ||
| 32 | Core::HID::EmulatedDevices* emulated_devices = nullptr; | ||
| 33 | }; | ||
| 34 | } // namespace Service::HID | ||
diff --git a/src/hid_core/resources/mouse/mouse_types.h b/src/hid_core/resources/mouse/mouse_types.h new file mode 100644 index 000000000..8bd6e167c --- /dev/null +++ b/src/hid_core/resources/mouse/mouse_types.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-3.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "common/common_types.h" | ||
| 7 | |||
| 8 | namespace Service::HID {} // namespace Service::HID | ||