Здравствуйте!
Не знает ли кто, как формируются данные для /dev/hidraw? Есть джойстик с кнопками,
правильно читать его состояние получением событий от /dev/input/js0, но мне удобнее читать
/dev/hidraw0. При этом оказалось, что чем больше период опроса, тем больше задержка между
изменением состояния джойстика и получением информации об этом с /dev/hidraw0.
Например, если файл, связанный с /dev/hidraw0, открыт постоянно, опрос происходит с периодом
500ms и каждый раз исполняется одна команда read(), то задержка составляет 64 периода.
Т.е. я нажал кнопку, а из /dev/hidraw0 её изменившееся состояние считлось только через 64 периода.
Помогает многократный вызов read(), для периода 500ms это 48 операций чтения, чтобы считались последние данные, для периода 48ms это 4 вызова read(). Такая же задержка, в 64 периода по 500ms, если читать /dev/hidraw0 как потоковый файл.
Если каждый раз при опросе открывать этот файл и после чтения закрывать, то задержка
вроде меньше, но всё равно есть, в этом случае я её не измерял.
Почему так происходит, ведь с /dev/input/js0 событие по изменению состояния излучается
без задержки? И можно ли это как-то побороть? При чтении /dev/hidraw0 как потокового
файла я пробовал вызывaть для него fflush() перед чтением, но это не помогло. Правда,
подробно я это вариант не проверял.