Мне нужно извлечь данные из контроллера, который генерирует поток данных через 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
и началом той же функции некоторые чанки уже отправлены и исчезли.
Есть ли способ «буферизовать» массовую передачу?Может ли асинхронная передача решить проблему?Спасибо!