diff --git a/include/services/boss.hpp b/include/services/boss.hpp index 55c5135e..2d7f6025 100644 --- a/include/services/boss.hpp +++ b/include/services/boss.hpp @@ -19,6 +19,7 @@ class BOSSService { void getTaskIdList(u32 messagePointer); void getTaskInfo(u32 messagePointer); void getTaskState(u32 messagePointer); + void getTaskStatus(u32 messagePointer); void getTaskStorageInfo(u32 messagePointer); void receiveProperty(u32 messagePointer); void registerNewArrivalEvent(u32 messagePointer); diff --git a/src/core/services/boss.cpp b/src/core/services/boss.cpp index c4037a31..cb2e902c 100644 --- a/src/core/services/boss.cpp +++ b/src/core/services/boss.cpp @@ -14,6 +14,7 @@ namespace BOSSCommands { ReceiveProperty = 0x00160082, CancelTask = 0x001E0042, GetTaskState = 0x00200082, + GetTaskStatus = 0x002300C2, GetTaskInfo = 0x00250082, RegisterStorageEntry = 0x002F0140, GetStorageEntryInfo = 0x00300000, @@ -34,6 +35,7 @@ void BOSSService::handleSyncRequest(u32 messagePointer) { case BOSSCommands::GetTaskIdList: getTaskIdList(messagePointer); break; case BOSSCommands::GetTaskInfo: getTaskInfo(messagePointer); break; case BOSSCommands::GetTaskState: getTaskState(messagePointer); break; + case BOSSCommands::GetTaskStatus: getTaskStatus(messagePointer); break; case BOSSCommands::GetTaskStorageInfo: getTaskStorageInfo(messagePointer); break; case BOSSCommands::InitializeSession: initializeSession(messagePointer); break; case BOSSCommands::ReceiveProperty: receiveProperty(messagePointer); break; @@ -70,6 +72,17 @@ void BOSSService::getTaskState(u32 messagePointer) { mem.write8(messagePointer + 16, 0); // TODO: Figure out what this should be } +void BOSSService::getTaskStatus(u32 messagePointer) { + // TODO: 3DBrew does not mention what the parameters are, or what the return values are. + log("BOSS::GetTaskStatus (Stubbed)\n"); + + // Response values stubbed based on Citra + mem.write32(messagePointer, IPC::responseHeader(0x23, 2, 2)); + mem.write32(messagePointer + 4, Result::Success); + mem.write8(messagePointer + 8, 0); + // TODO: Citra pushes a buffer here? +} + void BOSSService::getTaskStorageInfo(u32 messagePointer) { log("BOSS::GetTaskStorageInfo (stubbed)\n"); mem.write32(messagePointer, IPC::responseHeader(0x4, 2, 0));