Skip to content

Commit

Permalink
Fixed broken MIC shutdown code. Use a tmp field for svcControlMemory …
Browse files Browse the repository at this point in the history
…when not allocating linearmem, in initSystem.c.
  • Loading branch information
yellows8 committed Nov 29, 2014
1 parent a8e08d4 commit 58192c8
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 8 deletions.
2 changes: 0 additions & 2 deletions examples/mic/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,3 @@ 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.

10 changes: 7 additions & 3 deletions libctru/source/initSystem.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,18 @@ void __destroy_handle_list(void);

void __attribute__((noreturn)) __ctru_exit(int rc)
{
u32 tmp=0;

// Run the global destructors
__libc_fini_array();

// TODO: APT exit goes here

// Unmap the linear heap
svcControlMemory(&__linear_heap, __linear_heap, 0x0, __linear_heap_size, MEMOP_FREE, 0x0);
svcControlMemory(&tmp, __linear_heap, 0x0, __linear_heap_size, MEMOP_FREE, 0x0);

// Unmap the application heap
svcControlMemory(&heapBase, heapBase, 0x0, __heap_size, MEMOP_FREE, 0x0);
svcControlMemory(&tmp, heapBase, 0x0, __heap_size, MEMOP_FREE, 0x0);

// Close some handles
__destroy_handle_list();
Expand All @@ -50,13 +52,15 @@ void __attribute__((noreturn)) __ctru_exit(int rc)

void initSystem(void (*retAddr)(void))
{
u32 tmp=0;

// Register newlib exit() syscall
__syscalls.exit = __ctru_exit;
__system_retAddr = __service_ptr ? retAddr : NULL;

// Allocate the application heap
heapBase = 0x08000000;
svcControlMemory(&heapBase, heapBase, 0x0, __heap_size, MEMOP_ALLOC, 0x3);
svcControlMemory(&tmp, heapBase, 0x0, __heap_size, MEMOP_ALLOC, 0x3);

// Allocate the linear heap
svcControlMemory(&__linear_heap, 0x0, 0x0, __linear_heap_size, MEMOP_ALLOC_LINEAR, 0x3);
Expand Down
3 changes: 0 additions & 3 deletions libctru/source/services/mic.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,6 @@ Result MIC_Shutdown()

MIC_cmd5();

ret = svcUnmapMemoryBlock(MIC_sharedmem_handle, (u32)MIC_sharedmem);
if(ret!=0)return ret;

ret = svcCloseHandle(MIC_sharedmem_handle);
if(ret!=0)return ret;

Expand Down

0 comments on commit 58192c8

Please sign in to comment.