diff options
author | Thomas Martitz <kugel@rockbox.org> | 2011-03-16 15:17:24 +0000 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2011-03-16 15:17:24 +0000 |
commit | 8c46ddf9d719fb29f483dc21993167907953f39c (patch) | |
tree | 03d99235b88ba6f327db503f65e67061ae5568e3 /firmware/target/hosted/android/system-android.c | |
parent | 046cec3aa7fd58a9519cad8d693b47a2400e1742 (diff) | |
download | rockbox-8c46ddf9d719fb29f483dc21993167907953f39c.tar.gz rockbox-8c46ddf9d719fb29f483dc21993167907953f39c.zip |
Android: Implement app shutdown and thus, sleep timer.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29602 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/hosted/android/system-android.c')
-rw-r--r-- | firmware/target/hosted/android/system-android.c | 26 |
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 | ||
38 | extern int main(void); | 39 | extern int main(void); |
39 | extern void telephony_init_device(void); | 40 | extern void telephony_init_device(void); |
41 | extern void pcm_shutdown(void); | ||
40 | 42 | ||
41 | void system_exception_wait(void) { } | 43 | void system_exception_wait(void) { } |
42 | void system_reboot(void) { } | 44 | void system_reboot(void) { } |
43 | void power_off(void) { } | 45 | |
46 | /* this is used to return from the entry point of the native library. */ | ||
47 | static jmp_buf poweroff_buf; | ||
48 | void shutdown_hw(void) | ||
49 | { | ||
50 | longjmp(poweroff_buf, 1); | ||
51 | } | ||
44 | 52 | ||
45 | void system_init(void) | 53 | void 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 | } |