Отсутствует чтение данных Hidraw

1285
user55848

При чтении данных с устройства 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?

1
Вопросы, специфичные для программирования и разработки программного обеспечения, не по теме, см. [On-Topic] (https://superuser.com/help/on-topic). Попробуйте [SO], но сначала прочитайте [Как мне задать хороший вопрос?] (Https://stackoverflow.com/help/how-to-ask). DavidPostill 7 лет назад 0

0 ответов на вопрос