From: fincs Date: Sun, 4 Oct 2015 15:37:19 +0000 (+0200) Subject: Merge branch 'master' into great-refactor X-Git-Tag: v1.0.0~92 X-Git-Url: https://chaos.moe/g/?a=commitdiff_plain;h=b481e6a4466855ded7f677bb1a95af9c97b91652;p=corbenik%2Fctrulib.git Merge branch 'master' into great-refactor Conflicts: libctru/include/3ds/services/hid.h libctru/include/3ds/services/irrst.h --- b481e6a4466855ded7f677bb1a95af9c97b91652 diff --cc libctru/include/3ds/mappable.h index 0000000,5df8c5e..d3ea4c1 mode 000000,100644..100644 --- a/libctru/include/3ds/mappable.h +++ b/libctru/include/3ds/mappable.h @@@ -1,0 -1,6 +1,6 @@@ + #pragma once + + // Functions for allocating/deallocating mappable memory + void* mappableAlloc(size_t size); // returns a page-aligned address + void mappableFree(void* mem); -u32 mappableSpaceFree(); // get free mappable space in bytes ++u32 mappableSpaceFree(void); // get free mappable space in bytes diff --cc libctru/include/3ds/services/hid.h index 74191c7,dafc009..f5edd2a --- a/libctru/include/3ds/services/hid.h +++ b/libctru/include/3ds/services/hid.h @@@ -75,13 -73,13 +73,13 @@@ typedef enu extern Handle hidMemHandle; extern vu32* hidSharedMem; - Result hidInit(u32* sharedMem); -Result hidInit(); -void hidExit(); ++Result hidInit(void); +void hidExit(void); -void hidScanInput(); -u32 hidKeysHeld(); -u32 hidKeysDown(); -u32 hidKeysUp(); +void hidScanInput(void); +u32 hidKeysHeld(void); +u32 hidKeysDown(void); +u32 hidKeysUp(void); void hidTouchRead(touchPosition* pos); void hidCircleRead(circlePosition* pos); void hidAccelRead(accelVector* vector); diff --cc libctru/include/3ds/services/irrst.h index f98efa0,cf2085e..c6c7351 --- a/libctru/include/3ds/services/irrst.h +++ b/libctru/include/3ds/services/irrst.h @@@ -7,13 -7,11 +7,11 @@@ extern Handle irrstMemHandle; extern vu32* irrstSharedMem; - Result irrstInit(u32* sharedMem); -Result irrstInit(); -void irrstExit(); ++Result irrstInit(void); +void irrstExit(void); -void irrstScanInput(); -u32 irrstKeysHeld(); +void irrstScanInput(void); +u32 irrstKeysHeld(void); void irrstCstickRead(circlePosition* pos); void irrstWaitForEvent(bool nextEvent); diff --cc libctru/source/gfx.c index c63c28e,f0b68a3..15dbbcc --- a/libctru/source/gfx.c +++ b/libctru/source/gfx.c @@@ -5,8 -5,8 +5,9 @@@ #include <3ds/gfx.h> #include <3ds/svc.h> #include <3ds/linear.h> + #include <3ds/mappable.h> #include <3ds/vram.h> +#include <3ds/gpu/gx.h> GSP_FramebufferInfo topFramebufferInfo, bottomFramebufferInfo; @@@ -117,9 -117,9 +118,9 @@@ void gfxInit(GSP_FramebufferFormats top gspInit(); - gfxSharedMemory=(u8*)0x10002000; + gfxSharedMemory=(u8*)mappableAlloc(0x1000); - GSPGPU_AcquireRight(NULL, 0x0); + GSPGPU_AcquireRight(0x0); //setup our gsp shared mem section svcCreateEvent(&gspEvent, 0x0); @@@ -189,12 -189,18 +190,18 @@@ void gfxExit(void //unmap GSP shared mem svcUnmapMemoryBlock(gspSharedMemHandle, 0x10002000); - GSPGPU_UnregisterInterruptRelayQueue(NULL); + GSPGPU_UnregisterInterruptRelayQueue(); svcCloseHandle(gspSharedMemHandle); + if(gfxSharedMemory != NULL) + { + mappableFree(gfxSharedMemory); + gfxSharedMemory = NULL; + } + svcCloseHandle(gspEvent); - GSPGPU_ReleaseRight(NULL); + GSPGPU_ReleaseRight(); gspExit(); diff --cc libctru/source/services/csnd.c index 43148bc,2832062..3f865c6 --- a/libctru/source/services/csnd.c +++ b/libctru/source/services/csnd.c @@@ -3,9 -3,9 +3,10 @@@ #include <3ds/types.h> #include <3ds/svc.h> #include <3ds/srv.h> + #include <3ds/mappable.h> #include <3ds/os.h> #include <3ds/services/csnd.h> +#include <3ds/ipc.h> // See here regarding CSND shared-mem commands, etc: http://3dbrew.org/wiki/CSND_Shared_Memory @@@ -162,6 -177,13 +178,13 @@@ Result csndExit(void ret = CSND_Shutdown(); svcCloseHandle(csndHandle); - ++ + if(csndSharedMem != NULL) + { + mappableFree((void*) csndSharedMem); + csndSharedMem = NULL; + } + return ret; } diff --cc libctru/source/services/hid.c index 9e8918a,1be6050..afe3d19 --- a/libctru/source/services/hid.c +++ b/libctru/source/services/hid.c @@@ -26,7 -26,7 +27,7 @@@ static angularRate gRate static bool hidInitialised; - Result hidInit(u32* sharedMem) -Result hidInit() ++Result hidInit(void) { u8 val=0; Result ret=0; @@@ -41,11 -39,17 +40,17 @@@ // Get sharedmem handle. if((ret=HIDUSER_GetHandles(&hidMemHandle, &hidEvents[HIDEVENT_PAD0], &hidEvents[HIDEVENT_PAD1], &hidEvents[HIDEVENT_Accel], &hidEvents[HIDEVENT_Gyro], &hidEvents[HIDEVENT_DebugPad]))) goto cleanup1; - // Map HID shared memory at addr "sharedMem". - hidSharedMem=sharedMem; + // Map HID shared memory. + hidSharedMem=(vu32*)mappableAlloc(0x2b0); + if(!hidSharedMem) + { + ret = -1; + goto cleanup1; + } + if((ret=svcMapMemoryBlock(hidMemHandle, (u32)hidSharedMem, MEMPERM_READ, 0x10000000)))goto cleanup2; - APT_CheckNew3DS(NULL, &val); + APT_CheckNew3DS(&val); if(val) { diff --cc libctru/source/services/irrst.c index b7bea6e,083d2a6..b336f37 --- a/libctru/source/services/irrst.c +++ b/libctru/source/services/irrst.c @@@ -6,8 -6,8 +6,9 @@@ #include <3ds/types.h> #include <3ds/svc.h> #include <3ds/srv.h> + #include <3ds/mappable.h> #include <3ds/services/irrst.h> +#include <3ds/ipc.h> // used to determine whether or not we should do IRRST_Initialize Handle __get_handle_from_list(char* name); @@@ -22,7 -22,7 +23,7 @@@ static u32 kHeld static circlePosition csPos; static bool irrstUsed = false; - Result irrstInit(u32* sharedMem) -Result irrstInit() ++Result irrstInit(void) { if(irrstUsed)return 0;