From 4f6b5dcfbb807c3266b8882d3a0e5afb3bffb7ce Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Tue, 27 Jul 2010 14:56:17 +0200 Subject: [PATCH] Preliminary tick task timer driver --- bootloader/application.c | 19 ++++++++++++++++++ firmware/target/hosted/android/kernel-android.c | 26 +++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/bootloader/application.c b/bootloader/application.c index d7ab036cd..b8b62f618 100644 --- a/bootloader/application.c +++ b/bootloader/application.c @@ -24,6 +24,7 @@ #include #include #include "config.h" +#include "kernel.h" #include "lcd.h" #include "font.h" #include "version.h" @@ -53,14 +54,32 @@ void Java_com_example_rbboot_RockboxBootloader_main(JNIEnv *env, jobject this) main(); } +void test_tick(void) +{ +/* + LOG("%s(): %ld", __func__, current_tick); +*/ +} + int main(void) { int delay = 1<<20; + long tick; LOG("Hello Rockbox!"); lcd_init(); lcd_setfont(FONT_SYSFIXED); + tick_start(10); printf("hello"); + tick_add_task(test_tick); + + int i = 10; + do { + tick = current_tick; + printf("hello tick"); + LOG("hello tick\n"); + while(!TIME_AFTER(current_tick, tick)); + } while(i-- > 0); return 0; int touch_data; diff --git a/firmware/target/hosted/android/kernel-android.c b/firmware/target/hosted/android/kernel-android.c index 06f3da0a0..528017e99 100644 --- a/firmware/target/hosted/android/kernel-android.c +++ b/firmware/target/hosted/android/kernel-android.c @@ -20,14 +20,36 @@ ****************************************************************************/ +#include #include "config.h" +#include "system.h" -void set_irq_level(int level) +extern JNIEnv *env_ptr; +extern jclass RbBl_class; +extern jobject RbBl_instance; + +static jclass RockboxTimer_class; +static jobject RockboxTimer_instance; + +int set_irq_level(int level) { (void)level; + return 0; +} + + +void Java_com_example_rbboot_RockboxTimer_timerTask(JNIEnv *env, jobject this) +{ + call_tick_tasks(); } void tick_start(unsigned int interval_in_ms) { - (void)interval_in_ms; + LOG("%s(): scheduled for %d", __func__, interval_in_ms); + jfieldID id = (*env_ptr)->GetFieldID(env_ptr, RbBl_class, "tim", "Lcom/example/rbboot/RockboxTimer;"); + RockboxTimer_instance = (*env_ptr)->GetObjectField(env_ptr, RbBl_instance, id); + RockboxTimer_class = (*env_ptr)->GetObjectClass(env_ptr, RockboxTimer_instance); + + jmethodID java_tick_start = (*env_ptr)->GetMethodID(env_ptr, RockboxTimer_class, "java_tick_start", "(J)V"); + (*env_ptr)->CallVoidMethod(env_ptr, RockboxTimer_instance, java_tick_start, (long)interval_in_ms); } -- 2.11.4.GIT