diff --git a/nx/include/switch/services/ts.h b/nx/include/switch/services/ts.h index ad50f224..2d30b2ce 100644 --- a/nx/include/switch/services/ts.h +++ b/nx/include/switch/services/ts.h @@ -6,7 +6,6 @@ */ #pragma once #include "../types.h" -#include "../services/sm.h" /// Location typedef enum { diff --git a/nx/source/services/ts.c b/nx/source/services/ts.c index 53512ab9..6852233b 100644 --- a/nx/source/services/ts.c +++ b/nx/source/services/ts.c @@ -1,31 +1,19 @@ +#define NX_SERVICE_ASSUME_NON_DOMAIN #include -#include "types.h" -#include "result.h" -#include "arm/atomics.h" -#include "kernel/ipc.h" +#include "service_guard.h" #include "runtime/hosversion.h" -#include "services/sm.h" #include "services/ts.h" static Service g_tsSrv; -static u64 g_tsRefCnt; -Result tsInitialize(void) { - Result rc=0; +NX_GENERATE_SERVICE_GUARD(ts); - atomicIncrement64(&g_tsRefCnt); - - if (serviceIsActive(&g_tsSrv)) - return 0; - - rc = smGetService(&g_tsSrv, "ts"); - - return rc; +Result _tsInitialize(void) { + return smGetService(&g_tsSrv, "ts"); } -void tsExit(void) { - if (atomicDecrement64(&g_tsRefCnt) == 0) - serviceClose(&g_tsSrv); +void _tsCleanup(void) { + serviceClose(&g_tsSrv); } Service* tsGetServiceSession(void) { @@ -33,78 +21,20 @@ Service* tsGetServiceSession(void) { } static Result _tsCmdInU8Out32(u8 inval, u32 *out, u64 cmd_id) { - IpcCommand c; - ipcInitialize(&c); - - struct { - u64 magic; - u64 cmd_id; - u8 inval; - } *raw; - - raw = serviceIpcPrepareHeader(&g_tsSrv, &c, sizeof(*raw)); - - raw->magic = SFCI_MAGIC; - raw->cmd_id = cmd_id; - raw->inval = inval; - - Result rc = serviceIpcDispatch(&g_tsSrv); - - if (R_SUCCEEDED(rc)) { - IpcParsedCommand r; - struct { - u64 magic; - u64 result; - u32 out; - } *resp; - - serviceIpcParse(&g_tsSrv, &r, sizeof(*resp)); - resp = r.Raw; - - rc = resp->result; - - if (R_SUCCEEDED(rc) && out) *out = resp->out; - } - - return rc; + return serviceDispatchInOut(&g_tsSrv, cmd_id, inval, *out); } Result tsGetTemperatureRange(TsLocation location, s32 *min_temperature, s32 *max_temperature) { - IpcCommand c; - ipcInitialize(&c); + u8 tmp_location = location; struct { - u64 magic; - u64 cmd_id; - u8 location; - } *raw; - - raw = serviceIpcPrepareHeader(&g_tsSrv, &c, sizeof(*raw)); - - raw->magic = SFCI_MAGIC; - raw->cmd_id = 0; - raw->location = location; - - Result rc = serviceIpcDispatch(&g_tsSrv); - - if (R_SUCCEEDED(rc)) { - IpcParsedCommand r; - struct { - u64 magic; - u64 result; - s32 min_temperature; - s32 max_temperature; - } *resp; - - serviceIpcParse(&g_tsSrv, &r, sizeof(*resp)); - resp = r.Raw; - - rc = resp->result; - - if (R_SUCCEEDED(rc) && min_temperature) *min_temperature = resp->min_temperature; - if (R_SUCCEEDED(rc) && max_temperature) *max_temperature = resp->max_temperature; - } + s32 min_temperature; + s32 max_temperature; + } out; + Result rc = serviceDispatchInOut(&g_tsSrv, 0, tmp_location, out); + if (R_SUCCEEDED(rc) && min_temperature) *min_temperature = out.min_temperature; + if (R_SUCCEEDED(rc) && max_temperature) *max_temperature = out.max_temperature; return rc; }