AppletOE: Make ISelfController keep a reference to nvflinger.
It'll be needed when we implement CreateManagedDisplayLayer.
This commit is contained in:
		| @@ -8,8 +8,9 @@ | |||||||
| namespace Service { | namespace Service { | ||||||
| namespace AM { | namespace AM { | ||||||
|  |  | ||||||
| void InstallInterfaces(SM::ServiceManager& service_manager) { | void InstallInterfaces(SM::ServiceManager& service_manager, | ||||||
|     std::make_shared<AppletOE>()->InstallAsService(service_manager); |                        std::shared_ptr<NVFlinger::NVFlinger> nvflinger) { | ||||||
|  |     std::make_shared<AppletOE>(nvflinger)->InstallAsService(service_manager); | ||||||
| } | } | ||||||
|  |  | ||||||
| } // namespace AM | } // namespace AM | ||||||
|   | |||||||
| @@ -4,13 +4,19 @@ | |||||||
|  |  | ||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
|  | #include <memory> | ||||||
| #include "core/hle/service/service.h" | #include "core/hle/service/service.h" | ||||||
|  |  | ||||||
| namespace Service { | namespace Service { | ||||||
|  | namespace NVFlinger { | ||||||
|  | class NVFlinger; | ||||||
|  | } | ||||||
|  |  | ||||||
| namespace AM { | namespace AM { | ||||||
|  |  | ||||||
| /// Registers all AM services with the specified service manager. | /// Registers all AM services with the specified service manager. | ||||||
| void InstallInterfaces(SM::ServiceManager& service_manager); | void InstallInterfaces(SM::ServiceManager& service_manager, | ||||||
|  |                        std::shared_ptr<NVFlinger::NVFlinger> nvflinger); | ||||||
|  |  | ||||||
| } // namespace AM | } // namespace AM | ||||||
| } // namespace Service | } // namespace Service | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ | |||||||
| #include "core/hle/kernel/event.h" | #include "core/hle/kernel/event.h" | ||||||
| #include "core/hle/service/am/applet_oe.h" | #include "core/hle/service/am/applet_oe.h" | ||||||
| #include "core/hle/service/apm/apm.h" | #include "core/hle/service/apm/apm.h" | ||||||
|  | #include "core/hle/service/nvflinger/nvflinger.h" | ||||||
|  |  | ||||||
| namespace Service { | namespace Service { | ||||||
| namespace AM { | namespace AM { | ||||||
| @@ -53,7 +54,8 @@ public: | |||||||
|  |  | ||||||
| class ISelfController final : public ServiceFramework<ISelfController> { | class ISelfController final : public ServiceFramework<ISelfController> { | ||||||
| public: | public: | ||||||
|     ISelfController() : ServiceFramework("ISelfController") { |     ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger) | ||||||
|  |         : ServiceFramework("ISelfController"), nvflinger(std::move(nvflinger)) { | ||||||
|         static const FunctionInfo functions[] = { |         static const FunctionInfo functions[] = { | ||||||
|             {1, &ISelfController::LockExit, "LockExit"}, |             {1, &ISelfController::LockExit, "LockExit"}, | ||||||
|             {2, &ISelfController::UnlockExit, "UnlockExit"}, |             {2, &ISelfController::UnlockExit, "UnlockExit"}, | ||||||
| @@ -144,6 +146,8 @@ private: | |||||||
|  |  | ||||||
|         LOG_WARNING(Service, "(STUBBED) called"); |         LOG_WARNING(Service, "(STUBBED) called"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     std::shared_ptr<NVFlinger::NVFlinger> nvflinger; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| class ICommonStateGetter final : public ServiceFramework<ICommonStateGetter> { | class ICommonStateGetter final : public ServiceFramework<ICommonStateGetter> { | ||||||
| @@ -367,7 +371,8 @@ public: | |||||||
|  |  | ||||||
| class IApplicationProxy final : public ServiceFramework<IApplicationProxy> { | class IApplicationProxy final : public ServiceFramework<IApplicationProxy> { | ||||||
| public: | public: | ||||||
|     IApplicationProxy() : ServiceFramework("IApplicationProxy") { |     IApplicationProxy(std::shared_ptr<NVFlinger::NVFlinger> nvflinger) | ||||||
|  |         : ServiceFramework("IApplicationProxy"), nvflinger(std::move(nvflinger)) { | ||||||
|         static const FunctionInfo functions[] = { |         static const FunctionInfo functions[] = { | ||||||
|             {0, &IApplicationProxy::GetCommonStateGetter, "GetCommonStateGetter"}, |             {0, &IApplicationProxy::GetCommonStateGetter, "GetCommonStateGetter"}, | ||||||
|             {1, &IApplicationProxy::GetSelfController, "GetSelfController"}, |             {1, &IApplicationProxy::GetSelfController, "GetSelfController"}, | ||||||
| @@ -413,7 +418,7 @@ private: | |||||||
|     void GetSelfController(Kernel::HLERequestContext& ctx) { |     void GetSelfController(Kernel::HLERequestContext& ctx) { | ||||||
|         IPC::RequestBuilder rb{ctx, 2, 0, 0, 1}; |         IPC::RequestBuilder rb{ctx, 2, 0, 0, 1}; | ||||||
|         rb.Push(RESULT_SUCCESS); |         rb.Push(RESULT_SUCCESS); | ||||||
|         rb.PushIpcInterface<ISelfController>(); |         rb.PushIpcInterface<ISelfController>(nvflinger); | ||||||
|         LOG_DEBUG(Service, "called"); |         LOG_DEBUG(Service, "called"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -437,16 +442,19 @@ private: | |||||||
|         rb.PushIpcInterface<IApplicationFunctions>(); |         rb.PushIpcInterface<IApplicationFunctions>(); | ||||||
|         LOG_DEBUG(Service, "called"); |         LOG_DEBUG(Service, "called"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     std::shared_ptr<NVFlinger::NVFlinger> nvflinger; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| void AppletOE::OpenApplicationProxy(Kernel::HLERequestContext& ctx) { | void AppletOE::OpenApplicationProxy(Kernel::HLERequestContext& ctx) { | ||||||
|     IPC::RequestBuilder rb{ctx, 2, 0, 0, 1}; |     IPC::RequestBuilder rb{ctx, 2, 0, 0, 1}; | ||||||
|     rb.Push(RESULT_SUCCESS); |     rb.Push(RESULT_SUCCESS); | ||||||
|     rb.PushIpcInterface<IApplicationProxy>(); |     rb.PushIpcInterface<IApplicationProxy>(nvflinger); | ||||||
|     LOG_DEBUG(Service, "called"); |     LOG_DEBUG(Service, "called"); | ||||||
| } | } | ||||||
|  |  | ||||||
| AppletOE::AppletOE() : ServiceFramework("appletOE") { | AppletOE::AppletOE(std::shared_ptr<NVFlinger::NVFlinger> nvflinger) | ||||||
|  |     : ServiceFramework("appletOE"), nvflinger(std::move(nvflinger)) { | ||||||
|     static const FunctionInfo functions[] = { |     static const FunctionInfo functions[] = { | ||||||
|         {0x00000000, &AppletOE::OpenApplicationProxy, "OpenApplicationProxy"}, |         {0x00000000, &AppletOE::OpenApplicationProxy, "OpenApplicationProxy"}, | ||||||
|     }; |     }; | ||||||
|   | |||||||
| @@ -4,10 +4,15 @@ | |||||||
|  |  | ||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
|  | #include <memory> | ||||||
| #include "core/hle/kernel/hle_ipc.h" | #include "core/hle/kernel/hle_ipc.h" | ||||||
| #include "core/hle/service/service.h" | #include "core/hle/service/service.h" | ||||||
|  |  | ||||||
| namespace Service { | namespace Service { | ||||||
|  | namespace NVFlinger { | ||||||
|  | class NVFlinger; | ||||||
|  | } | ||||||
|  |  | ||||||
| namespace AM { | namespace AM { | ||||||
|  |  | ||||||
| // TODO: Add more languages | // TODO: Add more languages | ||||||
| @@ -18,11 +23,13 @@ enum SystemLanguage { | |||||||
|  |  | ||||||
| class AppletOE final : public ServiceFramework<AppletOE> { | class AppletOE final : public ServiceFramework<AppletOE> { | ||||||
| public: | public: | ||||||
|     AppletOE(); |     AppletOE(std::shared_ptr<NVFlinger::NVFlinger> nvflinger); | ||||||
|     ~AppletOE() = default; |     ~AppletOE() = default; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     void OpenApplicationProxy(Kernel::HLERequestContext& ctx); |     void OpenApplicationProxy(Kernel::HLERequestContext& ctx); | ||||||
|  |  | ||||||
|  |     std::shared_ptr<NVFlinger::NVFlinger> nvflinger; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| } // namespace AM | } // namespace AM | ||||||
|   | |||||||
| @@ -173,7 +173,7 @@ void Init() { | |||||||
|     SM::ServiceManager::InstallInterfaces(SM::g_service_manager); |     SM::ServiceManager::InstallInterfaces(SM::g_service_manager); | ||||||
|  |  | ||||||
|     Account::InstallInterfaces(*SM::g_service_manager); |     Account::InstallInterfaces(*SM::g_service_manager); | ||||||
|     AM::InstallInterfaces(*SM::g_service_manager); |     AM::InstallInterfaces(*SM::g_service_manager, nv_flinger); | ||||||
|     AOC::InstallInterfaces(*SM::g_service_manager); |     AOC::InstallInterfaces(*SM::g_service_manager); | ||||||
|     APM::InstallInterfaces(*SM::g_service_manager); |     APM::InstallInterfaces(*SM::g_service_manager); | ||||||
|     Audio::InstallInterfaces(*SM::g_service_manager); |     Audio::InstallInterfaces(*SM::g_service_manager); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user