При чтении данных с устройства HID через hidraw иногда я пропускаю некоторые данные. Я вижу, что данные передаются нормально через USB с помощью аппаратного устройства слежения, но по некоторым причинам я не всегда получаю данные при чтении hidraw.
Проблема стала менее заметной, когда я убил процесс в системе, который потреблял много ресурсов ЦП, поэтому я думаю, что моя проблема как-то связана с нехваткой ЦП.
Чтение данных HID выполняется через поток, ожидающий выбора блокировки.
Например:
FD_ZERO ( &fdset_device );
FD_SET ( fd, &fdset_device );
// fd is file descriptor for /dev/hidraw0
fd_set read_set;
read_set = fdset_device;
for ( ;; ) {
if ( ( select_result = select ( fd + 1, &read_set, NULL, NULL, NULL ) ) >= 0 ) {
int report_len = read ( fd, report_buffer, sizeof ( report_buffer ) );
...
…
Таким образом, при правильных условиях пакеты A,B,C,D,E,F
отправляются, и я получаю hidraw пакеты A,B,C,D,E,F
, но когда произойдет ошибка, я получу, возможно, A,B,E,F
или A,B,C,F
Я не уверен, почему и при каких обстоятельствах я бы пропустил подобные данные. Кто-нибудь видел проблемы с потерей данных в hidraw?