diff options
| author | Fraxinas <andreas.frisch@multimedia-labs.de> | 2008-12-14 01:22:59 +0100 |
|---|---|---|
| committer | Fraxinas <andreas.frisch@multimedia-labs.de> | 2008-12-14 01:22:59 +0100 |
| commit | 56ac7a4a764a4251a851778df09967405aa9a930 (patch) | |
| tree | 43ec1be37fefc1ac4a6e03bb51e43b5f579ec9cc /lib/dvb | |
| parent | 5b4292943b2cf011b19929aa19c85a939cc72714 (diff) | |
| parent | b833353b5285a547eb18c079aa860c9ee2765d6e (diff) | |
| download | enigma2-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.cpp | 23 | ||||
| -rw-r--r-- | lib/dvb/frontend.h | 16 | ||||
| -rw-r--r-- | lib/dvb/frontendparms.h | 1 | ||||
| -rw-r--r-- | lib/dvb/idvb.h | 19 | ||||
| -rw-r--r-- | lib/dvb/sec.cpp | 28 | ||||
| -rw-r--r-- | lib/dvb/sec.h | 5 |
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); |
