Services: Stubbed APM::OpenSession and the ISession interface.
# Conflicts: # src/core/hle/service/am/applet_oe.cpp # src/core/hle/service/apm/apm.cpp
This commit is contained in:
		| @@ -6,6 +6,7 @@ | |||||||
| #include "core/hle/ipc_helpers.h" | #include "core/hle/ipc_helpers.h" | ||||||
| #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" | ||||||
|  |  | ||||||
| namespace Service { | namespace Service { | ||||||
| namespace AM { | namespace AM { | ||||||
| @@ -184,7 +185,7 @@ private: | |||||||
|     void GetOperationMode(Kernel::HLERequestContext& ctx) { |     void GetOperationMode(Kernel::HLERequestContext& ctx) { | ||||||
|         IPC::RequestBuilder rb{ctx, 3}; |         IPC::RequestBuilder rb{ctx, 3}; | ||||||
|         rb.Push(RESULT_SUCCESS); |         rb.Push(RESULT_SUCCESS); | ||||||
|         rb.Push(static_cast<u8>(OperationMode::Handheld)); |         rb.Push(static_cast<u32>(APM::PerformanceMode::Handheld)); | ||||||
|  |  | ||||||
|         LOG_WARNING(Service, "(STUBBED) called"); |         LOG_WARNING(Service, "(STUBBED) called"); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -13,12 +13,54 @@ void InstallInterfaces(SM::ServiceManager& service_manager) { | |||||||
|     std::make_shared<APM>()->InstallAsService(service_manager); |     std::make_shared<APM>()->InstallAsService(service_manager); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | class ISession final : public ServiceFramework<ISession> { | ||||||
|  | public: | ||||||
|  |     ISession() : ServiceFramework("ISession") { | ||||||
|  |         static const FunctionInfo functions[] = { | ||||||
|  |             {0, &ISession::SetPerformanceConfiguration, "SetPerformanceConfiguration"}, | ||||||
|  |             {1, &ISession::GetPerformanceConfiguration, "GetPerformanceConfiguration"}, | ||||||
|  |         }; | ||||||
|  |         RegisterHandlers(functions); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     void SetPerformanceConfiguration(Kernel::HLERequestContext& ctx) { | ||||||
|  |         IPC::RequestParser rp{ctx}; | ||||||
|  |  | ||||||
|  |         auto mode = static_cast<PerformanceMode>(rp.Pop<u32>()); | ||||||
|  |         u32 config = rp.Pop<u32>(); | ||||||
|  |  | ||||||
|  |         IPC::RequestBuilder rb{ctx, 2}; | ||||||
|  |         rb.Push(RESULT_SUCCESS); | ||||||
|  |  | ||||||
|  |         LOG_WARNING(Service, "(STUBBED) called mode=%u config=%u", static_cast<u32>(mode), config); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     void GetPerformanceConfiguration(Kernel::HLERequestContext& ctx) { | ||||||
|  |         IPC::RequestParser rp{ctx}; | ||||||
|  |  | ||||||
|  |         auto mode = static_cast<PerformanceMode>(rp.Pop<u32>()); | ||||||
|  |  | ||||||
|  |         IPC::RequestBuilder rb{ctx, 3}; | ||||||
|  |         rb.Push(RESULT_SUCCESS); | ||||||
|  |         rb.Push<u32>(0); // Performance configuration | ||||||
|  |  | ||||||
|  |         LOG_WARNING(Service, "(STUBBED) called mode=%u", static_cast<u32>(mode)); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
| APM::APM() : ServiceFramework("apm") { | APM::APM() : ServiceFramework("apm") { | ||||||
|     static const FunctionInfo functions[] = { |     static const FunctionInfo functions[] = { | ||||||
|         {0x00000000, nullptr, "OpenSession"}, {0x00000001, nullptr, "GetPerformanceMode"}, |         {0x00000000, &APM::OpenSession, "OpenSession"}, {0x00000001, nullptr, "GetPerformanceMode"}, | ||||||
|     }; |     }; | ||||||
|     RegisterHandlers(functions); |     RegisterHandlers(functions); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void APM::OpenSession(Kernel::HLERequestContext& ctx) { | ||||||
|  |     IPC::RequestBuilder rb{ctx, 2, 0, 0, 1}; | ||||||
|  |     rb.Push(RESULT_SUCCESS); | ||||||
|  |     rb.PushIpcInterface<ISession>(); | ||||||
|  | } | ||||||
|  |  | ||||||
| } // namespace APM | } // namespace APM | ||||||
| } // namespace Service | } // namespace Service | ||||||
|   | |||||||
| @@ -9,10 +9,18 @@ | |||||||
| namespace Service { | namespace Service { | ||||||
| namespace APM { | namespace APM { | ||||||
|  |  | ||||||
|  | enum class PerformanceMode : u8 { | ||||||
|  |     Handheld = 0, | ||||||
|  |     Docked = 1, | ||||||
|  | }; | ||||||
|  |  | ||||||
| class APM final : public ServiceFramework<APM> { | class APM final : public ServiceFramework<APM> { | ||||||
| public: | public: | ||||||
|     APM(); |     APM(); | ||||||
|     ~APM() = default; |     ~APM() = default; | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     void OpenSession(Kernel::HLERequestContext& ctx); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| /// Registers all AM services with the specified service manager. | /// Registers all AM services with the specified service manager. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user