From: Andreas Monzner Date: Mon, 3 Jul 2006 13:11:34 +0000 (+0000) Subject: update unscanned transponders in toScan list with nit values X-Git-Tag: 2.6.0~3224 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/c650b2ace739188d451031e19d116a4669a61326 update unscanned transponders in toScan list with nit values --- diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index 352f3388..25eb9766 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -263,7 +263,7 @@ RESULT eDVBFrontendParameters::setDVBT(const eDVBFrontendParametersTerrestrial & return 0; } -RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters *parm, int &diff) const +RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters *parm, int &diff, bool exact) const { if (!parm) return -1; @@ -288,6 +288,8 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters diff = 1<<29; else if (sat.polarisation != osat.polarisation) diff = 1<<28; + else if (exact && sat.fec != osat.fec && sat.fec != eDVBFrontendParametersSatellite::FEC::fAuto && osat.fec != eDVBFrontendParametersSatellite::FEC::fAuto) + diff = 1<<27; else { diff = abs(sat.frequency - osat.frequency); @@ -300,24 +302,54 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters if (parm->getDVBC(ocable)) return -2; - if (cable.modulation != ocable.modulation && cable.modulation != eDVBFrontendParametersCable::Modulation::Auto && ocable.modulation != eDVBFrontendParametersCable::Modulation::Auto) + if (exact && cable.modulation != ocable.modulation + && cable.modulation != eDVBFrontendParametersCable::Modulation::Auto + && ocable.modulation != eDVBFrontendParametersCable::Modulation::Auto) diff = 1 << 29; - else if (cable.inversion != ocable.inversion && cable.inversion != eDVBFrontendParametersCable::Inversion::Unknown && ocable.inversion != eDVBFrontendParametersCable::Inversion::Unknown) - diff = 1 << 28; + else if (exact && cable.fec_inner != ocable.fec_inner && cable.fec_inner != eDVBFrontendParametersCable::FEC::fAuto && ocable.fec_inner != eDVBFrontendParametersCable::FEC::fAuto) + diff = 1 << 27; else { diff = abs(cable.frequency - ocable.frequency); diff += abs(cable.symbol_rate - ocable.symbol_rate); } - return 0; case iDVBFrontend::feTerrestrial: eDVBFrontendParametersTerrestrial oterrestrial; if (parm->getDVBT(oterrestrial)) return -2; - diff = abs(terrestrial.frequency - oterrestrial.frequency); + if (exact && oterrestrial.bandwidth != terrestrial.bandwidth && + oterrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto && + terrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto) + diff = 1 << 30; + else if (exact && oterrestrial.modulation != terrestrial.modulation && + oterrestrial.modulation != eDVBFrontendParametersTerrestrial::Modulation::Auto && + terrestrial.modulation != eDVBFrontendParametersTerrestrial::Modulation::Auto) + diff = 1 << 30; + else if (exact && oterrestrial.transmission_mode != terrestrial.transmission_mode && + oterrestrial.transmission_mode != eDVBFrontendParametersTerrestrial::TransmissionMode::TMAuto && + terrestrial.transmission_mode != eDVBFrontendParametersTerrestrial::TransmissionMode::TMAuto) + diff = 1 << 30; + else if (exact && oterrestrial.guard_interval != terrestrial.guard_interval && + oterrestrial.guard_interval != eDVBFrontendParametersTerrestrial::GuardInterval::GI_Auto && + terrestrial.guard_interval != eDVBFrontendParametersTerrestrial::GuardInterval::GI_Auto) + diff = 1 << 30; + else if (exact && oterrestrial.hierarchy != terrestrial.hierarchy && + oterrestrial.hierarchy != eDVBFrontendParametersTerrestrial::Hierarchy::HAuto && + terrestrial.hierarchy != eDVBFrontendParametersTerrestrial::Hierarchy::HAuto) + diff = 1 << 30; + else if (exact && oterrestrial.code_rate_LP != terrestrial.code_rate_LP && + oterrestrial.code_rate_LP != eDVBFrontendParametersTerrestrial::FEC::fAuto && + terrestrial.code_rate_LP != eDVBFrontendParametersTerrestrial::FEC::fAuto) + diff = 1 << 30; + else if (exact && oterrestrial.code_rate_HP != terrestrial.code_rate_HP && + oterrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC::fAuto && + terrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC::fAuto) + diff = 1 << 30; + else + diff = abs(terrestrial.frequency - oterrestrial.frequency); return 0; default: return -1; diff --git a/lib/dvb/frontend.h b/lib/dvb/frontend.h index 3670ceb8..ab8c4479 100644 --- a/lib/dvb/frontend.h +++ b/lib/dvb/frontend.h @@ -24,7 +24,7 @@ public: RESULT setDVBC(const eDVBFrontendParametersCable &p); RESULT setDVBT(const eDVBFrontendParametersTerrestrial &p); - RESULT calculateDifference(const iDVBFrontendParameters *parm, int &SWIG_OUTPUT) const; + RESULT calculateDifference(const iDVBFrontendParameters *parm, int &SWIG_OUTPUT, bool exact) const; RESULT getHash(unsigned long &SWIG_OUTPUT) const; }; diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index 2c80a9b8..5c427e7a 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -362,7 +362,7 @@ public: 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) const = 0; + virtual RESULT calculateDifference(const iDVBFrontendParameters *parm, int &SWIG_OUTPUT, bool exact) const = 0; virtual RESULT getHash(unsigned long &SWIG_OUTPUT) const = 0; }; diff --git a/lib/dvb/scan.cpp b/lib/dvb/scan.cpp index c4d4c6f4..e981123c 100644 --- a/lib/dvb/scan.cpp +++ b/lib/dvb/scan.cpp @@ -250,20 +250,23 @@ void eDVBScan::addKnownGoodChannel(const eDVBChannelID &chid, iDVBFrontendParame void eDVBScan::addChannelToScan(const eDVBChannelID &chid, iDVBFrontendParameters *feparm) { /* check if we don't already have that channel ... */ - + /* ... in the list of channels to scan */ for (std::list >::const_iterator i(m_ch_toScan.begin()); i != m_ch_toScan.end(); ++i) if (sameChannel(*i, feparm)) + { + *i = feparm; // update return; + } /* ... in the list of successfully scanned channels */ for (std::list >::const_iterator i(m_ch_scanned.begin()); i != m_ch_scanned.end(); ++i) if (sameChannel(*i, feparm)) return; - + /* ... in the list of unavailable channels */ for (std::list >::const_iterator i(m_ch_unavailable.begin()); i != m_ch_unavailable.end(); ++i) - if (sameChannel(*i, feparm)) + if (sameChannel(*i, feparm, true)) return; /* ... on the current channel */ @@ -274,10 +277,10 @@ void eDVBScan::addChannelToScan(const eDVBChannelID &chid, iDVBFrontendParameter m_ch_toScan.push_front(feparm); // better.. then the rotor not turning wild from east to west :) } -int eDVBScan::sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2) const +int eDVBScan::sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2, bool exact) const { int diff; - if (ch1->calculateDifference(ch2, diff)) + if (ch1->calculateDifference(ch2, diff, exact)) return 0; if (diff < 4000) // more than 4mhz difference? return 1; diff --git a/lib/dvb/scan.h b/lib/dvb/scan.h index 0f32d678..656817f9 100644 --- a/lib/dvb/scan.h +++ b/lib/dvb/scan.h @@ -59,8 +59,9 @@ private: void addKnownGoodChannel(const eDVBChannelID &chid, iDVBFrontendParameters *feparm); void addChannelToScan(const eDVBChannelID &chid, iDVBFrontendParameters *feparm); - int sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2) const; - + + int sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2, bool exact=false) const; + void channelDone(); Signal1 m_event;