change default lof threshold for universal lnbs to 11700
[enigma2.git] / lib / dvb / sec.cpp
index b995b8067d5f66e470990c51f74132c2a378cf39..d9a84226484f60375dd3b214ddee2a540f8fa922 100644 (file)
@@ -27,7 +27,7 @@ eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl(eSmartPtrList<eDVBR
        addLNB();
        setLNBTunerMask(3);
        setLNBLOFL(9750000);
-       setLNBThreshold(11750000);
+       setLNBThreshold(11700000);
        setLNBLOFH(10607000);
        setDiSEqCMode(eDVBSatelliteDiseqcParameters::V1_0);
        setToneburst(eDVBSatelliteDiseqcParameters::NO);
@@ -44,7 +44,7 @@ eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl(eSmartPtrList<eDVBR
        addLNB();
        setLNBTunerMask(3);
        setLNBLOFL(9750000);
-       setLNBThreshold(11750000);
+       setLNBThreshold(11700000);
        setLNBLOFH(10600000);
        setDiSEqCMode(eDVBSatelliteDiseqcParameters::V1_0);
        setToneburst(eDVBSatelliteDiseqcParameters::NO);
@@ -61,7 +61,7 @@ eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl(eSmartPtrList<eDVBR
        addLNB();
        setLNBTunerMask(3);
        setLNBLOFL(9750000);
-       setLNBThreshold(11750000);
+       setLNBThreshold(11700000);
        setLNBLOFH(10600000);
        setDiSEqCMode(eDVBSatelliteDiseqcParameters::V1_2);
        setToneburst(eDVBSatelliteDiseqcParameters::NO);
@@ -95,7 +95,7 @@ eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl(eSmartPtrList<eDVBR
 
 int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite &sat, iDVBFrontend *fe, int frontend_id )
 {
-       int ret=0;
+       int ret=0, satcount=0;
 
        for (int idx=0; idx <= m_lnbidx; ++idx )
        {
@@ -104,6 +104,8 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
                {
                        eDVBSatelliteDiseqcParameters &di_param = lnb_param.m_diseqc_parameters;
 
+                       satcount += lnb_param.m_satellites.size();
+
                        std::map<int, eDVBSatelliteSwitchParameters>::iterator sit =
                                lnb_param.m_satellites.find(sat.orbital_position);
                        if ( sit != lnb_param.m_satellites.end())
@@ -138,20 +140,14 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
                                                csw |= band;
 
                                        if ( di_param.m_diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2 )  // ROTOR
-                                       {
-                                               rotor=true;
-                                               if ( curRotorPos == sat.orbital_position )
-                                                       ret=20;  // rotor on correct orbpos = prio 20
-                                               else
-                                                       ret=10;  // rotor must turn to correct orbpos = prio 10
-                                       }
-                                       else
-                                               ret = 30;  // no rotor = prio 30
+                                               rotor = true;
+
+                                       ret = 1000;
                                }
                                else
                                {
                                        csw = band;
-                                       ret = 40;  // no diseqc = prio 40
+                                       ret = 2000;
                                }
 
                                if (linked_to != -1)  // check for linked tuners..
@@ -221,6 +217,8 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
                        }
                }
        }
+       if (ret && satcount)
+               ret -= (satcount-1);
        return ret;
 }
 
@@ -397,7 +395,8 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
 
                                int RotorCmd=-1;
                                bool useGotoXX = false;
-                               if ( di_param.m_diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2 )
+                               if ( di_param.m_diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2
+                                       && !sat.no_rotor_command_on_tune )
                                {
                                        if (depend_satpos_mode || linked)
                                                // in this both modes we dont really turn the rotor.... but in canTune we need the satpos
@@ -503,7 +502,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                        ++loops;
 
                                                for ( int i=0; i < di_param.m_repeats; ++i )
-                                               loops *= 2;
+                                                       loops *= 2;
 
                                                for ( int i = 0; i < loops;)  // fill commands...
                                                {
@@ -521,10 +520,10 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                                diseqc.data[2] = 0x38;
                                                                diseqc.data[3] = csw;
                                                        }
-                                                       else
+                                                       else  // no committed command confed.. so send uncommitted..
                                                        {
-                                                               diseqc.data[2] = 0x00;
-                                                               diseqc.data[3] = 0x00;
+                                                               diseqc.data[2] = 0x39;
+                                                               diseqc.data[3] = ucsw;
                                                        }
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );