Skip to content

Commit 59413d9

Browse files
committed
fixing bugs
1 parent 70f1cbe commit 59413d9

File tree

1 file changed

+30
-23
lines changed

1 file changed

+30
-23
lines changed

simulator/simulator.c

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
#include <stdlib.h>
1010

1111
static 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;
1414
static JavaVM* s_simulator_jvm;
1515
static jobject s_simulator_bitmap, s_simulator_thiz;
1616
static jint s_simulator_h, s_simulator_w;
@@ -59,9 +59,7 @@ JNIEXPORT void simulator_start(JNIEnv* env, jobject thiz, jobject bitmap, jint w
5959

6060
JNIEXPORT 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

6765
void 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
293300
void droidboot_internal_platform_tasks()
294301
{
295-
usleep(200000);
302+
droidboot_internal_delay(200);
296303
}

0 commit comments

Comments
 (0)