// 1: 添加头文件包含
#include "tslib.h"
// 2: ts结构体声明
struct tsdev *ts;
// 3: 修改初始化代码
void evdev_init(void)
{
#if 0
evdev_fd = open(EVDEV_NAME, O_RDWR | O_NOCTTY | O_NDELAY);
if(evdev_fd == -1) {
perror("unable open evdev interface:");
return;
}
fcntl(evdev_fd, F_SETFL, O_ASYNC | O_NONBLOCK);
#endif
ts = ts_setup(NULL, 1);
if (!ts) {
perror("ts_setup");
return;
//exit(1);
}
evdev_root_x = 0;
evdev_root_y = 0;
evdev_button = LV_INDEV_STATE_REL;
}
// 4:修改读取代码
bool evdev_read(lv_indev_data_t * data)
{
#if 0
struct input_event in;
while(read(evdev_fd, &in, sizeof(struct input_event)) > 0) {
if(in.type == EV_REL) {
if(in.code == REL_X)
#if EVDEV_SWAP_AXES
evdev_root_y += in.value;
#else
evdev_root_x += in.value;
#endif
else if(in.code == REL_Y)
#if EVDEV_SWAP_AXES
evdev_root_x += in.value;
#else
evdev_root_y += in.value;
#endif
} else if(in.type == EV_ABS) {
if(in.code == ABS_X)
#if EVDEV_SWAP_AXES
evdev_root_y = in.value;
#else
evdev_root_x = in.value;
#endif
else if(in.code == ABS_Y)
#if EVDEV_SWAP_AXES
evdev_root_x = in.value;
#else
evdev_root_y = in.value;
#endif
} else if(in.type == EV_KEY) {
if(in.code == BTN_MOUSE || in.code == BTN_TOUCH) {
if(in.value == 0)
evdev_button = LV_INDEV_STATE_REL;
else if(in.value == 1)
evdev_button = LV_INDEV_STATE_PR;
}
}
}
#endif
// tslib
struct ts_sample samp;
int ret;
/* 修改自tslib ts_print.c */
while (ts_read(ts, &samp, 1) == 1) {
printf("%ld.%06ld: %6d %6d %6d\n", samp.tv.tv_sec, samp.tv.tv_usec, samp.x, samp.y, samp.pressure);
#if EVDEV_SWAP_AXES
evdev_root_x = samp.y;
evdev_root_y = samp.x;
#else
evdev_root_x = samp.x;
evdev_root_y = samp.y;
#endif
if(samp.pressure == 0)
evdev_button = LV_INDEV_STATE_REL; //抬起
else if(samp.pressure == 255)
evdev_button = LV_INDEV_STATE_PR;
}
/*Store the collected data*/
#if EVDEV_SCALE
data->point.x = map(evdev_root_x, 0, EVDEV_SCALE_HOR_RES, 0, LV_HOR_RES);
data->point.y = map(evdev_root_y, 0, EVDEV_SCALE_VER_RES, 0, LV_VER_RES);
#else
#if EVDEV_CALIBRATE
data->point.x = map(evdev_root_x, EVDEV_HOR_MIN, EVDEV_HOR_MAX, 0, LV_HOR_RES);
data->point.y = map(evdev_root_y, EVDEV_VER_MIN, EVDEV_VER_MAX, 0, LV_VER_RES);
#else
data->point.x = evdev_root_x;
data->point.y = evdev_root_y;
#endif
#endif
data->state = evdev_button;
if(data->point.x < 0)
data->point.x = 0;
if(data->point.y < 0)
data->point.y = 0;
if(data->point.x >= LV_HOR_RES)
data->point.x = LV_HOR_RES - 1;
if(data->point.y >= LV_VER_RES)
data->point.y = LV_VER_RES - 1;
return false;
}