diff --git a/source/main.c b/source/main.c index fe572b7..ac4a2b1 100644 --- a/source/main.c +++ b/source/main.c @@ -11,6 +11,7 @@ static lv_obj_t * cursor; static lv_obj_t * label; static lv_obj_t * label2; static lv_obj_t * fps_label; +static lv_obj_t * keypad_label; long unsigned int sys_tick(void) @@ -30,30 +31,71 @@ void sys_free(void) gfxExit(); } -static void cursor_timer_cb(lv_timer_t * t) +static void ui_timer_cb(lv_timer_t * t) { LV_UNUSED(t); - + lv_indev_t * indev = lv_indev_get_next(NULL); + + while (indev) { + if (lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER) { + lv_point_t p; + lv_indev_get_point(indev, &p); - if (!indev) - return; + if (lv_indev_get_state(indev) == LV_INDEV_STATE_PRESSED) { + lv_obj_set_pos(cursor, p.x - 5, p.y - 5); + lv_obj_clear_flag(cursor, LV_OBJ_FLAG_HIDDEN); - lv_point_t p; - lv_indev_get_point(indev, &p); + lv_label_set_text_fmt(label2, + "x: %d\ny: %d", + p.x, + p.y); + } + else { + lv_obj_add_flag(cursor, LV_OBJ_FLAG_HIDDEN); + } + } + if (lv_indev_get_type(indev) == LV_INDEV_TYPE_KEYPAD) { + uint32_t key = lv_indev_get_key(indev); + uint32_t state = lv_indev_get_state(indev); + const char * txt = "None"; - if (lv_indev_get_state(indev) == LV_INDEV_STATE_PRESSED) { + switch(key) { + case LV_KEY_UP: + txt = "UP"; + break; + case LV_KEY_DOWN: + txt = "DOWN"; + break; + case LV_KEY_LEFT: + txt = "LEFT"; + break; + case LV_KEY_RIGHT: + txt = "RIGHT"; + break; + case LV_KEY_ENTER: + txt = "A"; + break; + case LV_KEY_ESC: + txt = "B"; + break; + case LV_KEY_PREV: + txt = "L"; + break; + case LV_KEY_NEXT: + txt = "R"; + break; + default: + txt = "None"; + break; + } - lv_obj_set_pos(cursor, p.x - 5, p.y - 5); - lv_obj_clear_flag(cursor, LV_OBJ_FLAG_HIDDEN); - - lv_label_set_text_fmt(label2, - "x: %d\ny: %d", - p.x, - p.y); - } - else { - lv_obj_add_flag(cursor, LV_OBJ_FLAG_HIDDEN); + if (state == LV_INDEV_STATE_PRESSED) + lv_label_set_text_fmt(keypad_label, "Pressed: %s", txt); + else + lv_label_set_text_fmt(keypad_label, "Released", txt); + } + indev = lv_indev_get_next(indev); } } @@ -131,6 +173,10 @@ static void ui_prepare(void) label2 = lv_label_create(lv_screen_active()); lv_obj_align(label2, LV_ALIGN_TOP_LEFT, 4, 4); + /* Keypad label */ + keypad_label = lv_label_create(lv_screen_active()); + lv_obj_align(keypad_label, LV_ALIGN_TOP_LEFT, 4, 36); + /* FPS label */ fps_label = lv_label_create(lv_screen_active()); lv_obj_align(fps_label, @@ -139,7 +185,11 @@ static void ui_prepare(void) -4); /* Main loop UI update timer */ - lv_timer_create(cursor_timer_cb, 16, NULL); + lv_timer_create(ui_timer_cb, 16, NULL); + + /* Dummy group to make indev happy */ + lv_group_t * group = lv_group_create(); + lv_indev_set_group(lv_ctr_indev_get_keypad(), group); lv_obj_invalidate(lv_screen_active()); } @@ -157,13 +207,16 @@ int main(int argc, char* argv[]) // Main loop while (aptMainLoop()) { + // scan HID inputs + hidScanInput(); + + // call LVGL timer handler u64 start = osGetTime(); lv_timer_handler(); u64 end = osGetTime(); lv_label_set_text_fmt(fps_label, "render: %llums", end - start); - hidScanInput(); - + // evacuate the dance floor! u32 kDown = hidKeysDown(); if (kDown & KEY_START) break; // break in order to return to hbmenu