Linux增加event事件上报机制

Linux增加event事件上报机制,第1张

        static struct input_dev* sif_input_dev = NULL

        sif_input_dev  = input_allocate_device()

        sif_input_dev->name = "sif_event"

        set_bit(EV_MSC,  sif_input_dev->evbit)

        set_bit(MSC_RAW, sif_input_dev->mscbit)

        input_register_device(sif_input_dev)

        input_event(sif_input_dev, EV_MSC, MSC_RAW, 1)

        input_sync(sif_input_dev)

        open(INPUT_DEV, O_RDONLY)

        read(fd, &event, sizeof(event))

        printf("type:%d, code:%d, value:%d\n", event.type, event.code, event.value)

    这边收到了很多ai硬件设备,需要做压力测试、稳定性测试。苦于非安卓系统,不能借助input tap等方式进行ui自动化,也没找到合适的工具。上网查了资料加上自己多次测试排了一些坑,基本可以通过捕捉event实现简单UI自动化。

    /dev/input目录下的事件都是在驱动中调用input_register_device(struct input_dev *dev)产生的。

每个event将上报指定的事件:

比如:

通常触摸屏事件就会上报坐标轴事件,电源键比如按下是 1,松开是 0。而与event对应的相关设备信息位于/proc/bus/input/devices。可以直接cat 查看devces信息。小米手机为例:

    首先要会捕捉触摸屏以及所需要控制的按键事件,安卓系统比较简单,用自带的getevent就可以了。这边用小米手机为例:

我这边使用的触摸屏事件,打印的event1信息,可以理解为event1上报触摸屏事件。同样,使用电源键、音量键、home键也会用不同的event信息打印:

这里对应event0、event3、event4

但是在绝大多数linux是没有的!!!(有时候BSP对带,which一下就知道了)

如果没有的话只能编译一个放进去,这里推荐evtest

编译方法:

注:arm设备需要使用特定的交叉编译工具,否则可能无法执行;

方法:evtest /dev/input/event

通过evtest.c可以查看设备事件消息,通过TouchScreen.c可以实现点触摸屏某个坐标

[参考文档]( https://download.csdn.net/download/asd2479745295/10712830 )

编译文件push到设备。./touch xxx yyy

这边在使用时懒得充值,没找到合适的免费资源,找到了另一种解决方法。

( https://www.jianshu.com/p/6b5a172e064a )

可以参考之前一篇模拟快速点击的方法;

捕捉:

使用dd指令

模拟:

1、反向使用

2、可以使用追加

此方法可以模拟点击、滑屏、快速点击,各种实体按键短按、长按、快速点击等。暂时没有找到触摸屏长按的方法,原因是 无法控制长按的时间(追加的速度过快),但是可以通过脚本循环实现。

一个简单的循环,测试可以实现长按,但是不好控制时间,有一个思路是获取获取linux系统时间,在循环体中,true修改成时间条件但是可能打断长按事件。

还有一种可行性高,就是单独做成一个脚本供调用,另一个主脚本控制时间,到时间后kill进程来控制。方法很多,因为工作中没有用到这一项就没测试了。

1、ubuntu下编译解决。

2、捕捉的evest为空

数据量太少,dd的版本较低。更新busybox或者dd版本

3、while((1))报错

设备没有bash,只有sh,修改为while((true))可以解释通过。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11364996.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存