From 5930a3d8433ca88d92f5fa7eefa13f39731e9ae5 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sat, 9 Sep 2023 01:56:39 +0300 Subject: [PATCH] Handle Amiibo tag events better --- include/kernel/kernel.hpp | 10 +++++++++- src/core/services/nfc.cpp | 8 ++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/kernel/kernel.hpp b/include/kernel/kernel.hpp index b8976796..dc821a68 100644 --- a/include/kernel/kernel.hpp +++ b/include/kernel/kernel.hpp @@ -72,7 +72,15 @@ public: // Signals an event, returns true on success or false if the event does not exist bool signalEvent(Handle e); -private: + + void clearEvent(Handle e) { + KernelObject* object = getObject(e, KernelObjectType::Event); + if (object != nullptr) { + object->getData()->fired = false; + } + } + + private: void signalArbiter(u32 waitingAddress, s32 threadCount); void sleepThread(s64 ns); void sleepThreadOnArbiter(u32 waitingAddress); diff --git a/src/core/services/nfc.cpp b/src/core/services/nfc.cpp index bac99007..c0ed52c6 100644 --- a/src/core/services/nfc.cpp +++ b/src/core/services/nfc.cpp @@ -70,6 +70,14 @@ bool NFCService::loadAmiibo(const std::filesystem::path& path) { return false; } + if (tagOutOfRangeEvent.has_value()) { + kernel.clearEvent(tagOutOfRangeEvent.value()); + } + + if (tagInRangeEvent.has_value()) { + kernel.signalEvent(tagInRangeEvent.value()); + } + file.close(); return true; }