From 75c3d2eca4d2c3dab48c35940d507af941cc12bf Mon Sep 17 00:00:00 2001 From: SciresM Date: Tue, 31 Mar 2020 12:41:05 -0700 Subject: [PATCH] nim: add ListSystemUpdateTask/DestroySystemUpdateTask (#390) --- nx/include/switch.h | 1 + nx/include/switch/services/nim.h | 26 +++++++++++++++++++++++ nx/source/services/nim.c | 36 ++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 nx/include/switch/services/nim.h create mode 100644 nx/source/services/nim.c diff --git a/nx/include/switch.h b/nx/include/switch.h index 1a43469c..03043d60 100644 --- a/nx/include/switch.h +++ b/nx/include/switch.h @@ -82,6 +82,7 @@ extern "C" { #include "switch/services/vi.h" #include "switch/services/nv.h" #include "switch/services/nifm.h" +#include "switch/services/nim.h" #include "switch/services/ns.h" #include "switch/services/ldr.h" #include "switch/services/ro.h" diff --git a/nx/include/switch/services/nim.h b/nx/include/switch/services/nim.h new file mode 100644 index 00000000..615486a6 --- /dev/null +++ b/nx/include/switch/services/nim.h @@ -0,0 +1,26 @@ +/** + * @file nim.h + * @brief Network Install Manager (nim) service IPC wrapper. + * @author SciresM + * @copyright libnx Authors + */ +#pragma once +#include "../types.h" +#include "../sf/service.h" + +/// SystemUpdateTaskId +typedef struct { + alignas(8) Uuid uuid; ///< UUID +} NimSystemUpdateTaskId; + +/// Initialize nim. +Result nimInitialize(void); + +/// Exit nim. +void nimExit(void); + +/// Gets the Service object for the actual nim service session. +Service* nimGetServiceSession(void); + +Result nimListSystemUpdateTask(s32 *out_count, NimSystemUpdateTaskId *out_task_ids, size_t max_task_ids); +Result nimDestroySystemUpdateTask(const NimSystemUpdateTaskId *task_id); diff --git a/nx/source/services/nim.c b/nx/source/services/nim.c new file mode 100644 index 00000000..46d4937e --- /dev/null +++ b/nx/source/services/nim.c @@ -0,0 +1,36 @@ +#include +#include "service_guard.h" +#include "services/nim.h" + +#include "runtime/hosversion.h" + +static Service g_nimSrv; + +NX_GENERATE_SERVICE_GUARD(nim); + +Result _nimInitialize(void) { + return smGetService(&g_nimSrv, "nim"); +} + +void _nimCleanup(void) { + serviceClose(&g_nimSrv); +} + +Service* nimGetServiceSession(void) { + return &g_nimSrv; +} + +Result nimDestroySystemUpdateTask(const NimSystemUpdateTaskId *task_id) { + return serviceDispatchIn(&g_nimSrv, 1, *task_id); +} + +Result nimListSystemUpdateTask(s32 *out_count, NimSystemUpdateTaskId *out_task_ids, size_t max_task_ids) { + return serviceDispatchOut(&g_nimSrv, 2, *out_count, + .buffer_attrs = { + SfBufferAttr_HipcMapAlias | SfBufferAttr_Out, + }, + .buffers = { + { out_task_ids, max_task_ids * sizeof(*out_task_ids) }, + }, + ); +}