Implement NS_LaunchFIRM and NS_LaunchApplicationFIRM (#316)

This commit is contained in:
TuxSH 2016-09-27 23:16:11 +02:00 committed by fincs
parent bd34fd59db
commit 0eb70a4350
2 changed files with 42 additions and 0 deletions

View File

@ -10,6 +10,12 @@ Result nsInit(void);
/// Exits NS.
void nsExit(void);
/**
* @brief Launches a title and the required firmware (only if necessary).
* @param titleid ID of the title to launch, 0 for gamecard, JPN System Settings' titleID for System Settings.
*/
Result NS_LaunchFIRM(u64 titleid);
/**
* @brief Launches a title.
* @param titleid ID of the title to launch, or 0 for gamecard.
@ -18,6 +24,13 @@ void nsExit(void);
*/
Result NS_LaunchTitle(u64 titleid, u32 launch_flags, u32 *procid);
/**
* @brief Launches a title and the required firmware.
* @param titleid ID of the title to launch, 0 for gamecard.
* @param flags Flags for firm-launch. bit0: require an application title-info structure in FIRM paramters to be specified via FIRM parameters. bit1: if clear, NS will check certain Configuration Memory fields.
*/
Result NS_LaunchApplicationFIRM(u64 titleid, u32 flags);
/**
* @brief Reboots to a title.
* @param mediatype Mediatype of the title.

View File

@ -25,6 +25,20 @@ void nsExit(void)
svcCloseHandle(nsHandle);
}
Result NS_LaunchFIRM(u64 titleid)
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x1,3,0); // 0x100C0
cmdbuf[1] = titleid & 0xffffffff;
cmdbuf[2] = (titleid >> 32) & 0xffffffff;
if(R_FAILED(ret = svcSendSyncRequest(nsHandle)))return ret;
return (Result)cmdbuf[1];
}
Result NS_LaunchTitle(u64 titleid, u32 launch_flags, u32 *procid)
{
Result ret = 0;
@ -42,6 +56,21 @@ Result NS_LaunchTitle(u64 titleid, u32 launch_flags, u32 *procid)
return (Result)cmdbuf[1];
}
Result NS_LaunchApplicationFIRM(u64 titleid, u32 flags)
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x5,3,0); // 0x500C0
cmdbuf[1] = titleid & 0xffffffff;
cmdbuf[2] = (titleid >> 32) & 0xffffffff;
cmdbuf[3] = flags;
if(R_FAILED(ret = svcSendSyncRequest(nsHandle)))return ret;
return (Result)cmdbuf[1];
}
Result NS_RebootToTitle(u8 mediatype, u64 titleid)
{
Result ret = 0;