From d6f3ac1f4e6cb84df46f19aecaf5e4c758541b29 Mon Sep 17 00:00:00 2001 From: Weiyi Wang Date: Mon, 4 Feb 2019 10:30:19 -0500 Subject: [PATCH] IR: pass in Core::Timing for ExtraHID --- src/core/hle/service/ir/extra_hid.cpp | 17 ++++++++--------- src/core/hle/service/ir/extra_hid.h | 4 +++- src/core/hle/service/ir/ir_user.cpp | 4 ++-- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/core/hle/service/ir/extra_hid.cpp b/src/core/hle/service/ir/extra_hid.cpp index e5332cc76..23701fd95 100644 --- a/src/core/hle/service/ir/extra_hid.cpp +++ b/src/core/hle/service/ir/extra_hid.cpp @@ -64,7 +64,7 @@ enum class ResponseID : u8 { ReadCalibrationData = 0x11, }; -ExtraHID::ExtraHID(SendFunc send_func) : IRDevice(send_func) { +ExtraHID::ExtraHID(SendFunc send_func, Core::Timing& timing) : IRDevice(send_func), timing(timing) { LoadInputDevices(); // The data below was retrieved from a New 3DS @@ -145,11 +145,11 @@ ExtraHID::ExtraHID(SendFunc send_func) : IRDevice(send_func) { 0x65, }}; - hid_polling_callback_id = Core::System::GetInstance().CoreTiming().RegisterEvent( - "ExtraHID::SendHIDStatus", [this](u64, s64 cycles_late) { + hid_polling_callback_id = + timing.RegisterEvent("ExtraHID::SendHIDStatus", [this](u64, s64 cycles_late) { SendHIDStatus(); - Core::System::GetInstance().CoreTiming().ScheduleEvent( - msToCycles(hid_period) - cycles_late, hid_polling_callback_id); + this->timing.ScheduleEvent(msToCycles(hid_period) - cycles_late, + hid_polling_callback_id); }); } @@ -160,7 +160,7 @@ ExtraHID::~ExtraHID() { void ExtraHID::OnConnect() {} void ExtraHID::OnDisconnect() { - Core::System::GetInstance().CoreTiming().UnscheduleEvent(hid_polling_callback_id, 0); + timing.UnscheduleEvent(hid_polling_callback_id, 0); } void ExtraHID::HandleConfigureHIDPollingRequest(const std::vector& request) { @@ -171,10 +171,9 @@ void ExtraHID::HandleConfigureHIDPollingRequest(const std::vector& request) } // Change HID input polling interval - Core::System::GetInstance().CoreTiming().UnscheduleEvent(hid_polling_callback_id, 0); + timing.UnscheduleEvent(hid_polling_callback_id, 0); hid_period = request[1]; - Core::System::GetInstance().CoreTiming().ScheduleEvent(msToCycles(hid_period), - hid_polling_callback_id); + timing.ScheduleEvent(msToCycles(hid_period), hid_polling_callback_id); } void ExtraHID::HandleReadCalibrationDataRequest(const std::vector& request_buf) { diff --git a/src/core/hle/service/ir/extra_hid.h b/src/core/hle/service/ir/extra_hid.h index 3c6b388e4..d21cb393f 100644 --- a/src/core/hle/service/ir/extra_hid.h +++ b/src/core/hle/service/ir/extra_hid.h @@ -13,6 +13,7 @@ namespace Core { struct TimingEventType; +class Timing; } // namespace Core namespace Service::IR { @@ -40,7 +41,7 @@ static_assert(sizeof(ExtraHIDResponse) == 6, "HID status response has wrong size */ class ExtraHID final : public IRDevice { public: - explicit ExtraHID(SendFunc send_func); + explicit ExtraHID(SendFunc send_func, Core::Timing& timing); ~ExtraHID(); void OnConnect() override; @@ -56,6 +57,7 @@ private: void HandleReadCalibrationDataRequest(const std::vector& request); void LoadInputDevices(); + Core::Timing& timing; u8 hid_period; Core::TimingEventType* hid_polling_callback_id; std::array calibration_data; diff --git a/src/core/hle/service/ir/ir_user.cpp b/src/core/hle/service/ir/ir_user.cpp index d6e1bca7b..f72834dea 100644 --- a/src/core/hle/service/ir/ir_user.cpp +++ b/src/core/hle/service/ir/ir_user.cpp @@ -418,8 +418,8 @@ IR_USER::IR_USER(Core::System& system) : ServiceFramework("ir:USER", 1) { send_event = system.Kernel().CreateEvent(ResetType::OneShot, "IR:SendEvent"); receive_event = system.Kernel().CreateEvent(ResetType::OneShot, "IR:ReceiveEvent"); - extra_hid = - std::make_unique([this](const std::vector& data) { PutToReceive(data); }); + extra_hid = std::make_unique( + [this](const std::vector& data) { PutToReceive(data); }, system.CoreTiming()); } IR_USER::~IR_USER() {