am: Allow applets to push multiple and different channels of data

This commit is contained in:
Zach Hilman
2018-11-11 20:16:38 -05:00
parent 3cf7246e37
commit 7cfb29de23
10 changed files with 62 additions and 64 deletions

View File

@ -566,6 +566,16 @@ public:
}
private:
void AppletStorageProxyOutData(IStorage storage) {
storage_stack.push_back(std::make_shared<IStorage>(storage));
pop_out_data_event->Signal();
}
void AppletStorageProxyOutInteractiveData(IStorage storage) {
interactive_storage_stack.push_back(std::make_shared<IStorage>(storage));
pop_interactive_out_data_event->Signal();
}
void GetAppletStateChangedEvent(Kernel::HLERequestContext& ctx) {
state_changed_event->Signal();
@ -591,17 +601,11 @@ private:
ASSERT(applet != nullptr);
applet->Initialize(storage_stack);
const auto data = std::make_shared<IStorage>(applet->Execute());
applet->Execute(
[this](IStorage storage) { AppletStorageProxyOutData(storage); },
[this](IStorage storage) { AppletStorageProxyOutInteractiveData(storage); });
state_changed_event->Signal();
if (applet->TransactionComplete()) {
storage_stack.push_back(data);
pop_out_data_event->Signal();
} else {
interactive_storage_stack.push_back(data);
pop_interactive_out_data_event->Signal();
}
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
}
@ -632,17 +636,11 @@ private:
ASSERT(applet->IsInitialized());
applet->ReceiveInteractiveData(interactive_storage_stack.back());
const auto data = std::make_shared<IStorage>(applet->Execute());
applet->Execute(
[this](IStorage storage) { AppletStorageProxyOutData(storage); },
[this](IStorage storage) { AppletStorageProxyOutInteractiveData(storage); });
state_changed_event->Signal();
if (applet->TransactionComplete()) {
storage_stack.push_back(data);
pop_out_data_event->Signal();
} else {
interactive_storage_stack.push_back(data);
pop_interactive_out_data_event->Signal();
}
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);