My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules
am.c
Go to the documentation of this file.
1 #include <stdlib.h>
2 #include <3ds.h>
3 
4 static Handle amHandle = 0;
5 
7 {
8  if(srvGetServiceHandle(&amHandle, "am:net") == 0)
9  return (Result)0;
10  else
11  return srvGetServiceHandle(&amHandle, "am:u");
12 }
13 
15 {
16  return svcCloseHandle(amHandle);
17 }
18 
19 Result AM_GetTitleCount(u8 mediatype, u32 *count)
20 {
21  Result ret = 0;
22  u32 *cmdbuf = getThreadCommandBuffer();
23 
24  cmdbuf[0] = 0x00010040;
25  cmdbuf[1] = mediatype;
26 
27  if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
28 
29  *count = cmdbuf[2];
30 
31  return (Result)cmdbuf[1];
32 }
33 
34 Result AM_GetTitleList(u8 mediatype, u32 count, void *buffer)
35 {
36  Result ret = 0;
37  u32 *cmdbuf = getThreadCommandBuffer();
38 
39  cmdbuf[0] = 0x00020082;
40  cmdbuf[1] = count;
41  cmdbuf[2] = mediatype;
42  cmdbuf[3] = ((count*8) << 4) | 12;
43  cmdbuf[4] = (u32)buffer;
44 
45  if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
46 
47  return (Result)cmdbuf[1];
48 }
49 
51 {
52  Result ret = 0;
53  u32 *cmdbuf = getThreadCommandBuffer();
54 
55  cmdbuf[0] = 0x000A0000;
56 
57  if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
58 
59  *deviceid = cmdbuf[3];
60 
61  return (Result)cmdbuf[1];
62 }
63 
64 Result AM_StartCiaInstall(u8 mediatype, Handle *ciahandle)
65 {
66  Result ret = 0;
67  u32 *cmdbuf = getThreadCommandBuffer();
68 
69  cmdbuf[0] = 0x04020040;
70  cmdbuf[1] = mediatype;
71 
72  if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
73 
74  *ciahandle = cmdbuf[3];
75 
76  return (Result)cmdbuf[1];
77 }
78 
80 {
81  Result ret = 0;
82  u32 *cmdbuf = getThreadCommandBuffer();
83 
84  cmdbuf[0] = 0x04030000;
85 
86  if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
87 
88  *ciahandle = cmdbuf[3];
89 
90  return (Result)cmdbuf[1];
91 }
92 
94 {
95  Result ret = 0;
96  u32 *cmdbuf = getThreadCommandBuffer();
97 
98  cmdbuf[0] = 0x04040002;
99  cmdbuf[1] = 0x10;
100  cmdbuf[2] = *ciahandle;
101 
102  if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
103 
104  return (Result)cmdbuf[1];
105 }
106 
107 Result AM_FinishCiaInstall(u8 mediatype, Handle *ciahandle)
108 {
109  Result ret = 0;
110  u32 *cmdbuf = getThreadCommandBuffer();
111 
112  cmdbuf[0] = 0x04050002;
113  cmdbuf[1] = 0x10;
114  cmdbuf[2] = *ciahandle;
115 
116  if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
117 
118  return (Result)cmdbuf[1];
119 }
120 
121 Result AM_DeleteTitle(u8 mediatype, u64 titleid)
122 {
123  Result ret = 0;
124  u32 *cmdbuf = getThreadCommandBuffer();
125 
126  cmdbuf[0] = 0x041000C0;
127  cmdbuf[1] = mediatype;
128  cmdbuf[2] = titleid & 0xffffffff;
129  cmdbuf[3] = (titleid >> 32) & 0xffffffff;
130 
131  if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
132 
133  return (Result)cmdbuf[1];
134 }
135 
136 Result AM_DeleteAppTitle(u8 mediatype, u64 titleid)
137 {
138  Result ret = 0;
139  u32 *cmdbuf = getThreadCommandBuffer();
140 
141  cmdbuf[0] = 0x000400C0;
142  cmdbuf[1] = mediatype;
143  cmdbuf[2] = titleid & 0xffffffff;
144  cmdbuf[3] = (titleid >> 32) & 0xffffffff;
145 
146  if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
147 
148  return (Result)cmdbuf[1];
149 }
150 
151 Result AM_InstallFIRM(u8 mediatype, u64 titleid)
152 {
153  Result ret = 0;
154  u32 *cmdbuf = getThreadCommandBuffer();
155 
156  cmdbuf[0] = 0x000400C0;
157  cmdbuf[1] = mediatype;
158  cmdbuf[2] = titleid & 0xffffffff;
159  cmdbuf[3] = (titleid >> 32) & 0xffffffff;
160 
161  if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
162 
163  return (Result)cmdbuf[1];
164 }
Result AM_StartCiaInstall(u8 mediatype, Handle *ciahandle)
Definition: am.c:64
Result AM_GetTitleCount(u8 mediatype, u32 *count)
Definition: am.c:19
s32 Result
Definition: types.h:42
s32 svcCloseHandle(Handle handle)
Result amInit()
Definition: am.c:6
Result srvGetServiceHandle(Handle *out, const char *name)
Definition: srv.c:109
Result AM_DeleteTitle(u8 mediatype, u64 titleid)
Definition: am.c:121
Result AM_GetTitleList(u8 mediatype, u32 count, void *buffer)
Definition: am.c:34
u32 Handle
Definition: types.h:41
Result AM_DeleteAppTitle(u8 mediatype, u64 titleid)
Definition: am.c:136
u32 * getThreadCommandBuffer(void)
uint8_t u8
Definition: types.h:21
uint64_t u64
Definition: types.h:24
Result AM_CancelCIAInstall(Handle *ciahandle)
Definition: am.c:93
uint32_t u32
Definition: types.h:23
Result amExit()
Definition: am.c:14
s32 svcSendSyncRequest(Handle session)
Result AM_StartDlpChildCiaInstall(Handle *ciahandle)
Definition: am.c:79
Result AM_GetDeviceId(u32 *deviceid)
Definition: am.c:50
Result AM_FinishCiaInstall(u8 mediatype, Handle *ciahandle)
Definition: am.c:107
Result AM_InstallFIRM(u8 mediatype, u64 titleid)
Definition: am.c:151