From babd580c6413187e9bffb65c81f3c23daec5fb71 Mon Sep 17 00:00:00 2001 From: Narr the Reg Date: Thu, 5 May 2022 18:58:00 -0500 Subject: [PATCH] service: hid: Fix motion refresh rate --- src/core/hle/service/hid/controllers/npad.cpp | 5 +++++ src/core/hle/service/hid/hid.cpp | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index 1e9ff8132..de06e1735 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp @@ -3,7 +3,9 @@ #include #include +#include #include + #include "common/assert.h" #include "common/bit_field.h" #include "common/common_types.h" @@ -547,7 +549,9 @@ void Controller_NPad::OnMotionUpdate(const Core::Timing::CoreTiming& core_timing const auto set_motion_state = [&](SixAxisSensorState& state, const Core::HID::ControllerMotion& hid_state) { + using namespace std::literals::chrono_literals; static constexpr SixAxisSensorState default_motion_state = { + .delta_time = std::chrono::nanoseconds(5ms).count(), .accel = {0, 0, -1.0f}, .orientation = { @@ -566,6 +570,7 @@ void Controller_NPad::OnMotionUpdate(const Core::Timing::CoreTiming& core_timing return; } state.attribute.is_connected.Assign(1); + state.delta_time = std::chrono::nanoseconds(5ms).count(); state.accel = hid_state.accel; state.gyro = hid_state.gyro; state.rotation = hid_state.rotation; diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index eba44eda8..44f892da9 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -37,8 +37,7 @@ namespace Service::HID { // Period time is obtained by measuring the number of samples in a second on HW using a homebrew constexpr auto pad_update_ns = std::chrono::nanoseconds{4 * 1000 * 1000}; // (4ms, 250Hz) constexpr auto mouse_keyboard_update_ns = std::chrono::nanoseconds{8 * 1000 * 1000}; // (8ms, 125Hz) -// TODO: Correct update rate for motion is 5ms. Check why some games don't behave at that speed -constexpr auto motion_update_ns = std::chrono::nanoseconds{10 * 1000 * 1000}; // (10ms, 100Hz) +constexpr auto motion_update_ns = std::chrono::nanoseconds{5 * 1000 * 1000}; // (5ms, 200Hz) IAppletResource::IAppletResource(Core::System& system_, KernelHelpers::ServiceContext& service_context_)