From acf3ba85a5285494d4884c4587c9ad822fded58b Mon Sep 17 00:00:00 2001 From: Random <28494085+Random0666@users.noreply.github.com> Date: Tue, 14 Aug 2018 00:16:05 +0200 Subject: [PATCH 1/3] Added nsListApplicationRecord --- nx/source/services/ns.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/nx/source/services/ns.c b/nx/source/services/ns.c index 3cc05cda..2eb75919 100644 --- a/nx/source/services/ns.c +++ b/nx/source/services/ns.c @@ -92,6 +92,45 @@ static Result _nsGetInterface(Service* srv_out, u64 cmd_id) { return rc; } +Result nsListApplicationRecord(NsApplicationRecord* buffer, size_t size, int* out_entrycount) +{ + IpcCommand c; + ipcInitialize(&c); + + ipcAddRecvBuffer(&c, buffer, size, 0); + + struct + { + u64 magic; + u64 cmd_id; + u64 unk; + } *raw; + raw = ipcPrepareHeader(&c, sizeof(*raw)); + + raw->magic = SFCI_MAGIC; + raw->cmd_id = 0; + raw->unk = 0; + + Result rc = serviceIpcDispatch(&g_nsAppManSrv); + + if (R_SUCCEEDED(rc)) { + IpcParsedCommand r; + ipcParse(&r); + + struct { + u64 magic; + u64 result; + u32 entry_count; + } *resp = r.Raw; + + rc = resp->result; + + if (R_SUCCEEDED(rc) && out_entrycount) *out_entrycount = resp->entry_count; + } + + return rc; +} + Result nsGetApplicationControlData(u8 flag, u64 titleID, NsApplicationControlData* buffer, size_t size, size_t* actual_size) { IpcCommand c; ipcInitialize(&c); From 1453ca7e1c6bc464f11dd9a2019fe18c3562edcf Mon Sep 17 00:00:00 2001 From: Random <28494085+Random0666@users.noreply.github.com> Date: Tue, 14 Aug 2018 00:17:58 +0200 Subject: [PATCH 2/3] Added nsListApplicationContentMetaStatus --- nx/source/services/ns.c | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/nx/source/services/ns.c b/nx/source/services/ns.c index 2eb75919..a1c290e4 100644 --- a/nx/source/services/ns.c +++ b/nx/source/services/ns.c @@ -131,6 +131,48 @@ Result nsListApplicationRecord(NsApplicationRecord* buffer, size_t size, int* ou return rc; } +Result nsListApplicationContentMetaStatus(u64 title_id, u32 index, NsApplicationContentMetaStatus* buffer, size_t size, int* out_entrycount) +{ + IpcCommand c; + ipcInitialize(&c); + + ipcAddRecvBuffer(&c, buffer, size, 0); + + struct + { + u64 magic; + u64 cmd_id; + u32 index; + u64 titleID; + } *raw; + + raw = ipcPrepareHeader(&c, sizeof(*raw)); + + raw->magic = SFCI_MAGIC; + raw->cmd_id = 601; + raw->index = index; + raw->titleID = title_id; + + Result rc = serviceIpcDispatch(&g_nsAppManSrv); + + if (R_SUCCEEDED(rc)) { + IpcParsedCommand r; + ipcParse(&r); + + struct { + u64 magic; + u64 result; + u32 entry_count; + } *resp = r.Raw; + + rc = resp->result; + + if (R_SUCCEEDED(rc) && out_entrycount) *out_entrycount = resp->entry_count; + } + + return rc; +} + Result nsGetApplicationControlData(u8 flag, u64 titleID, NsApplicationControlData* buffer, size_t size, size_t* actual_size) { IpcCommand c; ipcInitialize(&c); From 91056473df46d08fe311e9984b581b4f1528a1d7 Mon Sep 17 00:00:00 2001 From: Random <28494085+Random0666@users.noreply.github.com> Date: Tue, 14 Aug 2018 00:19:29 +0200 Subject: [PATCH 3/3] Update ns.h --- nx/include/switch/services/ns.h | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/nx/include/switch/services/ns.h b/nx/include/switch/services/ns.h index 98c8358b..b00b6589 100644 --- a/nx/include/switch/services/ns.h +++ b/nx/include/switch/services/ns.h @@ -14,9 +14,31 @@ typedef struct { u8 icon[0x20000];//JPEG } NsApplicationControlData; +typedef struct +{ + u8 title_type; + u8 storage_id; + u8 unk_02; + u8 padding; + u32 title_version; + u64 title_id; +} NsApplicationContentMetaStatus; + +typedef struct +{ + u64 title_id; + u8 type; + u8 unk_09; + u8 unk_0A[6]; + u8 unk_10; + u8 unk_11[7]; +} NsApplicationRecord; + Result nsInitialize(void); void nsExit(void); +Result nsListApplicationRecord(NsApplicationRecord* buffer, size_t size, int* out_entrycount); +Result nsListApplicationContentMetaStatus(u64 title_id, u32 index, NsApplicationContentMetaStatus* buffer, size_t size, int* out_entrycount); Result nsGetApplicationControlData(u8 flag, u64 titleID, NsApplicationControlData* buffer, size_t size, size_t* actual_size); /** @@ -44,4 +66,4 @@ Result nsdevInitialize(); void nsdevExit(); Result nsdevTerminateProcess(u64 pid); -Result nsdevTerminateProgram(u64 tid); \ No newline at end of file +Result nsdevTerminateProgram(u64 tid);