Я занимаюсь реверс-инжинирингом ультразвукового датчика на стороне 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, и они начинают читать данные в соответствии со временем. Как это возможно?