Мне нужно поймать начало фрейма данных через последовательный интерфейс (FTDI) в приложении UWP (C ++ / CX).
Начало этого кадра определяется только сигналом прерывания.
Вызывая функции LoadAsync / ReadBuffer / ReadBytes из dataReader в «виде цикла»,
Как и в SerialSample, доступном в Git Windows IOT, я могу получить полный кадр, но не могу найти первый байт.
Например :
Что я хочу: [0] [1] [2] […] [n-2] [n-1] [n]
Что я получаю: [55] [56] […] [n-1] [n] [0] [1] […] [54]
или если я перезапущу программу: [22] [23] […] [n-1] [n] [0] [1] […] [21]
Начало зависит только от того, когда я начну общение.
Более того, номер «n» байта в кадре заранее неизвестен.
Я пытался использовать событие PinChanged, чтобы обнаружить сигнал обрыва, и они действительно обнаружены,
но только во время асинхронной операции «LoadAsync».
После возврата этой функции данные загружаются, и я не могу точно знать, между какими байтами произошел разрыв.
Я также пытался загружать данные побайтно, а затем, когда обнаруживается разрыв, я рассматриваю начало кадра.
К сожалению, событие также асинхронное и, похоже, имеет небольшую задержку: у меня есть смещение, и это, кажется, всегда одинаково во время моей первой «триггеры».
После загрузки нескольких кадров появляется случайное смещение (и я не знаю почему …).
Более того, если я хочу запустить после N кадров, смещение не будет таким, как раньше, поэтому я не могу просто «исправить индексы» полученных байтов.
Подвести итоги :
Есть ли способ точно узнать, между какими байтами происходит разрыв?
Благодарю.
Задача ещё не решена.
Других решений пока нет …