From 240923a801382c86545d10be167a15892a556fb6 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Mon, 2 Aug 2010 20:34:47 +0000 Subject: Rockbox as an application: Commit current Android port progress. General state is: Rockbox is usable (plays music, saves configuration, touchscreen works too). Problems: - Playing music in the background (i.e. when switching to another app) doesn't work reliably, but I'm working on that now. - no cabbiev2 (only some preliminary files for it), no other default theme. - screen flickers sometimes if the updates are too frequent - no multi screen apk/package - strange behavior when a phone call comes in The java files (and the eclipse project) resides in android/, which is also supposed to be the build folder. I've put a small README in there for instructions. There are some steps needed after the make part, which are described there, and which eclipse mostly handles. But there ought to be some script/makefile rules which do that instead in the future. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27668 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/hosted/android/kernel-android.c | 106 ++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 firmware/target/hosted/android/kernel-android.c (limited to 'firmware/target/hosted/android/kernel-android.c') diff --git a/firmware/target/hosted/android/kernel-android.c b/firmware/target/hosted/android/kernel-android.c new file mode 100644 index 0000000000..9594516460 --- /dev/null +++ b/firmware/target/hosted/android/kernel-android.c @@ -0,0 +1,106 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (c) 2010 Thomas Martitz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + + +#include +#include "config.h" +#include "system.h" + +extern JNIEnv *env_ptr; +extern jclass RockboxActivity_class; +extern jobject RockboxActivity_instance; + +static jclass RockboxTimer_class; +static jobject RockboxTimer_instance; +static jmethodID java_wait_for_interrupt; +static bool initialized = false; + +/* + * This is called from the separate Timer java thread. I have not added any + * interrupt simulation to it (like the sdl counterpart does), + * I think this is probably not needed, unless code calls disable_interrupt() + * in order to be protected from tick tasks, but I can't remember a place right + * now. + * + * No synchronisation mechanism either. This could possibly be problematic, + * but we'll see :) + */ +JNIEXPORT void JNICALL +Java_org_rockbox_RockboxTimer_timerTask(JNIEnv *env, jobject this) +{ + (void)env; + (void)this; + call_tick_tasks(); +} + +void tick_start(unsigned int interval_in_ms) +{ + JNIEnv e = *env_ptr; + /* first, create a new Timer instance */ + RockboxTimer_class = e->FindClass(env_ptr, "org/rockbox/RockboxTimer"); + jmethodID constructor = e->GetMethodID(env_ptr, + RockboxTimer_class, + "", + "(J)V"); + /* the constructor will do the tick_start */ + RockboxTimer_instance = e->NewObject(env_ptr, + RockboxTimer_class, + constructor, + (jlong)interval_in_ms); + + /* get our wfi func also */ + java_wait_for_interrupt = e->GetMethodID(env_ptr, + RockboxTimer_class, + "java_wait_for_interrupt", + "()V"); + /* it's now safe to call java_wait_for_interrupt */ + initialized = true; +} + +void wait_for_interrupt(void) +{ + if (LIKELY(initialized)) + { + (*env_ptr)->CallVoidMethod(env_ptr, + RockboxTimer_instance, + java_wait_for_interrupt); + } +} + +bool timer_register(int reg_prio, void (*unregister_callback)(void), + long cycles, void (*timer_callback)(void)) +{ + (void)reg_prio; + (void)unregister_callback; + (void)cycles; + (void)timer_callback; + return false; +} + +bool timer_set_period(long cycles) +{ + (void)cycles; + return false; +} + +void timer_unregister(void) +{ +} -- cgit v1.2.3