Add AM_FinishCiaInstallWithoutCommit and AM_CommitImportPrograms

This commit is contained in:
motezazer 2016-11-25 00:33:20 +01:00
parent 744ca95390
commit 92a1d6a328
2 changed files with 65 additions and 19 deletions

View File

@ -203,6 +203,21 @@ Result AM_CancelCIAInstall(Handle ciaHandle);
*/
Result AM_FinishCiaInstall(Handle ciaHandle);
/**
* @brief Finalizes the CIA install process without committing the title to title.db or tmp*.db.
* @param ciaHandle CIA handle to finalize.
*/
Result AM_FinishCiaInstallWithoutCommit(Handle ciaHandle);
/**
* @brief Commits installed CIAs.
* @param mediaType Location of the titles to finalize.
* @param titleCount Number of titles to finalize.
* @param temp Whether the titles being finalized are in the temporary database.
* @param titleIds Title IDs to finalize.
*/
Result AM_CommitImportPrograms(FS_MediaType mediaType, u32 titleCount, bool temp, u64* titleIds);
/**
* @brief Deletes a title.
* @param mediatype Media type to delete from.

View File

@ -62,7 +62,7 @@ Result AM_GetTitleCount(FS_MediaType mediatype, u32 *count)
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(count) *count = cmdbuf[2];
return (Result)cmdbuf[1];
}
@ -78,7 +78,7 @@ Result AM_GetTitleList(u32* titlesRead, FS_MediaType mediatype, u32 titleCount,
cmdbuf[4] = (u32)titleIds;
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(titlesRead) *titlesRead = cmdbuf[2];
return (Result)cmdbuf[1];
@ -112,7 +112,7 @@ Result AM_GetTicketCount(u32 *count)
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(count) *count = cmdbuf[2];
return (Result)cmdbuf[1];
}
@ -128,7 +128,7 @@ Result AM_GetTicketList(u32 *ticketsRead, u32 ticketCount, u32 skip, u64 *ticket
cmdbuf[4] = (u32)ticketIds;
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(ticketsRead) *ticketsRead = cmdbuf[2];
return (Result)cmdbuf[1];
@ -146,7 +146,7 @@ Result AM_GetPendingTitleCount(u32 *count, FS_MediaType mediatype, u32 statusMas
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(count) *count = cmdbuf[2];
return (Result)cmdbuf[1];
}
@ -163,7 +163,7 @@ Result AM_GetPendingTitleList(u32 *titlesRead, u32 titleCount, FS_MediaType medi
cmdbuf[5] = (u32)titleIds;
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(titlesRead) *titlesRead = cmdbuf[2];
return (Result)cmdbuf[1];
@ -197,7 +197,7 @@ Result AM_GetDeviceId(u32 *deviceID)
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(deviceID) *deviceID = cmdbuf[3];
return (Result)cmdbuf[1];
}
@ -297,7 +297,7 @@ Result AM_StartCiaInstall(FS_MediaType mediatype, Handle *ciaHandle)
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(ciaHandle) *ciaHandle = cmdbuf[3];
return (Result)cmdbuf[1];
}
@ -311,7 +311,7 @@ Result AM_StartDlpChildCiaInstall(Handle *ciaHandle)
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(ciaHandle) *ciaHandle = cmdbuf[3];
return (Result)cmdbuf[1];
}
@ -343,6 +343,37 @@ Result AM_FinishCiaInstall(Handle ciaHandle)
return (Result)cmdbuf[1];
}
Result AM_FinishCiaInstallWithoutCommit(Handle ciaHandle)
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x406,0,2); // 0x04060002
cmdbuf[1] = IPC_Desc_MoveHandles(1);
cmdbuf[2] = ciaHandle;
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
return (Result)cmdbuf[1];
}
Result AM_CommitImportPrograms(FS_MediaType mediaType, u32 titleCount, bool temp, u64* titleIds)
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x407,3,2); // 0x040700C2
cmdbuf[1] = mediaType;
cmdbuf[2] = titleCount;
cmdbuf[3] = temp ? 1 : 0;
cmdbuf[4] = IPC_Desc_Buffer(titleCount * 8, IPC_BUFFER_R);
cmdbuf[5] = (u32)titleIds;
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
return (Result)cmdbuf[1];
}
Result AM_DeleteTitle(FS_MediaType mediatype, u64 titleID)
{
Result ret = 0;
@ -458,12 +489,12 @@ Result AM_GetTitleProductCode(FS_MediaType mediatype, u64 titleId, char *product
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x5,3,0); // 0x000500C0
cmdbuf[1] = mediatype;
cmdbuf[2] = titleId & 0xffffffff;
cmdbuf[3] = (u32)(titleId >> 32);
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
// The product code string can use the full 16 bytes without NULL terminator
@ -476,12 +507,12 @@ Result AM_GetTitleExtDataId(u64 *extDataId, FS_MediaType mediatype, u64 titleId)
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x6,3,0); // 0x000600C0
cmdbuf[1] = mediatype;
cmdbuf[2] = titleId & 0xffffffff;
cmdbuf[3] = (u32)(titleId >> 32);
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(extDataId) *extDataId = (u64)cmdbuf[2] | ((u64)cmdbuf[3] << 32);
@ -493,7 +524,7 @@ Result AM_GetCiaFileInfo(FS_MediaType mediatype, AM_TitleEntry *titleEntry, Hand
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x408,1,2); // 0x04080042
cmdbuf[1] = mediatype;
cmdbuf[2] = IPC_Desc_SharedHandles(1);
@ -594,7 +625,7 @@ Result AM_GetCiaMetaSection(void *meta, u32 size, Handle fileHandle)
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x414,1,4); // 0x04140044
cmdbuf[1] = size;
cmdbuf[2] = IPC_Desc_SharedHandles(1);
@ -648,7 +679,7 @@ Result AM_InstallTicketBegin(Handle *ticketHandle)
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(ticketHandle) *ticketHandle = cmdbuf[3];
return (Result)cmdbuf[1];
}
@ -775,7 +806,7 @@ Result AM_InstallTmdBegin(Handle *tmdHandle)
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(tmdHandle) *tmdHandle = cmdbuf[3];
return (Result)cmdbuf[1];
}
@ -834,7 +865,7 @@ Result AM_InstallContentBegin(Handle *contentHandle, u16 index)
if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret;
if(contentHandle) *contentHandle = cmdbuf[3];
return (Result)cmdbuf[1];
}
@ -864,7 +895,7 @@ Result AM_InstallContentResume(Handle *contentHandle, u64* resumeOffset, u16 ind
if(contentHandle) *contentHandle = cmdbuf[5];
if(resumeOffset) *resumeOffset = cmdbuf[2] | ((u64)cmdbuf[3] << 32);
return (Result)cmdbuf[1];
}