按照关于使用鼠标输入进行机器人测距的教程(http://web.me.com/haroldsoh/tutorials/technical-skills/using-optical-mice-for-othe-2/),我创建了一个udev规则来将鼠标标识为自定义输入设备,并将其称为/ dev/odoml &/dev/odomr。fread from mouseevent返回3字节,而不是16,sizeof(input_event)
/etc/udev/rules.d/90-odom.rules:
SUBSYSTEMS == “输入” ATTRS {的PHY} ==“USB-0000:00:1d.2-1/input0“,NAME =”odoml“
usb端口识别鼠标。现在我尝试读取c中的鼠标输入:
int f = open(“dev/odoml”,O_RDONLY);
input_event ev;
int read_byes =(f,& ev,sizeof(input_event));
我的问题是,大部分时间我变得不完整3,而不是预期的16字节的input_event。 拔下鼠标似乎改变了事情:每10次鼠标按预期工作。一旦鼠标插入并且read()正确读取16个字节,鼠标在程序执行之间仍然工作。如果鼠标不起作用,它将不会开始工作,直到我重新插入它,并有运气 - 约10个。我无法看到它失败的任何规律。
该文件每次都能正确打开。当鼠标停止工作时,cat/dev/odoml显示减去数据。使用O_DIRECT打开设备失败。 O_ASYNC,O_NDELAY没有帮助 - 它是-1或者3.我检查了4个不同的老鼠,其中3个以这种错误的方式行事。
请帮助或指出正确的方向。