From 955ae2af3e75fcf0c94403f019d91a6795ed9ae3 Mon Sep 17 00:00:00 2001 From: yellows8 Date: Thu, 22 Dec 2016 02:18:26 -0500 Subject: [PATCH] Updated bossCmd34 and added bossGetTaskState(). --- libctru/include/3ds/services/boss.h | 14 +++++++++++-- libctru/source/services/boss.c | 32 +++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/libctru/include/3ds/services/boss.h b/libctru/include/3ds/services/boss.h index 1ad5fed..f06ffac 100644 --- a/libctru/include/3ds/services/boss.h +++ b/libctru/include/3ds/services/boss.h @@ -52,8 +52,18 @@ Result bossStartBgImmediate(char *taskID); Result bossDeleteTask(char *taskID, u32 unk); /** - * @brief ? + * @brief Returns task state. + * @param taskID BOSS taskID. + * @param inval Unknown, normally 0? + * @param out0 Output field. + * @param out1 Output field. + * @param out2 Output field. + */ +Result bossGetTaskState(char *taskID, s8 inval, u8 *out0, u32 *out1, u8 *out2); + +/** + * @brief Returns task state info. * @param taskID BOSS taskID. */ -Result bossCmd34(char *taskID); +Result bossCmd34(char *taskID, u8 *out); diff --git a/libctru/source/services/boss.c b/libctru/source/services/boss.c index eb4240d..d524b7c 100644 --- a/libctru/source/services/boss.c +++ b/libctru/source/services/boss.c @@ -170,6 +170,31 @@ Result bossDeleteTask(char *taskID, u32 unk) return ret; } +Result bossGetTaskState(char *taskID, s8 inval, u8 *out0, u32 *out1, u8 *out2) +{ + Result ret = 0; + u32 *cmdbuf = getThreadCommandBuffer(); + u32 size = strlen(taskID)+1; + + cmdbuf[0] = IPC_MakeHeader(0x20,2,2); // 0x200082 + cmdbuf[1] = size; + cmdbuf[2] = inval; + cmdbuf[3] = IPC_Desc_Buffer(size, IPC_BUFFER_R); + cmdbuf[4] = (u32)taskID; + + if(R_FAILED(ret = svcSendSyncRequest(bossHandle)))return ret; + ret = (Result)cmdbuf[1]; + + if(R_SUCCEEDED(ret)) + { + if(out0)*out0 = cmdbuf[2]; + if(out1)*out1 = cmdbuf[3]; + if(out2)*out2 = cmdbuf[4]; + } + + return ret; +} + Result bossStartBgImmediate(char *taskID) { Result ret = 0; @@ -186,7 +211,7 @@ Result bossStartBgImmediate(char *taskID) return (Result)cmdbuf[1]; } -Result bossCmd34(char *taskID) +Result bossCmd34(char *taskID, u8 *out) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); @@ -198,7 +223,10 @@ Result bossCmd34(char *taskID) cmdbuf[3] = (u32)taskID; if(R_FAILED(ret = svcSendSyncRequest(bossHandle)))return ret; + ret = (Result)cmdbuf[1]; - return (Result)cmdbuf[1]; + if(R_SUCCEEDED(ret) && out)*out = cmdbuf[2]; + + return ret; }