[Applets] Proper glance/receiveParameter sorta

This commit is contained in:
wheremyfoodat 2023-11-11 20:11:40 +02:00
parent 1f7fc2274a
commit 135c8cb508
4 changed files with 75 additions and 32 deletions

View file

@ -1,4 +1,7 @@
#include "applets/applet_manager.hpp"
#include "services/apt.hpp"
using namespace Applets;
AppletManager::AppletManager(Memory& mem) : miiSelector(mem), swkbd(mem) {}
@ -18,4 +21,30 @@ AppletBase* AppletManager::getApplet(u32 id) {
default: return nullptr;
}
}
Applets::Parameter AppletManager::glanceParameter() {
if (nextParameter) {
// Copy parameter
Applets::Parameter param = nextParameter.value();
// APT module clears next parameter even for GlanceParameter for these 2 signals
if (param.signal == APTSignal::DspWakeup || param.signal == APTSignal::DspSleep) {
nextParameter = std::nullopt;
}
return param;
}
// Default return value. This is legacy code from before applets were implemented. TODO: Update it
else {
return Applets::Parameter{.senderID = 0, .destID = Applets::AppletIDs::Application, .signal = APTSignal::Wakeup, .data = {}};
}
}
Applets::Parameter AppletManager::receiveParameter() {
Applets::Parameter param = glanceParameter();
// ReceiveParameter always clears nextParameter whereas glanceParameter does not
nextParameter = std::nullopt;
return param;
}