99#include <stdlib.h>
1010
1111static pthread_t t , t2 ;
12- static bool s_simulator_running , s_simulator_vol_down_pressed , s_simulator_vol_up_pressed , s_simulator_pwr_pressed ;
13- static uint32_t last_pressed_key ;
12+ static bool s_simulator_running ;
13+ uint8_t s_simulator_keymask ;
1414static JavaVM * s_simulator_jvm ;
1515static jobject s_simulator_bitmap , s_simulator_thiz ;
1616static jint s_simulator_h , s_simulator_w ;
@@ -59,9 +59,7 @@ JNIEXPORT void simulator_start(JNIEnv* env, jobject thiz, jobject bitmap, jint w
5959
6060JNIEXPORT void simulator_key (jint key )
6161{
62- s_simulator_vol_down_pressed = key == 1 ;
63- s_simulator_vol_up_pressed = key == 2 ;
64- s_simulator_pwr_pressed = key == 3 ;
62+ s_simulator_keymask |= key ;
6563}
6664
6765void droidboot_internal_fb_flush (lv_disp_drv_t * disp_drv , const lv_area_t * area , lv_color_t * color_p )
@@ -75,7 +73,7 @@ void droidboot_internal_fb_flush(lv_disp_drv_t * disp_drv, const lv_area_t * are
7573 uint32_t * addr ;
7674 while ((ret = AndroidBitmap_lockPixels (env , s_simulator_bitmap , (void * * ) & addr )) != ANDROID_BITMAP_RESULT_SUCCESS ) {
7775 __android_log_print (ANDROID_LOG_ERROR , "droidboot" , "failed to lock bitmap (%d), trying again" , ret );
78- usleep ( 10000 );
76+ droidboot_internal_delay ( 10 );
7977 }
8078 //__android_log_print(ANDROID_LOG_VERBOSE, "droidboot", "locked fb %p", addr);
8179 for (uint32_t y = area -> y1 ; y <= area -> y2 ; y ++ ) {
@@ -87,7 +85,7 @@ void droidboot_internal_fb_flush(lv_disp_drv_t * disp_drv, const lv_area_t * are
8785
8886 while ((ret = AndroidBitmap_unlockPixels (env , s_simulator_bitmap )) != ANDROID_BITMAP_RESULT_SUCCESS ) {
8987 __android_log_print (ANDROID_LOG_ERROR , "droidboot" , "failed to unlock bitmap (%d), trying again" , ret );
90- usleep ( 10000 );
88+ droidboot_internal_delay ( 10 );
9189 }
9290
9391 jclass cls = (* env )-> GetObjectClass (env , s_simulator_thiz );
@@ -99,23 +97,31 @@ void droidboot_internal_fb_flush(lv_disp_drv_t * disp_drv, const lv_area_t * are
9997 lv_disp_flush_ready (disp_drv );
10098}
10199
102- void droidboot_internal_key_read (lv_indev_drv_t * drv , lv_indev_data_t * data )
103- {
104- if (s_simulator_vol_up_pressed ) {
100+ void droidboot_internal_key_read (lv_indev_drv_t * drv , lv_indev_data_t * data ) {
101+ if (s_simulator_keymask & 1 ) {
105102 data -> key = LV_KEY_PREV ;
106- last_pressed_key = LV_KEY_PREV ;
107103 data -> state = LV_INDEV_STATE_PRESSED ;
108- } else if (s_simulator_vol_down_pressed ) {
104+ s_simulator_keymask &= ~1 ;
105+ } else if (s_simulator_keymask & 2 ) {
109106 data -> key = LV_KEY_NEXT ;
110- last_pressed_key = LV_KEY_NEXT ;
111107 data -> state = LV_INDEV_STATE_PRESSED ;
112- } else if (s_simulator_pwr_pressed ) {
108+ s_simulator_keymask &= ~2 ;
109+ } else if (s_simulator_keymask & 4 ) {
113110 data -> key = LV_KEY_ENTER ;
114- last_pressed_key = LV_KEY_ENTER ;
115111 data -> state = LV_INDEV_STATE_PRESSED ;
116- } else {
117- data -> key = last_pressed_key ;
112+ s_simulator_keymask &= ~4 ;
113+ } else if (s_simulator_keymask & 8 ) {
114+ data -> key = LV_KEY_PREV ;
115+ data -> state = LV_INDEV_STATE_RELEASED ;
116+ s_simulator_keymask &= ~8 ;
117+ } else if (s_simulator_keymask & 16 ) {
118+ data -> key = LV_KEY_NEXT ;
119+ data -> state = LV_INDEV_STATE_RELEASED ;
120+ s_simulator_keymask &= ~16 ;
121+ } else if (s_simulator_keymask & 32 ) {
122+ data -> key = LV_KEY_ENTER ;
118123 data -> state = LV_INDEV_STATE_RELEASED ;
124+ s_simulator_keymask &= ~32 ;
119125 }
120126}
121127
@@ -198,11 +204,11 @@ static void* droidboot_lv_tick_inc_thread(void * arg) {
198204 JNIEnv * env ;
199205 (* s_simulator_jvm )-> AttachCurrentThread (s_simulator_jvm , & env , & args );
200206 while (s_simulator_running ) {
201- sleep (1 );
207+ droidboot_internal_delay (1 );
202208 lv_tick_inc (1 );
203- //lv_timer_handler();
204209 }
205- (* s_simulator_jvm )-> DetachCurrentThread (s_simulator_jvm );
210+ if (s_simulator_jvm != NULL )
211+ (* s_simulator_jvm )-> DetachCurrentThread (s_simulator_jvm );
206212 return 0 ;
207213}
208214
@@ -216,10 +222,11 @@ static void* droidboot_lv_timer_handler_thread(void * arg) {
216222 JNIEnv * env ;
217223 (* s_simulator_jvm )-> AttachCurrentThread (s_simulator_jvm , & env , & args );
218224 while (s_simulator_running ) {
219- sleep (1 );
225+ droidboot_internal_delay (1 );
220226 lv_timer_handler ();
221227 }
222- (* s_simulator_jvm )-> DetachCurrentThread (s_simulator_jvm );
228+ if (s_simulator_jvm != NULL )
229+ (* s_simulator_jvm )-> DetachCurrentThread (s_simulator_jvm );
223230 return 0 ;
224231}
225232
@@ -292,5 +299,5 @@ bool droidboot_internal_append_ramdisk_to_kernel()
292299// Nothing to do here, we have threads
293300void droidboot_internal_platform_tasks ()
294301{
295- usleep ( 200000 );
302+ droidboot_internal_delay ( 200 );
296303}
0 commit comments