Следуя инструкциям по использованию ввода мыши для одометрии робота (http://web.me.com/haroldsoh/tutorials/technical-skills/using-optical-mice-for-othe-2/)), я создал правило udev для идентификации мыши как пользовательского устройства ввода и назвал его / dev / odoml & /dev/odomr.
/ и т.д. / Udev / rules.d / 90-odom.rules:
SUBSYSTEMS == "input" ATTRS {phys} == "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 байт, мышь продолжает работать между выполнениями программы. Если мышь не работает, она не начнет работать, пока я не подключу ее снова и не повезу - 1 из ~ 10. Я не вижу никакой закономерности в том, как это терпит неудачу.
Файл открывается правильно каждый раз. cat / dev / odoml отображает меньше данных, когда мышь перестает работать. Открытие устройства с помощью O_DIRECT не удается. O_ASYNC, O_NDELAY не помогают - это либо -1, либо 3. Я проверил это на 4 разных мышах, 3 из них вели себя так ошибочно.
Пожалуйста, помогите или укажите в правильном направлении.