aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb
diff options
context:
space:
mode:
authorFraxinas <andreas.frisch@multimedia-labs.de>2008-12-14 01:22:59 +0100
committerFraxinas <andreas.frisch@multimedia-labs.de>2008-12-14 01:22:59 +0100
commit56ac7a4a764a4251a851778df09967405aa9a930 (patch)
tree43ec1be37fefc1ac4a6e03bb51e43b5f579ec9cc /lib/dvb
parent5b4292943b2cf011b19929aa19c85a939cc72714 (diff)
parentb833353b5285a547eb18c079aa860c9ee2765d6e (diff)
downloadenigma2-56ac7a4a764a4251a851778df09967405aa9a930.tar.gz
enigma2-56ac7a4a764a4251a851778df09967405aa9a930.zip
Merge branch 'master' of fraxinas@git.opendreambox.org:/git/enigma2
Diffstat (limited to 'lib/dvb')
-rw-r--r--lib/dvb/frontend.cpp23
-rw-r--r--lib/dvb/frontend.h16
-rw-r--r--lib/dvb/frontendparms.h1
-rw-r--r--lib/dvb/idvb.h19
-rw-r--r--lib/dvb/sec.cpp28
-rw-r--r--lib/dvb/sec.h5
6 files changed, 66 insertions, 26 deletions
diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp
index af974c81..284844dc 100644
--- a/lib/dvb/frontend.cpp
+++ b/lib/dvb/frontend.cpp
@@ -718,6 +718,7 @@ int eDVBFrontend::readFrontendData(int type)
case signalQuality:
case signalQualitydB: /* this will move into the driver */
{
+ int sat_max = 1600; // for stv0288 / bsbe2
int ret = 0x12345678;
uint16_t snr=0;
if (m_simulate)
@@ -779,8 +780,8 @@ int eDVBFrontend::readFrontendData(int type)
snr_in_db = fval1;
}
#endif
+ sat_max = 1750;
ret = (int)(snr_in_db * 100);
- ret -= 150; // -1.5db for latest bcm4501 firmware..
}
else if (strstr(m_description, "Alps BSBE1 C01A") ||
!strcmp(m_description, "Alps -S(STV0288)"))
@@ -830,6 +831,7 @@ int eDVBFrontend::readFrontendData(int type)
!strcmp(m_description, "Philips -S") ||
!strcmp(m_description, "LG -S") )
{
+ sat_max = 1500;
ret = (int)((snr-39075)/17.647);
} else if (!strcmp(m_description, "Alps BSBE2"))
{
@@ -858,8 +860,8 @@ int eDVBFrontend::readFrontendData(int type)
return snr;
switch(m_type)
{
- case feSatellite: // we assume a max of 16.0db here
- return ret >= 1600 ? 65536 : ret * 65536 / 1600;
+ case feSatellite:
+ return ret >= sat_max ? 65536 : ret * 65536 / sat_max;
case feCable: // we assume a max of 42db here
return ret >= 4200 ? 65536 : ret * 65536 / 4200;
case feTerrestrial: // we assume a max of 24db here
@@ -1857,6 +1859,20 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
res = m_sec->prepare(*this, parm, feparm, 1 << m_slotid, tunetimeout);
if (!res)
{
+#if HAVE_DVB_API_VERSION >= 3
+ eDebugNoSimulate("prepare_sat System %d Freq %d Pol %d SR %d INV %d FEC %d orbpos %d system %d modulation %d pilot %d, rolloff %d",
+ feparm.system,
+ feparm.frequency,
+ feparm.polarisation,
+ feparm.symbol_rate,
+ feparm.inversion,
+ feparm.fec,
+ feparm.orbital_position,
+ feparm.system,
+ feparm.modulation,
+ feparm.pilot,
+ feparm.rolloff);
+#else
eDebugNoSimulate("prepare_sat System %d Freq %d Pol %d SR %d INV %d FEC %d orbpos %d",
feparm.system,
feparm.frequency,
@@ -1865,6 +1881,7 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
feparm.inversion,
feparm.fec,
feparm.orbital_position);
+#endif
parm_u_qpsk_symbol_rate = feparm.symbol_rate;
switch (feparm.inversion)
{
diff --git a/lib/dvb/frontend.h b/lib/dvb/frontend.h
index 06ed12cc..6e272aca 100644
--- a/lib/dvb/frontend.h
+++ b/lib/dvb/frontend.h
@@ -20,22 +20,22 @@ public:
{
}
- RESULT getSystem(int &type) const;
- RESULT getDVBS(eDVBFrontendParametersSatellite &) const;
- RESULT getDVBC(eDVBFrontendParametersCable &) const;
- RESULT getDVBT(eDVBFrontendParametersTerrestrial &) const;
+ SWIG_VOID(RESULT) getSystem(int &SWIG_OUTPUT) const;
+ SWIG_VOID(RESULT) getDVBS(eDVBFrontendParametersSatellite &SWIG_OUTPUT) const;
+ SWIG_VOID(RESULT) getDVBC(eDVBFrontendParametersCable &SWIG_OUTPUT) const;
+ SWIG_VOID(RESULT) getDVBT(eDVBFrontendParametersTerrestrial &SWIG_OUTPUT) const;
RESULT setDVBS(const eDVBFrontendParametersSatellite &p, bool no_rotor_command_on_tune=false);
RESULT setDVBC(const eDVBFrontendParametersCable &p);
RESULT setDVBT(const eDVBFrontendParametersTerrestrial &p);
-
+ SWIG_VOID(RESULT) getFlags(unsigned int &SWIG_NAMED_OUTPUT(flags)) const { flags = m_flags; return 0; }
+ RESULT setFlags(unsigned int flags) { m_flags = flags; return 0; }
+#ifndef SWIG
RESULT calculateDifference(const iDVBFrontendParameters *parm, int &, bool exact) const;
RESULT getHash(unsigned long &) const;
RESULT calcLockTimeout(unsigned int &) const;
-
- RESULT getFlags(unsigned int &flags) const { flags = m_flags; return 0; }
- RESULT setFlags(unsigned int flags) { m_flags = flags; return 0; }
+#endif
};
#ifndef SWIG
diff --git a/lib/dvb/frontendparms.h b/lib/dvb/frontendparms.h
index c963a251..961dfd00 100644
--- a/lib/dvb/frontendparms.h
+++ b/lib/dvb/frontendparms.h
@@ -43,7 +43,6 @@ struct eDVBFrontendParametersSatellite
alpha_0_35, alpha_0_25, alpha_0_20
};
};
- // only 8psk
struct Pilot {
enum {
Off, On, Unknown
diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h
index 5fc633aa..9eaac596 100644
--- a/lib/dvb/idvb.h
+++ b/lib/dvb/idvb.h
@@ -404,15 +404,16 @@ class iDVBFrontendParameters: public iObject
#endif
public:
enum { flagOnlyFree = 1 };
- virtual RESULT getSystem(int &SWIG_OUTPUT) const = 0;
- virtual RESULT getDVBS(eDVBFrontendParametersSatellite &SWIG_OUTPUT) const = 0;
- virtual RESULT getDVBC(eDVBFrontendParametersCable &SWIG_OUTPUT) const = 0;
- virtual RESULT getDVBT(eDVBFrontendParametersTerrestrial &SWIG_OUTPUT) const = 0;
-
- virtual RESULT calculateDifference(const iDVBFrontendParameters *parm, int &SWIG_OUTPUT, bool exact) const = 0;
- virtual RESULT getHash(unsigned long &SWIG_OUTPUT) const = 0;
- virtual RESULT calcLockTimeout(unsigned int &) const = 0;
- virtual RESULT getFlags(unsigned int &) const = 0;
+ virtual SWIG_VOID(RESULT) getSystem(int &SWIG_OUTPUT) const = 0;
+ virtual SWIG_VOID(RESULT) getDVBS(eDVBFrontendParametersSatellite &SWIG_OUTPUT) const = 0;
+ virtual SWIG_VOID(RESULT) getDVBC(eDVBFrontendParametersCable &SWIG_OUTPUT) const = 0;
+ virtual SWIG_VOID(RESULT) getDVBT(eDVBFrontendParametersTerrestrial &SWIG_OUTPUT) const = 0;
+ virtual SWIG_VOID(RESULT) getFlags(unsigned int &SWIG_OUTPUT) const = 0;
+#ifndef SWIG
+ virtual SWIG_VOID(RESULT) calculateDifference(const iDVBFrontendParameters *parm, int &, bool exact) const = 0;
+ virtual SWIG_VOID(RESULT) getHash(unsigned long &) const = 0;
+ virtual SWIG_VOID(RESULT) calcLockTimeout(unsigned int &) const = 0;
+#endif
};
SWIG_TEMPLATE_TYPEDEF(ePtr<iDVBFrontendParameters>, iDVBFrontendParametersPtr);
diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp
index 751a5453..1022b955 100644
--- a/lib/dvb/sec.cpp
+++ b/lib/dvb/sec.cpp
@@ -140,7 +140,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
{
bool rotor=false;
eDVBSatelliteLNBParameters &lnb_param = m_lnbs[idx];
- if ( lnb_param.slot_mask & slot_id ) // lnb for correct tuner?
+ if ( lnb_param.m_slot_mask & slot_id ) // lnb for correct tuner?
{
int ret = 0;
eDVBSatelliteDiseqcParameters &di_param = lnb_param.m_diseqc_parameters;
@@ -297,6 +297,9 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
ret=0;
}
+ if (ret && lnb_param.m_prio != -1)
+ ret = lnb_param.m_prio;
+
eSecDebugNoSimulate("ret %d, score old %d", ret, score);
if (ret > score)
{
@@ -309,7 +312,12 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
}
}
if (score && satcount)
- score -= (satcount-1);
+ {
+ if (score > (satcount-1))
+ score -= (satcount-1);
+ else
+ score = 1; // min score
+ }
if (score && direct_connected)
score += 5; // increase score for tuners with direct sat connection
eSecDebugNoSimulate("final score %d", score);
@@ -963,7 +971,8 @@ RESULT eDVBSatelliteEquipmentControl::clear()
for (int i=0; i <= m_lnbidx; ++i)
{
m_lnbs[i].m_satellites.clear();
- m_lnbs[i].slot_mask = 0;
+ m_lnbs[i].m_slot_mask = 0;
+ m_lnbs[i].m_prio = -1; // auto
}
m_lnbidx=-1;
@@ -1021,7 +1030,7 @@ RESULT eDVBSatelliteEquipmentControl::setLNBSlotMask(int slotmask)
{
eSecDebug("eDVBSatelliteEquipmentControl::setLNBSlotMask(%d)", slotmask);
if ( currentLNBValid() )
- m_lnbs[m_lnbidx].slot_mask = slotmask;
+ m_lnbs[m_lnbidx].m_slot_mask = slotmask;
else
return -ENOENT;
return 0;
@@ -1067,6 +1076,17 @@ RESULT eDVBSatelliteEquipmentControl::setLNBIncreasedVoltage(bool onoff)
return 0;
}
+RESULT eDVBSatelliteEquipmentControl::setLNBPrio(int prio)
+{
+ eSecDebug("eDVBSatelliteEquipmentControl::setLNBPrio(%d)", prio);
+ if ( currentLNBValid() )
+ m_lnbs[m_lnbidx].m_prio = prio;
+ else
+ return -ENOENT;
+ return 0;
+}
+
+
/* DiSEqC Specific Parameters */
RESULT eDVBSatelliteEquipmentControl::setDiSEqCMode(int diseqcmode)
{
diff --git a/lib/dvb/sec.h b/lib/dvb/sec.h
index 27dcedd5..2efd0b49 100644
--- a/lib/dvb/sec.h
+++ b/lib/dvb/sec.h
@@ -231,7 +231,7 @@ public:
#ifndef SWIG
t_12V_relais_state m_12V_relais_state; // 12V relais output on/off
- __u8 slot_mask; // useable by slot ( 1 | 2 | 4...)
+ int m_slot_mask; // useable by slot ( 1 | 2 | 4...)
unsigned int m_lof_hi, // for 2 band universal lnb 10600 Mhz (high band offset frequency)
m_lof_lo, // for 2 band universal lnb 9750 Mhz (low band offset frequency)
@@ -242,6 +242,8 @@ public:
std::map<int, eDVBSatelliteSwitchParameters> m_satellites;
eDVBSatelliteDiseqcParameters m_diseqc_parameters;
eDVBSatelliteRotorParameters m_rotor_parameters;
+
+ int m_prio; // to override automatic tuner management ... -1 is Auto
#endif
};
@@ -304,6 +306,7 @@ public:
RESULT setLNBLOFH(int lofh);
RESULT setLNBThreshold(int threshold);
RESULT setLNBIncreasedVoltage(bool onoff);
+ RESULT setLNBPrio(int prio);
/* DiSEqC Specific Parameters */
RESULT setDiSEqCMode(int diseqcmode);
RESULT setToneburst(int toneburst);