Linux mouseevent中的fread返回3个字节,而不是16,sizeof(input_事件)
在关于使用鼠标输入进行机器人里程测量的教程()之后,我创建了一个udev规则,将鼠标标识为自定义输入设备,并将其命名为/dev/odoml&/dev/odomr /etc/udev/rules.d/90-odom.rules: 子系统==“input”ATTRS{phys}==“usb-0000:00:1d.2-1/input0”,NAME=“odoml” usb端口识别鼠标。现在我尝试读取c中的鼠标输入: int f=打开(“开发/odoml”,仅限Ordu)Linux mouseevent中的fread返回3个字节,而不是16,sizeof(input_事件),linux,mouse,mouseevent,Linux,Mouse,Mouseevent,在关于使用鼠标输入进行机器人里程测量的教程()之后,我创建了一个udev规则,将鼠标标识为自定义输入设备,并将其命名为/dev/odoml&/dev/odomr /etc/udev/rules.d/90-odom.rules: 子系统==“input”ATTRS{phys}==“usb-0000:00:1d.2-1/input0”,NAME=“odoml” usb端口识别鼠标。现在我尝试读取c中的鼠标输入: int f=打开(“开发/odoml”,仅限Ordu) 输入事件ev int read_
输入事件ev
int read_byes=(f,&ev,sizeof(输入事件)) 我的问题是,大多数时候,我得到的是不完整的3,而不是预期的16字节的input_事件。 拔下鼠标似乎改变了一切:每10次鼠标都会按预期工作。一旦插入鼠标并read()正确读取16个字节,鼠标将在程序执行之间保持工作状态。如果鼠标不工作,它将不会开始工作,直到我重新插入鼠标并运气好——10个中有1个。我看不出它失败的规律性 每次文件都会正确打开。当鼠标停止工作时,cat/dev/odoml显示的数据较少。使用O_DIRECT打开设备失败。O_ASYNC、O_NDELAY没有帮助——它要么是-1,要么是3。我在4只不同的老鼠身上做了检查,其中3只表现出这种错误的行为
请帮助或指向正确的方向 输入子系统提供多个接口。您正在阅读的是传统鼠标界面,它提供了一个
/dev/psaux
风格的鼠标设备。(通常创建为/dev/input/mouse*
设备)
您需要的是鼠标的事件接口,它通常创建为/dev/input/event*
。它提供了16字节的struct input\u事件
帧
您必须调整udev
规则以拾取“事件”设备而不是“鼠标”设备。尝试添加此条件:
KERNEL=="event[0-9]*"