summaryrefslogtreecommitdiff
path: root/src/hid_core/resources/mouse
diff options
context:
space:
mode:
authorGravatar Narr the Reg2024-01-04 20:37:43 -0600
committerGravatar Narr the Reg2024-01-05 11:41:15 -0600
commitee847f8ff0b1b0aec39c1b78c010bc0c08a0a613 (patch)
tree3b95cbb74be05f0ce7a007353f1f9f95e1ed3901 /src/hid_core/resources/mouse
parentMerge pull request #12437 from ameerj/gl-amd-fixes (diff)
downloadyuzu-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.cpp64
-rw-r--r--src/hid_core/resources/mouse/debug_mouse.h34
-rw-r--r--src/hid_core/resources/mouse/mouse.cpp64
-rw-r--r--src/hid_core/resources/mouse/mouse.h34
-rw-r--r--src/hid_core/resources/mouse/mouse_types.h8
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
12namespace Service::HID {
13
14DebugMouse::DebugMouse(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} {
15 emulated_devices = hid_core.GetEmulatedDevices();
16}
17
18DebugMouse::~DebugMouse() = default;
19
20void DebugMouse::OnInit() {}
21void DebugMouse::OnRelease() {}
22
23void 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
9namespace Core::HID {
10class HIDCore;
11class EmulatedDevices;
12} // namespace Core::HID
13
14namespace Service::HID {
15class DebugMouse final : public ControllerBase {
16public:
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
29private:
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
12namespace Service::HID {
13
14Mouse::Mouse(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} {
15 emulated_devices = hid_core.GetEmulatedDevices();
16}
17
18Mouse::~Mouse() = default;
19
20void Mouse::OnInit() {}
21void Mouse::OnRelease() {}
22
23void 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
9namespace Core::HID {
10class HIDCore;
11class EmulatedDevices;
12} // namespace Core::HID
13
14namespace Service::HID {
15class Mouse final : public ControllerBase {
16public:
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
29private:
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
8namespace Service::HID {} // namespace Service::HID