]> Chaos Git - corbenik/ctrulib.git/commitdiff
APT : glanceparameter/receiveparameter
authorsmea <smealum@gmail.com>
Wed, 29 Jan 2014 22:17:02 +0000 (23:17 +0100)
committersmea <smealum@gmail.com>
Wed, 29 Jan 2014 22:17:02 +0000 (23:17 +0100)
libctru/include/ctr/APT.h
libctru/source/APT.c
libctru/source/svc.s

index a6aa819e3ae91df7c4465478dcc9a5f8d5960126..c5dfc0d193dbe19bc606bb74618bad86faf667a4 100644 (file)
@@ -14,6 +14,8 @@ Result APT_Enable(Handle handle, u32 a);
 Result APT_PrepareToJumpToHomeMenu(Handle handle);
 Result APT_JumpToHomeMenu(Handle handle, u32 a, u32 b, u32 c);
 Result APT_InquireNotification(Handle handle, u32 appID, u8* signalType);
-Result APT_NotifyToWait(Handle handle, u32 a);
+Result APT_NotifyToWait(Handle handle, NS_APPID appID);
+Result APT_GlanceParameter(Handle handle, NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize);
+Result APT_ReceiveParameter(Handle handle, NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize);
 
 #endif
index 71d82cd89ac29d39429f76f4532f0c4e722e6ce9..d1e87e4420367125b312c5357581c36fb607d096 100644 (file)
@@ -87,14 +87,50 @@ Result APT_JumpToHomeMenu(Handle handle, u32 a, u32 b, u32 c)
        return cmdbuf[1];
 }
 
-Result APT_NotifyToWait(Handle handle, u32 a)
+Result APT_NotifyToWait(Handle handle, NS_APPID appID)
 {
        u32* cmdbuf=getThreadCommandBuffer();
        cmdbuf[0]=0x430040; //request header code
-       cmdbuf[1]=a;
+       cmdbuf[1]=appID;
+       
+       Result ret=0;
+       if((ret=svc_sendSyncRequest(handle)))return ret;
+
+       return cmdbuf[1];
+}
+
+Result APT_GlanceParameter(Handle handle, NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize)
+{
+       u32* cmdbuf=getThreadCommandBuffer();
+       cmdbuf[0]=0xE0080; //request header code
+       cmdbuf[1]=appID;
+       cmdbuf[2]=bufferSize;
+       
+       cmdbuf[0+0x100/4]=(bufferSize<<14)|2;
+       cmdbuf[1+0x100/4]=(u32)buffer;
        
        Result ret=0;
        if((ret=svc_sendSyncRequest(handle)))return ret;
 
+       if(actualSize)*actualSize=cmdbuf[4];
+
+       return cmdbuf[1];
+}
+
+Result APT_ReceiveParameter(Handle handle, NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize)
+{
+       u32* cmdbuf=getThreadCommandBuffer();
+       cmdbuf[0]=0xD0080; //request header code
+       cmdbuf[1]=appID;
+       cmdbuf[2]=bufferSize;
+       
+       cmdbuf[0+0x100/4]=(bufferSize<<14)|2;
+       cmdbuf[1+0x100/4]=(u32)buffer;
+       
+       Result ret=0;
+       if((ret=svc_sendSyncRequest(handle)))return ret;
+
+       if(actualSize)*actualSize=cmdbuf[4];
+
        return cmdbuf[1];
 }
index fdc5739cb4b3fe16db1e37a788288b013347d0a8..ff6f4a391b209c9c9f59bcc051cbcdac0d35a67e 100644 (file)
@@ -87,13 +87,13 @@ svc_waitSynchronization1:
 .global svc_waitSynchronizationN
 .type svc_waitSynchronizationN, %function
 svc_waitSynchronizationN:
-       stmfd sp!, {r5}
+       str r5, [sp, #-4]!
        mov r5, r0
        ldr r0, [sp, #0x4]
        ldr r4, [sp, #0x4+0x4]
        svc 0x25
        str r1, [r5]
-       ldmfd sp!, {r5}
+       ldr r5, [sp], #4
        bx lr
 
 .global svc_connectToPort