1. Синтаксис конфигурационного файла. 1.1. Конфигурационный файл представляет собой набор секций. Начало секции определяется строкой вида [name] Имя секции может содержать любые символы, кроме ] и перевода строки. Все, что содержится в файле до начала первой секции, считается комментарием и игнорируется. Комментарием также считается любая строка, начинающаяся с символа решетки #. Концом секции является пустая строка. Все, что находится между концом секции и началом следующей, также считается комментарием и игнорируется. 1.2. Каждая строка в секции должна иметь вид parameter=value Пробелы вокруг знака равенства считаются частью имени параметра и значения, соответственно. Имя параметра и значение могут содержать любые символы, кроме перевода строки. Перенос строк не допускается. Игнорируются строки, не содержащие символа равенства =. Максимальная длина любой строки файла равна 65536 символов, включая перевод строки. 2. Используемые секции и параметры. 2.1. В файле обязательно должна присутствовать секция [comms]. В ней должен быть обязательный параметр device, задающий полное имя файла устройства COM-порта. Также должен быть обязательный параметр speed, задающий скорость COM-порта по умолчанию, это значение используется для описаний пультов, не переопределяющих скорость другим значением. Параметр irc должен присутствовать и задавать имя секции файла, описывающей используемый пульт, только если это имя не задано другими способами (см. описание ключа -c в файле command_line.txt). Пример: [comms] device=/dev/cuaa0 speed=2400 irc=PBAFA0189A Программа открывает порт в неблокирующем режиме (поэтому можно использовать как имена /dev/cuXXX, так и /dev/ttyXXX; после открытия файл переводится обратно в блокирующий режим чтения) и отключает программный и аппаратный контроль потока, как и модемные управляющие сигналы (сбрасывает флаги IXON, IXOFF, IXANY, CCTS_OFLOW, CRTS_IFLOW и CLOCAL структуры termios). Часть преобразований входного потока также отключаются (сбрасывает флаги INLCR, IGNCR, ICRNL, IMAXBEL, IGNBRK, BRKINT, ICANON, ISIG и IEXTEN). Остальные параметры порта не изменяет, работая с предоставленными системными умолчаниями (это относится и к флагам IGNPAR, PARMRK, INPCK и ко всем остальным). 2.2. Остальные секции в файле описывают пульты. Количество секций не ограничено, как и размер файла. 2.2.1. В каждой секции должен быть обязательный параметр name, задающий название пульта. В текущей версии параметр не используется, но должен быть. 2.2.2. Обязательный параметр timeout задает временной интервал (в микросекундах), в течение которого ожидается приход из COM-порта всех байтов, сгенерированных приемником для нажатия одной кнопки пульта, начиная с момента прихода первого байта. Для каждого пульта определяется экспериментально. Характерные значения - от 20000 до 100000 и более. 2.2.3. Обязательный параметр maxber задает максимальную битовую ошибку, которая используется при отсеивании искаженных сигналов. Очередная порция данных от приемника будет отброшена (или определена как UNKNOWN при задании ключа -u), если для каждой из определенных кнопок полученная битовая строка отличается более чем на maxber битов. 2.2.4. Необязательный параметр speed переопределяет для данного пульта значение speed из секции [comms]. 2.2.5. Множество параметров с одинаковым именем button задает множество кнопок пульта в формате: button=NAME hexstring Здесь NAME это имя кнопки, которое будет выдано в ответ на её нажатие, hexstring отделена от NAME одним или более пробелов или табуляций и представляет собой строку шестнадцатеричных символов (регистр букв не имеет значения). Если строка нечетной длины, она неявно дополняется нулем слева. Каждые два символа определяют один октет; первому октету соответствуют два крайних левых символа, и так далее. Таким образом задается битовая строка. Для каждой кнопки может быть более одного параметра button. Пример: maxber=43 button=PLAY(x2) 0000fcf8f000fcf800f80000870000ff000000000000f0f8f000fcf0f8f0f0 button=PLAY(x2) 0070f8f8f070f8f870f87800007000fe000000000000f0f8f078fcf0f8f0f0 button=PLAY(x2) 0070f8f8f070f8f070f80000870000ff000000000000f0f8f070fcf0f0f0f0 Параметр repeat нужно использовать в том случае, если при зажатой кнопке ваш пульт генерирует строку автоповтора, независимую от того, какая именно кнопка нажата: repeat=REPEAT 00f0 Кнопка REPEAT тут представлена битовой строкой 0000000011110000. Правила синтаксиса для repeat те же, что и для button.