После разговора с taraslp было решено полностью объяснить формат файла diseqc.conf, добавить описание команд Diseqc и вкратце самого протокола, для того что-бы пользователь мог разобраться и при необходимости самостоятельно изменить конфигурацию.
Часть информации я скопирую из предыдущих постов, часть добавлю, буду стараться объяснить подробно, но то что для меня кажется очевидным для других не всегда таким является, так что я буду надеяться на последующие правки taraslp.
Приступлю. Файл diseqc.conf служит для правильного выбора конвертора и его настроек. Что такое конвертор, зачем он нужен?
Сигнал со спутника (стандартный Ku диапазон) идет на частоте 10.7-12,75 ГГц. Предать сигнал такой частоты по кабелю не возможно (чем больше частота тем больше затухание в кабеле), для того, что-бы было возможно передать сигнал на ресивер/карту его преобразовывают в сигнал намного меньшей частоты (отнимают от полезного сигнала сигнал с заранее известной частотой) 950-2100 МГц и уже полученный сигнал передают по кабелю в ресивер. Сам диапазон частот, передаваемый со спутника ( 10.7-12,75 ГГц ) делится на два поддиапазона : 10,7 ГГц - 11,7 ГГц (11700 МГц) и 11,7 ГГц - 12,75 ГГц , при этом частота разделения в 11,7 ГГц (11700 МГц) - это не стандарт, она используется во многих линейных конверторах, но бывают и другие конверторы в других странах, обычно частота раздела пишется в документации на конвертор.
Так вот, как я и говорил, от исходной частоты отнимается некоторая фиксированная частота, разная для обеих поддиапазонов - для нижнего (10,7 ГГц - 11,7 ГГц) это 9750 МГц (указана в документации на конвертор, параметр LO1), т.е. на выходе из конвертора будет сигнал в диапазоне 950 МГц - 1950 МГц (10,7 ГГц - 9,75 ГГц и 11,7 ГГц - 9,75ГГц). А для верхнего поддиапазона отнимаемая частота равна 10600 МГц (опять таки, указана в документации на конвертор), и соответственно на выходе будет сигнал 1100 МГц -2100 МГц (можете пересчитать). При этом в конверторе имеется два независимых тракта для двух поляризаций (Гор/Верт или Лев/Прав). Итого универсальный конвертор может работать в четырех состояниях - нижний поддиапазон и горизонтальная поляризация, нижний поддиапазон и вертикальная поляризация, верхний поддиапазон и горизонтальная поляризация, верхний поддиапазон и вертикальная поляризация.
Ресивер/карта управляет режимом работы конвертора с помощью двух сигналов: наличие/отсутствие сигнала 22кГц от карты и напряжением питания двух уровней 14/18В.
Если от карты/ресивера идет сигнал 22кГц, конвертор использует верхний поддиапазон, если сигнала нет - нижний. Если напряжение питания 14В - включается тракт приема вертикальной поляризации, если питание 18В - горизонтальной.
Рассмотрим как в таком случае (конвертор подключен напрямую к карте) будет выглядеть diseqc.conf.
# Astra 1D 3A 23.5E LNB 6
S23.5E 11700 V 9750 v W15 t
S23.5E 12750 V 10600 v W15 T
S23.5E 11700 H 9750 V W15 t
S23.5E 12750 H 10600 V W15 T
Итак, 4 строчки описывают 4 режима работы конвертора (где-то здесь есть логика). Расскажу, что значит каждая часть строчки, а потом объясню на примере, как происходит выбор необходимой строчки и режима работы. Рассмотрим первую строку (остальные аналогично).
S23.5E - спутник, для которого применима эта строка конфигурации;
11700 - частота выбираемого транспондера, до которой эта строчка действительна (звучит запутанно, но на примере станет ясно);
V – поляризация, для которой действительна эта строчка.
Итак это были критерии, по которым отбирается необходимая строка, далее идут команды и информация нужная для переключения на транспондер к которому подходит эта строка:
9750 – указана частота, которая отнималась конвертером при приеме, т.е. для приема транспондеров соответствующих этому режиму работы конвертора в нем отнимается частота в 9750 МГЦ;
Далее идут команды отдаваемые конвертору и всему что подключено к кабелю (Diseqc-коммутаторы, позиционеры и т.п.)
v - переключить напряжение питания на 13 В (V - соответственно 18В)
W15 - подождать 15 мс (вместо 15 можно писать любое число)
t - выключить сигнал 22 кГц (T - соответственно включить);
Что примечательно, команды можно писать в произвольном порядке и в любом количестве, т.е. если кому-то захочется написать команду, например, W150 t T V W500 t v v, то это не будет ошибкой, и карта послушно подождет 150мс (W150), отключит тон 22кГц (t), если он был включен, потом включит его снова (T), подаст напряжение 18В (V), подождет 500мс (W500), снова отключит тон (t), и снова переключит напряжение на уровень 13В(v). Для конвертора важно лишь то, что в результате останется, напимер в этом случае на конвертор подастся 13В (потому-что последний параметр, ответственный за напряжение был v – 13В) без тона (последний параметр, ответственный за тон был t).
Итак с форматом команды разобрались, теперь как происходит выбор строчки. Все просто при настройке на определенный транспондер выбирается строка с необходимым спутником, поляризацией и первая у которой второй параметр больше частоты транспондера, на который мы настраиваемся. Т.е. для всех транспондеров, частота которых ниже 11700 МГц будет выбрана строчка со вторым параметром равным 11700, а для всех транспондеров частота которых выше 11700 будет выбрана другая строчка со вторым параметром, большим чем частота транспондера и с совпадающей поляризацией и спутником, в примере выше это 12750 (очень часто, в других конфигурациях, можно увидеть число 99999, но это бессмысленно, достаточно писать 12750, т.к. выше этой частоты в диапазоне Ku транспондеров нет.).
Пример: необходимо настроится на транспондер 11850 МГц, горизонтальной поляризации (Н), который находится на спутнике S23.5E.
diseqc.conf:
Код
# Astra 1D 3A 23.5E LNB 6
S23.5E 11700 V 9750 v W15 t
S23.5E 12750 V 10600 v W15 T
S23.5E 11700 H 9750 V W15 t
S23.5E 12750 H 10600 V W15 T
Спутник S23.5E, значит выбор будет среди строк начинающихся с S23.5E.
Поляризация горизонтальная, значит будет выбрана строка 3 или 4.
Частота транспондера равна 11850, значит из этих двух строк будет выбрана вторая, т.к. это первая по порядку строка у которой частота переключения (второй параметр - 99999) больше 11850.
Для приема сигнала от спутника в конверторе была отнята частота 10600 Мгц (четвертый параметр).
Дальше, в кабеле отключается сигнал 22 кГц ( параметр t) для передачи команд DiSEqC (они передаются на этой-же частоте).
Уровень напряжения выставляется 18В (параметр V) - в конверторе выбирается горизонтальная поляризация.
И после передачи команд DiSEqC, снова включается сигнал 22 кГц (параметр Т) - в конверторе выбирается верхний поддиапазон.
Теперь по круговым конверторам, они как правило бывают однодиапазонные, соответственно у них всегда отнимается фиксированная частота (опять таки указанная в параметрах).
Т.к. диапазон только один, а поляризации две, то и строки в файле diseqc.conf будет всего две - на один диапазон в двух поляризациях:
S36E 12750 V 10750 v
S36E 12750 H 10750 V
Напоминаю, что сейчас я рассматриваю случай, когда конвертор подключен напрямую к карте.
Здесь мы видим, что каждая строка используется для всего диапазона (второй параметр 12750), частота отнимаемая конвертором в данном случае равна 10750 (будьте внимательны в магазинах также продаются конверторы с частотой гетеродина 10600, уточняйте значение на корпусе конвертора или в документации ).
Теперь перейдем к случаю, когда у Вас два спутника, подключенных к двум разным картам. В принципе в файле diseqc.conf достаточно прописть параметры для обеих путников следующим образом:
# Eutelsat W4
S36E 12750 V 10750 v
S36E 12750 H 10750 V
# Hotbird 6/8/9
S13E 11700 V 9750 v W15 t
S13E 12750 V 10600 v W15 T
S13E 11700 H 9750 V W15 t
S13E 12750 H 10600 V W15 T
И все будет работать, но переключение каналов может быть довольно длительным, т.к. VDR будет сначала пробовать словить канал через первую карту, а если ему это не удастся, то только потом через вторую. Как привязать спутники к картам? Для этого достаточно перед строками, относящимися к одной карте написать следующее:
1:
# Eutelsat W4
S36E 12750 V 10750 v
S36E 12750 H 10750 V
2:
# Hotbird 6/8/9
S13E 11700 V 9750 v W15 t
S13E 12750 V 10600 v W15 T
S13E 11700 H 9750 V W15 t
S13E 12750 H 10600 V W15 T
Теперь все строки с 1: по 2: действительны только для первой карты, а с 2: до следующего указания номера карты (или если его нет, то до конца файла) действительны только для второй. Если перед строками конфигурации не указано к какому адаптеру они относятся VDR считает, что они относятся ко всем картам, т.е. изначально конфиг VDR`ом читается так:
1 2:
# Eutelsat W4
S36E 12750 V 10750 v
S36E 12750 H 10750 V
# Hotbird 6/8/9
S13E 11700 V 9750 v W15 t
S13E 12750 V 10600 v W15 T
S13E 11700 H 9750 V W15 t
S13E 12750 H 10600 V W15 T
Т.е. если нужно использовать строки для нескольких карт, то они перечисляются через пробел.
Учтите если у Вас несколько карт настроены на один и тот-же спутник, то приведенное выше решение не поможет Вам привязать определенные каналы к определенным картам. Все, приведенное выше, лишь дает возможность привязать целые спутники к карте.
На самом деле редко кто, чтобы добавить еще один конвертер покупают еще одну карту, обычно просто ставится Diseqc-коммутатор на нужное количество портов.
Что такое Diseqc-коммутатор, я думаю, многие знают – это устройство с несколькими входами и одним выходом, которое управляется ресивером/картой и предназначено для подключения входа ресивера/карты к определенному конвертору.
Diseqc-коммутаторы управляются с к помощью команд, которые передаются ресивером/картой на частоте 22кГц.
Как же работает коммутатор? Для тех кому интересно могут поискать схемы в интернете, они очень простые и в них легко разобраться. Я же расскажу вкратце про программную часть. Стандарт Diseqc придуман для управления разнообразным оборудованием, неправильно говорить, что Diseqc - это только коммутаторы, с помощью Diseqc-протокола можно управлять позиционерами, мультисвитчами и даже конверторами(на самом деле в продаже я не видел ни одного Diseqc-совместимого конвертора).
В данном случае я опишу только коммутаторы.
В коммутаторе присутствует специальная микросхема, которая принимает Diseqc-команды от ресивера/карты и исполняет их. В микросхеме присутствуют два 4-х битных регистра (регистр – это ячейка памяти), N0 и N1. N0 используется для управления входами в Diseqc-коммутаторах протокола 1.0/2.0 (их еще называют commited Diseqc switch), а N1 используется для управления входами в Diseqc-коммутаторах протокола 1.1/2.1 (их называют uncommited Diseqc switch).
Так вот. В Diseqc-коммутаторах протокола 1.0/2.0 поддерживается управление 4-мя входами (или двумя). За то какой порт выбрать отвечают два старших бита регистра N0. Два младших бита предполагается стандартом использовать в конверторах для переключения поляризации и тона, и служат для замены стандартных видов управления конверторами (уровнем напряжения и тоном), но со времени выпуска стандарта (1998) производители так и не поддержали эту идею, вопреки расхожему мнению два младших бита в коммутаторах НЕ ИСПОЛЬЗУЮТСЯ, совсем, никак, вообще, поэтому бессмысленно их даже трогать.
Вернемся к двум старшим битам, для упрощения я не буду рассказывать про их названия (Option/Postion), а просто покажу какая комбинация какой порт выбирает, Вы легко можете проверить это взяв калькулятор, и переводя числа из двоичной системы в десятичную. Итак
значение двух старших бит – номер порта
00 - 0
01 - 1
10 - 2
11 - 3
Номера портов обычно нумеруются на еоммутаторе начиная с 1, а не с нуля, так что вместо 0,1,2,3 нужно читать 1,2,3,4.
Вот и весь секрет.
Хорошо с пинципом работы самого коммутатора разобрались. Возникает логичный вопрос: А как же этим регистром управлять? Вот для этого как раз и существуют DiSEqC комманды в файле diseqc.conf, они пишутся в виде групп шестнадцатеричных чисел в квадратных скобках наряду с уже знакомыми нам командами переключения напряжения (v/V), включения/выключения тона (T/t), и задержки (Wxx). Напомню, что команды передаются на частоте 22кГц и перед их передачей следует выключить тон командой t.
Сама команда DiSEqC 1.0/2.0 выглядит следующим обрзом:
[ E0 10 38 xx ]
Первое число – байт синхронизации и указание типа команды;
Второе число – байт адреса (кому предназначается эта команда);
Третье число – сама команда;
Четвертое число – есть не во всех командах – дополнительные данные для команды.
Описывать всевозможные команды, адреса и типы команд я не буду, кто заинтересуется тот очень легко найдет все. Опишу только команды использующиеся diseqc-коммутаторами.
E0 – передача команды от ресивера/карты (E1 – повтор передачи);
10 – передача команды к коммутатору /конвертору(все обязаны коммутаторы имеют адрес 10h);
38 – запись в порт N0 (39 – запись в порт N1);
хх – данные к команде записи.
Теперь о данных для команд записи в регистры N0/N1. Данные – восьмибитное шестнадцатиричное число, первая тетрада которого обозначает стираемые биты, а вторая записываемые. Сложно?
А теперь по простому. Команда состоит из двух шестнадцатеричных цифр (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F), например С4 – C и 4 , так вот первая цифра(С) говорит какие биты в ренистре стереть, а вторая(4) - какие записать.
Если взять стандартный калькулятор и перевести шестнадцатеричные цифры в двоичные, то получим наглядное представление:
С – 1100
4 – 0100
Для первой цифры в команде единицы определяют какие биты будут стерты, для второй –еденицы определяют какие будут записаны.
Пример
[E0 10 38 C8 ]
Изменить регистр N0 коммутатора(E0 10 38) в соответствии с данными С8.
С – 1100 (стереть два старших бита, два младших трогаться не будут) – используется всегда.
8 – 1000 (записать в старший бит 1, остальные не трогать)
Т.е. что бы ни было в двух старших битах регистра N0(а как мы помним именно они отвечают за переключения входов) они оба стираются и в них записывается двоичное число 10 (что соответствует порту 2 если считать первый порт нулевым и порту 3 если считать его первым). При этом два младших бита остаются без изменений (они в коммутаторе ни на что не влияют).
Приведу полный перечень команд Diseqc 1.0/2.0. для работы с коммутатором:
[E0 10 38 C0 ] – выбрать порт LNB0
[E0 10 38 C4 ] – выбрать порт LNB1
[E0 10 38 C8 ] – выбрать порт LNB2
[E0 10 38 CС ] – выбрать порт LNB3
Теперь о коммутаторах DiSEqC 1.1/2.1. В чисто 1,1/2,1 коммутаторах за выбор портов отвечает ТОЛЬКО регистр N1 (если коммутатор многорежимный то там возможны варианты, о которых производитель обычно пишет на корпусе).
При этом выбором портов управляют уже все биты, а не только два старших, как это было в протоколе 1,0/2,0.
Итак,
Значение регистра N1 – выбираемый номер порта
0000 - 0
0001 - 1
0010 - 2
0011 - 3
0100 - 4
0101 - 5
0110 - 6
0111 - 7
1000 - 8
1001 - 9
1010 - 10
xxxx - 11
1100 - 12
1101 - 13
1110 - 14
1111 - 15
Опять таки нумерация с 0. При этом, если в Вашем коммутаторе меньше портов то рабочими будут только комбинации от 0 до 4,6,8,10 (в зависимости сколько портов у Вас).
Запись в регистр N1 такая-же, только с некоторыми отличиями: команда записи не 38 а 39 и значение имеют все биты, а не только два старших. Пример:
[E0 10 39 F7 ]
Изменить регистр N1 коммутатора(E0 10 38) в соответствии с данными F7.
F – 1111 (стереть все биты регистра) –используется всегда.
7 – 0111 (записать три младших бита) – выбирается порт 7 (или 8 если считать с единицы).
Полный перечень команд DiSEqC 1.1 для работы с коммутатором:
[E0 10 39 F0 ] – выбрать порт LNB1
[E0 10 39 F1 ] – выбрать порт LNB2
[E0 10 39 F2 ] – выбрать порт LNB3
[E0 10 39 F3 ] – выбрать порт LNB4
[E0 10 39 F4 ] – выбрать порт LNB5
[E0 10 39 F5 ] – выбрать порт LNB6
[E0 10 39 F6 ] – выбрать порт LNB7
[E0 10 39 F7 ] – выбрать порт LNB8
[E0 10 39 F8 ] – выбрать порт LNB9
[E0 10 39 F9 ] – выбрать порт LNB10
[E0 10 39 FA ] – выбрать порт LNB11
[E0 10 39 FB ] – выбрать порт LNB12
[E0 10 39 FC ] – выбрать порт LNB13
[E0 10 39 FD ] – выбрать порт LNB14
[E0 10 39 FE ] – выбрать порт LNB15
[E0 10 39 FF ] – выбрать порт LNB16
Нормальные DiSEqC-коммутаторы не реагируют на команды не своего протокола (коммутатор 1.0 не должен реагировать на команды 1.1 и наоборот), что позволяет использовать каскадирование коммутаторов: к выходам коммутатора 1.1 подключаются коммутаторы 1.0 и передаются две команды - сночала 1.1, которая выбирает порт коммутатора 1.1, а потом передается команда 1.0, которая выбирает порт комутатора 1.0, подключенного к выбранному порту коммутатора 1.1.
Например
[E0 10 39 F7] W15 [E0 10 38 C4] - выберет порт 7(8) коммутатора 1.1, а потом порт 1(2), коммутатора 1.0, подключенного к порту 7(8) коммутатора 1.1.
Итого имеем максимальное количество конверторов которое может быть подключено через протокол DiSEqC = 4 (максимальное количество портов коммутаторов 1.0) * 16 (максимальное количество портов коммутаторов 1.1) = 64 конвертора. :o
Вот и все премудрости DiSEqC.
Для уверенности команду желательно повторять, и если делать это по правилам, то вторую команду нужно начинать не с Е0 а с Е1(повтор команды).
Итак привожу конфиг taraslp со всеми правками:
# LNB 1 Eutelsat W4
S36E 12750 V 10750 t v W15 [E0 10 38 C0] [E1 10 38 C0] W15 T
S36E 12750 H 10750 t V W15 [E0 10 38 C0] [E1 10 38 C0] W15 T
# EuroBird 9.0 LNB 2
S9E 11700 V 9750 t v W15 [E0 10 38 C4] W15 [E1 10 38 C4] W15 t
S9E 12750 V 10600 t v W15 [E0 10 38 C4] W15 [E1 10 38 C4] W15 T
S9E 11700 H 9750 t V W15 [E0 10 38 C4] W15 [E1 10 38 C4] W15 t
S9E 12750 H 10600 t V W15 [E0 10 38 C4] W15 [E1 10 38 C4] W15 T
# Hotbird 6/8/9 LNB 3
S13E 11700 V 9750 t v W15 [E0 10 38 C8] W15 [E1 10 38 C8] W15 t
S13E 12750 V 10600 t v W15 [E0 10 38 C8] W15 [E1 10 38 C8] W15 T
S13E 11700 H 9750 t V W15 [E0 10 38 C8] W15 [E1 10 38 C8] W15 t
S13E 12750 H 10600 t V W15 [E0 10 38 C8] W15 [E1 10 38 C8] W15 T
# S19.2E Astra 1H/1KR/1L/1M/2C LNB 4
S19.2E 11700 V 9750 t v W15 [E0 10 38 CC] W15 [E1 10 38 CC] W15 t
S19.2E 12750 V 10600 t v W15 [E0 10 38 CC] W15 [E1 10 38 CC] W15 T
S19.2E 11700 H 9750 t V W15 [E0 10 38 CC] W15 [E1 10 38 CC] W15 t
S19.2E 12750 H 10600 t V W15 [E0 10 38 CC] W15 [E1 10 38 CC] W15 T
Как видно, здесь используется 4 конвертора через переключатель DiSEqC 1.0/2.0 с повтором команды.