summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/hid/controllers/mouse.cpp
diff options
context:
space:
mode:
authorNarr the Reg <juangerman-13@hotmail.com>2022-04-19 22:30:32 +0200
committerNarr the Reg <juangerman-13@hotmail.com>2022-04-23 22:41:42 +0200
commit61582efeb976b0852e73b734835d60c73b38f3cf (patch)
treeb5ac72746de0533cd292ad5cb962d0e663326b0e /src/core/hle/service/hid/controllers/mouse.cpp
parentMerge pull request #8249 from german77/queued (diff)
downloadyuzu-61582efeb976b0852e73b734835d60c73b38f3cf.tar
yuzu-61582efeb976b0852e73b734835d60c73b38f3cf.tar.gz
yuzu-61582efeb976b0852e73b734835d60c73b38f3cf.tar.bz2
yuzu-61582efeb976b0852e73b734835d60c73b38f3cf.tar.lz
yuzu-61582efeb976b0852e73b734835d60c73b38f3cf.tar.xz
yuzu-61582efeb976b0852e73b734835d60c73b38f3cf.tar.zst
yuzu-61582efeb976b0852e73b734835d60c73b38f3cf.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/hid/controllers/mouse.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/core/hle/service/hid/controllers/mouse.cpp b/src/core/hle/service/hid/controllers/mouse.cpp
index a0292f586..730be33cd 100644
--- a/src/core/hle/service/hid/controllers/mouse.cpp
+++ b/src/core/hle/service/hid/controllers/mouse.cpp
@@ -12,7 +12,11 @@
namespace Service::HID {
constexpr std::size_t SHARED_MEMORY_OFFSET = 0x3400;
-Controller_Mouse::Controller_Mouse(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} {
+Controller_Mouse::Controller_Mouse(Core::HID::HIDCore& hid_core_, u8* raw_shared_memory_)
+ : ControllerBase{hid_core_} {
+ static_assert(SHARED_MEMORY_OFFSET + sizeof(MouseSharedMemory) < shared_memory_size,
+ "MouseSharedMemory is bigger than the shared memory");
+ shared_memory = std::construct_at(reinterpret_cast<MouseSharedMemory*>(raw_shared_memory_ + SHARED_MEMORY_OFFSET));
emulated_devices = hid_core.GetEmulatedDevices();
}
@@ -21,16 +25,14 @@ Controller_Mouse::~Controller_Mouse() = default;
void Controller_Mouse::OnInit() {}
void Controller_Mouse::OnRelease() {}
-void Controller_Mouse::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data,
- std::size_t size) {
+void Controller_Mouse::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
if (!IsControllerActivated()) {
- mouse_lifo.buffer_count = 0;
- mouse_lifo.buffer_tail = 0;
- std::memcpy(data + SHARED_MEMORY_OFFSET, &mouse_lifo, sizeof(mouse_lifo));
+ shared_memory->mouse_lifo.buffer_count = 0;
+ shared_memory->mouse_lifo.buffer_tail = 0;
return;
}
- const auto& last_entry = mouse_lifo.ReadCurrentEntry().state;
+ const auto& last_entry = shared_memory->mouse_lifo.ReadCurrentEntry().state;
next_state.sampling_number = last_entry.sampling_number + 1;
next_state.attribute.raw = 0;
@@ -50,8 +52,7 @@ void Controller_Mouse::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8*
next_state.button = mouse_button_state;
}
- mouse_lifo.WriteNextEntry(next_state);
- std::memcpy(data + SHARED_MEMORY_OFFSET, &mouse_lifo, sizeof(mouse_lifo));
+ shared_memory->mouse_lifo.WriteNextEntry(next_state);
}
} // namespace Service::HID