Если для вашего пульта уже есть конфигурация, использовать ircdec очень просто - добавить описание пульта в конфигурационный файл и запустить ircdec. Если же описания вашего пульта для ircdec еще нет, вам придется создать его самому. Процедура длительная, скучная и утомительная. Утешайтесь тем, что пройти ее надо только один раз для каждого пульта. Предварительно нужно прочитать и усвоить документ how_it_works.txt, затем config.txt Для создания описания пульта служит режим ircdec -d. Создайте новую секцию в конфигурационном файле, её имя вставьте в секцию [comms] как значение параметра irc (см. также пример файла конфигурации). В новой секции пульта впишите его название параметром name. Выберите какую-нибудь скорость порта (рекомендуется начать с 1200 и затем повышать в случае неудачи; впрочем это необязательно) и пропишите его в параметре speed в секции пульта. Параметр timeout для начала поставьте 90000, maxber в 10. Этого достаточно, чтобы начать описывать кнопки. Запустите ircdec -d. При нажатии кнопки ircdec выдаст строчку следующего вида: time: 99985/79992=125.0% 0000fcf8f000fcf800f80000070000ff000000000000f0f8f0f8f0f0f0f0f0 metric 4294967295 UNKNOWN Тут 99985 - количество микросекунд, которое ircdec ожидал данных из порта после поступления первого байта, 79992 - сколько микросекунд прошло от поступления первого байта до поступления последнего, (назовем эту величину t), 125.0% - отношение этих величин в процентах. Значение t для одной и той же кнопки может меняться. timeout нужно выбирать так, чтобы он был не менее чем максимальное значение t по всем кнопкам пульта. Иначе ircdec будет слишком рано прекращать ожидание данных из порта и приступать к декодированию. С другой стороны, слишком большое значение timeout приведет к тому, что при зажатии кнопки на пульте (или при чутком автоповторе, выполняемым пультом) ircdec слишком долго будет ждать данных и примет две битовые строки за одну, просто очень длинную. В результате декодирование для этого нажатия будет не успешным. Далее в напечатанной ircdec строчке идет полученная битовая строка. После слова metric идет значение расстояния до ближайшей битовой строки такой же длины из эталонного набора. Так как вы только начали создавать этот набор и он пока пуст, метрика принимается равной бесконечности, что обозначено числом 4294967295 (максимальное без-знаковое 32-битное). В конце имя кнопки, для случая не успешного распознавания выдается UNKNOWN. Нажимая одну и ту же кнопку много раз (порядка 100-200), набираете статистику по ней. Признаком подходящего выбора скорости порта является постоянная длина получаемых битовых строк (хотя и это правило не абсолютно жесткое). Нажав одну и ту же кнопку много раз, можно послать ircdec сигнал SIGINFO (нажатием Ctrl-T на клавиатуре), в ответ на что ircdec выдаст одну или более строк такого вида: time: 79994 0000fcf8f000fcf800f80000870000ff000000000000f0f8f0f8f8f0f8f0f0 В режиме настройки ircdec вычисляет "среднее значение" всех полученных битовых строк (по одному среднему для каждого значения длины строки по всем полученным из порта строкам), то есть такую битовую строку, максимум расстояния до которой от всех полученных из порта строк был бы минимальным. Нечто вроде геометрического центра всех строк. Он и выводится в крайнем правом столбце. Слева от него пишется максимальное время в микросекундах, в течение которого поступали данные от нажатия одной кнопки. В примере выше видно, что есть смысл уменьшить значение timeout с 90000 до 80000, если только к концу исследования пульта не появятся кнопки с бОльшим временем генерации данных. Один из методов построения конфигурации - выполнить описанную выше процедуру для одной из кнопок, получить среднее значение и прописать его в конфигурационный файл: button=EJECT 0000fcf8f000fcf800f80000870000ff000000000000f0f8f0f8f8f0f8f0f0 Далее остановить ircdec через Ctrl-C и запустить его заново, для сброса накопленных значений. Повторить процедуру для каждой кнопки пульта. Для некоторых пультов, геометрические центры кнопок получаются расположенными далеко друг от друга по сравнению с отклонениями от своего центра для любых нажатий отдельных кнопок. Для них декодирование не представляет проблемы, если просто аккуратно прописать все центры в качестве эталонных строк. Для других этот метод не работает, порождая массовые неправильные результаты декодирования. Это происходит, когда многие кнопки порождают строки, близкие не к одному центру, а к одному из нескольких центров для кнопки, каждый из которых далек от других, но относительно близок к одной из эталонных строк для другой кнопки. Тогда полученная из порта строка часто может оказаться ближе к геометрическому центру для другой кнопки, если описывать кнопки только геометрическими центрами. Для таких пультов "подсказки" ircdec, выдаваемые по Ctrl-T бесполезны и даже вредны, от их использования приходится отказываться и переходить к еще более трудоемкому методу. Запускать ircdec -d 2>&1 | tee stat, набирать статистику многократным нажатием одной кнопки, прерывать процесс и обрабатывать вывод следующим способом: tr -d '\b' < stat | awk '{print $3, $5, $6}' | sort | uniq -c | sort -rn >out В результате в файле out полученные битовые строки будут отсортированы по убыванию метрики, в первом столбце - количество раз, когда строка была прочитана из порта, в третьем - её расстояние до ближайшей эталонной строки и в четвертом столбце - результат декодирования (или UNKNOWN). Наиболее часто встречающуюся строку прописываем в файл конфигурации и повторяем эту процедуру до тех порт, пока в четвертом столбце не будет ошибок или неудач декодирования. Признаком подходящего выбора скорости тут является небольшое количество эталонных строк для каждой кнопки, до трех, в редких случаях четырех. Далее повторяем процедуру для каждой кнопки пульта. Автор проделал все это для четырех пультов разных моделей. Результаты можно увидеть в примере файла конфигурации: для двух пультов удалось подобрать такие наборы эталонных строк, что все кнопки декодируются успешно. Для двух других пришлось удовольствоваться подбором такой скорости чтения из порта, при которой минимально количество кнопок, для которых возвращаемые множества строк совпадают или пересекаются, делая невозможным различение таких кнопок.