Массовая передача libusb теряет пакеты - PullRequest
1 голос
/ 04 июля 2019

Мне нужно извлечь данные из контроллера, который генерирует поток данных через USB-порт.

Я пытаюсь получить такие данные с помощью синхронной массовой передачи libusb.Мы можем получить до 164 000 000 байт данных.

Данные отправляются в виде нескольких «порций / пакетов» данных.Например, скажем, контроллер выдает блок данных один за другим.

Что я делаю, это что-то вроде:

bool finished = false;
unsigned char *data = malloc(maxSize);

while(!finished) {
     int transferSize = 0;
     int result = libusb_bulk_transfer(handle,
                                       LIBUSB_ENDPOINT_IN  | 1,
                                       data + alreadyRead,
                                       32768,
                                       &transferSize, 1000);
     // if we finish to read
     if(alreadyRead > 0 && result == LIBUSB_ERROR_TIMEOUT)
         finished = true;
     alreadyRead += transferSize;
}

Когда процессор простаивает, все работает нормально.Тем не менее, когда используется процессор (много других потоков, которые работают), я теряю немного.Это похоже на то, когда между концом одного libusb_bulk_transfer и началом той же функции некоторые чанки уже отправлены и исчезли.

Есть ли способ «буферизовать» массовую передачу?Может ли асинхронная передача решить проблему?Спасибо!

...