首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过在Linux中写入/dev/dev/ event X来模拟触摸事件?

如何通过在Linux中写入/dev/dev/ event X来模拟触摸事件?
EN

Unix & Linux用户
提问于 2023-05-05 01:31:10
回答 1查看 50关注 0票数 0

我正在开发一个带有触摸屏的嵌入式Linux (内核5.10.24)。

现在,我想通过写入与触摸屏对应的/dev/ the /eventX来触发触摸事件。

为了弄清楚我想要模仿的事件,我首先通过触摸屏幕来收集事件。然后,我用代码硬编码这些事件,并将它们一个一个地写到/dev/dev/eventX中。

下面是我从感人中得到的一些事件。

代码语言:javascript
复制
~ # ./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。

代码语言:javascript
复制
#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的实用工具,我想自己来做。

EN

回答 1

Unix & Linux用户

发布于 2023-05-09 08:34:33

经过大量的测试和试验,我终于让事件注入起作用了。

首先,我检查了输入设备和触摸屏设备驱动程序的内核代码,发现写到/dev/input/event0时使用与TS驱动程序类似的逻辑来报告事件。

这证实了我这是个正确的方向。

第二,我改变了测试方式如下,

  1. 从屏幕触摸记录完整的事件。
  2. 通过写信给/dev/input/event0重播所有事件。
  3. 检查屏幕,以确认它是按手指触摸的。
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/744985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档