From: Andreas Monzner Date: Sat, 6 Sep 2008 12:44:10 +0000 (+0000) Subject: allow more complicated sat configuration X-Git-Tag: 2.6.0~895 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/53c757daa021cf7b742bd686a7cbd884d8612444?ds=sidebyside allow more complicated sat configuration --- diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index ebf22374..a2cce94d 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -488,7 +488,7 @@ class iDVBSatelliteEquipmentControl: public iObject { public: virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int frontend_id, unsigned int timeout)=0; - virtual int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *fe, int frontend_id)=0; + virtual int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *fe, int frontend_id, int *highest_score_lnb=0)=0; virtual void setRotorMoving(bool)=0; }; diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index 10b2c2c1..b1f421c0 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -114,9 +114,12 @@ eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl(eSmartPtrList 2200000) ret=0; } + if (ret > score) + { + score = ret; + if (highest_score_lnb) + *highest_score_lnb = idx; + } } } } - if (ret && satcount) - ret -= (satcount-1); - if (ret && m_not_linked_slot_mask & slot_id) - ret += 5; // increase score for tuners with direct sat connection - return ret; + if (score && satcount) + score -= (satcount-1); + if (score && m_not_linked_slot_mask & slot_id) + score += 5; // increase score for tuners with direct sat connection + return score; } bool need_turn_fast(int turn_speed) @@ -299,11 +309,10 @@ bool need_turn_fast(int turn_speed) RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int slot_id, unsigned int tunetimeout) { - for (int idx=0; idx <= m_lnbidx; ++idx ) + int lnb_idx = -1; + if (canTune(sat, &frontend, slot_id, &lnb_idx)) { - eDVBSatelliteLNBParameters &lnb_param = m_lnbs[idx]; - if (!(lnb_param.slot_mask & slot_id)) // lnb for correct tuner? - continue; + eDVBSatelliteLNBParameters &lnb_param = m_lnbs[lnb_idx]; eDVBSatelliteDiseqcParameters &di_param = lnb_param.m_diseqc_parameters; eDVBSatelliteRotorParameters &rotor_param = lnb_param.m_rotor_parameters; @@ -842,6 +851,8 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA return 0; } } + else + eFatal("canTune failed in sec prepare!!! this should never ever happen!"); eDebug("found no useable satellite configuration for orbital position (%d)", sat.orbital_position ); return -1; diff --git a/lib/dvb/sec.h b/lib/dvb/sec.h index cba9fa41..e630df91 100644 --- a/lib/dvb/sec.h +++ b/lib/dvb/sec.h @@ -288,7 +288,7 @@ public: #ifndef SWIG eDVBSatelliteEquipmentControl(eSmartPtrList &avail_frontends); RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int frontend_id, unsigned int tunetimeout); - int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *, int frontend_id); + int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *, int frontend_id, int *highest_score_lnb=0); bool currentLNBValid() { return m_lnbidx > -1 && m_lnbidx < (int)(sizeof(m_lnbs) / sizeof(eDVBSatelliteLNBParameters)); } #endif static eDVBSatelliteEquipmentControl *getInstance() { return instance; }