summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/hid/controllers/keyboard.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2022-04-27 21:31:27 +0200
committerGitHub <noreply@github.com>2022-04-27 21:31:27 +0200
commit9ed0b5c5f9393e379a929131e2d8f7a21320b4f8 (patch)
tree157c7a8d8a5505e64b25fcd0e84dfb2c68c4295b /src/core/hle/service/hid/controllers/keyboard.cpp
parentMerge pull request #8262 from Morph1984/conan (diff)
parentservice: hid: Ensure all structs are initialized (diff)
downloadyuzu-9ed0b5c5f9393e379a929131e2d8f7a21320b4f8.tar
yuzu-9ed0b5c5f9393e379a929131e2d8f7a21320b4f8.tar.gz
yuzu-9ed0b5c5f9393e379a929131e2d8f7a21320b4f8.tar.bz2
yuzu-9ed0b5c5f9393e379a929131e2d8f7a21320b4f8.tar.lz
yuzu-9ed0b5c5f9393e379a929131e2d8f7a21320b4f8.tar.xz
yuzu-9ed0b5c5f9393e379a929131e2d8f7a21320b4f8.tar.zst
yuzu-9ed0b5c5f9393e379a929131e2d8f7a21320b4f8.zip
Diffstat (limited to 'src/core/hle/service/hid/controllers/keyboard.cpp')
-rw-r--r--src/core/hle/service/hid/controllers/keyboard.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/core/hle/service/hid/controllers/keyboard.cpp b/src/core/hle/service/hid/controllers/keyboard.cpp
index 8dc67757b..117d87433 100644
--- a/src/core/hle/service/hid/controllers/keyboard.cpp
+++ b/src/core/hle/service/hid/controllers/keyboard.cpp
@@ -12,8 +12,12 @@
namespace Service::HID {
constexpr std::size_t SHARED_MEMORY_OFFSET = 0x3800;
-Controller_Keyboard::Controller_Keyboard(Core::HID::HIDCore& hid_core_)
+Controller_Keyboard::Controller_Keyboard(Core::HID::HIDCore& hid_core_, u8* raw_shared_memory_)
: ControllerBase{hid_core_} {
+ static_assert(SHARED_MEMORY_OFFSET + sizeof(KeyboardSharedMemory) < shared_memory_size,
+ "KeyboardSharedMemory is bigger than the shared memory");
+ shared_memory = std::construct_at(
+ reinterpret_cast<KeyboardSharedMemory*>(raw_shared_memory_ + SHARED_MEMORY_OFFSET));
emulated_devices = hid_core.GetEmulatedDevices();
}
@@ -23,16 +27,14 @@ void Controller_Keyboard::OnInit() {}
void Controller_Keyboard::OnRelease() {}
-void Controller_Keyboard::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data,
- std::size_t size) {
+void Controller_Keyboard::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
if (!IsControllerActivated()) {
- keyboard_lifo.buffer_count = 0;
- keyboard_lifo.buffer_tail = 0;
- std::memcpy(data + SHARED_MEMORY_OFFSET, &keyboard_lifo, sizeof(keyboard_lifo));
+ shared_memory->keyboard_lifo.buffer_count = 0;
+ shared_memory->keyboard_lifo.buffer_tail = 0;
return;
}
- const auto& last_entry = keyboard_lifo.ReadCurrentEntry().state;
+ const auto& last_entry = shared_memory->keyboard_lifo.ReadCurrentEntry().state;
next_state.sampling_number = last_entry.sampling_number + 1;
if (Settings::values.keyboard_enabled) {
@@ -44,8 +46,7 @@ void Controller_Keyboard::OnUpdate(const Core::Timing::CoreTiming& core_timing,
next_state.attribute.is_connected.Assign(1);
}
- keyboard_lifo.WriteNextEntry(next_state);
- std::memcpy(data + SHARED_MEMORY_OFFSET, &keyboard_lifo, sizeof(keyboard_lifo));
+ shared_memory->keyboard_lifo.WriteNextEntry(next_state);
}
} // namespace Service::HID