From 165e50091c805c61cafd3c8370d24e8a94f3f2a8 Mon Sep 17 00:00:00 2001 From: yellows8 Date: Sun, 23 Nov 2014 22:10:16 -0500 Subject: [PATCH 1/6] Removed debug code(exception triggers on failure) in httpc.c. --- libctru/source/services/httpc.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libctru/source/services/httpc.c b/libctru/source/services/httpc.c index b7a30f9..5b4b949 100644 --- a/libctru/source/services/httpc.c +++ b/libctru/source/services/httpc.c @@ -7,12 +7,12 @@ Result httpcInit() Result ret=0; if(__httpc_servhandle)return 0; - if((ret=srvGetServiceHandle(&__httpc_servhandle, "http:C")))*((u32*)0x500) = ret;//return ret; + if((ret=srvGetServiceHandle(&__httpc_servhandle, "http:C")))return ret; //*((u32*)0x600) = __httpc_servhandle; ret = HTTPC_Initialize(__httpc_servhandle); - if(ret!=0)*((u32*)0x400) = ret;//return ret; + if(ret!=0)return ret; return 0; } @@ -29,18 +29,18 @@ Result httpcOpenContext(httpcContext *context, char* url, u32 use_defaultproxy) Result ret=0; ret = HTTPC_CreateContext(__httpc_servhandle, url, &context->httphandle); - if(ret!=0)*((u32*)0x100) = ret;//return ret; + if(ret!=0)return ret; ret = srvGetServiceHandle(&context->servhandle, "http:C"); - if(ret!=0)*((u32*)0x104) = ret;//return ret; + if(ret!=0)return ret; ret = HTTPC_InitializeConnectionSession(context->servhandle, context->httphandle); - if(ret!=0)*((u32*)0x108) = ret;//return ret; + if(ret!=0)return ret; if(use_defaultproxy==0)return 0; ret = HTTPC_SetProxyDefault(context->servhandle, context->httphandle); - if(ret!=0)*((u32*)0x10c) = ret;//return ret; + if(ret!=0)return ret; return 0; } From 15cd3bd2c32dc36f1fc46ce79fa5522844d9daf6 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 24 Nov 2014 08:31:41 -0500 Subject: [PATCH 2/6] soc_ioctl: Add a missing va_end call --- libctru/source/services/soc/soc_ioctl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libctru/source/services/soc/soc_ioctl.c b/libctru/source/services/soc/soc_ioctl.c index b9dea04..4125646 100644 --- a/libctru/source/services/soc/soc_ioctl.c +++ b/libctru/source/services/soc/soc_ioctl.c @@ -24,6 +24,7 @@ int ioctl(int fd, int request, ...) flags = fcntl(fd, F_GETFL, 0); if(flags == -1) { errno = SOC_GetErrno(); + va_end(ap); return -1; } From c91921616e4a8f4aa79178e717ae65ed03459d6e Mon Sep 17 00:00:00 2001 From: yellows8 Date: Mon, 24 Nov 2014 22:58:07 -0500 Subject: [PATCH 3/6] Fixed svcWaitSynchronizationN, previously this didn't save/restore r4 on the stack. --- libctru/source/svc.s | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libctru/source/svc.s b/libctru/source/svc.s index f918369..43457aa 100644 --- a/libctru/source/svc.s +++ b/libctru/source/svc.s @@ -187,11 +187,13 @@ svcWaitSynchronization: .type svcWaitSynchronizationN, %function svcWaitSynchronizationN: str r5, [sp, #-4]! + str r4, [sp, #-4]! mov r5, r0 - ldr r0, [sp, #0x4] - ldr r4, [sp, #0x4+0x4] + ldr r0, [sp, #0x8] + ldr r4, [sp, #0x8+0x4] svc 0x25 str r1, [r5] + ldr r4, [sp], #4 ldr r5, [sp], #4 bx lr From ffef3fd06b0ceba44ad41f6d3941b615422136ae Mon Sep 17 00:00:00 2001 From: yellows8 Date: Mon, 24 Nov 2014 23:05:58 -0500 Subject: [PATCH 4/6] Added warning in the mic example README regarding broken MIC. --- examples/mic/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/mic/README.md b/examples/mic/README.md index f3e6d72..3f0c74c 100644 --- a/examples/mic/README.md +++ b/examples/mic/README.md @@ -3,3 +3,5 @@ mic Example for using the microphone with ctrulib. Hold down the A button to record, the app will then play the recorded audio once the A button is released. Roughly 32 seconds of audio can be recorded with the default audiobuf size in this app. +Do not use this example(and/or ctrulib MIC?), since MIC is broken currently. + From 300a0ed1256335ecb76f4930b81a6d06189c11d3 Mon Sep 17 00:00:00 2001 From: yellows8 Date: Mon, 24 Nov 2014 23:22:24 -0500 Subject: [PATCH 5/6] Fixed word-index that the handle is loaded from in the cmdreply, for MIC_GetEventHandle(). --- libctru/source/services/mic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libctru/source/services/mic.c b/libctru/source/services/mic.c index 395792b..817b9aa 100644 --- a/libctru/source/services/mic.c +++ b/libctru/source/services/mic.c @@ -207,7 +207,7 @@ Result MIC_GetEventHandle(Handle *handle) if((ret = svcSendSyncRequest(MIC_handle))!=0)return ret; - if(handle)*handle = cmdbuf[2]; + if(handle)*handle = cmdbuf[3]; return (Result)cmdbuf[1]; } From 6adaa95c18762d51935a94efec46d907c1507981 Mon Sep 17 00:00:00 2001 From: yellows8 Date: Mon, 24 Nov 2014 23:42:47 -0500 Subject: [PATCH 6/6] Updated mic example. Returning from the example then launching it again via hbmenu is broken. --- examples/mic/source/main.c | 82 ++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 35 deletions(-) diff --git a/examples/mic/source/main.c b/examples/mic/source/main.c index 8e6fc11..89ece51 100644 --- a/examples/mic/source/main.c +++ b/examples/mic/source/main.c @@ -11,13 +11,14 @@ int main() u8 *audiobuf; u32 audiobuf_size = 0x100000, audiobuf_pos = 0; u8 control=0x40; + u32 audio_initialized = 0; srvInit(); aptInit(); gfxInit(); hidInit(NULL); - CSND_initialize(NULL); + if(CSND_initialize(NULL)==0)audio_initialized = 1; sharedmem = (u32*)memalign(0x1000, sharedmem_size); audiobuf = linearAlloc(audiobuf_size); @@ -26,52 +27,63 @@ int main() while(aptMainLoop()) { - framebuf = gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL); hidScanInput(); + gspWaitForVBlank(); - if(hidKeysDown() & KEY_A) + u32 kDown = hidKeysDown(); + if (kDown & KEY_START) + break; // break in order to return to hbmenu + + if(audio_initialized) { - audiobuf_pos = 0; - - CSND_setchannel_playbackstate(0x8, 0);//Stop audio playback. - CSND_sharedmemtype0_cmdupdatestate(0); - - MIC_SetRecording(1); - - memset(framebuf, 0x20, 0x46500); - } - - if((hidKeysHeld() & KEY_A) && audiobuf_pos < audiobuf_size) - { - audiobuf_pos+= MIC_ReadAudioData(&audiobuf[audiobuf_pos], audiobuf_size-audiobuf_pos, 1); - if(audiobuf_pos > audiobuf_size)audiobuf_pos = audiobuf_size; - - memset(framebuf, 0x60, 0x46500); - } - - if(hidKeysUp() & KEY_A) - { - MIC_SetRecording(0); - GSPGPU_FlushDataCache(NULL, audiobuf, audiobuf_pos); - CSND_playsound(0x8, CSND_LOOP_DISABLE, CSND_ENCODING_PCM16, 16000, (u32*)audiobuf, NULL, audiobuf_pos, 2, 0); - - memset(framebuf, 0xe0, 0x46500); - - gfxFlushBuffers(); - gfxSwapBuffers(); - framebuf = gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL); - memset(framebuf, 0xe0, 0x46500); + + if(kDown & KEY_A) + { + audiobuf_pos = 0; + + CSND_setchannel_playbackstate(0x8, 0);//Stop audio playback. + CSND_sharedmemtype0_cmdupdatestate(0); + + MIC_SetRecording(1); + + memset(framebuf, 0x20, 0x46500); + } + + if((hidKeysHeld() & KEY_A) && audiobuf_pos < audiobuf_size) + { + audiobuf_pos+= MIC_ReadAudioData(&audiobuf[audiobuf_pos], audiobuf_size-audiobuf_pos, 1); + if(audiobuf_pos > audiobuf_size)audiobuf_pos = audiobuf_size; + + memset(framebuf, 0x60, 0x46500); + } + + if(hidKeysUp() & KEY_A) + { + MIC_SetRecording(0); + GSPGPU_FlushDataCache(NULL, audiobuf, audiobuf_pos); + CSND_playsound(0x8, CSND_LOOP_DISABLE, CSND_ENCODING_PCM16, 16000, (u32*)audiobuf, NULL, audiobuf_pos, 2, 0); + + memset(framebuf, 0xe0, 0x46500); + + gfxFlushBuffers(); + gfxSwapBuffers(); + + framebuf = gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL); + memset(framebuf, 0xe0, 0x46500); + } } gfxFlushBuffers(); gfxSwapBuffers(); - gspWaitForVBlank(); } MIC_Shutdown(); - CSND_shutdown(); + if(audio_initialized)CSND_shutdown(); + + free(sharedmem); + linearFree(audiobuf); hidExit(); gfxExit();