diff options
| author | german77 <juangerman-13@hotmail.com> | 2022-11-05 11:40:19 -0600 | 
|---|---|---|
| committer | german77 <juangerman-13@hotmail.com> | 2022-11-19 08:44:42 -0600 | 
| commit | aa075a0c08335b1d145b2885eb0ba2f395b74f90 (patch) | |
| tree | a7d2cd968132bad55b1f923e79dcb49e78d2273a | |
| parent | 38c48cf8d896f28f7424b28265110c34f69d2369 (diff) | |
service: hid: Only overclock npad controllers
| -rw-r--r-- | src/core/hle/service/hid/hid.cpp | 32 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid.h | 4 | 
2 files changed, 30 insertions, 6 deletions
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 79375bd2f..bf28440c6 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -36,8 +36,9 @@ namespace Service::HID {  // Updating period for each HID device.  // Period time is obtained by measuring the number of samples in a second on HW using a homebrew -// Correct pad_update_ns is 4ms this is overclocked to lower input lag -constexpr auto pad_update_ns = std::chrono::nanoseconds{1 * 1000 * 1000}; // (1ms, 1000Hz) +// Correct npad_update_ns is 4ms this is overclocked to lower input lag +constexpr auto npad_update_ns = std::chrono::nanoseconds{1 * 1000 * 1000};    // (1ms, 1000Hz) +constexpr auto default_update_ns = std::chrono::nanoseconds{4 * 1000 * 1000}; // (4ms, 1000Hz)  constexpr auto mouse_keyboard_update_ns = std::chrono::nanoseconds{8 * 1000 * 1000}; // (8ms, 125Hz)  constexpr auto motion_update_ns = std::chrono::nanoseconds{5 * 1000 * 1000};         // (5ms, 200Hz) @@ -75,11 +76,19 @@ IAppletResource::IAppletResource(Core::System& system_,      GetController<Controller_Stubbed>(HidController::UniquePad).SetCommonHeaderOffset(0x5A00);      // Register update callbacks -    pad_update_event = Core::Timing::CreateEvent( +    npad_update_event = Core::Timing::CreateEvent(          "HID::UpdatePadCallback",          [this](std::uintptr_t user_data, s64 time,                 std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> {              const auto guard = LockService(); +            UpdateNpad(user_data, ns_late); +            return std::nullopt; +        }); +    default_update_event = Core::Timing::CreateEvent( +        "HID::UpdateDefaultCallback", +        [this](std::uintptr_t user_data, s64 time, +               std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> { +            const auto guard = LockService();              UpdateControllers(user_data, ns_late);              return std::nullopt;          }); @@ -100,7 +109,9 @@ IAppletResource::IAppletResource(Core::System& system_,              return std::nullopt;          }); -    system.CoreTiming().ScheduleLoopingEvent(pad_update_ns, pad_update_ns, pad_update_event); +    system.CoreTiming().ScheduleLoopingEvent(npad_update_ns, npad_update_ns, npad_update_event); +    system.CoreTiming().ScheduleLoopingEvent(default_update_ns, default_update_ns, +                                             default_update_event);      system.CoreTiming().ScheduleLoopingEvent(mouse_keyboard_update_ns, mouse_keyboard_update_ns,                                               mouse_keyboard_update_event);      system.CoreTiming().ScheduleLoopingEvent(motion_update_ns, motion_update_ns, @@ -118,7 +129,8 @@ void IAppletResource::DeactivateController(HidController controller) {  }  IAppletResource::~IAppletResource() { -    system.CoreTiming().UnscheduleEvent(pad_update_event, 0); +    system.CoreTiming().UnscheduleEvent(npad_update_event, 0); +    system.CoreTiming().UnscheduleEvent(default_update_event, 0);      system.CoreTiming().UnscheduleEvent(mouse_keyboard_update_event, 0);      system.CoreTiming().UnscheduleEvent(motion_update_event, 0);  } @@ -144,10 +156,20 @@ void IAppletResource::UpdateControllers(std::uintptr_t user_data,          if (controller == controllers[static_cast<size_t>(HidController::Mouse)]) {              continue;          } +        // Npad has it's own update event +        if (controller == controllers[static_cast<size_t>(HidController::NPad)]) { +            continue; +        }          controller->OnUpdate(core_timing);      }  } +void IAppletResource::UpdateNpad(std::uintptr_t user_data, std::chrono::nanoseconds ns_late) { +    auto& core_timing = system.CoreTiming(); + +    controllers[static_cast<size_t>(HidController::NPad)]->OnUpdate(core_timing); +} +  void IAppletResource::UpdateMouseKeyboard(std::uintptr_t user_data,                                            std::chrono::nanoseconds ns_late) {      auto& core_timing = system.CoreTiming(); diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h index 340d26fdc..b7c2a23ef 100644 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h @@ -71,12 +71,14 @@ private:      void GetSharedMemoryHandle(Kernel::HLERequestContext& ctx);      void UpdateControllers(std::uintptr_t user_data, std::chrono::nanoseconds ns_late); +    void UpdateNpad(std::uintptr_t user_data, std::chrono::nanoseconds ns_late);      void UpdateMouseKeyboard(std::uintptr_t user_data, std::chrono::nanoseconds ns_late);      void UpdateMotion(std::uintptr_t user_data, std::chrono::nanoseconds ns_late);      KernelHelpers::ServiceContext& service_context; -    std::shared_ptr<Core::Timing::EventType> pad_update_event; +    std::shared_ptr<Core::Timing::EventType> npad_update_event; +    std::shared_ptr<Core::Timing::EventType> default_update_event;      std::shared_ptr<Core::Timing::EventType> mouse_keyboard_update_event;      std::shared_ptr<Core::Timing::EventType> motion_update_event;  | 
