From b8f16f3538fac8d4434905d531885b9862706bd0 Mon Sep 17 00:00:00 2001 From: german77 Date: Sun, 28 Jan 2024 19:19:21 -0600 Subject: service: hid: Implement home, capture and sleep buttons --- .../resources/system_buttons/home_button.cpp | 26 ++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'src/hid_core/resources/system_buttons/home_button.cpp') diff --git a/src/hid_core/resources/system_buttons/home_button.cpp b/src/hid_core/resources/system_buttons/home_button.cpp index f9c1f44b5..f665338f3 100644 --- a/src/hid_core/resources/system_buttons/home_button.cpp +++ b/src/hid_core/resources/system_buttons/home_button.cpp @@ -2,6 +2,8 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "core/core_timing.h" +#include "hid_core/frontend/emulated_controller.h" +#include "hid_core/hid_core.h" #include "hid_core/resources/applet_resource.h" #include "hid_core/resources/shared_memory_format.h" #include "hid_core/resources/system_buttons/home_button.h" @@ -17,10 +19,6 @@ void HomeButton::OnInit() {} void HomeButton::OnRelease() {} void HomeButton::OnUpdate(const Core::Timing::CoreTiming& core_timing) { - if (!smart_update) { - return; - } - std::scoped_lock shared_lock{*shared_mutex}; const u64 aruid = applet_resource->GetActiveAruid(); auto* data = applet_resource->GetAruidData(aruid); @@ -29,11 +27,21 @@ void HomeButton::OnUpdate(const Core::Timing::CoreTiming& core_timing) { return; } - auto& header = data->shared_memory_format->home_button.header; - header.timestamp = core_timing.GetGlobalTimeNs().count(); - header.total_entry_count = 17; - header.entry_count = 0; - header.last_entry_index = 0; + auto& shared_memory = data->shared_memory_format->home_button; + + if (!IsControllerActivated()) { + shared_memory.home_lifo.buffer_count = 0; + shared_memory.home_lifo.buffer_tail = 0; + return; + } + + const auto& last_entry = shared_memory.home_lifo.ReadCurrentEntry().state; + next_state.sampling_number = last_entry.sampling_number + 1; + + auto* controller = hid_core.GetEmulatedController(Core::HID::NpadIdType::Player1); + next_state.buttons.raw = controller->GetHomeButtons().raw; + + shared_memory.home_lifo.WriteNextEntry(next_state); } } // namespace Service::HID -- cgit v1.2.3