My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules
pm.c
Go to the documentation of this file.
1 #include <stdlib.h>
2 #include <3ds.h>
3 
4 static Handle pmHandle;
5 
7 {
8  return srvGetServiceHandle(&pmHandle, "pm:app");
9 }
10 
12 {
13  return svcCloseHandle(pmHandle);
14 }
15 
16 Result PM_LaunchTitle(u8 mediatype, u64 titleid, u32 launch_flags)
17 {
18  Result ret = 0;
19  u32 *cmdbuf = getThreadCommandBuffer();
20 
21  cmdbuf[0] = 0x00010140;
22  cmdbuf[1] = titleid & 0xffffffff;
23  cmdbuf[2] = (titleid >> 32) & 0xffffffff;
24  cmdbuf[3] = mediatype;
25  cmdbuf[4] = 0x0;
26  cmdbuf[5] = launch_flags;
27 
28  if((ret = svcSendSyncRequest(pmHandle))!=0)return ret;
29 
30  return (Result)cmdbuf[1];
31 }
32 
33 Result PM_GetTitleExheaderFlags(u8 mediatype, u64 titleid, u8* out)
34 {
35  Result ret = 0;
36  u32 *cmdbuf = getThreadCommandBuffer();
37 
38  cmdbuf[0] = 0x00080100;
39  cmdbuf[1] = titleid & 0xffffffff;
40  cmdbuf[2] = (titleid >> 32) & 0xffffffff;
41  cmdbuf[3] = mediatype;
42  cmdbuf[4] = 0x0;
43 
44  if((ret = svcSendSyncRequest(pmHandle))!=0)return ret;
45 
46  memcpy(out, (u8*)(&cmdbuf[2]), 8);
47 
48  return (Result)cmdbuf[1];
49 }
50 
52 {
53  Result ret = 0;
54  u32 *cmdbuf = getThreadCommandBuffer();
55 
56  cmdbuf[0] = 0x00090042;
57  cmdbuf[1] = size;
58  cmdbuf[2] = (size << 0x4) | 0xa;
59  cmdbuf[3] = (u32)in;
60 
61  if((ret = svcSendSyncRequest(pmHandle))!=0)return ret;
62 
63  return (Result)cmdbuf[1];
64 }
65 
67 {
68  Result ret = 0;
69  u32 *cmdbuf = getThreadCommandBuffer();
70 
71  cmdbuf[0] = 0x00070042;
72  cmdbuf[1] = size;
73  cmdbuf[2] = (size << 0x4) | 0xc;
74  cmdbuf[3] = (u32)out;
75 
76  if((ret = svcSendSyncRequest(pmHandle))!=0)return ret;
77 
78  return (Result)cmdbuf[1];
79 }
80 
81 Result PM_LaunchFIRMSetParams(u32 firm_titleid_low, u32 size, u8* in)
82 {
83  Result ret = 0;
84  u32 *cmdbuf = getThreadCommandBuffer();
85 
86  cmdbuf[0] = 0x00020082;
87  cmdbuf[1] = firm_titleid_low;
88  cmdbuf[2] = size;
89  cmdbuf[3] = (size << 0x4) | 0xa;
90  cmdbuf[4] = (u32)in;
91 
92  if((ret = svcSendSyncRequest(pmHandle))!=0)return ret;
93 
94  return (Result)cmdbuf[1];
95 }
Result PM_GetFIRMLaunchParams(u32 size, u8 *out)
Definition: pm.c:66
s32 Result
Definition: types.h:42
s32 svcCloseHandle(Handle handle)
Result pmExit()
Definition: pm.c:11
Result srvGetServiceHandle(Handle *out, const char *name)
Definition: srv.c:109
Result pmInit()
Definition: pm.c:6
u32 Handle
Definition: types.h:41
u32 * getThreadCommandBuffer(void)
uint8_t u8
Definition: types.h:21
Result PM_SetFIRMLaunchParams(u32 size, u8 *in)
Definition: pm.c:51
uint64_t u64
Definition: types.h:24
Result PM_GetTitleExheaderFlags(u8 mediatype, u64 titleid, u8 *out)
Definition: pm.c:33
Result PM_LaunchFIRMSetParams(u32 firm_titleid_low, u32 size, u8 *in)
Definition: pm.c:81
Result PM_LaunchTitle(u8 mediatype, u64 titleid, u32 launch_flags)
Definition: pm.c:16
uint32_t u32
Definition: types.h:23
s32 svcSendSyncRequest(Handle session)