|
|
@@ -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/capture_button.h"
|
|
|
@@ -17,10 +19,6 @@ void CaptureButton::OnInit() {}
|
|
|
void CaptureButton::OnRelease() {}
|
|
|
|
|
|
void CaptureButton::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 CaptureButton::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- auto& header = data->shared_memory_format->capture_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->capture_button;
|
|
|
+
|
|
|
+ if (!IsControllerActivated()) {
|
|
|
+ shared_memory.capture_lifo.buffer_count = 0;
|
|
|
+ shared_memory.capture_lifo.buffer_tail = 0;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const auto& last_entry = shared_memory.capture_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.capture_lifo.WriteNextEntry(next_state);
|
|
|
}
|
|
|
|
|
|
} // namespace Service::HID
|