在android中,如何使用c函数查找触摸屏使用的/dev/input/event*

在android中,如何使用c函数查找触摸屏使用的/dev/input/event*,android,c,linux,touch-event,Android,C,Linux,Touch Event,我正在尝试读取触摸屏事件,在我的设备中/dev/input/event4用于触摸屏,而在其他一些手机中,event7用于触摸屏 我正在寻找一个c函数,可以帮助我 找到触摸屏事件。完整代码的答案可能很难,因为这是一项漫长/繁重的工作。 我将为您指出正确的方向: 阅读“输入事件代码”: 然后必须列出所有/dev/input/*文件 使用“fd=open”(/dev/input/xxxxx),ordonly)打开它们中的每一个 调用“ioctl(fd,EVIOCGBIT(EV_REL,sizeof(

我正在尝试读取触摸屏事件,在我的设备中/dev/input/event4用于触摸屏,而在其他一些手机中,event7用于触摸屏

我正在寻找一个c函数,可以帮助我
找到触摸屏事件。

完整代码的答案可能很难,因为这是一项漫长/繁重的工作。 我将为您指出正确的方向:

  • 阅读“输入事件代码”:
  • 然后必须列出所有/dev/input/*文件
  • 使用“fd=open”(/dev/input/xxxxx),ordonly)打开它们中的每一个
  • 调用“ioctl(fd,EVIOCGBIT(EV_REL,sizeof(maskbit)),maskbit)”(将此更改与其他“输入事件代码”一起称为“EV_REL”
  • 通过搜索一些只有触摸屏才具有的特定值来分析“maskbit”
这里可以找到一个可能的例子:作者正在寻找支持“KEY_B”事件代码的输入

触摸屏应具有:

  • 对于电动汽车ABS
    • ABS_X
    • 绝对值
    • ABS\u MT\u槽
    • ABS\u MT\u位置
    • ABS机器位置Y
    • ABS\u MT\u跟踪\u ID

如果输入具有所有这些位,则它是一个触摸屏(参考:)

每个输入事件设备在
/sys/class/Input/
伪文件层次结构中都有相应的条目。(有关更多详细信息,请参阅Linux内核文档中的。)例如,与
event7
对应的设备名称位于
/sys/class/input/event7/device/name

当您打开事件字符设备(
/dev/input/event7
)时,您可以使用EVIOCGBIT(类型,位)ioctl检查设备可以生成哪种类型的事件。触摸板将生成EV_ABS事件ABS_X和ABS_Y,以及EV_按键事件BTN_TOUCH

因此,如果您glob/dev/input/event*,依次打开每个设备,并检查它们是否报告了上述三个事件,您很可能会找到您要查找的设备。例如:

#定义POSIX_C_SOURCE200809L
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#ifndef ULONG_钻头
#定义ULONG_位(CHAR_位*sizeof(无符号长))
#恩迪夫
静态内联int有\u位(常量无符号长数据[],常量大小\u位)
{
返回!!(数据[bit/ULONG\u bit]&(1uL)