aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/dvb/db.cpp29
-rw-r--r--lib/dvb/frontend.cpp51
-rw-r--r--lib/dvb/frontendparms.h13
-rw-r--r--lib/python/Screens/ScanSetup.py30
-rw-r--r--lib/python/Screens/ServiceInfo.py19
-rw-r--r--lib/service/servicedvb.cpp16
6 files changed, 125 insertions, 33 deletions
diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp
index 5fd0758e..2be0dd4c 100644
--- a/lib/dvb/db.cpp
+++ b/lib/dvb/db.cpp
@@ -327,8 +327,9 @@ void eDVBDB::loadServicelist(const char *file)
int frequency, symbol_rate, polarisation, fec, orbital_position, inversion,
system=eDVBFrontendParametersSatellite::System::DVB_S,
modulation=eDVBFrontendParametersSatellite::Modulation::QPSK,
- rolloff=eDVBFrontendParametersSatellite::RollOff::alpha_auto;
- sscanf(line+3, "%d:%d:%d:%d:%d:%d:%d:%d:%d", &frequency, &symbol_rate, &polarisation, &fec, &orbital_position, &inversion, &system, &modulation, &rolloff);
+ rolloff=eDVBFrontendParametersSatellite::RollOff::alpha_0_35,
+ pilot=eDVBFrontendParametersSatellite::Pilot::Unknown;
+ sscanf(line+3, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", &frequency, &symbol_rate, &polarisation, &fec, &orbital_position, &inversion, &system, &modulation, &rolloff, &pilot);
sat.frequency = frequency;
sat.symbol_rate = symbol_rate;
sat.polarisation = polarisation;
@@ -338,7 +339,8 @@ void eDVBDB::loadServicelist(const char *file)
sat.inversion = inversion;
sat.system = system;
sat.modulation = modulation;
- sat.roll_off = rolloff;
+ sat.rolloff = rolloff;
+ sat.pilot = pilot;
feparm->setDVBS(sat);
} else if (line[1]=='t')
{
@@ -484,14 +486,18 @@ void eDVBDB::saveServicelist()
{
if (sat.system == eDVBFrontendParametersSatellite::System::DVB_S2)
{
- fprintf(f, "\ts %d:%d:%d:%d:%d:%d:%d:%d:%d\n",
+ fprintf(f, "\ts %d:%d:%d:%d:%d:%d:%d:%d:%d",
sat.frequency, sat.symbol_rate,
sat.polarisation, sat.fec,
sat.orbital_position > 1800 ? sat.orbital_position - 3600 : sat.orbital_position,
sat.inversion,
sat.system,
sat.modulation,
- sat.roll_off);
+ sat.rolloff);
+ if (sat.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK)
+ fprintf(f, ":%d\n", sat.pilot);
+ else
+ fprintf(f, "\n");
}
else
{
@@ -766,7 +772,7 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje
return Py_False;
}
int tmp, *dest = NULL,
- modulation, system, freq, sr, pol, fec;
+ modulation, system, freq, sr, pol, fec, inv, pilot, rolloff;
char *end_ptr;
const Attribute *at;
std::string name;
@@ -828,6 +834,9 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje
sr = 0;
pol = -1;
fec = 0; // AUTO default
+ inv = 2; // AUTO default
+ pilot = 2; // AUTO default
+ rolloff = 0; // alpha 0.35
for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it)
{
// eDebug("\t\tattr: %s", at->name().c_str());
@@ -839,6 +848,9 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje
else if (name == "symbol_rate") dest = &sr;
else if (name == "polarization") dest = &pol;
else if (name == "fec_inner") dest = &fec;
+ else if (name == "inversion") dest = &inv;
+ else if (name == "rolloff") dest = &rolloff;
+ else if (name == "pilot") dest = &pilot;
if (dest)
{
tmp = strtol(at->value().c_str(), &end_ptr, 10);
@@ -848,7 +860,7 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje
}
if (freq && sr && pol != -1)
{
- tuple = PyTuple_New(7);
+ tuple = PyTuple_New(10);
PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(0));
PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(freq));
PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(sr));
@@ -856,6 +868,9 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje
PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong(fec));
PyTuple_SET_ITEM(tuple, 5, PyInt_FromLong(system));
PyTuple_SET_ITEM(tuple, 6, PyInt_FromLong(modulation));
+ PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong(inv));
+ PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong(rolloff));
+ PyTuple_SET_ITEM(tuple, 9, PyInt_FromLong(pilot));
PyList_Append(tplist, tuple);
Py_DECREF(tuple);
}
diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp
index 9f19ada1..d81c455c 100644
--- a/lib/dvb/frontend.cpp
+++ b/lib/dvb/frontend.cpp
@@ -125,6 +125,7 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto
if ( fec != FEC::fNone && fec > FEC::f9_10 )
fec = FEC::fAuto;
inversion = Inversion::Unknown;
+ pilot = Pilot::Unknown;
orbital_position = ((descriptor.getOrbitalPosition() >> 12) & 0xF) * 1000;
orbital_position += ((descriptor.getOrbitalPosition() >> 8) & 0xF) * 100;
orbital_position += ((descriptor.getOrbitalPosition() >> 4) & 0xF) * 10;
@@ -138,16 +139,16 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto
eDebug("satellite_delivery_descriptor non valid modulation type.. force QPSK");
modulation=QPSK;
}
- roll_off = descriptor.getRollOff();
+ rolloff = descriptor.getRollOff();
if (system == System::DVB_S2)
{
- eDebug("SAT DVB-S2 freq %d, %s, pos %d, sr %d, fec %d, modulation %d, roll_off %d",
+ eDebug("SAT DVB-S2 freq %d, %s, pos %d, sr %d, fec %d, modulation %d, rolloff %d",
frequency,
polarisation ? "hor" : "vert",
orbital_position,
symbol_rate, fec,
modulation,
- roll_off);
+ rolloff);
}
else
{
@@ -861,8 +862,43 @@ void fillDictWithSatelliteData(ePyObject dict, const FRONTENDPARAMETERS &parm, e
PutToDict(dict, "modulation", "QPSK" );
#endif
PutToDict(dict, "fec_inner", tmp);
- tmp = parm_u_qpsk_fec_inner > FEC_AUTO ?
- "DVB-S2" : "DVB-S";
+ if (parm_u_qpsk_fec_inner > FEC_AUTO)
+ {
+ switch(parm_inversion & 0xc)
+ {
+ default: // unknown rolloff
+ case 0: // 0.35
+ tmp = "ROLLOFF_0_35";
+ break;
+ case 4: // 0.25
+ tmp = "ROLLOFF_0_25";
+ break;
+ case 8: // 0.20
+ tmp = "ROLLOFF_0_20";
+ break;
+ }
+ PutToDict(dict, "rolloff", tmp);
+ if (parm_u_qpsk_fec_inner > FEC_S2_QPSK_9_10)
+ {
+ switch(parm_inversion & 0x30)
+ {
+ case 0: // pilot off
+ tmp = "PILOT_OFF";
+ break;
+ case 0x10: // pilot on
+ tmp = "PILOT_ON";
+ break;
+ case 0x20: // pilot auto
+ tmp = "PILOT_AUTO";
+ break;
+ }
+ PutToDict(dict, "pilot", tmp);
+ }
+ tmp = "DVB-S2";
+ }
+ else
+ tmp = "DVB-S";
+
PutToDict(dict, "system", tmp);
}
@@ -1657,9 +1693,12 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
eDebug("no valid fec for DVB-S2 set.. abort !!");
return -EINVAL;
}
- if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK)
+ parm_inversion |= (feparm.rolloff << 2); // Hack.. we use bit 2..3 of inversion param for rolloff
+ if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK) {
parm_u_qpsk_fec_inner = (fe_code_rate_t)((int)parm_u_qpsk_fec_inner+9);
// 8PSK fec driver values are decimal 9 bigger
+ parm_inversion |= (feparm.pilot << 4); // Hack.. we use bit 4..5 of inversion param for pilot
+ }
}
#endif
// FIXME !!! get frequency range from tuner
diff --git a/lib/dvb/frontendparms.h b/lib/dvb/frontendparms.h
index b8f47f43..c963a251 100644
--- a/lib/dvb/frontendparms.h
+++ b/lib/dvb/frontendparms.h
@@ -37,14 +37,21 @@ struct eDVBFrontendParametersSatellite
Auto, QPSK, M8PSK, QAM_16
};
};
- struct RollOff { // dvb-s2
+ // dvb-s2
+ struct RollOff {
enum {
- alpha_0_35, alpha_0_25, alpha_0_20, alpha_auto
+ alpha_0_35, alpha_0_25, alpha_0_20
+ };
+ };
+ // only 8psk
+ struct Pilot {
+ enum {
+ Off, On, Unknown
};
};
bool no_rotor_command_on_tune;
unsigned int frequency, symbol_rate;
- int polarisation, fec, inversion, orbital_position, system, modulation, roll_off;
+ int polarisation, fec, inversion, orbital_position, system, modulation, rolloff, pilot;
};
SWIG_ALLOW_OUTPUT_SIMPLE(eDVBFrontendParametersSatellite);
diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py
index 2c636530..be0f87e4 100644
--- a/lib/python/Screens/ScanSetup.py
+++ b/lib/python/Screens/ScanSetup.py
@@ -84,10 +84,12 @@ def getInitialTransponderList(tlist, pos):
parm.symbol_rate = x[2]
parm.polarisation = x[3]
parm.fec = x[4]
- parm.inversion = 2 # AUTO
+ parm.inversion = x[7]
parm.orbital_position = pos
parm.system = x[5]
parm.modulation = x[6]
+ parm.rolloff = x[8]
+ parm.pilot = x[9]
tlist.append(parm)
def getInitialCableTransponderList(tlist, nim):
@@ -335,6 +337,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
self.typeOfScanEntry = None
self.systemEntry = None
+ self.modulationEntry = None
nim = nimmanager.nim_slots[index_to_scan]
if nim.isCompatible("DVB-S"):
self.typeOfScanEntry = getConfigListEntry(_("Type of scan"), self.scan_type)
@@ -364,7 +367,11 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
elif self.scan_sat.system.value == "dvb-s2":
self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
- self.list.append(getConfigListEntry(_('Modulation'), self.scan_sat.modulation))
+ self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
+ self.list.append(self.modulationEntry)
+ self.list.append(getConfigListEntry(_('Rolloff'), self.scan_sat.rolloff))
+ if self.scan_sat.modulation.value == "8psk":
+ self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
self.list.append(getConfigListEntry(_("Network scan"), self.scan_networkScan))
elif self.scan_type.value == "single_satellite":
self.updateSatList()
@@ -438,7 +445,8 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
print "cur is", cur
if cur == self.typeOfScanEntry or \
cur == self.tunerEntry or \
- cur == self.systemEntry:
+ cur == self.systemEntry or \
+ (self.modulationEntry and self.systemEntry[1].value == "dvb-s2" and cur == self.modulationEntry):
self.createSetup()
def createConfig(self, frontendData):
@@ -482,10 +490,12 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
defaultSat["inversion"] = {"INVERSION_OFF": "off", "INVERSION_ON": "on", "INVERSION_AUTO": "auto"}[frontendData.get("inversion", "INVERSION_AUTO")]
defaultSat["symbolrate"] = int(frontendData.get("symbol_rate", 0) / 1000)
defaultSat["polarization"] = {"HORIZONTAL": "horizontal", "VERTICAL": "vertical", "CIRCULAR_LEFT": "circular_left", "CIRCULAR_RIGHT": "circular_right", "UNKNOWN": None}[frontendData.get("polarization", "HORIZONTAL")]
-
+
if frontendData.get("system", "DVB-S") == "DVB-S2":
defaultSat["fec_s2"] = {"FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_4_5": "4_5", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_8_9": "8_9", "FEC_9_10": "9_10"} \
[frontendData.get("fec_inner", "FEC_AUTO")]
+ defaultSat["rolloff"] = {"ROLLOFF_0_35" : "0_35", "ROLLOFF_0_25" : "0_25", "0_20" : "ROLLOFF_0_20"}[frontendData.get("rolloff", "ROLLOFF_0_35")]
+ defaultSat["pilot"] = {"PILOT_ON" : "on", "PILOT_OFF" : "off", "PILOT_AUTO" : "auto"}[frontendData.get("pilot", "PILOT_AUTO")]
else:
defaultSat["fec"] = {"FEC_AUTO": "auto", "FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_NONE": "none"} \
[frontendData.get("fec_inner", "FEC_AUTO")]
@@ -534,6 +544,8 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
self.scan_sat.fec = ConfigSelection(default = defaultSat["fec"], choices = [("auto", _("Auto")), ("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("none", _("None"))])
self.scan_sat.fec_s2 = ConfigSelection(default = defaultSat["fec_s2"], choices = [("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("3_5", "3/5"), ("4_5", "4/5"), ("5_6", "5/6"), ("7_8", "7/8"), ("8_9", "8/9"), ("9_10", "9/10")])
self.scan_sat.modulation = ConfigSelection(default = defaultSat["modulation"], choices = [("qpsk", "QPSK"), ("8psk", "8PSK")])
+ self.scan_sat.rolloff = ConfigSelection(default = defaultSat.get("rolloff", "0_35"), choices = [("0_35", "0.35"), ("0_25", "0.25"), ("0_20", "0.20")])
+ self.scan_sat.pilot = ConfigSelection(default = defaultSat.get("pilot", "auto"), choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))])
# cable
self.scan_cab.frequency = ConfigInteger(default = defaultCab["frequency"], limits = (50, 999))
@@ -593,8 +605,8 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
"none": 15
}
- def addSatTransponder(self, tlist, frequency, symbol_rate, polarisation, fec, inversion, orbital_position, system, modulation):
- print "Add Sat: frequ: " + str(frequency) + " symbol: " + str(symbol_rate) + " pol: " + str(polarisation) + " fec: " + str(self.fecmap[fec]) + " inversion: " + str(inversion) + " modulation: " + str(modulation) + " system: " + str(system)
+ def addSatTransponder(self, tlist, frequency, symbol_rate, polarisation, fec, inversion, orbital_position, system, modulation, rolloff, pilot):
+ print "Add Sat: frequ: " + str(frequency) + " symbol: " + str(symbol_rate) + " pol: " + str(polarisation) + " fec: " + str(self.fecmap[fec]) + " inversion: " + str(inversion) + " modulation: " + str(modulation) + " system: " + str(system) + " rolloff" + str(rolloff) + " pilot" + str(pilot)
print "orbpos: " + str(orbital_position)
parm = eDVBFrontendParametersSatellite()
if modulation == 1:
@@ -608,6 +620,8 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
parm.fec = self.fecmap[fec]
parm.inversion = inversion
parm.orbital_position = int(orbital_position)
+ parm.rolloff = int(rolloff)
+ parm.pilot = int(pilot)
tlist.append(parm)
def addCabTransponder(self, tlist, frequency, symbol_rate, modulation, fec, inversion):
@@ -662,7 +676,9 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
self.scan_sat.inversion.index,
orbpos,
self.scan_sat.system.index,
- self.scan_sat.modulation.index)
+ self.scan_sat.modulation.index,
+ self.scan_sat.rolloff.index,
+ self.scan_sat.pilot.index)
flags = self.scan_networkScan.value and eComponentScan.scanNetworkSearch or 0
extFlags = False
elif self.scan_type.value == "single_satellite":
diff --git a/lib/python/Screens/ServiceInfo.py b/lib/python/Screens/ServiceInfo.py
index aa3dc9d7..4606f883 100644
--- a/lib/python/Screens/ServiceInfo.py
+++ b/lib/python/Screens/ServiceInfo.py
@@ -132,16 +132,17 @@ class ServiceInfo(Screen):
else:
if self.transponder_info:
conv = { "type" : _("Transponder Type"),
+ "system" : _("System"),
+ "modulation" : _("Modulation"),
+ "orbital position" : _("Orbital Position"),
"frequency" : _("Frequency"),
"symbolrate" : _("Symbolrate"),
- "orbital position" : _("Orbital Position"),
- "inversion" : _("Inversion"),
- "fec inner" : _("FEC"),
- "modulation" : _("Modulation"),
+ "bandwidth" : _("Bandwidth"),
"polarization" : _("Polarization"),
+ "inversion" : _("Inversion"),
+ "pilot" : _("Pilot"),
"roll off" : _("Rolloff"),
- "system" : _("System"),
- "bandwidth" : _("Bandwidth"),
+ "fec inner" : _("FEC"),
"code rate lp" : _("Coderate LP"),
"code rate hp" : _("Coderate HP"),
"constellation" : _("Constellation"),
@@ -190,7 +191,9 @@ class ServiceInfo(Screen):
("Symbolrate", frontendData["symbol_rate"], TYPE_VALUE_DEC),
("Polarization", frontendData["polarization"], TYPE_TEXT),
("Inversion", frontendData["inversion"], TYPE_TEXT),
- ("FEC inner", frontendData["fec_inner"], TYPE_TEXT))
+ ("FEC inner", frontendData["fec_inner"], TYPE_TEXT),
+ ("Pilot", frontendData.get("pilot", None), TYPE_TEXT),
+ ("Rolloff", frontendData.get("rolloff", None), TYPE_TEXT))
elif frontendData["tuner_type"] == "DVB-C":
return (("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT),
("Type", frontendData["tuner_type"], TYPE_TEXT),
@@ -217,6 +220,8 @@ class ServiceInfo(Screen):
tlist = [ ]
for item in Labels:
+ if item[1] is None:
+ continue;
value = item[1]
if len(item) < 4:
tlist.append(ServiceInfoListEntry(item[0]+":", value, item[2]))
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index 0da33635..ae55aa62 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -166,15 +166,25 @@ void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &fe
default:
case eDVBFrontendParametersSatellite::System::DVB_S: tmp="DVB-S"; break;
case eDVBFrontendParametersSatellite::System::DVB_S2:
- switch(feparm.roll_off)
+ switch(feparm.rolloff)
{
+ default:
case eDVBFrontendParametersSatellite::RollOff::alpha_0_35: tmp="0.35"; break;
case eDVBFrontendParametersSatellite::RollOff::alpha_0_25: tmp="0.25"; break;
case eDVBFrontendParametersSatellite::RollOff::alpha_0_20: tmp="0.20"; break;
- default:
- case eDVBFrontendParametersSatellite::RollOff::alpha_auto: tmp="AUTO"; break;
}
PutToDict(dict, "roll off", tmp);
+ if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK)
+ {
+ switch(feparm.pilot)
+ {
+ case eDVBFrontendParametersSatellite::Pilot::On: tmp="ON"; break;
+ case eDVBFrontendParametersSatellite::Pilot::Off: tmp="OFF"; break;
+ default:
+ case eDVBFrontendParametersSatellite::Pilot::Unknown: tmp="AUTO"; break;
+ }
+ PutToDict(dict, "pilot", tmp);
+ }
tmp="DVB-S2";
break;
}