summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/apm
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2018-01-15 23:19:32 +0100
committerbunnei <bunneidev@gmail.com>2018-01-17 01:00:32 +0100
commitc5a0408ccca4af6dc27e627a077d5480a3784e84 (patch)
tree2fc577a9889dcf605e21ef66768bd177fe1a5674 /src/core/hle/service/apm
parentAppletOE: Stub a bunch of functions required by libnx homebrew. (diff)
downloadyuzu-c5a0408ccca4af6dc27e627a077d5480a3784e84.tar
yuzu-c5a0408ccca4af6dc27e627a077d5480a3784e84.tar.gz
yuzu-c5a0408ccca4af6dc27e627a077d5480a3784e84.tar.bz2
yuzu-c5a0408ccca4af6dc27e627a077d5480a3784e84.tar.lz
yuzu-c5a0408ccca4af6dc27e627a077d5480a3784e84.tar.xz
yuzu-c5a0408ccca4af6dc27e627a077d5480a3784e84.tar.zst
yuzu-c5a0408ccca4af6dc27e627a077d5480a3784e84.zip
Diffstat (limited to 'src/core/hle/service/apm')
-rw-r--r--src/core/hle/service/apm/apm.cpp44
-rw-r--r--src/core/hle/service/apm/apm.h8
2 files changed, 51 insertions, 1 deletions
diff --git a/src/core/hle/service/apm/apm.cpp b/src/core/hle/service/apm/apm.cpp
index 957abdd66..66d94ff52 100644
--- a/src/core/hle/service/apm/apm.cpp
+++ b/src/core/hle/service/apm/apm.cpp
@@ -13,12 +13,54 @@ void InstallInterfaces(SM::ServiceManager& 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") {
static const FunctionInfo functions[] = {
- {0x00000000, nullptr, "OpenSession"}, {0x00000001, nullptr, "GetPerformanceMode"},
+ {0x00000000, &APM::OpenSession, "OpenSession"}, {0x00000001, nullptr, "GetPerformanceMode"},
};
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 Service
diff --git a/src/core/hle/service/apm/apm.h b/src/core/hle/service/apm/apm.h
index 377db71a4..90a1afbbc 100644
--- a/src/core/hle/service/apm/apm.h
+++ b/src/core/hle/service/apm/apm.h
@@ -9,10 +9,18 @@
namespace Service {
namespace APM {
+enum class PerformanceMode : u8 {
+ Handheld = 0,
+ Docked = 1,
+};
+
class APM final : public ServiceFramework<APM> {
public:
APM();
~APM() = default;
+
+private:
+ void OpenSession(Kernel::HLERequestContext& ctx);
};
/// Registers all AM services with the specified service manager.