Readfile api windows не читает все данные, отправленные с usb-устройства

Я пытаюсь прочитать данные, которые отправляются с USB-устройства, подключенного к ноутбуку. устройство отправляет данные, как указано ниже:

 52-30-30-45-46-30-34-31

 41-33-35-32-31-43-41-30

 32-0D

Я могу получить первую и вторую полезную нагрузку, но остановка потока в третий раз ничего не получила.

Я использую асинхронный процесс для чтения данных. Ниже я упомянул для справки некоторую привязку кода. Процесс - это непрерывный процесс чтения

ReadFinished = NativeMethods.CreateEvent(IntPtr.Zero, true, false, "killread");

// Create event used to signal a read has completed
IntPtr eventObject = NativeMethods.CreateEvent(IntPtr.Zero, false, false, "");

// Clear out any waiting input data 
NativeMethods.HidD_FlushQueue(handle);

// Allocate memory for the input buffer and overlapped structure. 
IntPtr nonManagedBuffer = Marshal.AllocHGlobal(InputReportLength);
IntPtr nonManagedOverlapped = Marshal.AllocHGlobal(Marshal.SizeOf(hidOverlapped));
Marshal.StructureToPtr(hidOverlapped, nonManagedOverlapped, false);
UInt32 numberOfBytesRead = 0;

Boolean success = NativeMethods.ReadFile(handle, nonManagedBuffer, (UInt32)InputReportLength, ref numberOfBytesRead, nonManagedOverlapped);
// Timeout set to infinite - will not return until signalled
Int32 result = NativeMethods.WaitForMultipleObjects(2, events, false, 0xFFFFFFFF);

//  If read completed successfully, get the data
NativeMethods.GetOverlappedResult(handle, nonManagedOverlapped, ref numberOfBytesRead, true);

прежде всего эти методы используются в процессе. Я постарался выложить все до мелочей. Пожалуйста, дайте мне знать, если требуются какие-либо другие подробности. Заранее спасибо.

Представляет ли приведенный выше образец 3 разных файла? Изменится ли поведение, если данные не на USB? Это хороший справочник по асинхронной обработке нескольких файлов: docs.microsoft.com/en-us/dotnet/standard/io/…

NoChance 31.10.2018 13:40

Выше образец взят из одного файла. Все действия выполняются в одном файле HIDAccessory.

Pratik 01.11.2018 07:04

В файле есть функция непрерывного чтения, когда мы запускаем инструмент, вызванный этой функцией, создаем события и выполняем операцию NativeMethods.ReadFile. И снова при любом вводе он получает данные из NativeMethods.GetOverlappedResult и выполняет операцию чтения файла для чтения следующих байтов данных. Но он прочитал только два раза и в третий раз не получил никаких данных. Я пытался пропустить данные несколько раз, но всегда возвращал false. Я не понимаю, почему в третий раз операция ReadFile не получила никаких данных.

Pratik 01.11.2018 07:06

Я не знаком с вашим сценарием, но асинхронное чтение одного и того же файла не является хорошей идеей в большинстве случаев, о которых я могу думать. Имеет смысл обрабатывать несколько файлов асинхронно, но не один файл.

NoChance 01.11.2018 12:21
0
4
206
0

Другие вопросы по теме