APT : added some stuff, plus proper lock handle use in arm11u example.
This commit is contained in:
parent
567685f814
commit
80b647d65e
@ -11,6 +11,7 @@
|
||||
|
||||
Handle srvHandle;
|
||||
Handle APTevents[2];
|
||||
Handle aptLockHandle;
|
||||
|
||||
void aptInit()
|
||||
{
|
||||
@ -18,19 +19,20 @@ void aptInit()
|
||||
|
||||
//initialize APT stuff, escape load screen
|
||||
srv_getServiceHandle(srvHandle, &aptuHandle, "APT:U");
|
||||
APT_GetLockHandle(aptuHandle, 0x0, NULL);
|
||||
APT_GetLockHandle(aptuHandle, 0x0, &aptLockHandle);
|
||||
svc_closeHandle(aptuHandle);
|
||||
svc_sleepThread(0x50000);
|
||||
|
||||
srv_getServiceHandle(srvHandle, &aptuHandle, "APT:U");
|
||||
APT_Initialize(aptuHandle, 0x300, &APTevents[0], &APTevents[1]);
|
||||
svc_closeHandle(aptuHandle);
|
||||
svc_sleepThread(0x50000);
|
||||
svc_waitSynchronization1(aptLockHandle, U64_MAX); //APT lock handle is used because we need to wait for NS to be ready for us
|
||||
srv_getServiceHandle(srvHandle, &aptuHandle, "APT:U");
|
||||
APT_Initialize(aptuHandle, 0x300, &APTevents[0], &APTevents[1]);
|
||||
svc_closeHandle(aptuHandle);
|
||||
svc_releaseMutex(aptLockHandle); //release the lock
|
||||
|
||||
srv_getServiceHandle(srvHandle, &aptuHandle, "APT:U");
|
||||
APT_Enable(aptuHandle, 0x0);
|
||||
svc_closeHandle(aptuHandle);
|
||||
svc_sleepThread(0x50000);
|
||||
svc_waitSynchronization1(aptLockHandle, U64_MAX);
|
||||
srv_getServiceHandle(srvHandle, &aptuHandle, "APT:U");
|
||||
APT_Enable(aptuHandle, 0x0);
|
||||
svc_closeHandle(aptuHandle);
|
||||
svc_releaseMutex(aptLockHandle);
|
||||
}
|
||||
|
||||
u8* gspHeap;
|
||||
|
@ -7,5 +7,6 @@ Result APT_Enable(Handle handle, u32 a);
|
||||
Result APT_PrepareToJumpToHomeMenu(Handle handle);
|
||||
Result APT_JumpToHomeMenu(Handle handle, u32 a, u32 b, u32 c);
|
||||
u8 APT_InquireNotification(Handle handle, u32 appID);
|
||||
Result APT_NotifyToWait(Handle handle, u32 a);
|
||||
|
||||
#endif
|
||||
|
@ -4,8 +4,10 @@
|
||||
u32* svc_getData(void);
|
||||
void svc_exitProcess(void);
|
||||
void svc_sleepThread(s64 ns);
|
||||
Result svc_releaseMutex(Handle handle);
|
||||
Result svc_controlMemory(u32* outaddr, u32 addr0, u32 addr1, u32 size, u32 operation, u32 permissions); //(outaddr is usually the same as the input addr0)
|
||||
Result svc_createEvent(Handle* event, u8 resettype);
|
||||
Result svc_clearEvent(Handle handle);
|
||||
Result svc_mapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherpermission);
|
||||
Result svc_waitSynchronization1(Handle handle, s64 nanoseconds);
|
||||
Result svc_waitSynchronizationN(s32* out, Handle* handles, s32 handlecount, bool waitAll, s64 nanoseconds);
|
||||
|
@ -4,6 +4,8 @@
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define U64_MAX (0xFFFFFFFFFFFFFFFF)
|
||||
|
||||
typedef unsigned char u8;
|
||||
typedef unsigned short u16;
|
||||
typedef unsigned int u32;
|
||||
|
@ -11,7 +11,7 @@ void APT_GetLockHandle(Handle handle, u16 flags, Handle* lockHandle)
|
||||
svcData[0]=0x10040; //request header code
|
||||
svcData[1]=flags;
|
||||
svc_sendSyncRequest(handle); //check return value...
|
||||
if(lockHandle)*lockHandle=svcData[1];
|
||||
if(lockHandle)*lockHandle=svcData[5];
|
||||
}
|
||||
|
||||
void APT_Initialize(Handle handle, u32 a, Handle* eventHandle1, Handle* eventHandle2)
|
||||
@ -62,3 +62,12 @@ Result APT_JumpToHomeMenu(Handle handle, u32 a, u32 b, u32 c)
|
||||
svc_sendSyncRequest(handle); //check return value...
|
||||
return svcData[1];
|
||||
}
|
||||
|
||||
Result APT_NotifyToWait(Handle handle, u32 a)
|
||||
{
|
||||
u32* svcData=svc_getData();
|
||||
svcData[0]=0x430040; //request header code
|
||||
svcData[1]=a;
|
||||
svc_sendSyncRequest(handle); //check return value...
|
||||
return svcData[1];
|
||||
}
|
||||
|
@ -35,6 +35,12 @@ svc_sleepThread:
|
||||
svc 0x0A
|
||||
bx lr
|
||||
|
||||
.global svc_releaseMutex
|
||||
.type svc_releaseMutex, %function
|
||||
svc_releaseMutex:
|
||||
svc 0x14
|
||||
bx lr
|
||||
|
||||
.global svc_createEvent
|
||||
.type svc_createEvent, %function
|
||||
svc_createEvent:
|
||||
@ -44,6 +50,12 @@ svc_createEvent:
|
||||
str r1, [r2]
|
||||
bx lr
|
||||
|
||||
.global svc_clearEvent
|
||||
.type svc_clearEvent, %function
|
||||
svc_clearEvent:
|
||||
svc 0x19
|
||||
bx lr
|
||||
|
||||
.global svc_mapMemoryBlock
|
||||
.type svc_mapMemoryBlock, %function
|
||||
svc_mapMemoryBlock:
|
||||
|
Loading…
Reference in New Issue
Block a user