I’m trying to follow lv_port_linux_frame_buffer.
So far I have gotten the display working, which is great news. The problem arises when lvgl tries to read event codes from designated input device, therefore the touchsreen does not work.
Normally, when I run evtest on the same input device I get the following output:
Event: time 1283.148665, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 91
Event: time 1283.148695, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1283.148695, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 539
Event: time 1283.148726, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 1269
Event: time 1283.148726, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 7
Event: time 1283.148726, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 5
Event: time 1283.148756, type 3 (EV_ABS), code 50 (ABS_MT_WIDTH_MAJOR), value 2
Event: time 1283.148756, type 3 (EV_ABS), code 60 (ABS_MT_TOOL_X), value 0
Event: time 1283.149245, -------------- SYN_REPORT ------------
Event: time 1283.161726, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 6
Event: time 1283.161757, type 3 (EV_ABS), code 50 (ABS_MT_WIDTH_MAJOR), value 7
Event: time 1283.247969, -------------- SYN_REPORT ------------
Event: time 1283.259230, -------------- SYN_REPORT ------------
Event: time 1283.269301, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 688
Event: time 1283.269331, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 1279
Event: time 1283.269331, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 7
Event: time 1283.269362, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 6
Event: time 1283.269362, type 3 (EV_ABS), code 60 (ABS_MT_TOOL_X), value 0
Event: time 1283.269392, -------------- SYN_REPORT ------------
Event: time 1283.279829, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 702
Event: time 1283.279860, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 1281
Event: time 1283.279890, type 3 (EV_ABS), code 50 (ABS_MT_WIDTH_MAJOR), value 3
Event: time 1283.279921, -------------- SYN_REPORT ------------
Event: time 1283.289992, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1283.290114, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1283.290114, -------------- SYN_REPORT ------------
I’ve modified the evdev_read
function inside lv_drivers/indev/evdev.c
to ourput every bit of information it reads from the device like this:
...
while(read(evdev_fd, &in, sizeof(struct input_event)) > 0) {
printf("type: %d\n",in.type);
printf("Code: %d\n",in.code);
printf("Value: %d\n",in.value);
printf("-----------------------------------\n");
if(in.type == EV_REL) {
...
I get the following output:
-----------------------------------
type: 0
Code: 0
Value: -1092421676
-----------------------------------
type: 63376
Code: 48866
Value: -1092421676
-----------------------------------
type: 63376
Code: 48866
Value: -1092421676
-----------------------------------
type: 63376
Code: 48866
Value: -1092421676
-----------------------------------
type: 63376
Code: 48866
Value: -1092421676
-----------------------------------
So far only changes I have made to the code were the evdev input path in lv_drv_conf
and the printfs I have added to the evdev.c
What seems to be the underlying issue here?