From e21f96ffde30d66337bd119c04a13f1025be159c Mon Sep 17 00:00:00 2001 From: FrozenAra Date: Mon, 27 Nov 2023 19:26:06 +0100 Subject: Fixed controller applet crashing when on FW17+ --- src/core/hle/service/hid/controllers/touchscreen.cpp | 12 +++++++++--- src/core/hle/service/hid/controllers/touchscreen.h | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'src/core/hle/service/hid/controllers') diff --git a/src/core/hle/service/hid/controllers/touchscreen.cpp b/src/core/hle/service/hid/controllers/touchscreen.cpp index 3bcf0ee9f..fcd973414 100644 --- a/src/core/hle/service/hid/controllers/touchscreen.cpp +++ b/src/core/hle/service/hid/controllers/touchscreen.cpp @@ -16,7 +16,8 @@ namespace Service::HID { constexpr std::size_t SHARED_MEMORY_OFFSET = 0x400; TouchScreen::TouchScreen(Core::HID::HIDCore& hid_core_, u8* raw_shared_memory_) - : ControllerBase{hid_core_} { + : ControllerBase{hid_core_}, touchscreen_width(Layout::ScreenUndocked::Width), + touchscreen_height(Layout::ScreenUndocked::Height) { static_assert(SHARED_MEMORY_OFFSET + sizeof(TouchSharedMemory) < shared_memory_size, "TouchSharedMemory is bigger than the shared memory"); shared_memory = std::construct_at( @@ -95,8 +96,8 @@ void TouchScreen::OnUpdate(const Core::Timing::CoreTiming& core_timing) { if (id < active_fingers_count) { const auto& [active_x, active_y] = active_fingers[id].position; touch_entry.position = { - .x = static_cast(active_x * Layout::ScreenUndocked::Width), - .y = static_cast(active_y * Layout::ScreenUndocked::Height), + .x = static_cast(active_x * static_cast(touchscreen_width)), + .y = static_cast(active_y * static_cast(touchscreen_height)), }; touch_entry.diameter_x = Settings::values.touchscreen.diameter_x; touch_entry.diameter_y = Settings::values.touchscreen.diameter_y; @@ -120,4 +121,9 @@ void TouchScreen::OnUpdate(const Core::Timing::CoreTiming& core_timing) { shared_memory->touch_screen_lifo.WriteNextEntry(next_state); } +void TouchScreen::SetTouchscreenDimensions(u32 width, u32 height) { + touchscreen_width = width; + touchscreen_height = height; +} + } // namespace Service::HID diff --git a/src/core/hle/service/hid/controllers/touchscreen.h b/src/core/hle/service/hid/controllers/touchscreen.h index cd342ce91..79f026a81 100644 --- a/src/core/hle/service/hid/controllers/touchscreen.h +++ b/src/core/hle/service/hid/controllers/touchscreen.h @@ -28,6 +28,8 @@ public: // When the controller is requesting an update for the shared memory void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; + void SetTouchscreenDimensions(u32 width, u32 height); + private: static constexpr std::size_t MAX_FINGERS = 16; @@ -53,5 +55,7 @@ private: Core::HID::EmulatedConsole* console = nullptr; std::array fingers{}; + u32 touchscreen_width; + u32 touchscreen_height; }; } // namespace Service::HID -- cgit v1.2.3