Skip to content

Commit

Permalink
Implement NS_LaunchFIRM and NS_LaunchApplicationFIRM (#316)
Browse files Browse the repository at this point in the history
  • Loading branch information
TuxSH authored and fincs committed Sep 27, 2016
1 parent bd34fd5 commit 0eb70a4
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
13 changes: 13 additions & 0 deletions libctru/include/3ds/services/ns.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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.
Expand Down
29 changes: 29 additions & 0 deletions libctru/source/services/ns.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down

0 comments on commit 0eb70a4

Please sign in to comment.