mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
60 lines
1.6 KiB
C
60 lines
1.6 KiB
C
#define NX_SERVICE_ASSUME_NON_DOMAIN
|
|
#include "service_guard.h"
|
|
#include "services/apm.h"
|
|
|
|
static Service g_apmSrv;
|
|
static Service g_apmISession;
|
|
|
|
static Result _apmCmdGetSession(Service* srv, Service* srv_out, u32 cmd_id);
|
|
|
|
NX_GENERATE_SERVICE_GUARD(apm);
|
|
|
|
Result _apmInitialize(void) {
|
|
Result rc = smGetService(&g_apmSrv, "apm");
|
|
|
|
// OpenSession.
|
|
// Official sw doesn't open this until using commands which need it, when it wasn't already opened.
|
|
if (R_SUCCEEDED(rc)) rc = _apmCmdGetSession(&g_apmSrv, &g_apmISession, 0);
|
|
|
|
return rc;
|
|
}
|
|
|
|
void _apmCleanup(void) {
|
|
serviceClose(&g_apmISession);
|
|
serviceClose(&g_apmSrv);
|
|
}
|
|
|
|
Service* apmGetServiceSession(void) {
|
|
return &g_apmSrv;
|
|
}
|
|
|
|
Service* apmGetServiceSession_Session(void) {
|
|
return &g_apmISession;
|
|
}
|
|
|
|
static Result _apmCmdGetSession(Service* srv, Service* srv_out, u32 cmd_id) {
|
|
return serviceDispatch(srv, cmd_id,
|
|
.out_num_objects = 1,
|
|
.out_objects = srv_out,
|
|
);
|
|
}
|
|
|
|
Result apmGetPerformanceMode(ApmPerformanceMode* out_performanceMode) {
|
|
return serviceDispatchOut(&g_apmSrv, 1, *out_performanceMode);
|
|
}
|
|
|
|
Result apmSetPerformanceConfiguration(ApmPerformanceMode PerformanceMode, u32 PerformanceConfiguration) {
|
|
const struct {
|
|
u32 PerformanceMode;
|
|
u32 PerformanceConfiguration;
|
|
} in = { PerformanceMode, PerformanceConfiguration };
|
|
|
|
return serviceDispatchIn(&g_apmISession, 0, in);
|
|
}
|
|
|
|
Result apmGetPerformanceConfiguration(ApmPerformanceMode PerformanceMode, u32 *PerformanceConfiguration) {
|
|
u32 tmp=PerformanceMode;
|
|
return serviceDispatchInOut(&g_apmISession, 1, tmp, *PerformanceConfiguration);
|
|
}
|
|
|