]> Chaos Git - corbenik/ctrulib.git/commitdiff
Added bossDeleteNsData() and bossReadNsData().
authoryellows8 <yellows8@users.noreply.github.com>
Sun, 25 Dec 2016 07:15:10 +0000 (02:15 -0500)
committeryellows8 <yellows8@users.noreply.github.com>
Sun, 25 Dec 2016 07:15:10 +0000 (02:15 -0500)
libctru/include/3ds/services/boss.h
libctru/source/services/boss.c

index 09857801fe5546a8e9ccb84b245ca0a5ca2cf385..6b179c4a3c5744f5a0163c2c434b583f37510e9d 100644 (file)
@@ -73,13 +73,30 @@ Result bossRegisterTask(const char *taskID, u8 unk0, u8 unk1);
 Result bossSendProperty(u16 PropertyID, const void* buf, u32 size);
 
 /**
- * @brief ?
+ * @brief Deletes the content file for the specified NsDataId.
+ * @param NsDataId NsDataId
+ */
+Result bossDeleteNsData(u32 NsDataId);
+
+/**
+ * @brief Reads data from the content for the specified NsDataId.
+ * @param NsDataId NsDataId
+ * @param offset Offset in the content.
+ * @param buffer Output buffer.
+ * @param size Output buffer size.
+ * @param transfer_total Optional output actual read size, can be NULL.
+ * @param unk_out Optional unknown output, can be NULL.
+ */
+Result bossReadNsData(u32 NsDataId, u64 offset, void* buffer, u32 size, u32 *transfer_total, u32 *unk_out);
+
+/**
+ * @brief Starts a task soon after running this command.
  * @param taskID BOSS taskID.
  */
 Result bossStartTaskImmediate(const char *taskID);
 
 /**
- * @brief ?
+ * @brief Similar to bossStartTaskImmediate?
  * @param taskID BOSS taskID.
  */
 Result bossStartBgImmediate(const char *taskID);
index 44ab296fb141f16674d67a6dcf60a26522013654..d5098b494a7ddf4d26f8dbfaeafd655e8ca87b0c 100644 (file)
@@ -195,6 +195,43 @@ Result bossGetTaskState(const char *taskID, s8 inval, u8 *status, u32 *out1, u8
        return ret;
 }
 
+Result bossDeleteNsData(u32 NsDataId)
+{
+       Result ret = 0;
+       u32 *cmdbuf = getThreadCommandBuffer();
+
+       cmdbuf[0] = IPC_MakeHeader(0x26,1,0); // 0x260040
+       cmdbuf[1] = NsDataId;
+
+       if(R_FAILED(ret = svcSendSyncRequest(bossHandle)))return ret;
+
+       return (Result)cmdbuf[1];
+}
+
+Result bossReadNsData(u32 NsDataId, u64 offset, void* buffer, u32 size, u32 *transfer_total, u32 *unk_out)
+{
+       Result ret = 0;
+       u32 *cmdbuf = getThreadCommandBuffer();
+
+       cmdbuf[0] = IPC_MakeHeader(0x28,4,2); // 0x280102
+       cmdbuf[1] = NsDataId;
+       cmdbuf[2] = (u32) offset;
+       cmdbuf[3] = (u32) (offset >> 32);
+       cmdbuf[4] = size;
+       cmdbuf[5] = IPC_Desc_Buffer(size, IPC_BUFFER_W);
+       cmdbuf[6] = (u32)buffer;
+
+       if(R_FAILED(ret = svcSendSyncRequest(bossHandle)))return ret;
+
+       if(R_SUCCEEDED(ret))
+       {
+               if(transfer_total)*transfer_total = cmdbuf[2];
+               if(unk_out)*unk_out = cmdbuf[3];
+       }
+
+       return (Result)cmdbuf[1];
+}
+
 Result bossStartBgImmediate(const char *taskID)
 {
        Result ret = 0;