在android中,如何使用c函数查找触摸屏使用的/dev/input/event*
我正在尝试读取触摸屏事件,在我的设备中/dev/input/event4用于触摸屏,而在其他一些手机中,event7用于触摸屏 我正在寻找一个c函数,可以帮助我在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/*文件
- 使用“fd=open”(/dev/input/xxxxx),ordonly)打开它们中的每一个
- 调用“ioctl(fd,EVIOCGBIT(EV_REL,sizeof(maskbit)),maskbit)”(将此更改与其他“输入事件代码”一起称为“EV_REL”
- 通过搜索一些只有触摸屏才具有的特定值来分析“maskbit”
- 对于电动汽车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)