diff options
author | bunnei <bunneidev@gmail.com> | 2022-04-27 21:31:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-27 21:31:27 +0200 |
commit | 9ed0b5c5f9393e379a929131e2d8f7a21320b4f8 (patch) | |
tree | 157c7a8d8a5505e64b25fcd0e84dfb2c68c4295b /src/core/hle/service/hid/controllers/keyboard.cpp | |
parent | Merge pull request #8262 from Morph1984/conan (diff) | |
parent | service: hid: Ensure all structs are initialized (diff) | |
download | yuzu-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.cpp | 19 |
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 |