按照關於使用鼠標輸入進行機器人測距的教程(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個以這種錯誤的方式行事。
請幫助或指出正確的方向。