Added bossRegisterTask, bossSendProperty, bossDeleteTask, and bossCmd34.

This commit is contained in:
yellows8 2016-12-22 01:32:49 -05:00
parent e8c3a9139e
commit ee23569db8
2 changed files with 124 additions and 0 deletions

View File

@ -16,6 +16,22 @@ void bossExit(void);
/// 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.
@ -28,3 +44,16 @@ Result bossStartTaskImmediate(char *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);

View File

@ -75,6 +75,57 @@ static Result bossipc_InitializeSession(u64 programID)
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;
@ -91,6 +142,34 @@ Result bossStartTaskImmediate(char *taskID)
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;
@ -107,3 +186,19 @@ Result bossStartBgImmediate(char *taskID)
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];
}