From 132077e18f491d12d305e94f594470d6b93e8d8d Mon Sep 17 00:00:00 2001 From: Zephyron Date: Wed, 15 Jan 2025 19:20:37 +1000 Subject: [PATCH] fix: Implement SetGestureOutputRanges to handle unimplemented function error - Added the SetGestureOutputRanges function to the IHidServer class to address the unimplemented function '92' error. - This fix was discovered through log analysis, which showed a critical assertion failure in the HID service for an unknown function '92'. - The log indicated a userspace panic and backtrace, pointing to the need for implementing this function to prevent execution breaks. - Updated CMakeLists.txt to remove specific version requirements for several packages, enhancing flexibility. - Updated subproject commit references for VulkanMemoryAllocator and vcpkg. - REF: https://switchbrew.org/wiki/HID_services#ActivateGesture --- CMakeLists.txt | 14 +++++++------- externals/VulkanMemoryAllocator | 2 +- externals/vcpkg | 2 +- src/core/hle/service/hid/hid_server.cpp | 7 +++++++ src/core/hle/service/hid/hid_server.h | 2 ++ 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f1fabf78..23df5afc0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -310,21 +310,21 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) # ======================================================================= # Enforce the search mode of non-required packages for better and shorter failure messages -find_package(Boost 1.79.0 REQUIRED context) -find_package(enet 1.3 MODULE) +find_package(Boost REQUIRED context) +find_package(enet MODULE) find_package(fmt 9 REQUIRED) if (CITRON_USE_LLVM_DEMANGLE) - find_package(LLVM 17.0.2 MODULE COMPONENTS Demangle) + find_package(LLVM MODULE COMPONENTS Demangle) endif() find_package(lz4 REQUIRED) -find_package(nlohmann_json 3.8 REQUIRED) -find_package(Opus 1.3 MODULE) +find_package(nlohmann_json REQUIRED) +find_package(Opus MODULE) find_package(RenderDoc MODULE) find_package(SimpleIni MODULE) find_package(stb MODULE) find_package(VulkanMemoryAllocator CONFIG) -find_package(ZLIB 1.2 REQUIRED) -find_package(zstd 1.5 REQUIRED) +find_package(ZLIB REQUIRED) +find_package(zstd REQUIRED) if (NOT CITRON_USE_EXTERNAL_VULKAN_HEADERS) find_package(VulkanHeaders 1.3.274 REQUIRED) diff --git a/externals/VulkanMemoryAllocator b/externals/VulkanMemoryAllocator index 3bab69249..f74c2d906 160000 --- a/externals/VulkanMemoryAllocator +++ b/externals/VulkanMemoryAllocator @@ -1 +1 @@ -Subproject commit 3bab6924988e5f19bf36586a496156cf72f70d9f +Subproject commit f74c2d906f1537114fe0c0d855d5d27db91898cb diff --git a/externals/vcpkg b/externals/vcpkg index d7112d1a4..d4f3e1220 160000 --- a/externals/vcpkg +++ b/externals/vcpkg @@ -1 +1 @@ -Subproject commit d7112d1a4fb50410d3639f5f586972591d848beb +Subproject commit d4f3e122069912636c123b7ece673f6e01513cea diff --git a/src/core/hle/service/hid/hid_server.cpp b/src/core/hle/service/hid/hid_server.cpp index 926a3bfe9..602a5ab52 100644 --- a/src/core/hle/service/hid/hid_server.cpp +++ b/src/core/hle/service/hid/hid_server.cpp @@ -184,6 +184,7 @@ IHidServer::IHidServer(Core::System& system_, std::shared_ptr r {1003, C<&IHidServer::IsFirmwareUpdateNeededForNotification>, "IsFirmwareUpdateNeededForNotification"}, {1004, C<&IHidServer::SetTouchScreenResolution>, "SetTouchScreenResolution"}, {2000, nullptr, "ActivateDigitizer"}, + {92, C<&IHidServer::SetGestureOutputRanges>, "SetGestureOutputRanges"}, }; // clang-format on @@ -1436,4 +1437,10 @@ std::shared_ptr IHidServer::GetResourceManager() { return resource_manager; } +Result IHidServer::SetGestureOutputRanges(u32 param1, u32 param2, u32 param3, u32 param4) { + LOG_WARNING(Service_HID, "SetGestureOutputRanges called with params: {}, {}, {}, {}", param1, param2, param3, param4); + // REF: https://switchbrew.org/wiki/HID_services , Undocumented. 92 [18.0.0+] SetGestureOutputRanges + R_SUCCEED(); +} + } // namespace Service::HID diff --git a/src/core/hle/service/hid/hid_server.h b/src/core/hle/service/hid/hid_server.h index cfa31c2de..437c5bd9a 100644 --- a/src/core/hle/service/hid/hid_server.h +++ b/src/core/hle/service/hid/hid_server.h @@ -31,6 +31,8 @@ public: std::shared_ptr GetResourceManager(); + Result SetGestureOutputRanges(u32, u32, u32, u32); + private: Result CreateAppletResource(OutInterface out_applet_resource, ClientAppletResourceUserId aruid);