Services: Stubbed APM::OpenSession and the ISession interface.

# Conflicts:
#	src/core/hle/service/am/applet_oe.cpp
#	src/core/hle/service/apm/apm.cpp
master
Subv 2018-01-15 17:19:32 +07:00 committed by bunnei
parent f7dc637a61
commit c5a0408ccc
3 changed files with 53 additions and 2 deletions

@ -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.