From f7645e72254f7a17216cbebcb9b3f4310216cfda Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Tue, 27 Jul 2010 13:37:47 +0200 Subject: [PATCH] preliminary lcd driver --- bootloader/application.c | 13 ++++++---- firmware/drivers/lcd-16bit.c | 2 ++ firmware/export/config/application.h | 2 +- firmware/target/hosted/android/lcd-android.c | 33 ++++++++++++++++++++++++-- firmware/target/hosted/android/system-target.h | 5 ++++ 5 files changed, 47 insertions(+), 8 deletions(-) diff --git a/bootloader/application.c b/bootloader/application.c index 832b7ec63..d7ab036cd 100644 --- a/bootloader/application.c +++ b/bootloader/application.c @@ -38,16 +38,18 @@ char *stackbegin = (char*)0xDEADBEEF; char *stackend = (char*)0xDEADBEEF - (8<<10); -#include -#define LOG_TAG "RockboxBootloader" -#define LOG(args...) \ - __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, ##args); JNIEXPORT void JNICALL Java_com_example_rbboot_RockboxBootloader_main (JNIEnv *, jobject); +JNIEnv *env_ptr; +jobject RbBl_instance; +jclass RbBl_class; void Java_com_example_rbboot_RockboxBootloader_main(JNIEnv *env, jobject this) { + env_ptr = env; + RbBl_instance = this; + RbBl_class = (*env)->GetObjectClass(env, this); main(); } @@ -55,10 +57,11 @@ int main(void) { int delay = 1<<20; LOG("Hello Rockbox!"); - return 0; lcd_init(); lcd_setfont(FONT_SYSFIXED); + printf("hello"); + return 0; int touch_data; if(button_read_device(&touch_data) & BUTTON_MENU) diff --git a/firmware/drivers/lcd-16bit.c b/firmware/drivers/lcd-16bit.c index f8b4272f7..1e8b610d2 100644 --- a/firmware/drivers/lcd-16bit.c +++ b/firmware/drivers/lcd-16bit.c @@ -75,7 +75,9 @@ void lcd_init(void) /* Call device specific init */ lcd_init_device(); +/* scroll_init(); +*/ } /*** Viewports ***/ diff --git a/firmware/export/config/application.h b/firmware/export/config/application.h index 9ed25b83b..25065cd84 100644 --- a/firmware/export/config/application.h +++ b/firmware/export/config/application.h @@ -37,7 +37,7 @@ /* LCD dimensions */ #define LCD_WIDTH 320 -#define LCD_HEIGHT 240 +#define LCD_HEIGHT 480 #define LCD_DEPTH 16 #define LCD_PIXELFORMAT 565 diff --git a/firmware/target/hosted/android/lcd-android.c b/firmware/target/hosted/android/lcd-android.c index 92f08cac6..adeaefb5d 100644 --- a/firmware/target/hosted/android/lcd-android.c +++ b/firmware/target/hosted/android/lcd-android.c @@ -20,10 +20,39 @@ ****************************************************************************/ +#include #include "config.h" -void lcd_init_device(void) {} +#include "system.h" +#include "lcd.h" + +static jclass Framebuffer_class; +static jobject Framebuffer_instance; +extern JNIEnv *env_ptr; +extern jclass RbBl_class; +extern jobject RbBl_instance; + +jmethodID java_lcd_update; + +void lcd_init_device(void) +{ + LOG("%s(): Hello", __func__); + jfieldID id = (*env_ptr)->GetFieldID(env_ptr, RbBl_class, "fb", "Lcom/example/rbboot/Framebuffer;"); + Framebuffer_instance = (*env_ptr)->GetObjectField(env_ptr, RbBl_instance, id); + Framebuffer_class = (*env_ptr)->GetObjectClass(env_ptr, Framebuffer_instance); + + jmethodID java_init_lcd = (*env_ptr)->GetMethodID(env_ptr, Framebuffer_class, "java_lcd_init", "(IILjava/nio/ByteBuffer;)V"); + java_lcd_update = (*env_ptr)->GetMethodID(env_ptr, Framebuffer_class, "java_lcd_update", "()V"); + + jobject buf = (*env_ptr)->NewDirectByteBuffer(env_ptr, lcd_framebuffer, sizeof(lcd_framebuffer)); + + (*env_ptr)->CallVoidMethod(env_ptr, Framebuffer_instance, java_init_lcd, LCD_WIDTH, LCD_HEIGHT, buf); +} + +void lcd_update() +{ + (*env_ptr)->CallVoidMethod(env_ptr, Framebuffer_instance, java_lcd_update); +} -void lcd_update() {} void lcd_update_rect(int x, int y, int height, int width) { (void)x; (void)y; (void)height; (void)width; diff --git a/firmware/target/hosted/android/system-target.h b/firmware/target/hosted/android/system-target.h index 023159977..6f0b4051b 100644 --- a/firmware/target/hosted/android/system-target.h +++ b/firmware/target/hosted/android/system-target.h @@ -47,6 +47,11 @@ void sys_handle_argv(int argc, char *argv[]); void gui_message_loop(void); void sim_do_exit(void); +#include +#define LOG_TAG "RockboxBootloader" +#define LOG(args...) \ + __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, ##args); + #endif /* _SYSTEM_SDL_H_ */ #define NEED_GENERIC_BYTESWAPS -- 2.11.4.GIT