mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-29 00:11:14 +02:00
add basic support for DVB-T
This needs more fine tuning wrt scan setup etc, but should work for now.
This commit is contained in:
@@ -5,4 +5,4 @@ SUBDIRS += lcd
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
configdir = $(CONFIGDIR)
|
configdir = $(CONFIGDIR)
|
||||||
config_DATA = cables.xml satellites.xml encoding.conf tobackup.conf providermap.xml
|
config_DATA = cables.xml satellites.xml encoding.conf tobackup.conf providermap.xml terrestrial.xml
|
||||||
|
@@ -1187,6 +1187,7 @@ scants.abort_body Scanvorgang wirklich abbrechen?
|
|||||||
scants.abort_header breche Scan ab...
|
scants.abort_header breche Scan ab...
|
||||||
scants.actcable Kabelnetz:
|
scants.actcable Kabelnetz:
|
||||||
scants.actsatellite Satellit:
|
scants.actsatellite Satellit:
|
||||||
|
scants.actterrestrial Terrestrisch:
|
||||||
scants.bouquet Bouquets
|
scants.bouquet Bouquets
|
||||||
scants.bouquet_create neu erstellen
|
scants.bouquet_create neu erstellen
|
||||||
scants.bouquet_erase löschen
|
scants.bouquet_erase löschen
|
||||||
@@ -1274,6 +1275,7 @@ stringinput.caps Groß-/Kleinbuchstaben
|
|||||||
stringinput.clear Alles löschen
|
stringinput.clear Alles löschen
|
||||||
subtitles.head Untertitel
|
subtitles.head Untertitel
|
||||||
subtitles.stop Untertitel aus
|
subtitles.stop Untertitel aus
|
||||||
|
terrestrialsetup.provider DVB-T Region
|
||||||
timer.eventrecord.msg Die Sendung wurde zur Aufnahme vorgemerkt.
|
timer.eventrecord.msg Die Sendung wurde zur Aufnahme vorgemerkt.
|
||||||
timer.eventrecord.title Aufnahme vormerken
|
timer.eventrecord.title Aufnahme vormerken
|
||||||
timer.eventtimed.msg Die Sendung wurde vorgemerkt.
|
timer.eventtimed.msg Die Sendung wurde vorgemerkt.
|
||||||
|
@@ -1188,6 +1188,7 @@ scants.abort_body Should the search really be aborted?
|
|||||||
scants.abort_header Abortion of channel scan
|
scants.abort_header Abortion of channel scan
|
||||||
scants.actcable Cable:
|
scants.actcable Cable:
|
||||||
scants.actsatellite Satellite:
|
scants.actsatellite Satellite:
|
||||||
|
scants.actterrestrial Terrestrial:
|
||||||
scants.bouquet Bouquet
|
scants.bouquet Bouquet
|
||||||
scants.bouquet_create create new
|
scants.bouquet_create create new
|
||||||
scants.bouquet_erase erase all
|
scants.bouquet_erase erase all
|
||||||
@@ -1275,6 +1276,7 @@ stringinput.caps caps / no caps
|
|||||||
stringinput.clear clear all
|
stringinput.clear clear all
|
||||||
subtitles.head Subtitles
|
subtitles.head Subtitles
|
||||||
subtitles.stop Stop subtitles
|
subtitles.stop Stop subtitles
|
||||||
|
terrestrialsetup.provider Terrestrial Provider
|
||||||
timer.eventrecord.msg ... TO be DONE, or not to be done
|
timer.eventrecord.msg ... TO be DONE, or not to be done
|
||||||
timer.eventrecord.title Schedule Record
|
timer.eventrecord.title Schedule Record
|
||||||
timer.eventtimed.msg The event is scheduled.\nThe box will power on and \nswitch to this channel at the given time.
|
timer.eventtimed.msg The event is scheduled.\nThe box will power on and \nswitch to this channel at the given time.
|
||||||
|
92
data/mk_terrestrial_xml.pl
Executable file
92
data/mk_terrestrial_xml.pl
Executable file
@@ -0,0 +1,92 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
#
|
||||||
|
# create a terrestrial.xml for neutrino from the data installed by the
|
||||||
|
# dvb utils
|
||||||
|
# the behaviour is similar to the "scan" program form the dvb utils.
|
||||||
|
#
|
||||||
|
# Released under the GPL V2 or later
|
||||||
|
# (C) 2009-2012 Stefan Seyfried
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
my $srcdir = "/usr/share/dvb/dvb-t";
|
||||||
|
|
||||||
|
# can be given as "de-*"
|
||||||
|
my $scanfile = shift;
|
||||||
|
$scanfile = "auto-Default" unless (defined $scanfile);
|
||||||
|
|
||||||
|
my @sourcefiles = glob($srcdir . "/" . $scanfile);
|
||||||
|
my ($sourcefile, $basename, $line, $k);
|
||||||
|
my ($freq, $bw, $cr_hp, $cr_lp, $mod, $tmode, $gint, $hier);
|
||||||
|
|
||||||
|
# from /usr/include/linux/dvb/frontend.h
|
||||||
|
# inversion is not used in the scan files
|
||||||
|
my %INV = ("INVERSION_OFF" => 0, "INVERSION_ON" => 1, "INVERSION_AUTO" => 2);
|
||||||
|
my %CODE_RATE = ("NONE" => 0, "1/2" => 1, "2/3" => 2, "3/4" => 3, "4/5" => 4,
|
||||||
|
"5/6" => 5, "6/7" => 6, "7/8" => 7, "8/9" => 8, "AUTO" => 9);
|
||||||
|
my %MODULATION = ("QPSK" => 0, "QAM16" => 1, "QAM32" => 2, "QAM64" => 3,
|
||||||
|
"QAM128" => 4, "QAM256" => 5, "AUTO" => 6);
|
||||||
|
my %T_MODE = ("2k" => 0, "8k" => 1, "AUTO" => 2);
|
||||||
|
my %BWIDTH = ("8MHz" => 0, "7MHz" => 1, "6MHz" => 2, "AUTO" => 3);
|
||||||
|
my %GINTERVAL = ("1/32" => 0, "1/16" => 1, "1/8" => 2, "1/4" => 3, "AUTO" => 4);
|
||||||
|
my %HIERARCHY = ("NONE" => 0, "1" => 1, "2" => 2, "4" => 3, "AUTO" => 4);
|
||||||
|
|
||||||
|
|
||||||
|
# print the header
|
||||||
|
print("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
|
||||||
|
print("<!-- useable flags are
|
||||||
|
1 - Network Scan
|
||||||
|
2 - use BAT
|
||||||
|
4 - use ONIT
|
||||||
|
8 - skip NITs of known networks
|
||||||
|
and combinations of this -->\n\n");
|
||||||
|
print("<!-- this file is autogenerated by mk_terrestrial_xml.pl
|
||||||
|
WARNING! It is probably unsuitable for enigma! -->\n");
|
||||||
|
#
|
||||||
|
# explain the parameters
|
||||||
|
print("<!-- Parameters are (unfortunately, the neutrino parser does not allow default settings,
|
||||||
|
the default is always \"0\"):\n");
|
||||||
|
print("\t* bandwidth:\n\t\t");
|
||||||
|
foreach $k (sort {$BWIDTH{$a} <=> $BWIDTH{$b}} keys %BWIDTH) { printf("\"%d\"-%s ", $BWIDTH{$k}, $k); }
|
||||||
|
print("\n\t* constellation:\n\t\t");
|
||||||
|
foreach $k (sort {$MODULATION{$a} <=> $MODULATION{$b}} keys(%MODULATION)) { printf("\"%d\"-%s ", $MODULATION{$k}, $k); }
|
||||||
|
print("\n\t* transmission_mode:\n\t\t");
|
||||||
|
foreach $k (sort {$T_MODE{$a} <=> $T_MODE{$b}} keys(%T_MODE)) { printf("\"%d\"-%s ", $T_MODE{$k}, $k); }
|
||||||
|
print("\n\t* code_rate_[HL]P:\n\t\t");
|
||||||
|
foreach $k (sort {$CODE_RATE{$a} <=> $CODE_RATE{$b}} keys(%CODE_RATE)) { printf("\"%d\"-%s ", $CODE_RATE{$k}, $k); }
|
||||||
|
print("\n\t* guard_interval:\n\t\t");
|
||||||
|
foreach $k (sort {$GINTERVAL{$a} <=> $GINTERVAL{$b}} keys(%GINTERVAL)) { printf("\"%d\"-%s ", $GINTERVAL{$k}, $k); }
|
||||||
|
print("\n\t* hierarchy:\n\t\t");
|
||||||
|
foreach $k (sort {$HIERARCHY{$a} <=> $HIERARCHY{$b}} keys(%HIERARCHY)) { printf("\"%d\"-%s ", $HIERARCHY{$k}, $k); }
|
||||||
|
print("\t-->\n\n");
|
||||||
|
# header ends...
|
||||||
|
|
||||||
|
print("<locations>\n");
|
||||||
|
foreach $sourcefile (@sourcefiles)
|
||||||
|
{
|
||||||
|
open(FILE, "< $sourcefile") or die "can't open $sourcefile: $!\n";
|
||||||
|
$basename = $sourcefile;
|
||||||
|
$basename =~ s#^.*/##;
|
||||||
|
print("\t<terrestrial name=\"$basename\" flags=\"5\">\n");
|
||||||
|
while ($line = <FILE>)
|
||||||
|
{ # T 184500000 7MHz 3/4 NONE QAM16 8k 1/4 NONE
|
||||||
|
next unless ($line =~ m/^T\s+(\d+)\s+(\dMHz)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/);
|
||||||
|
$freq = $1; $bw = $2; $cr_hp = $3; $cr_lp = $4; $mod = $5; $tmode = $6; $gint = $7; $hier = $8;
|
||||||
|
unless (defined($CODE_RATE{$cr_hp})) { warn "$basename: illegal cr_hp: $cr_hp, using AUTO\n"; $cr_hp="AUTO" };
|
||||||
|
unless (defined($CODE_RATE{$cr_lp})) { warn "$basename: illegal cr_lp: $cr_lp, using AUTO\n"; $cr_lp="AUTO" };
|
||||||
|
unless (defined($MODULATION{$mod})) { die "$basename: illegal mod: $mod\n" }; # no errors in those (yet).
|
||||||
|
unless (defined($T_MODE{$tmode})) { die "$basename: illegal tmode: $tmode\n" };
|
||||||
|
unless (defined($GINTERVAL{$gint})) { die "$basename: illegal gint: $gint\n" };
|
||||||
|
unless (defined($HIERARCHY{$hier})) { die "$basename: illegal hier: $hier\n" };
|
||||||
|
unless (defined($BWIDTH{$bw})) { die "$basename: illegal bw: $bw\n" };
|
||||||
|
if ($cr_hp eq "NONE") { $cr_hp="AUTO" }; # same as scan.c
|
||||||
|
if ($cr_lp eq "NONE") { $cr_lp="AUTO" }; # same as scan.c
|
||||||
|
printf("\t\t<transponder frequency=\"%d\" bandwidth=\"%d\" constellation=\"%d\" ".
|
||||||
|
"transmission_mode=\"%d\" code_rate_HP=\"%d\" code_rate_LP=\"%d\" ".
|
||||||
|
"guard_interval=\"%d\" hierarchy=\"%d\" />\n",
|
||||||
|
$freq / 1000, $BWIDTH{$bw}, $MODULATION{$mod},
|
||||||
|
$T_MODE{$tmode}, $CODE_RATE{$cr_hp}, $CODE_RATE{$cr_lp},
|
||||||
|
$GINTERVAL{$gint}, $HIERARCHY{$hier});
|
||||||
|
}
|
||||||
|
print("\t</terrestrial>\n");
|
||||||
|
}
|
||||||
|
print("</locations>\n");
|
86
data/terrestrial.xml
Normal file
86
data/terrestrial.xml
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- useable flags are
|
||||||
|
1 - Network Scan
|
||||||
|
2 - use BAT
|
||||||
|
4 - use ONIT
|
||||||
|
8 - skip NITs of known networks
|
||||||
|
and combinations of this -->
|
||||||
|
|
||||||
|
<!-- this file is autogenerated by mk_terrestrial_xml.pl
|
||||||
|
WARNING! It is probably unsuitable for enigma! -->
|
||||||
|
<!-- Parameters are (unfortunately, the neutrino parser does not allow default settings,
|
||||||
|
the default is always "0"):
|
||||||
|
* bandwidth:
|
||||||
|
"0"-8MHz "1"-7MHz "2"-6MHz "3"-AUTO
|
||||||
|
* constellation:
|
||||||
|
"0"-QPSK "1"-QAM16 "2"-QAM32 "3"-QAM64 "4"-QAM128 "5"-QAM256 "6"-AUTO
|
||||||
|
* transmission_mode:
|
||||||
|
"0"-2k "1"-8k "2"-AUTO
|
||||||
|
* code_rate_[HL]P:
|
||||||
|
"0"-NONE "1"-1/2 "2"-2/3 "3"-3/4 "4"-4/5 "5"-5/6 "6"-6/7 "7"-7/8 "8"-8/9 "9"-AUTO
|
||||||
|
* guard_interval:
|
||||||
|
"0"-1/32 "1"-1/16 "2"-1/8 "3"-1/4 "4"-AUTO
|
||||||
|
* hierarchy:
|
||||||
|
"0"-NONE "1"-1 "2"-2 "3"-4 "4"-AUTO -->
|
||||||
|
|
||||||
|
<locations>
|
||||||
|
<terrestrial name="auto-Default" flags="5">
|
||||||
|
<transponder frequency="177500" bandwidth="1" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="184500" bandwidth="1" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="191500" bandwidth="1" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="198500" bandwidth="1" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="205500" bandwidth="1" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="212500" bandwidth="1" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="219500" bandwidth="1" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="226500" bandwidth="1" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="474000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="482000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="490000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="498000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="506000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="514000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="522000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="530000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="538000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="546000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="554000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="562000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="570000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="578000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="586000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="594000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="602000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="610000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="618000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="626000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="634000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="642000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="650000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="658000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="666000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="674000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="682000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="690000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="698000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="706000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="714000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="722000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="730000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="738000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="746000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="754000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="762000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="770000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="778000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="786000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="794000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="802000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="810000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="818000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="826000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="834000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="842000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="850000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
<transponder frequency="858000" bandwidth="0" constellation="6" transmission_mode="2" code_rate_HP="9" code_rate_LP="9" guard_interval="4" hierarchy="0" />
|
||||||
|
</terrestrial>
|
||||||
|
</locations>
|
@@ -202,6 +202,18 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey)
|
|||||||
TP.feparams.dvb_feparams.u.qpsk.symbol_rate = atoi(scansettings.TP_rate);
|
TP.feparams.dvb_feparams.u.qpsk.symbol_rate = atoi(scansettings.TP_rate);
|
||||||
TP.feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t) scansettings.TP_fec;
|
TP.feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t) scansettings.TP_fec;
|
||||||
TP.polarization = scansettings.TP_pol;
|
TP.polarization = scansettings.TP_pol;
|
||||||
|
} else if (g_info.delivery_system == DVB_T) {
|
||||||
|
/* DVB-T. TODO: proper menu and parameter setup, not all "AUTO" */
|
||||||
|
if (TP.feparams.dvb_feparams.frequency < 300000)
|
||||||
|
TP.feparams.dvb_feparams.u.ofdm.bandwidth = BANDWIDTH_7_MHZ;
|
||||||
|
else
|
||||||
|
TP.feparams.dvb_feparams.u.ofdm.bandwidth = BANDWIDTH_8_MHZ;
|
||||||
|
TP.feparams.dvb_feparams.u.ofdm.code_rate_HP = FEC_AUTO;
|
||||||
|
TP.feparams.dvb_feparams.u.ofdm.code_rate_LP = FEC_AUTO;
|
||||||
|
TP.feparams.dvb_feparams.u.ofdm.constellation = QAM_AUTO;
|
||||||
|
TP.feparams.dvb_feparams.u.ofdm.transmission_mode = TRANSMISSION_MODE_AUTO;
|
||||||
|
TP.feparams.dvb_feparams.u.ofdm.guard_interval = GUARD_INTERVAL_AUTO;
|
||||||
|
TP.feparams.dvb_feparams.u.ofdm.hierarchy_information = HIERARCHY_AUTO;
|
||||||
} else {
|
} else {
|
||||||
TP.feparams.dvb_feparams.u.qam.symbol_rate = atoi(scansettings.TP_rate);
|
TP.feparams.dvb_feparams.u.qam.symbol_rate = atoi(scansettings.TP_rate);
|
||||||
TP.feparams.dvb_feparams.u.qam.fec_inner = (fe_code_rate_t)scansettings.TP_fec;
|
TP.feparams.dvb_feparams.u.qam.fec_inner = (fe_code_rate_t)scansettings.TP_fec;
|
||||||
|
@@ -218,7 +218,19 @@ CScanSetup::CScanSetup(bool wizard_mode)
|
|||||||
is_wizard = wizard_mode;
|
is_wizard = wizard_mode;
|
||||||
|
|
||||||
//define caption of some forwarders and widgets depends of current receiver type
|
//define caption of some forwarders and widgets depends of current receiver type
|
||||||
satprov_locale = (r_system == DVB_S) ? LOCALE_SATSETUP_SATELLITE : LOCALE_CABLESETUP_PROVIDER;
|
switch (r_system)
|
||||||
|
{
|
||||||
|
case DVB_S:
|
||||||
|
satprov_locale = LOCALE_SATSETUP_SATELLITE;
|
||||||
|
break;
|
||||||
|
case DVB_T:
|
||||||
|
satprov_locale = LOCALE_TERRESTRIALSETUP_PROVIDER;
|
||||||
|
break;
|
||||||
|
case DVB_C:
|
||||||
|
default:
|
||||||
|
satprov_locale = LOCALE_CABLESETUP_PROVIDER;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
satSelect = NULL;
|
satSelect = NULL;
|
||||||
frontendSetup = NULL;
|
frontendSetup = NULL;
|
||||||
@@ -368,7 +380,7 @@ int CScanSetup::showScanMenu()
|
|||||||
/* add configured satellites to satSelect */
|
/* add configured satellites to satSelect */
|
||||||
fillSatSelect();
|
fillSatSelect();
|
||||||
}
|
}
|
||||||
else if (r_system == DVB_C) //cable
|
else if (r_system == DVB_C || r_system == DVB_T) //cable
|
||||||
{
|
{
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
settings->addItem(GenericMenuSeparatorLine);
|
settings->addItem(GenericMenuSeparatorLine);
|
||||||
@@ -848,15 +860,20 @@ int CScanSetup::addScanOptionsItems(CMenuWidget *options_menu, const int &shortc
|
|||||||
printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__);
|
printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__);
|
||||||
int shortCut = shortcut;
|
int shortCut = shortcut;
|
||||||
|
|
||||||
|
CMenuOptionChooser *fec = NULL;
|
||||||
|
CMenuOptionChooser *mod_pol= NULL;
|
||||||
|
CStringInput *rate = NULL;
|
||||||
|
CMenuForwarder *Rate = NULL;
|
||||||
|
|
||||||
CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789");
|
CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789");
|
||||||
CMenuForwarder *Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++));
|
CMenuForwarder *Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++));
|
||||||
|
|
||||||
CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789");
|
if (r_system != DVB_T) {
|
||||||
CMenuForwarder *Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++));
|
rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789");
|
||||||
|
Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++));
|
||||||
|
}
|
||||||
|
|
||||||
CMenuOptionChooser *fec = NULL;
|
/* TODO: DVB-T scan options */
|
||||||
|
|
||||||
CMenuOptionChooser *mod_pol= NULL;
|
|
||||||
if (r_system == DVB_S) {
|
if (r_system == DVB_S) {
|
||||||
fec = new CMenuOptionChooser(LOCALE_EXTRA_TP_FEC, (int *)&scansettings.TP_fec, SATSETUP_SCANTP_FEC, fec_count, true, NULL, CRCInput::convertDigitToKey(shortCut++), "", true);
|
fec = new CMenuOptionChooser(LOCALE_EXTRA_TP_FEC, (int *)&scansettings.TP_fec, SATSETUP_SCANTP_FEC, fec_count, true, NULL, CRCInput::convertDigitToKey(shortCut++), "", true);
|
||||||
mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_POL, (int *)&scansettings.TP_pol, SATSETUP_SCANTP_POL, SATSETUP_SCANTP_POL_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++));
|
mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_POL, (int *)&scansettings.TP_pol, SATSETUP_SCANTP_POL, SATSETUP_SCANTP_POL_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++));
|
||||||
@@ -865,10 +882,12 @@ int CScanSetup::addScanOptionsItems(CMenuWidget *options_menu, const int &shortc
|
|||||||
}
|
}
|
||||||
|
|
||||||
options_menu->addItem(Freq);
|
options_menu->addItem(Freq);
|
||||||
options_menu->addItem(Rate);
|
if (Rate)
|
||||||
if (r_system == DVB_S)
|
options_menu->addItem(Rate);
|
||||||
|
if (fec)
|
||||||
options_menu->addItem(fec);
|
options_menu->addItem(fec);
|
||||||
options_menu->addItem(mod_pol);
|
if (mod_pol)
|
||||||
|
options_menu->addItem(mod_pol);
|
||||||
|
|
||||||
return shortCut;
|
return shortCut;
|
||||||
}
|
}
|
||||||
|
@@ -1869,7 +1869,18 @@ fprintf(stderr, "[neutrino start] %d -> %5ld ms\n", __LINE__, time_monotonic_ms
|
|||||||
|
|
||||||
cpuFreq = new cCpuFreqManager();
|
cpuFreq = new cCpuFreqManager();
|
||||||
cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000);
|
cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000);
|
||||||
g_info.delivery_system = CFEManager::getInstance()->getLiveFE()->getInfo()->type == FE_QPSK ? DVB_S : DVB_C;
|
switch (CFEManager::getInstance()->getLiveFE()->getInfo()->type) {
|
||||||
|
case FE_QPSK:
|
||||||
|
g_info.delivery_system = DVB_S;
|
||||||
|
break;
|
||||||
|
case FE_OFDM:
|
||||||
|
g_info.delivery_system = DVB_T;
|
||||||
|
break;
|
||||||
|
case FE_QAM:
|
||||||
|
default:
|
||||||
|
g_info.delivery_system = DVB_C;
|
||||||
|
break;
|
||||||
|
}
|
||||||
#if HAVE_COOL_HARDWARE
|
#if HAVE_COOL_HARDWARE
|
||||||
/* only SAT-hd1 before rev 8 has fan */
|
/* only SAT-hd1 before rev 8 has fan */
|
||||||
g_info.has_fan = (cs_get_revision() < 8 && g_info.delivery_system == DVB_S);
|
g_info.has_fan = (cs_get_revision() < 8 && g_info.delivery_system == DVB_S);
|
||||||
|
@@ -1215,6 +1215,7 @@ typedef enum
|
|||||||
LOCALE_SCANTS_ABORT_HEADER,
|
LOCALE_SCANTS_ABORT_HEADER,
|
||||||
LOCALE_SCANTS_ACTCABLE,
|
LOCALE_SCANTS_ACTCABLE,
|
||||||
LOCALE_SCANTS_ACTSATELLITE,
|
LOCALE_SCANTS_ACTSATELLITE,
|
||||||
|
LOCALE_SCANTS_ACTTERRESTRIAL,
|
||||||
LOCALE_SCANTS_BOUQUET,
|
LOCALE_SCANTS_BOUQUET,
|
||||||
LOCALE_SCANTS_BOUQUET_CREATE,
|
LOCALE_SCANTS_BOUQUET_CREATE,
|
||||||
LOCALE_SCANTS_BOUQUET_ERASE,
|
LOCALE_SCANTS_BOUQUET_ERASE,
|
||||||
@@ -1302,6 +1303,7 @@ typedef enum
|
|||||||
LOCALE_STRINGINPUT_CLEAR,
|
LOCALE_STRINGINPUT_CLEAR,
|
||||||
LOCALE_SUBTITLES_HEAD,
|
LOCALE_SUBTITLES_HEAD,
|
||||||
LOCALE_SUBTITLES_STOP,
|
LOCALE_SUBTITLES_STOP,
|
||||||
|
LOCALE_TERRESTRIALSETUP_PROVIDER,
|
||||||
LOCALE_TIMER_EVENTRECORD_MSG,
|
LOCALE_TIMER_EVENTRECORD_MSG,
|
||||||
LOCALE_TIMER_EVENTRECORD_TITLE,
|
LOCALE_TIMER_EVENTRECORD_TITLE,
|
||||||
LOCALE_TIMER_EVENTTIMED_MSG,
|
LOCALE_TIMER_EVENTTIMED_MSG,
|
||||||
|
@@ -1215,6 +1215,7 @@ const char * locale_real_names[] =
|
|||||||
"scants.abort_header",
|
"scants.abort_header",
|
||||||
"scants.actcable",
|
"scants.actcable",
|
||||||
"scants.actsatellite",
|
"scants.actsatellite",
|
||||||
|
"scants.actterrestrial",
|
||||||
"scants.bouquet",
|
"scants.bouquet",
|
||||||
"scants.bouquet_create",
|
"scants.bouquet_create",
|
||||||
"scants.bouquet_erase",
|
"scants.bouquet_erase",
|
||||||
@@ -1302,6 +1303,7 @@ const char * locale_real_names[] =
|
|||||||
"stringinput.clear",
|
"stringinput.clear",
|
||||||
"subtitles.head",
|
"subtitles.head",
|
||||||
"subtitles.stop",
|
"subtitles.stop",
|
||||||
|
"terrestrialsetup.provider",
|
||||||
"timer.eventrecord.msg",
|
"timer.eventrecord.msg",
|
||||||
"timer.eventrecord.title",
|
"timer.eventrecord.title",
|
||||||
"timer.eventtimed.msg",
|
"timer.eventtimed.msg",
|
||||||
|
@@ -88,7 +88,7 @@ class CServiceManager
|
|||||||
sat_transponder_map_t satelliteTransponders;
|
sat_transponder_map_t satelliteTransponders;
|
||||||
|
|
||||||
bool ParseScanXml();
|
bool ParseScanXml();
|
||||||
void ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, bool cable);
|
void ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, fe_type fe);
|
||||||
void ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization);
|
void ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization);
|
||||||
void FindTransponder(xmlNodePtr search);
|
void FindTransponder(xmlNodePtr search);
|
||||||
void ParseSatTransponders(fe_type_t frontendType, xmlNodePtr search, t_satellite_position satellitePosition);
|
void ParseSatTransponders(fe_type_t frontendType, xmlNodePtr search, t_satellite_position satellitePosition);
|
||||||
|
@@ -60,7 +60,6 @@ class CServiceScan : public OpenThreads::Thread
|
|||||||
private:
|
private:
|
||||||
bool started;
|
bool started;
|
||||||
bool running;
|
bool running;
|
||||||
bool cable;
|
|
||||||
bool abort_scan;
|
bool abort_scan;
|
||||||
scan_type_t scan_mode;
|
scan_type_t scan_mode;
|
||||||
int flags;
|
int flags;
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
|
|
||||||
#define CABLES_XML CONFIGDIR "/cables.xml"
|
#define CABLES_XML CONFIGDIR "/cables.xml"
|
||||||
#define SATELLITES_XML CONFIGDIR "/satellites.xml"
|
#define SATELLITES_XML CONFIGDIR "/satellites.xml"
|
||||||
|
#define TERRESTRIAL_XML CONFIGDIR "/terrestrial.xml"
|
||||||
|
|
||||||
#if HAVE_TRIPLEDRAGON == 0
|
#if HAVE_TRIPLEDRAGON == 0
|
||||||
#define AUDIO_DEVICE "/dev/dvb/adapter0/audio0"
|
#define AUDIO_DEVICE "/dev/dvb/adapter0/audio0"
|
||||||
|
@@ -52,17 +52,27 @@ extern int zapit_debug;
|
|||||||
#define FREQUENCY 1
|
#define FREQUENCY 1
|
||||||
#define MODULATION 2
|
#define MODULATION 2
|
||||||
#define INVERSION 3
|
#define INVERSION 3
|
||||||
|
// common to S/S2/C
|
||||||
#define SYMBOL_RATE 4
|
#define SYMBOL_RATE 4
|
||||||
#define DELIVERY_SYSTEM 5
|
#define DELIVERY_SYSTEM 5
|
||||||
#define INNER_FEC 6
|
#define INNER_FEC 6
|
||||||
// DVB-S/S2 specific
|
// DVB-S/S2 specific
|
||||||
#define PILOTS 7
|
#define PILOTS 7
|
||||||
#define ROLLOFF 8
|
#define ROLLOFF 8
|
||||||
|
// DVB-T specific
|
||||||
|
#define BANDWIDTH 4
|
||||||
|
#define CODE_RATE_HP 6
|
||||||
|
#define CODE_RATE_LP 7
|
||||||
|
#define TRANSMISSION_MODE 8
|
||||||
|
#define GUARD_INTERVAL 9
|
||||||
|
#define HIERARCHY 10
|
||||||
|
|
||||||
|
|
||||||
#define FE_COMMON_PROPS 2
|
#define FE_COMMON_PROPS 2
|
||||||
#define FE_DVBS_PROPS 6
|
#define FE_DVBS_PROPS 6
|
||||||
#define FE_DVBS2_PROPS 8
|
#define FE_DVBS2_PROPS 8
|
||||||
#define FE_DVBC_PROPS 6
|
#define FE_DVBC_PROPS 6
|
||||||
|
#define FE_DVBT_PROPS 10
|
||||||
|
|
||||||
/* stolen from dvb.c from vlc */
|
/* stolen from dvb.c from vlc */
|
||||||
static const struct dtv_property dvbs_cmdargs[] = {
|
static const struct dtv_property dvbs_cmdargs[] = {
|
||||||
@@ -100,6 +110,21 @@ static const struct dtv_property dvbc_cmdargs[] = {
|
|||||||
{ DTV_TUNE, {}, { 0 }, 0},
|
{ DTV_TUNE, {}, { 0 }, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct dtv_property dvbt_cmdargs[] = {
|
||||||
|
{ DTV_CLEAR, {0,0,0}, { 0 } ,0},
|
||||||
|
{ DTV_FREQUENCY, {}, { 0 } ,0},
|
||||||
|
{ DTV_MODULATION, {}, { QAM_AUTO } ,0},
|
||||||
|
{ DTV_INVERSION, {}, { INVERSION_AUTO } ,0},
|
||||||
|
{ DTV_BANDWIDTH_HZ, {}, { 8000000 } ,0},
|
||||||
|
{ DTV_DELIVERY_SYSTEM, {}, { SYS_DVBT } ,0},
|
||||||
|
{ DTV_CODE_RATE_HP, {}, { FEC_AUTO } ,0},
|
||||||
|
{ DTV_CODE_RATE_LP, {}, { FEC_AUTO } ,0},
|
||||||
|
{ DTV_TRANSMISSION_MODE,{}, { TRANSMISSION_MODE_AUTO}, 0},
|
||||||
|
{ DTV_GUARD_INTERVAL, {}, { GUARD_INTERVAL_AUTO}, 0},
|
||||||
|
{ DTV_HIERARCHY, {}, { HIERARCHY_AUTO }, 0},
|
||||||
|
{ DTV_TUNE, {}, { 0 }, 0},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#define diff(x,y) (max(x,y) - min(x,y))
|
#define diff(x,y) (max(x,y) - min(x,y))
|
||||||
|
|
||||||
@@ -528,7 +553,8 @@ void CFrontend::getDelSys(int f, int m, char *&fec, char *&sys, char *&mod)
|
|||||||
|
|
||||||
void CFrontend::getDelSys(uint8_t type, int f, int m, char *&fec, char *&sys, char *&mod)
|
void CFrontend::getDelSys(uint8_t type, int f, int m, char *&fec, char *&sys, char *&mod)
|
||||||
{
|
{
|
||||||
if (type == FE_QPSK) {
|
switch (type) {
|
||||||
|
case FE_QPSK:
|
||||||
if (f < FEC_S2_QPSK_1_2) {
|
if (f < FEC_S2_QPSK_1_2) {
|
||||||
sys = (char *)"DVB";
|
sys = (char *)"DVB";
|
||||||
mod = (char *)"QPSK";
|
mod = (char *)"QPSK";
|
||||||
@@ -539,7 +565,9 @@ void CFrontend::getDelSys(uint8_t type, int f, int m, char *&fec, char *&sys, ch
|
|||||||
sys = (char *)"DVB-S2";
|
sys = (char *)"DVB-S2";
|
||||||
mod = (char *)"8PSK";
|
mod = (char *)"8PSK";
|
||||||
}
|
}
|
||||||
} else if (type == FE_QAM) {
|
break;
|
||||||
|
case FE_QAM:
|
||||||
|
case FE_OFDM:
|
||||||
sys = (char *)"DVB";
|
sys = (char *)"DVB";
|
||||||
switch (m) {
|
switch (m) {
|
||||||
case QAM_16:
|
case QAM_16:
|
||||||
@@ -557,11 +585,23 @@ void CFrontend::getDelSys(uint8_t type, int f, int m, char *&fec, char *&sys, ch
|
|||||||
case QAM_256:
|
case QAM_256:
|
||||||
mod = (char *)"QAM_256";
|
mod = (char *)"QAM_256";
|
||||||
break;
|
break;
|
||||||
|
case QPSK:
|
||||||
|
if (type == FE_OFDM) {
|
||||||
|
mod = (char *)"QPSK";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* fallthrouh for FE_QAM... */
|
||||||
case QAM_AUTO:
|
case QAM_AUTO:
|
||||||
default:
|
default:
|
||||||
mod = (char *)"QAM_AUTO";
|
mod = (char *)"QAM_AUTO";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("[frontend] unknown type %d!\n", type);
|
||||||
|
sys = (char *)"UNKNOWN";
|
||||||
|
mod = (char *)"UNKNOWN";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (f) {
|
switch (f) {
|
||||||
@@ -641,6 +681,11 @@ bool CFrontend::buildProperties(const FrontendParameters *feparams, struct dtv_p
|
|||||||
modulation = feparams->dvb_feparams.u.qam.modulation;
|
modulation = feparams->dvb_feparams.u.qam.modulation;
|
||||||
delsys = SYS_DVBC_ANNEX_AC;
|
delsys = SYS_DVBC_ANNEX_AC;
|
||||||
break;
|
break;
|
||||||
|
case FE_OFDM:
|
||||||
|
fec_inner = FEC_AUTO; /* dummy, for next switch statement */
|
||||||
|
modulation = feparams->dvb_feparams.u.ofdm.constellation;
|
||||||
|
delsys = SYS_DVBT;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf("frontend: unknown frontend type, exiting\n");
|
printf("frontend: unknown frontend type, exiting\n");
|
||||||
return 0;
|
return 0;
|
||||||
@@ -739,6 +784,36 @@ bool CFrontend::buildProperties(const FrontendParameters *feparams, struct dtv_p
|
|||||||
cmdseq.props[INNER_FEC].u.data = fec_inner;
|
cmdseq.props[INNER_FEC].u.data = fec_inner;
|
||||||
nrOfProps = FE_DVBC_PROPS;
|
nrOfProps = FE_DVBC_PROPS;
|
||||||
break;
|
break;
|
||||||
|
case FE_OFDM:
|
||||||
|
memcpy(cmdseq.props, dvbt_cmdargs, sizeof(dvbt_cmdargs));
|
||||||
|
nrOfProps = FE_DVBT_PROPS;
|
||||||
|
cmdseq.props[FREQUENCY].u.data = feparams->dvb_feparams.frequency;
|
||||||
|
cmdseq.props[MODULATION].u.data = modulation;
|
||||||
|
cmdseq.props[INVERSION].u.data = feparams->dvb_feparams.inversion;
|
||||||
|
cmdseq.props[CODE_RATE_HP].u.data = feparams->dvb_feparams.u.ofdm.code_rate_HP;
|
||||||
|
cmdseq.props[CODE_RATE_LP].u.data = feparams->dvb_feparams.u.ofdm.code_rate_LP;
|
||||||
|
cmdseq.props[TRANSMISSION_MODE].u.data = feparams->dvb_feparams.u.ofdm.transmission_mode;
|
||||||
|
cmdseq.props[GUARD_INTERVAL].u.data = feparams->dvb_feparams.u.ofdm.guard_interval;
|
||||||
|
cmdseq.props[HIERARCHY].u.data = feparams->dvb_feparams.u.ofdm.hierarchy_information;
|
||||||
|
switch (feparams->dvb_feparams.u.ofdm.bandwidth) {
|
||||||
|
case BANDWIDTH_6_MHZ:
|
||||||
|
cmdseq.props[BANDWIDTH].u.data = 6000000;
|
||||||
|
break;
|
||||||
|
case BANDWIDTH_7_MHZ:
|
||||||
|
cmdseq.props[BANDWIDTH].u.data = 7000000;
|
||||||
|
break;
|
||||||
|
case BANDWIDTH_8_MHZ:
|
||||||
|
cmdseq.props[BANDWIDTH].u.data = 8000000;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("[fe%d] unknown bandwidth for OFDM %d\n",
|
||||||
|
fenumber, feparams->dvb_feparams.u.ofdm.bandwidth);
|
||||||
|
/* fallthrough */
|
||||||
|
case BANDWIDTH_AUTO:
|
||||||
|
cmdseq.props[BANDWIDTH].u.data = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf("frontend: unknown frontend type, exiting\n");
|
printf("frontend: unknown frontend type, exiting\n");
|
||||||
return false;
|
return false;
|
||||||
@@ -758,7 +833,7 @@ bool CFrontend::buildProperties(const FrontendParameters *feparams, struct dtv_p
|
|||||||
|
|
||||||
int CFrontend::setFrontend(const FrontendParameters *feparams, bool /*nowait*/)
|
int CFrontend::setFrontend(const FrontendParameters *feparams, bool /*nowait*/)
|
||||||
{
|
{
|
||||||
struct dtv_property cmdargs[FE_COMMON_PROPS + FE_DVBS2_PROPS]; // WARNING: increase when needed more space
|
struct dtv_property cmdargs[FE_COMMON_PROPS + FE_DVBT_PROPS]; // WARNING: increase when needed more space
|
||||||
struct dtv_properties cmdseq;
|
struct dtv_properties cmdseq;
|
||||||
|
|
||||||
cmdseq.num = FE_COMMON_PROPS;
|
cmdseq.num = FE_COMMON_PROPS;
|
||||||
@@ -1143,10 +1218,10 @@ int CFrontend::setParameters(TP_params *TP, bool /*nowait*/)
|
|||||||
feparams = &currTP.feparams;
|
feparams = &currTP.feparams;
|
||||||
freq = (int) feparams->dvb_feparams.frequency;
|
freq = (int) feparams->dvb_feparams.frequency;
|
||||||
char * f, *s, *m;
|
char * f, *s, *m;
|
||||||
|
bool high_band;
|
||||||
|
|
||||||
if (info.type == FE_QPSK) {
|
switch (info.type) {
|
||||||
bool high_band;
|
case FE_QPSK:
|
||||||
|
|
||||||
if (freq < lnbSwitch) {
|
if (freq < lnbSwitch) {
|
||||||
high_band = false;
|
high_band = false;
|
||||||
freq_offset = lnbOffsetLow;
|
freq_offset = lnbOffsetLow;
|
||||||
@@ -1158,7 +1233,8 @@ int CFrontend::setParameters(TP_params *TP, bool /*nowait*/)
|
|||||||
feparams->dvb_feparams.frequency = abs(freq - freq_offset);
|
feparams->dvb_feparams.frequency = abs(freq - freq_offset);
|
||||||
setSec(TP->diseqc, TP->polarization, high_band);
|
setSec(TP->diseqc, TP->polarization, high_band);
|
||||||
getDelSys(feparams->dvb_feparams.u.qpsk.fec_inner, dvbs_get_modulation(feparams->dvb_feparams.u.qpsk.fec_inner), f, s, m);
|
getDelSys(feparams->dvb_feparams.u.qpsk.fec_inner, dvbs_get_modulation(feparams->dvb_feparams.u.qpsk.fec_inner), f, s, m);
|
||||||
} else if (info.type == FE_QAM) {
|
break;
|
||||||
|
case FE_QAM:
|
||||||
if (freq < 1000*1000)
|
if (freq < 1000*1000)
|
||||||
feparams->dvb_feparams.frequency = freq * 1000;
|
feparams->dvb_feparams.frequency = freq * 1000;
|
||||||
getDelSys(feparams->dvb_feparams.u.qam.fec_inner,feparams->dvb_feparams.u.qam.modulation, f, s, m);
|
getDelSys(feparams->dvb_feparams.u.qam.fec_inner,feparams->dvb_feparams.u.qam.modulation, f, s, m);
|
||||||
@@ -1173,6 +1249,14 @@ int CFrontend::setParameters(TP_params *TP, bool /*nowait*/)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
case FE_OFDM:
|
||||||
|
if (freq < 1000*1000)
|
||||||
|
feparams->dvb_feparams.frequency = freq * 1000;
|
||||||
|
getDelSys(feparams->dvb_feparams.u.ofdm.code_rate_HP,feparams->dvb_feparams.u.ofdm.constellation, f, s, m);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("[fe%d] unknown type %d\n", fenumber, info.type);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//printf("[fe%d] tuner to frequency %d (offset %d timeout %d)\n", fenumber, feparams->dvb_feparams.frequency, freq_offset, TIMEOUT_MAX_MS);
|
//printf("[fe%d] tuner to frequency %d (offset %d timeout %d)\n", fenumber, feparams->dvb_feparams.frequency, freq_offset, TIMEOUT_MAX_MS);
|
||||||
|
@@ -70,11 +70,12 @@ bool CServiceManager::ParseScanXml(void)
|
|||||||
case FE_QPSK:
|
case FE_QPSK:
|
||||||
scanInputParser = parseXmlFile(SATELLITES_XML);
|
scanInputParser = parseXmlFile(SATELLITES_XML);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FE_QAM:
|
case FE_QAM:
|
||||||
scanInputParser = parseXmlFile(CABLES_XML);
|
scanInputParser = parseXmlFile(CABLES_XML);
|
||||||
break;
|
break;
|
||||||
|
case FE_OFDM:
|
||||||
|
scanInputParser = parseXmlFile(TERRESTRIAL_XML);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
WARN("Unknown type %d", frontendType);
|
WARN("Unknown type %d", frontendType);
|
||||||
return false;
|
return false;
|
||||||
@@ -291,7 +292,7 @@ std::string CServiceManager::GetServiceName(t_channel_id channel_id)
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, bool cable)
|
void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, fe_type fe)
|
||||||
{
|
{
|
||||||
uint8_t polarization = 0;
|
uint8_t polarization = 0;
|
||||||
|
|
||||||
@@ -304,14 +305,18 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa
|
|||||||
feparams.dvb_feparams.frequency = xmlGetNumericAttribute(node, "frq", 0);
|
feparams.dvb_feparams.frequency = xmlGetNumericAttribute(node, "frq", 0);
|
||||||
feparams.dvb_feparams.inversion = (fe_spectral_inversion) xmlGetNumericAttribute(node, "inv", 0);
|
feparams.dvb_feparams.inversion = (fe_spectral_inversion) xmlGetNumericAttribute(node, "inv", 0);
|
||||||
|
|
||||||
if(cable) {
|
switch (fe) {
|
||||||
|
case FE_QAM:
|
||||||
feparams.dvb_feparams.u.qam.symbol_rate = xmlGetNumericAttribute(node, "sr", 0);
|
feparams.dvb_feparams.u.qam.symbol_rate = xmlGetNumericAttribute(node, "sr", 0);
|
||||||
feparams.dvb_feparams.u.qam.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(node, "fec", 0);
|
feparams.dvb_feparams.u.qam.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(node, "fec", 0);
|
||||||
feparams.dvb_feparams.u.qam.modulation = (fe_modulation_t) xmlGetNumericAttribute(node, "mod", 0);
|
feparams.dvb_feparams.u.qam.modulation = (fe_modulation_t) xmlGetNumericAttribute(node, "mod", 0);
|
||||||
|
|
||||||
if (feparams.dvb_feparams.frequency > 1000*1000)
|
if (feparams.dvb_feparams.frequency > 1000*1000)
|
||||||
feparams.dvb_feparams.frequency = feparams.dvb_feparams.frequency/1000; //transponderlist was read from tuxbox
|
feparams.dvb_feparams.frequency = feparams.dvb_feparams.frequency/1000; //transponderlist was read from tuxbox
|
||||||
} else {
|
break;
|
||||||
|
case FE_OFDM:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(node, "fec", 0);
|
feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(node, "fec", 0);
|
||||||
feparams.dvb_feparams.u.qpsk.symbol_rate = xmlGetNumericAttribute(node, "sr", 0);
|
feparams.dvb_feparams.u.qpsk.symbol_rate = xmlGetNumericAttribute(node, "sr", 0);
|
||||||
|
|
||||||
@@ -325,7 +330,8 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa
|
|||||||
else
|
else
|
||||||
feparams.dvb_feparams.frequency = (int) 1000 * (int) round ((double) feparams.dvb_feparams.frequency / (double) 1000);
|
feparams.dvb_feparams.frequency = (int) 1000 * (int) round ((double) feparams.dvb_feparams.frequency / (double) 1000);
|
||||||
}
|
}
|
||||||
freq_id_t freq = CREATE_FREQ_ID(feparams.dvb_feparams.frequency, cable);
|
|
||||||
|
freq_id_t freq = CREATE_FREQ_ID(feparams.dvb_feparams.frequency, fe != FE_QPSK);
|
||||||
|
|
||||||
transponder_id_t tid = CREATE_TRANSPONDER_ID64(freq, satellitePosition,original_network_id,transport_stream_id);
|
transponder_id_t tid = CREATE_TRANSPONDER_ID64(freq, satellitePosition,original_network_id,transport_stream_id);
|
||||||
transponder t(frontendType, tid, feparams, polarization);
|
transponder t(frontendType, tid, feparams, polarization);
|
||||||
@@ -438,18 +444,19 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id
|
|||||||
void CServiceManager::FindTransponder(xmlNodePtr search)
|
void CServiceManager::FindTransponder(xmlNodePtr search)
|
||||||
{
|
{
|
||||||
while (search) {
|
while (search) {
|
||||||
bool cable = false;
|
bool sat = false;
|
||||||
|
|
||||||
if (!(strcmp(xmlGetName(search), "cable")))
|
if (!(strcmp(xmlGetName(search), "sat")))
|
||||||
cable = true;
|
sat = true;
|
||||||
else if ((strcmp(xmlGetName(search), "sat"))) {
|
else if (strcmp(xmlGetName(search), "cable") && strcmp(xmlGetName(search), "terrestrial")) {
|
||||||
search = search->xmlNextNode;
|
search = search->xmlNextNode;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
t_satellite_position satellitePosition = xmlGetSignedNumericAttribute(search, "position", 10);
|
t_satellite_position satellitePosition = xmlGetSignedNumericAttribute(search, "position", 10);
|
||||||
DBG("going to parse dvb-%c provider %s\n", xmlGetName(search)[0], xmlGetAttribute(search, "name"));
|
DBG("going to parse dvb-%c provider %s\n", xmlGetName(search)[0], xmlGetAttribute(search, "name"));
|
||||||
ParseTransponders(search->xmlChildrenNode, satellitePosition, cable);
|
/* ParseTransponders is only interested in sat / not sat, sp the real type does not matter */
|
||||||
|
ParseTransponders(search->xmlChildrenNode, satellitePosition, sat ? FE_QPSK : FE_QAM);
|
||||||
newfound++;
|
newfound++;
|
||||||
search = search->xmlNextNode;
|
search = search->xmlNextNode;
|
||||||
}
|
}
|
||||||
@@ -490,7 +497,28 @@ void CServiceManager::ParseSatTransponders(fe_type_t fType, xmlNodePtr search, t
|
|||||||
feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t) xml_fec;
|
feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t) xml_fec;
|
||||||
feparams.dvb_feparams.frequency = (int) 1000 * (int) round ((double) feparams.dvb_feparams.frequency / (double) 1000);
|
feparams.dvb_feparams.frequency = (int) 1000 * (int) round ((double) feparams.dvb_feparams.frequency / (double) 1000);
|
||||||
}
|
}
|
||||||
freq_id_t freq = CREATE_FREQ_ID(feparams.dvb_feparams.frequency, fType == FE_QAM);
|
else if (fType == FE_OFDM) {
|
||||||
|
feparams.dvb_feparams.u.ofdm.bandwidth = (fe_bandwidth_t)
|
||||||
|
xmlGetNumericAttribute(tps, "bandwidth", 0);
|
||||||
|
feparams.dvb_feparams.u.ofdm.constellation = (fe_modulation_t)
|
||||||
|
xmlGetNumericAttribute(tps, "constellation", 0);
|
||||||
|
feparams.dvb_feparams.u.ofdm.transmission_mode = (fe_transmit_mode_t)
|
||||||
|
xmlGetNumericAttribute(tps, "transmission_mode", 0);
|
||||||
|
feparams.dvb_feparams.u.ofdm.code_rate_HP = (fe_code_rate_t)
|
||||||
|
xmlGetNumericAttribute(tps, "code_rate_HP", 0);
|
||||||
|
feparams.dvb_feparams.u.ofdm.code_rate_LP = (fe_code_rate_t)
|
||||||
|
xmlGetNumericAttribute(tps, "code_rate_LP", 0);
|
||||||
|
feparams.dvb_feparams.u.ofdm.guard_interval = (fe_guard_interval_t)
|
||||||
|
xmlGetNumericAttribute(tps, "guard_interval", 0);
|
||||||
|
feparams.dvb_feparams.u.ofdm.hierarchy_information = (fe_hierarchy_t)
|
||||||
|
xmlGetNumericAttribute(tps, "hierarchy", 0);
|
||||||
|
if (feparams.dvb_feparams.frequency > 1000*1000)
|
||||||
|
feparams.dvb_feparams.frequency /= 1000; // old transponder list
|
||||||
|
}
|
||||||
|
else /* we'll probably crash sooner or later, so write to STDERR... */
|
||||||
|
fprintf(stderr, "[getservices] %s: unknown frontend type %d!\n", __func__, fType);
|
||||||
|
|
||||||
|
freq_id_t freq = CREATE_FREQ_ID(feparams.dvb_feparams.frequency, fType != FE_QPSK);
|
||||||
polarization &= 7;
|
polarization &= 7;
|
||||||
|
|
||||||
transponder_id_t tid = CREATE_TRANSPONDER_ID64(freq, satellitePosition, fake_nid, fake_tid);
|
transponder_id_t tid = CREATE_TRANSPONDER_ID64(freq, satellitePosition, fake_nid, fake_tid);
|
||||||
@@ -636,7 +664,8 @@ bool CServiceManager::LoadServices(bool only_current)
|
|||||||
position = xmlGetSignedNumericAttribute(search, "position", 10);
|
position = xmlGetSignedNumericAttribute(search, "position", 10);
|
||||||
char * name = xmlGetAttribute(search, "name");
|
char * name = xmlGetAttribute(search, "name");
|
||||||
InitSatPosition(position, name);
|
InitSatPosition(position, name);
|
||||||
} else if(!(strcmp(xmlGetName(search), "cable"))) {
|
} else if (!strcmp(xmlGetName(search), "cable") ||
|
||||||
|
!strcmp(xmlGetName(search), "terrestrial")) {
|
||||||
char * name = xmlGetAttribute(search, "name");
|
char * name = xmlGetAttribute(search, "name");
|
||||||
InitSatPosition(position, name);
|
InitSatPosition(position, name);
|
||||||
}
|
}
|
||||||
@@ -726,7 +755,9 @@ void CServiceManager::WriteSatHeader(FILE * fd, sat_config_t &config)
|
|||||||
case FE_QAM: /* cable */
|
case FE_QAM: /* cable */
|
||||||
fprintf(fd, "\t<cable name=\"%s\" position=\"%hd\">\n", config.name.c_str(), config.position);
|
fprintf(fd, "\t<cable name=\"%s\" position=\"%hd\">\n", config.name.c_str(), config.position);
|
||||||
break;
|
break;
|
||||||
case FE_OFDM:
|
case FE_OFDM: /* terrestrial */
|
||||||
|
fprintf(fd, "\t<terrestrial name=\"%s\" position=\"%hd\">\n", config.name.c_str(), config.position);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -792,6 +823,9 @@ void CServiceManager::SaveServices(bool tocopy, bool if_changed)
|
|||||||
case FE_QAM:
|
case FE_QAM:
|
||||||
fprintf(fd, "\t</cable>\n");
|
fprintf(fd, "\t</cable>\n");
|
||||||
break;
|
break;
|
||||||
|
case FE_OFDM:
|
||||||
|
fprintf(fd, "\t</terrestrial>\n");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -913,6 +947,8 @@ bool CServiceManager::SaveCurrentServices(transponder_id_t tpid)
|
|||||||
sprintf(satstr, "\t<%s name=\"%s\"\n", "cable", spos_it->second.name.c_str());
|
sprintf(satstr, "\t<%s name=\"%s\"\n", "cable", spos_it->second.name.c_str());
|
||||||
break;
|
break;
|
||||||
case FE_OFDM:
|
case FE_OFDM:
|
||||||
|
sprintf(satstr, "\t<%s name=\"%s\"\n", "terrestrial", spos_it->second.name.c_str());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -282,7 +282,7 @@ _repeat:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
freq_id_t freq = CREATE_FREQ_ID(tI->second.feparams.dvb_feparams.frequency, cable);
|
freq_id_t freq = CREATE_FREQ_ID(tI->second.feparams.dvb_feparams.frequency, frontendType != FE_QPSK);
|
||||||
|
|
||||||
CNit nit(satellitePosition, freq, cable_nid);
|
CNit nit(satellitePosition, freq, cable_nid);
|
||||||
if(flags & SCAN_NIT)
|
if(flags & SCAN_NIT)
|
||||||
@@ -489,7 +489,6 @@ bool CServiceScan::SetFrontend(t_satellite_position satellitePosition)
|
|||||||
frontend = fe;
|
frontend = fe;
|
||||||
CFEManager::getInstance()->setLiveFE(frontend);
|
CFEManager::getInstance()->setLiveFE(frontend);
|
||||||
frontendType = frontend->getInfo()->type;
|
frontendType = frontend->getInfo()->type;
|
||||||
cable = (frontend->getInfo()->type == FE_QAM);//FIXME
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -601,9 +600,10 @@ bool CServiceScan::ScanTransponder()
|
|||||||
printf("[scan] NIT %s, fta only: %s, satellites %s\n", flags & SCAN_NIT ? "yes" : "no",
|
printf("[scan] NIT %s, fta only: %s, satellites %s\n", flags & SCAN_NIT ? "yes" : "no",
|
||||||
flags & SCAN_FTA ? "yes" : "no", scanProviders.size() == 1 ? "single" : "multi");
|
flags & SCAN_FTA ? "yes" : "no", scanProviders.size() == 1 ? "single" : "multi");
|
||||||
|
|
||||||
freq_id_t freq = CREATE_FREQ_ID(TP->feparams.dvb_feparams.frequency, cable);
|
freq_id_t freq = CREATE_FREQ_ID(TP->feparams.dvb_feparams.frequency, frontendType != FE_QPSK);
|
||||||
|
|
||||||
fake_tid++; fake_nid++;
|
fake_tid++; fake_nid++;
|
||||||
|
|
||||||
transponder_id_t tid = CREATE_TRANSPONDER_ID64(freq, satellitePosition, fake_nid, fake_tid);
|
transponder_id_t tid = CREATE_TRANSPONDER_ID64(freq, satellitePosition, fake_nid, fake_tid);
|
||||||
transponder t(frontendType, tid, TP->feparams, TP->polarization);
|
transponder t(frontendType, tid, TP->feparams, TP->polarization);
|
||||||
t.dump("[scan]");
|
t.dump("[scan]");
|
||||||
@@ -643,7 +643,7 @@ bool CServiceScan::ReplaceTransponderParams(freq_id_t freq, t_satellite_position
|
|||||||
bool ret = false;
|
bool ret = false;
|
||||||
for (transponder_list_t::iterator tI = transponders.begin(); tI != transponders.end(); ++tI) {
|
for (transponder_list_t::iterator tI = transponders.begin(); tI != transponders.end(); ++tI) {
|
||||||
if (tI->second.satellitePosition == satellitePosition) {
|
if (tI->second.satellitePosition == satellitePosition) {
|
||||||
freq_id_t newfreq = CREATE_FREQ_ID(tI->second.feparams.dvb_feparams.frequency, cable);
|
freq_id_t newfreq = CREATE_FREQ_ID(tI->second.feparams.dvb_feparams.frequency, frontendType != FE_QPSK);
|
||||||
if (freq == newfreq) {
|
if (freq == newfreq) {
|
||||||
memcpy(&tI->second.feparams, feparams, sizeof(struct dvb_frontend_parameters));
|
memcpy(&tI->second.feparams, feparams, sizeof(struct dvb_frontend_parameters));
|
||||||
tI->second.polarization = polarization;
|
tI->second.polarization = polarization;
|
||||||
@@ -659,7 +659,7 @@ bool CServiceScan::ReplaceTransponderParams(freq_id_t freq, t_satellite_position
|
|||||||
void CServiceScan::SendTransponderInfo(transponder &t)
|
void CServiceScan::SendTransponderInfo(transponder &t)
|
||||||
{
|
{
|
||||||
uint32_t actual_freq = t.feparams.dvb_feparams.frequency;
|
uint32_t actual_freq = t.feparams.dvb_feparams.frequency;
|
||||||
if (!cable)
|
if (frontendType == FE_QAM)
|
||||||
actual_freq /= 1000;
|
actual_freq /= 1000;
|
||||||
CZapit::getInstance()->SendEvent(CZapitClient::EVT_SCAN_REPORT_FREQUENCY, &actual_freq,sizeof(actual_freq));
|
CZapit::getInstance()->SendEvent(CZapitClient::EVT_SCAN_REPORT_FREQUENCY, &actual_freq,sizeof(actual_freq));
|
||||||
|
|
||||||
@@ -667,7 +667,7 @@ void CServiceScan::SendTransponderInfo(transponder &t)
|
|||||||
CZapit::getInstance()->SendEvent(CZapitClient::EVT_SCAN_PROVIDER, (void *) " ", 2);
|
CZapit::getInstance()->SendEvent(CZapitClient::EVT_SCAN_PROVIDER, (void *) " ", 2);
|
||||||
CZapit::getInstance()->SendEvent(CZapitClient::EVT_SCAN_SERVICENAME, (void *) " ", 2);
|
CZapit::getInstance()->SendEvent(CZapitClient::EVT_SCAN_SERVICENAME, (void *) " ", 2);
|
||||||
|
|
||||||
if (!cable) {
|
if (frontendType == FE_QPSK) {
|
||||||
uint32_t actual_polarisation = ((t.feparams.dvb_feparams.u.qpsk.symbol_rate/1000) << 16) | (t.feparams.dvb_feparams.u.qpsk.fec_inner << 8) | (uint)t.polarization;
|
uint32_t actual_polarisation = ((t.feparams.dvb_feparams.u.qpsk.symbol_rate/1000) << 16) | (t.feparams.dvb_feparams.u.qpsk.fec_inner << 8) | (uint)t.polarization;
|
||||||
CZapit::getInstance()->SendEvent(CZapitClient::EVT_SCAN_REPORT_FREQUENCYP, &actual_polarisation,sizeof(actual_polarisation));
|
CZapit::getInstance()->SendEvent(CZapitClient::EVT_SCAN_REPORT_FREQUENCYP, &actual_polarisation,sizeof(actual_polarisation));
|
||||||
}
|
}
|
||||||
|
@@ -52,13 +52,20 @@ transponder::transponder()
|
|||||||
|
|
||||||
bool transponder::operator==(const transponder& t) const
|
bool transponder::operator==(const transponder& t) const
|
||||||
{
|
{
|
||||||
return (
|
if (type != FE_OFDM)
|
||||||
|
return (
|
||||||
(satellitePosition == t.satellitePosition) &&
|
(satellitePosition == t.satellitePosition) &&
|
||||||
//(transport_stream_id == t.transport_stream_id) &&
|
//(transport_stream_id == t.transport_stream_id) &&
|
||||||
//(original_network_id == t.original_network_id) &&
|
//(original_network_id == t.original_network_id) &&
|
||||||
((polarization & 1) == (t.polarization & 1)) &&
|
((polarization & 1) == (t.polarization & 1)) &&
|
||||||
(abs((int) feparams.dvb_feparams.frequency - (int)t.feparams.dvb_feparams.frequency) <= 3000)
|
(abs((int) feparams.dvb_feparams.frequency - (int)t.feparams.dvb_feparams.frequency) <= 3000)
|
||||||
);
|
);
|
||||||
|
return ((satellitePosition == t.satellitePosition) &&
|
||||||
|
//(transport_stream_id == t.transport_stream_id) &&
|
||||||
|
//(original_network_id == t.original_network_id) &&
|
||||||
|
((polarization & 1) == (t.polarization & 1)) &&
|
||||||
|
(abs((int) feparams.dvb_feparams.frequency - (int)t.feparams.dvb_feparams.frequency) <= 100)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool transponder::compare(const transponder& t) const
|
bool transponder::compare(const transponder& t) const
|
||||||
@@ -76,13 +83,23 @@ bool transponder::compare(const transponder& t) const
|
|||||||
(dvb_feparams1->u.qam.modulation == dvb_feparams2->u.qam.modulation ||
|
(dvb_feparams1->u.qam.modulation == dvb_feparams2->u.qam.modulation ||
|
||||||
dvb_feparams1->u.qam.modulation == QAM_AUTO || dvb_feparams2->u.qam.modulation == QAM_AUTO)
|
dvb_feparams1->u.qam.modulation == QAM_AUTO || dvb_feparams2->u.qam.modulation == QAM_AUTO)
|
||||||
);
|
);
|
||||||
} else {
|
} else if (type == FE_QPSK) {
|
||||||
ret = (
|
ret = (
|
||||||
(t == (*this)) &&
|
(t == (*this)) &&
|
||||||
(dvb_feparams1->u.qpsk.symbol_rate == dvb_feparams2->u.qpsk.symbol_rate) &&
|
(dvb_feparams1->u.qpsk.symbol_rate == dvb_feparams2->u.qpsk.symbol_rate) &&
|
||||||
(dvb_feparams1->u.qpsk.fec_inner == dvb_feparams2->u.qpsk.fec_inner ||
|
(dvb_feparams1->u.qpsk.fec_inner == dvb_feparams2->u.qpsk.fec_inner ||
|
||||||
dvb_feparams1->u.qpsk.fec_inner == FEC_AUTO || dvb_feparams2->u.qpsk.fec_inner == FEC_AUTO)
|
dvb_feparams1->u.qpsk.fec_inner == FEC_AUTO || dvb_feparams2->u.qpsk.fec_inner == FEC_AUTO)
|
||||||
);
|
);
|
||||||
|
} else if (type == FE_OFDM) {
|
||||||
|
ret = ( (t == (*this)) &&
|
||||||
|
(dvb_feparams1->u.ofdm.bandwidth == dvb_feparams2->u.ofdm.bandwidth) &&
|
||||||
|
(dvb_feparams1->u.ofdm.code_rate_HP == dvb_feparams2->u.ofdm.code_rate_HP ||
|
||||||
|
dvb_feparams1->u.ofdm.code_rate_HP == FEC_AUTO || dvb_feparams2->u.ofdm.code_rate_HP == FEC_AUTO) &&
|
||||||
|
(dvb_feparams1->u.ofdm.code_rate_LP == dvb_feparams2->u.ofdm.code_rate_LP ||
|
||||||
|
dvb_feparams1->u.ofdm.code_rate_LP == FEC_AUTO || dvb_feparams2->u.ofdm.code_rate_LP == FEC_AUTO) &&
|
||||||
|
(dvb_feparams1->u.ofdm.constellation == dvb_feparams2->u.ofdm.constellation ||
|
||||||
|
dvb_feparams1->u.ofdm.constellation == QAM_AUTO || dvb_feparams2->u.ofdm.constellation == QAM_AUTO)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -98,12 +115,20 @@ void transponder::dumpServiceXml(FILE * fd)
|
|||||||
dvb_feparams->u.qam.symbol_rate, dvb_feparams->u.qam.fec_inner,
|
dvb_feparams->u.qam.symbol_rate, dvb_feparams->u.qam.fec_inner,
|
||||||
dvb_feparams->u.qam.modulation);
|
dvb_feparams->u.qam.modulation);
|
||||||
|
|
||||||
} else {
|
} else if (type == FE_QPSK) {
|
||||||
fprintf(fd, "\t\t<TS id=\"%04x\" on=\"%04x\" frq=\"%u\" inv=\"%hu\" sr=\"%u\" fec=\"%hu\" pol=\"%hu\">\n",
|
fprintf(fd, "\t\t<TS id=\"%04x\" on=\"%04x\" frq=\"%u\" inv=\"%hu\" sr=\"%u\" fec=\"%hu\" pol=\"%hu\">\n",
|
||||||
transport_stream_id, original_network_id,
|
transport_stream_id, original_network_id,
|
||||||
dvb_feparams->frequency, dvb_feparams->inversion,
|
dvb_feparams->frequency, dvb_feparams->inversion,
|
||||||
dvb_feparams->u.qpsk.symbol_rate, dvb_feparams->u.qpsk.fec_inner,
|
dvb_feparams->u.qpsk.symbol_rate, dvb_feparams->u.qpsk.fec_inner,
|
||||||
polarization);
|
polarization);
|
||||||
|
} else if (type == FE_OFDM) {
|
||||||
|
fprintf(fd, "\t\t<TS id=\"%04x\" on=\"%04x\" frq=\"%u\" inv=\"%hu\" bw=\"%u\" hp=\"%hu\" lp=\"%hu\" con=\"%u\" tm=\"%u\" gi=\"%u\" hi=\"%u\">\n",
|
||||||
|
transport_stream_id, original_network_id,
|
||||||
|
dvb_feparams->frequency, dvb_feparams->inversion,
|
||||||
|
dvb_feparams->u.ofdm.bandwidth, dvb_feparams->u.ofdm.code_rate_HP,
|
||||||
|
dvb_feparams->u.ofdm.code_rate_LP, dvb_feparams->u.ofdm.constellation,
|
||||||
|
dvb_feparams->u.ofdm.transmission_mode, dvb_feparams->u.ofdm.guard_interval,
|
||||||
|
dvb_feparams->u.ofdm.hierarchy_information);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,10 +140,14 @@ void transponder::dump(std::string label)
|
|||||||
printf("%s tp-id %016llx freq %d rate %d fec %d mod %d\n", label.c_str(),
|
printf("%s tp-id %016llx freq %d rate %d fec %d mod %d\n", label.c_str(),
|
||||||
transponder_id, dvb_feparams->frequency, dvb_feparams->u.qam.symbol_rate,
|
transponder_id, dvb_feparams->frequency, dvb_feparams->u.qam.symbol_rate,
|
||||||
dvb_feparams->u.qam.fec_inner, dvb_feparams->u.qam.modulation);
|
dvb_feparams->u.qam.fec_inner, dvb_feparams->u.qam.modulation);
|
||||||
else
|
else if (type == FE_QPSK)
|
||||||
printf("%s tp-id %016llx freq %d rate %d fec %d pol %d\n", label.c_str(),
|
printf("%s tp-id %016llx freq %d rate %d fec %d pol %d\n", label.c_str(),
|
||||||
transponder_id, dvb_feparams->frequency, dvb_feparams->u.qpsk.symbol_rate,
|
transponder_id, dvb_feparams->frequency, dvb_feparams->u.qpsk.symbol_rate,
|
||||||
dvb_feparams->u.qpsk.fec_inner, polarization);
|
dvb_feparams->u.qpsk.fec_inner, polarization);
|
||||||
|
else if (type == FE_OFDM)
|
||||||
|
printf("%s tp-id %016llx freq %d bw %d coderate %d\n", label.c_str(),
|
||||||
|
transponder_id, dvb_feparams->frequency, dvb_feparams->u.ofdm.bandwidth,
|
||||||
|
dvb_feparams->u.ofdm.code_rate_HP);
|
||||||
}
|
}
|
||||||
|
|
||||||
void transponder::ddump(std::string label)
|
void transponder::ddump(std::string label)
|
||||||
@@ -142,8 +171,10 @@ char transponder::pol(unsigned char p)
|
|||||||
std::string transponder::description()
|
std::string transponder::description()
|
||||||
{
|
{
|
||||||
char buf[128] = {0};
|
char buf[128] = {0};
|
||||||
char * f, *s, *m;
|
char *f, *s, *m, *f2;
|
||||||
struct dvb_frontend_parameters *dvb_feparams = &feparams.dvb_feparams;
|
struct dvb_frontend_parameters *dvb_feparams = &feparams.dvb_feparams;
|
||||||
|
const char *bw[4] = { "8MHz", "7MHz", "6MHz", "auto" };
|
||||||
|
int b;
|
||||||
|
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case FE_QPSK:
|
case FE_QPSK:
|
||||||
@@ -155,7 +186,15 @@ std::string transponder::description()
|
|||||||
snprintf(buf, sizeof(buf), "%d %d %s %s %s ", dvb_feparams->frequency/1000, dvb_feparams->u.qam.symbol_rate/1000, f, s, m);
|
snprintf(buf, sizeof(buf), "%d %d %s %s %s ", dvb_feparams->frequency/1000, dvb_feparams->u.qam.symbol_rate/1000, f, s, m);
|
||||||
break;
|
break;
|
||||||
case FE_OFDM:
|
case FE_OFDM:
|
||||||
|
CFrontend::getDelSys(type, dvb_feparams->u.ofdm.code_rate_HP, dvb_feparams->u.ofdm.constellation, f, s, m);
|
||||||
|
CFrontend::getDelSys(type, dvb_feparams->u.ofdm.code_rate_LP, dvb_feparams->u.ofdm.constellation, f2, s, m);
|
||||||
|
b = dvb_feparams->u.ofdm.bandwidth;
|
||||||
|
if (b > 3)
|
||||||
|
b = 3;
|
||||||
|
snprintf(buf, sizeof(buf), "%d %s %s %s %s ", dvb_feparams->frequency, bw[b], f, f2, m);
|
||||||
|
break;
|
||||||
case FE_ATSC:
|
case FE_ATSC:
|
||||||
|
snprintf(buf, sizeof(buf), "ATSC not yet supported ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return std::string(buf);
|
return std::string(buf);
|
||||||
|
Reference in New Issue
Block a user