X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/028c344bce5a88e2292cd01138ee17348bf75f7b..cfa2e05881f9a27dafab260af6369f9d5dff5590:/lib/dvb/sec.cpp diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index e3fbf26f..972728ed 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -62,11 +62,47 @@ eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl() setToneMode(eDVBSatelliteSwitchParameters::HILO); } -RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat) +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, int frontend_id) { 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? + continue; eDVBSatelliteDiseqcParameters &di_param = lnb_param.m_diseqc_parameters; eDVBSatelliteRotorParameters &rotor_param = lnb_param.m_rotor_parameters;