parsing for /etc/timezone.xml added
[enigma2.git] / lib / dvb / sec.cpp
index 50d0ae134c1ff590d08681736aec66e63c166954..972728ede58cef26a6caef708ff98536fd332e2a 100644 (file)
@@ -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<int, eDVBSatelliteSwitchParameters>::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;
 
@@ -443,7 +479,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                }
        }
 
-       eDebug("not found satellite configuration for orbital position (%d)", sat.orbital_position );
+       eDebug("found no satellite configuration for orbital position (%d)", sat.orbital_position );
 
        return -1;
 }