/// Returns the BOSS session handle.
Handle bossGetSessionHandle();
+/**
+ * @brief Register a task.
+ * @param taskID BOSS taskID.
+ * @param unk0 Unknown, usually zero.
+ * @param unk1 Unknown, usually zero.
+ */
+Result bossRegisterTask(char *taskID, u8 unk0, u8 unk1);
+
+/**
+ * @brief Send a property.
+ * @param PropertyID PropertyID
+ * @param buf Input buffer data.
+ * @param size Buffer size.
+ */
+Result bossSendProperty(u16 PropertyID, void* buf, u32 size);
+
/**
* @brief ?
* @param taskID BOSS taskID.
*/
Result bossStartBgImmediate(char *taskID);
+/**
+ * @brief Deletes a task by using CancelTask and UnregisterTask internally.
+ * @param taskID BOSS taskID.
+ * @param unk Unknown, usually zero?
+ */
+Result bossDeleteTask(char *taskID, u32 unk);
+
+/**
+ * @brief ?
+ * @param taskID BOSS taskID.
+ */
+Result bossCmd34(char *taskID);
+
return (Result)cmdbuf[1];
}
+Result bossRegisterTask(char *taskID, u8 unk0, u8 unk1)
+{
+ Result ret = 0;
+ u32 *cmdbuf = getThreadCommandBuffer();
+ u32 size = strlen(taskID)+1;
+
+ cmdbuf[0] = IPC_MakeHeader(0xB,3,2); // 0xB00C2
+ cmdbuf[1] = size;
+ cmdbuf[2] = unk0;
+ cmdbuf[3] = unk1;
+ cmdbuf[4] = IPC_Desc_Buffer(size, IPC_BUFFER_R);
+ cmdbuf[5] = (u32)taskID;
+
+ if(R_FAILED(ret = svcSendSyncRequest(bossHandle)))return ret;
+
+ return (Result)cmdbuf[1];
+}
+
+static Result bossipc_UnregisterTask(char *taskID, u32 unk)
+{
+ Result ret = 0;
+ u32 *cmdbuf = getThreadCommandBuffer();
+ u32 size = strlen(taskID)+1;
+
+ cmdbuf[0] = IPC_MakeHeader(0xC,2,2); // 0xC0082
+ cmdbuf[1] = size;
+ cmdbuf[2] = unk;
+ cmdbuf[3] = IPC_Desc_Buffer(size, IPC_BUFFER_R);
+ cmdbuf[4] = (u32)taskID;
+
+ if(R_FAILED(ret = svcSendSyncRequest(bossHandle)))return ret;
+
+ return (Result)cmdbuf[1];
+}
+
+Result bossSendProperty(u16 PropertyID, void* buf, u32 size)
+{
+ Result ret = 0;
+ u32 *cmdbuf = getThreadCommandBuffer();
+
+ cmdbuf[0] = IPC_MakeHeader(0x14,2,2); // 0x140082
+ cmdbuf[1] = PropertyID;
+ cmdbuf[2] = size;
+ cmdbuf[3] = IPC_Desc_Buffer(size, IPC_BUFFER_R);
+ cmdbuf[4] = (u32)buf;
+
+ if(R_FAILED(ret = svcSendSyncRequest(bossHandle)))return ret;
+
+ return (Result)cmdbuf[1];
+}
+
Result bossStartTaskImmediate(char *taskID)
{
Result ret = 0;
return (Result)cmdbuf[1];
}
+Result bossipc_CancelTask(char *taskID)
+{
+ Result ret = 0;
+ u32 *cmdbuf = getThreadCommandBuffer();
+ u32 size = strlen(taskID)+1;
+
+ cmdbuf[0] = IPC_MakeHeader(0x1E,1,2); // 0x1E0042
+ cmdbuf[1] = size;
+ cmdbuf[2] = IPC_Desc_Buffer(size, IPC_BUFFER_R);
+ cmdbuf[3] = (u32)taskID;
+
+ if(R_FAILED(ret = svcSendSyncRequest(bossHandle)))return ret;
+
+ return (Result)cmdbuf[1];
+}
+
+Result bossDeleteTask(char *taskID, u32 unk)
+{
+ Result ret=0;
+
+ ret = bossipc_CancelTask(taskID);
+ if(R_FAILED(ret))return ret;
+
+ ret = bossipc_UnregisterTask(taskID, unk);
+
+ return ret;
+}
+
Result bossStartBgImmediate(char *taskID)
{
Result ret = 0;
return (Result)cmdbuf[1];
}
+Result bossCmd34(char *taskID)
+{
+ Result ret = 0;
+ u32 *cmdbuf = getThreadCommandBuffer();
+ u32 size = strlen(taskID)+1;
+
+ cmdbuf[0] = IPC_MakeHeader(0x34,1,2); // 0x340042
+ cmdbuf[1] = size;
+ cmdbuf[2] = IPC_Desc_Buffer(size, IPC_BUFFER_R);
+ cmdbuf[3] = (u32)taskID;
+
+ if(R_FAILED(ret = svcSendSyncRequest(bossHandle)))return ret;
+
+ return (Result)cmdbuf[1];
+}
+