|
Теория
Допустим что со стоповым битом все в порядке, тогда все
будет как нарисунке ( А ). Появился ИК фон, через
86.8 мкс (при скорости 115200) принялся первый байт, сгенерировано
событие RX CHAR EVENT. Дождавшись окончания приема пакета,
подсчитываем количество байтов и количество единичных младших
битов в последнем байте, таким образом узнаем длительность
импульса (T2) с точностью до 9 мкс. Дождавшись очередного
RX CHAR EVENT и замерев между ними время узнаем T1. Отняв
T2 от T1 узнаем длительность паузы. Казалось бы имеется
достаточно информации для декодирования команды (известны
длительности импульсов и пауз между ними), но...
Практика
Если
в момент считывания стопового бита в ИК фоне попадется импульс,
байт не примется. См. рисунок (B). Таким образом
в случае неправильного приема одного или нескольких байтов
RX CHAR EVENT может возникнуть в точке (1), (2) или (3).
Мало того RX CHAR EVENT может возникнуть несколько раз в
течение одного информационного импульса с дистанционки,
например в точках (1) и (3). Наиболее вероятен безошибочный
прием байта, перекрывающего окончание информационного импульса
с дистанционки (на стоповый бит не попадет никакого импульса).
Все это относится к случаю, когда для анализа команды с
дистанционки используется плагин DCD (принцип работы
аналогичен WinLIRC). Плагин UIR вообще не имеет
понятия о кодировках различных пультов, от тупо анализирует
последовательность принятых байтов. Вероятность того что
для одной и той же команды пульта IrDA будет давать одинаковые
байты очень маленькая. Результат, например, может меняться
от расстояния между IrDA приемником и пультом. И наоборот
для разных команд пульта могут быть получены одинаковые
байты.
Вывод: при определенной частоте
ИК фона (т.е. при определенной модели дистанционки) с большой
натяжкой IrDA можно использовать для приема команд ДУ с
pulse-distance модуляцией и при относительно коротких импульсах,
ориентируясь при этом по времени между RX CHAR EVENT (плагин
DCD). IrDA невозможно использовать для приема ИК команд
от дистанционок с другим типом модуляции, а так же если
в командах присутствует длинный первый информационный импульс,
что встречается довольно часто.
|