一丶环境信息

软件版本:OH5.0

硬件信息:输入设备(触摸屏、键盘、鼠标)

二丶工具详情

在OpenHarmony系统进行input设备适配时,开发人员常面临调试验证难题,无法直观判断驱动是否生效‌。通过这个工具可实时捕获Linux内核上报的原始事件数据(如EV_ABS坐标值、EV_KEY按键状态),为硬件交互验证提供关键依据‌。以触摸屏为例:

  1. 事件验证流程

    • 执行./input_debug /dev/input/eventX启动监控‌4
    • 触控操作后若显示类似[EV_ABS] Code:0x35 Value:320的坐标流,表明驱动适配成功‌
    • 无事件输出则需检查‌设备树配置‌、‌HDF驱动加载状态‌及‌权限配置‌‌
  2. 典型调试场景

    • 物理按键:检测EV_KEY事件PRESS/RELEASE状态‌2
    • 触控精度:分析EV_ABS坐标连续性‌3
    • 协议兼容:验证EV_SYN同步事件完整性‌4

该方案通过底层事件透传机制,有效解决了OpenHarmony硬件适配中“黑盒调试”的痛点‌。

三丶操作步骤

1.   hdc file send ./evtest /data

2.   hdc shell

3.   chmod 777 /data/evtest

4.   cd /data

5.   ./evtest /dev/input/event1

listen: /dev/input/event1
[74203.313127] ABS 057 : 115
[74203.313127] ABS 053 : 768
[74203.313127] ABS 054 : 1064
[74203.313127] ABS 048 : 37
[74203.313127] ABS 058 : 37
[74203.313127] KEY 330 : 1
[74203.313127] SYN 000 : 0
[74203.372291] ABS 057 : -1
[74203.372291] KEY 330 : 0
[74203.372291] SYN 000 : 0

四丶示例源码

#include <stdio.h>

#include <fcntl.h>

#include <unistd.h>

#include <linux/input.h>

 

int main(int argc, char *argv[]) {

 

    if (argc < 2)

    {

        perror("user error:  please add path(/dev/input/eventX)");

        return 1;

    }

    int fd = open(argv[1], O_RDONLY);

    if (fd < 0) {

        perror("dev is open failed");

        return 1;

    }

 

    struct input_event ev;

    printf("listen: %s \n", argv[1]);

   

    while (read(fd, &ev, sizeof(ev)) == sizeof(ev)) {

        const char* type = "UNKNOWN";

        switch (ev.type) {

            case EV_ABS: type = "ABS"; break;

            case EV_KEY: type = "KEY"; break;

            case EV_SYN: type = "SYN"; break;

        }

 

        printf("[%ld.%06ld] %s %03d : %d\n",

               ev.time.tv_sec, ev.time.tv_usec,

               type, ev.code, ev.value);

    }

 

    close(fd);

    return 0;

}

五丶总结

附件是直接编译好的工具,可以直接使用

相关文件下载
evtest.zip
2.61 KB
下载
Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐