summaryrefslogtreecommitdiff
path: root/firmware/target/hosted/android/system-android.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/hosted/android/system-android.c')
-rw-r--r--firmware/target/hosted/android/system-android.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/firmware/target/hosted/android/system-android.c b/firmware/target/hosted/android/system-android.c
index 686453cfbb..fba7ff4e2c 100644
--- a/firmware/target/hosted/android/system-android.c
+++ b/firmware/target/hosted/android/system-android.c
@@ -20,6 +20,7 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21 21
22 22
23#include <setjmp.h>
23#include <jni.h> 24#include <jni.h>
24#include "config.h" 25#include "config.h"
25#include "system.h" 26#include "system.h"
@@ -37,10 +38,17 @@ uintptr_t *stackend;
37 38
38extern int main(void); 39extern int main(void);
39extern void telephony_init_device(void); 40extern void telephony_init_device(void);
41extern void pcm_shutdown(void);
40 42
41void system_exception_wait(void) { } 43void system_exception_wait(void) { }
42void system_reboot(void) { } 44void system_reboot(void) { }
43void power_off(void) { } 45
46/* this is used to return from the entry point of the native library. */
47static jmp_buf poweroff_buf;
48void shutdown_hw(void)
49{
50 longjmp(poweroff_buf, 1);
51}
44 52
45void system_init(void) 53void system_init(void)
46{ 54{
@@ -75,10 +83,18 @@ Java_org_rockbox_RockboxService_main(JNIEnv *env, jobject this)
75 83
76 volatile uintptr_t stack = 0; 84 volatile uintptr_t stack = 0;
77 stackbegin = stackend = (uintptr_t*) &stack; 85 stackbegin = stackend = (uintptr_t*) &stack;
78 env_ptr = env; 86 /* setup a jmp_buf to come back later in case of exit */
87 if (setjmp(poweroff_buf) == 0)
88 {
89 env_ptr = env;
90
91 RockboxService_instance = this;
92 RockboxService_class = (*env)->GetObjectClass(env, this);
79 93
80 RockboxService_instance = this; 94 main();
81 RockboxService_class = (*env)->GetObjectClass(env, this); 95 }
82 96
83 main(); 97 pcm_shutdown();
98 /* simply return here. this will allow the VM to clean up objects and do
99 * garbage collection */
84} 100}