Merge pull request #502 from bunnei/more-am-stuff
am: Implement PopOutData, and various fixes.
This commit is contained in:
		| @@ -155,7 +155,7 @@ ISelfController::ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger | |||||||
|     RegisterHandlers(functions); |     RegisterHandlers(functions); | ||||||
|  |  | ||||||
|     launchable_event = |     launchable_event = | ||||||
|         Kernel::Event::Create(Kernel::ResetType::OneShot, "ISelfController:LaunchableEvent"); |         Kernel::Event::Create(Kernel::ResetType::Sticky, "ISelfController:LaunchableEvent"); | ||||||
| } | } | ||||||
|  |  | ||||||
| void ISelfController::SetFocusHandlingMode(Kernel::HLERequestContext& ctx) { | void ISelfController::SetFocusHandlingMode(Kernel::HLERequestContext& ctx) { | ||||||
| @@ -436,13 +436,13 @@ public: | |||||||
|         static const FunctionInfo functions[] = { |         static const FunctionInfo functions[] = { | ||||||
|             {0, &ILibraryAppletAccessor::GetAppletStateChangedEvent, "GetAppletStateChangedEvent"}, |             {0, &ILibraryAppletAccessor::GetAppletStateChangedEvent, "GetAppletStateChangedEvent"}, | ||||||
|             {1, nullptr, "IsCompleted"}, |             {1, nullptr, "IsCompleted"}, | ||||||
|             {10, nullptr, "Start"}, |             {10, &ILibraryAppletAccessor::Start, "Start"}, | ||||||
|             {20, nullptr, "RequestExit"}, |             {20, nullptr, "RequestExit"}, | ||||||
|             {25, nullptr, "Terminate"}, |             {25, nullptr, "Terminate"}, | ||||||
|             {30, nullptr, "GetResult"}, |             {30, &ILibraryAppletAccessor::GetResult, "GetResult"}, | ||||||
|             {50, nullptr, "SetOutOfFocusApplicationSuspendingEnabled"}, |             {50, nullptr, "SetOutOfFocusApplicationSuspendingEnabled"}, | ||||||
|             {100, &ILibraryAppletAccessor::PushInData, "PushInData"}, |             {100, &ILibraryAppletAccessor::PushInData, "PushInData"}, | ||||||
|             {101, nullptr, "PopOutData"}, |             {101, &ILibraryAppletAccessor::PopOutData, "PopOutData"}, | ||||||
|             {102, nullptr, "PushExtraStorage"}, |             {102, nullptr, "PushExtraStorage"}, | ||||||
|             {103, nullptr, "PushInteractiveInData"}, |             {103, nullptr, "PushInteractiveInData"}, | ||||||
|             {104, nullptr, "PopInteractiveOutData"}, |             {104, nullptr, "PopInteractiveOutData"}, | ||||||
| @@ -470,6 +470,20 @@ private: | |||||||
|         NGLOG_WARNING(Service_AM, "(STUBBED) called"); |         NGLOG_WARNING(Service_AM, "(STUBBED) called"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     void GetResult(Kernel::HLERequestContext& ctx) { | ||||||
|  |         IPC::ResponseBuilder rb{ctx, 2}; | ||||||
|  |         rb.Push(RESULT_SUCCESS); | ||||||
|  |  | ||||||
|  |         NGLOG_WARNING(Service_AM, "(STUBBED) called"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     void Start(Kernel::HLERequestContext& ctx) { | ||||||
|  |         IPC::ResponseBuilder rb{ctx, 2}; | ||||||
|  |         rb.Push(RESULT_SUCCESS); | ||||||
|  |  | ||||||
|  |         NGLOG_WARNING(Service_AM, "(STUBBED) called"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     void PushInData(Kernel::HLERequestContext& ctx) { |     void PushInData(Kernel::HLERequestContext& ctx) { | ||||||
|         IPC::RequestParser rp{ctx}; |         IPC::RequestParser rp{ctx}; | ||||||
|         storage_stack.push(rp.PopIpcInterface<AM::IStorage>()); |         storage_stack.push(rp.PopIpcInterface<AM::IStorage>()); | ||||||
| @@ -480,6 +494,16 @@ private: | |||||||
|         NGLOG_DEBUG(Service_AM, "called"); |         NGLOG_DEBUG(Service_AM, "called"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     void PopOutData(Kernel::HLERequestContext& ctx) { | ||||||
|  |         IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||||
|  |         rb.Push(RESULT_SUCCESS); | ||||||
|  |         rb.PushIpcInterface<AM::IStorage>(std::move(storage_stack.top())); | ||||||
|  |  | ||||||
|  |         storage_stack.pop(); | ||||||
|  |  | ||||||
|  |         NGLOG_DEBUG(Service_AM, "called"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     std::stack<std::shared_ptr<AM::IStorage>> storage_stack; |     std::stack<std::shared_ptr<AM::IStorage>> storage_stack; | ||||||
|     Kernel::SharedPtr<Kernel::Event> state_changed_event; |     Kernel::SharedPtr<Kernel::Event> state_changed_event; | ||||||
| }; | }; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user