1

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

0