summaryrefslogtreecommitdiff
path: root/firmware/target/hosted/android
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2010-10-29 23:12:08 +0000
committerThomas Martitz <kugel@rockbox.org>2010-10-29 23:12:08 +0000
commit6bb75228529382d59fda7bf455cf578766ed995e (patch)
tree90cf92c7c22ce31198c57568b00d240db513f7ab /firmware/target/hosted/android
parent669a327a2e6ee83795b0916e82e96ba4f2a44463 (diff)
downloadrockbox-6bb75228529382d59fda7bf455cf578766ed995e.tar.gz
rockbox-6bb75228529382d59fda7bf455cf578766ed995e.zip
Initialize (instantiate) RockboxFramebuffer from the C code like with the othe java objects.
Remove some @Override annotations to make the Java code build with certain javac versions. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28386 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/hosted/android')
-rw-r--r--firmware/target/hosted/android/lcd-android.c78
1 files changed, 42 insertions, 36 deletions
diff --git a/firmware/target/hosted/android/lcd-android.c b/firmware/target/hosted/android/lcd-android.c
index 1043dfa35c..fc9e22a921 100644
--- a/firmware/target/hosted/android/lcd-android.c
+++ b/firmware/target/hosted/android/lcd-android.c
@@ -29,7 +29,8 @@ extern JNIEnv *env_ptr;
29extern jclass RockboxService_class; 29extern jclass RockboxService_class;
30extern jobject RockboxService_instance; 30extern jobject RockboxService_instance;
31 31
32static jobject Framebuffer_instance; 32static jclass RockboxFramebuffer_class;
33static jobject RockboxFramebuffer_instance;
33static jmethodID java_lcd_update; 34static jmethodID java_lcd_update;
34static jmethodID java_lcd_update_rect; 35static jmethodID java_lcd_update_rect;
35 36
@@ -37,46 +38,51 @@ static bool display_on;
37 38
38void lcd_init_device(void) 39void lcd_init_device(void)
39{ 40{
40 /* get the RockboxFramebuffer instance allocated by the activity */ 41 JNIEnv e = *env_ptr;
41 jfieldID id = (*env_ptr)->GetStaticFieldID(env_ptr, 42 RockboxFramebuffer_class = e->FindClass(env_ptr,
42 RockboxService_class, 43 "org/rockbox/RockboxFramebuffer");
43 "fb", 44 /* instantiate a RockboxFramebuffer instance
44 "Lorg/rockbox/RockboxFramebuffer;"); 45 *
45 46 * Pass lcd width and height and our framebuffer so the java layer
46 Framebuffer_instance = (*env_ptr)->GetStaticObjectField(env_ptr, 47 * can create a Bitmap which directly maps to it
47 RockboxService_class, 48 **/
48 id); 49
49 50 /* map the framebuffer to a ByteBuffer, this way lcd updates will
50 jclass Framebuffer_class = (*env_ptr)->GetObjectClass(env_ptr, 51 * be directly feched from the framebuffer */
51 Framebuffer_instance); 52 jobject buf = e->NewDirectByteBuffer(env_ptr,
52 53 lcd_framebuffer,
53 /* get the java init function and call it. it'll set up a bitmap 54 (jlong)sizeof(lcd_framebuffer));
54 * based on LCD_WIDTH, LCD_HEIGHT and the ByteBuffer which directly maps 55
55 * our framebuffer */ 56 jmethodID constructor = e->GetMethodID(env_ptr,
56 57 RockboxFramebuffer_class,
57 jmethodID java_init_lcd = (*env_ptr)->GetMethodID(env_ptr, 58 "<init>",
58 Framebuffer_class, 59 "(Landroid/content/Context;" /* Service */
59 "java_lcd_init", 60 "II" /* lcd width/height */
60 "(IILjava/nio/ByteBuffer;)V"); 61 "Ljava/nio/ByteBuffer;)V"); /* ByteBuffer */
62
63 RockboxFramebuffer_instance = e->NewObject(env_ptr,
64 RockboxFramebuffer_class,
65 constructor,
66 RockboxService_instance,
67 (jint)LCD_WIDTH,
68 (jint)LCD_HEIGHT,
69 buf);
70
71 /* cache update functions */
61 java_lcd_update = (*env_ptr)->GetMethodID(env_ptr, 72 java_lcd_update = (*env_ptr)->GetMethodID(env_ptr,
62 Framebuffer_class, 73 RockboxFramebuffer_class,
63 "java_lcd_update", 74 "java_lcd_update",
64 "()V"); 75 "()V");
65 java_lcd_update_rect = (*env_ptr)->GetMethodID(env_ptr, 76 java_lcd_update_rect = (*env_ptr)->GetMethodID(env_ptr,
66 Framebuffer_class, 77 RockboxFramebuffer_class,
67 "java_lcd_update_rect", 78 "java_lcd_update_rect",
68 "(IIII)V"); 79 "(IIII)V");
69 80
70 /* map the framebuffer to a ByteBuffer, this way lcd updates will 81 /* at last, give RockboxService the Framebuffer instance */
71 * be directly feched from the framebuffer */ 82 jfieldID id = e->GetStaticFieldID(env_ptr, RockboxService_class,
72 jobject buf = (*env_ptr)->NewDirectByteBuffer(env_ptr, 83 "fb", "Lorg/rockbox/RockboxFramebuffer;");
73 lcd_framebuffer, 84 e->SetStaticObjectField(env_ptr, RockboxService_class,
74 sizeof(lcd_framebuffer)); 85 id, RockboxFramebuffer_instance);
75
76 (*env_ptr)->CallVoidMethod(env_ptr,
77 Framebuffer_instance,
78 java_init_lcd,
79 LCD_WIDTH, LCD_HEIGHT, buf);
80 display_on = true; 86 display_on = true;
81} 87}
82 88
@@ -84,14 +90,14 @@ void lcd_update(void)
84{ 90{
85 /* tell the system we're ready for drawing */ 91 /* tell the system we're ready for drawing */
86 if (display_on) 92 if (display_on)
87 (*env_ptr)->CallVoidMethod(env_ptr, Framebuffer_instance, java_lcd_update); 93 (*env_ptr)->CallVoidMethod(env_ptr, RockboxFramebuffer_instance, java_lcd_update);
88} 94}
89 95
90void lcd_update_rect(int x, int y, int height, int width) 96void lcd_update_rect(int x, int y, int height, int width)
91{ 97{
92 if (display_on) 98 if (display_on)
93 { 99 {
94 (*env_ptr)->CallVoidMethod(env_ptr, Framebuffer_instance, java_lcd_update_rect, 100 (*env_ptr)->CallVoidMethod(env_ptr, RockboxFramebuffer_instance, java_lcd_update_rect,
95 x, y, height, width); 101 x, y, height, width);
96 } 102 }
97} 103}