我正在开发一个带有触摸屏的嵌入式Linux (内核5.10.24)。
现在,我想通过写入与触摸屏对应的/dev/ the /eventX来触发触摸事件。
为了弄清楚我想要模仿的事件,我首先通过触摸屏幕来收集事件。然后,我用代码硬编码这些事件,并将它们一个一个地写到/dev/dev/eventX中。
下面是我从感人中得到的一些事件。
~ # ./touchevent
timeS=1651152027,timeUS=312095,type=3,code=57,value=50
timeS=1651152027,timeUS=312095,type=3,code=53,value=218
timeS=1651152027,timeUS=312095,type=3,code=54,value=1223
timeS=1651152027,timeUS=312095,type=3,code=48,value=54
timeS=1651152027,timeUS=312095,type=3,code=58,value=54
timeS=1651152027,timeUS=312095,type=1,code=330,value=1
timeS=1651152027,timeUS=312095,type=0,code=0,value=0
timeS=1651152027,timeUS=448388,type=3,code=57,value=-1
timeS=1651152027,timeUS=448388,type=1,code=330,value=0
timeS=1651152027,timeUS=448388,type=0,code=0,value=0我硬编码了前7个事件(包括一个EV_SYN),以便写入/dev/dev/eventX。
#include <stdio.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/input.h>
int main( void )
{
int fd;
int ret;
struct input_event event;
fd = open( "/dev/input/event0", O_RDWR);
if ( fd < 0 )
{
perror( "/dev/input/event0" );
return(-1);
}
event.type = 3;
event.code = 53;
event.value = 218;
ret = write( fd, &event, sizeof(struct input_event) );
printf("ret: %d\n", ret);
event.type = 3;
event.code = 54;
event.value = 1223;
ret = write( fd, &event, sizeof(struct input_event) );
printf("ret: %d\n", ret);
event.type = 3;
event.code = 48;
event.value = 54;
ret = write( fd, &event, sizeof(struct input_event) );
printf("ret: %d\n", ret);
event.type = 3;
event.code = 58;
event.value = 54;
ret = write( fd, &event, sizeof(struct input_event) );
printf("ret: %d\n", ret);
event.type = 1;
event.code = 330;
event.value = 1;
ret = write( fd, &event, sizeof(struct input_event) );
printf("ret: %d\n", ret);
event.type = 0;
event.code = 0;
event.value = 0;
ret = write( fd, &event, sizeof(struct input_event) );
printf("ret: %d\n", ret);
close( fd );
.....
}当我在目标上运行代码时,触摸屏没有预期的响应。
我不确定是否可以通过写信来模拟触摸事件,如果是,那么我错过了什么呢?
我没有来自Andriod的实用工具,我想自己来做。
发布于 2023-05-09 08:34:33
经过大量的测试和试验,我终于让事件注入起作用了。
首先,我检查了输入设备和触摸屏设备驱动程序的内核代码,发现写到/dev/input/event0时使用与TS驱动程序类似的逻辑来报告事件。
这证实了我这是个正确的方向。
第二,我改变了测试方式如下,
/dev/input/event0重播所有事件。https://unix.stackexchange.com/questions/744985
复制相似问题