From e768f7667ec5da0e331725de8a582365358cf7e3 Mon Sep 17 00:00:00 2001 From: Andreas Monzner Date: Wed, 16 Nov 2005 16:50:27 +0000 Subject: auto tuner selection is now working (this breaks allocateRawChannel..) TODO: handling for linked tuners (loop through) --- lib/dvb/sec.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'lib/dvb/sec.cpp') diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index e3fbf26f..aaf459fb 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -62,6 +62,40 @@ eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl() setToneMode(eDVBSatelliteSwitchParameters::HILO); } +int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite &sat, iDVBFrontend *fe, int frontend_id ) +{ + int ret=0; + + for (int idx=0; idx <= m_lnbidx; ++idx ) + { + eDVBSatelliteLNBParameters &lnb_param = m_lnbs[idx]; + if ( lnb_param.tuner_mask & frontend_id ) // lnb for correct tuner? + { + eDVBSatelliteDiseqcParameters &di_param = lnb_param.m_diseqc_parameters; + eDVBSatelliteRotorParameters &rotor_param = lnb_param.m_rotor_parameters; + + std::map::iterator sit = + lnb_param.m_satellites.find(sat.orbital_position); + if ( sit != lnb_param.m_satellites.end()) + { + int curRotorPos = -1; + fe->getData(6, curRotorPos); + + if ( di_param.m_diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2 ) // ROTOR + { + if ( curRotorPos == sat.orbital_position ) + ret=20; + else + ret=10; + } + else if (!ret) + ret=40; + } + } + } + return ret; +} + RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat) { for (int idx=0; idx <= m_lnbidx; ++idx ) -- cgit v1.2.3