我正在对 Linux 端的超声波探头进行逆向工程。我想从超声波探头捕获原始数据。我正在使用 C 编程并使用 libusb API。
设备中有两个 BULK IN 端点(2 和 6)。该设备正在发送 2048 字节的数据,但它以 512 字节的四个块发送数据。
这张图是Windows端的数据流,我想把它复制到Linux端。您会看到端点 02 的四个数据块,然后是端点 06 的四个数据块。
但是有一个时间问题。端点02的第一个数据块和端点06的第一个数据块在时间上相互接近。但是在数据流中它们不是按顺序排列的。
我看到电脑正在读取端点02和06的第一个数据块。之后,计算机正在读取端点02和端点06的其他三个数据块。但是在USB Analyzer中,数据流是根据端点编号。顺序因时间而异。
在 Linux 端,我编写如下代码:
int index = 0;
imageBuffer2 = (unsigned char *) malloc(2048);
imageBuffer6 = (unsigned char *) malloc(2048);
while (1) {
libusb_bulk_transfer(devh, BULK_EP_2, imageBuffer2, 2048, &actual2, 0);
libusb_bulk_transfer(devh, BULK_EP_6, imageBuffer6, 2048, &actual6, 0);
//Delay
for(index = 0; index <= 10000000; index ++)
{
}
}
所以结果如下图所示
换句话说,在我的代码中,所有读取数据都是根据时间和端点编号按顺序读取的。我的结果与 Windows 端的数据流不同。
简而言之,我有两个 BULK IN 端点,它们开始根据时间关闭读取数据。这怎么可能?