我需要从通过USB端口发出某种数据流的控制器中检索数据。
我正在尝试使用libusb同步批量传输检索此类数据。 我们最多可以得到1.64亿字节的数据。
数据以几个“块/批”数据发出。 例如,假设控制器一次发射一个数据块。
我要做的是接近:
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;
}
当CPU空闲时,一切正常。但是,使用cpu时(正在运行的其他许多线程),我会丢失一些块。就像在一个libusb_bulk_transfer
的结尾和同一函数的开头之间,已经发送了一些块并消失了。
有没有一种方法可以“缓冲”批量传输? 异步传输可以解决问题吗? 谢谢!