Keyboard input from Linux evdev?

Missing regular keypresses when using evdev

Setting up the evdev driver to get keyboard presses seems only to support navigation and deletion of text?

When looking into

_evdev_process_key from lv_evdev.c

static int _evdev_process_key(uint16_t code)
{
    switch(code) {
        case KEY_UP:
            return LV_KEY_UP;
        case KEY_DOWN:
            return LV_KEY_DOWN;
        case KEY_RIGHT:
            return LV_KEY_RIGHT;
        case KEY_LEFT:
            return LV_KEY_LEFT;
        case KEY_ESC:
            return LV_KEY_ESC;
        case KEY_DELETE:
            return LV_KEY_DEL;
        case KEY_BACKSPACE:
            return LV_KEY_BACKSPACE;
        case KEY_ENTER:
            return LV_KEY_ENTER;
        case KEY_NEXT:
        case KEY_TAB:
            return LV_KEY_NEXT;
        case KEY_PREVIOUS:
            return LV_KEY_PREV;
        case KEY_HOME:
            return LV_KEY_HOME;
        case KEY_END:
            return LV_KEY_END;
        default:
            return 0;
    }
}

Default action is to return 0 if none of the basic navigation keys.

Am I missing something or am i using the driver wrongly?

What MCU/Processor/Board and compiler are you using?

Arm SOC with GCC 8.4.0

What LVGL version are you using?

Version 9.2

What do you want to achieve?

Receive keyboard input using the evdev driver.

Code used

static void setup(void)
{
	const char *device = getenv("LV_LINUX_FBDEV_DEVICE")?:"/dev/fb0";
	lv_display_t * disp = lv_linux_fbdev_create();

	lv_linux_fbdev_set_file(disp, device);

	/* Register input */
	lv_group_t *g = lv_group_create();
	lv_group_set_default(g);

	lv_indev_t* keyboard = lv_evdev_create(LV_INDEV_TYPE_KEYPAD, "/dev/input/by-path/platform-gpio-keys-event");
	lv_indev_set_group(keyboard, lv_group_get_default());
}

static void KeypressCB(lv_event_t *ev)
{
	lv_event_code_t code = lv_event_get_code(ev);

	uint32_t key = lv_event_get_key(ev);
	printf("Got key: %d\n",key);
	switch(key)
	{
	case 27:	// esc
		uv_stop(uv_default_loop());
	break;
	default:
	break;
	}
}

void LVHandler(uv_timer_t *timer)
{
	lv_timer_handler();
}

int main(int argc, char *argv[])
{
	uv_loop_t *loop = uv_default_loop();

	lv_init();
	setup();

	// Setup keyboard
	lv_group_add_obj(lv_group_get_default(), lv_screen_active());
	evdsc = lv_obj_add_event_cb(lv_screen_active(), KeypressCB, LV_EVENT_KEY, nullptr);
	lv_group_focus_obj(lv_screen_active());

	uv_timer_t timer;
	uv_timer_init(loop, &timer);
	uv_timer_start(&timer, LVHandler, 5,5);

	widgetmanager->Cycle();
	uv_run(loop, UV_RUN_DEFAULT );

	uv_loop_close(loop);

	return 0;
}