summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/am/am.cpp
diff options
context:
space:
mode:
authorZach Hilman <zachhilman@gmail.com>2018-11-12 02:16:38 +0100
committerZach Hilman <zachhilman@gmail.com>2018-11-18 16:53:47 +0100
commit7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d (patch)
tree6ed63f8c93a0d9b4e0cb6ac8d41e0a94aa149e99 /src/core/hle/service/am/am.cpp
parentam: Implement ILibraryAppletAccessor IsCompleted and GetResult (diff)
downloadyuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar.gz
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar.bz2
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar.lz
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar.xz
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar.zst
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.zip
Diffstat (limited to 'src/core/hle/service/am/am.cpp')
-rw-r--r--src/core/hle/service/am/am.cpp34
1 files changed, 16 insertions, 18 deletions
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp
index 3201e2d4b..3f8d97d31 100644
--- a/src/core/hle/service/am/am.cpp
+++ b/src/core/hle/service/am/am.cpp
@@ -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);