some changes for service groups
[enigma2.git] / lib / dvb / sec.cpp
index e0bf5fd372465dae9404b0c95774a682eda01776..faad062fab004691e137f98332835294695703ee 100644 (file)
@@ -144,12 +144,14 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
                                        if ( di_param.m_diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2 )  // ROTOR
                                                rotor = true;
 
-                                       ret = 1000;
+                                       ret=10000;
+                                       if (rotor && curRotorPos != -1)
+                                               ret -= abs(curRotorPos-sat.orbital_position);
                                }
                                else
                                {
                                        csw = band;
-                                       ret = 2000;
+                                       ret = 15000;
                                }
 
                                while (linked_prev_ptr != -1)  // check for linked tuners..
@@ -544,7 +546,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                        sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
                                        compare.steps = +3;
                                        sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
-                                       // voltage was disabled..so we wait a longer time .. for normal switches 500ms should be enough
+                                       // voltage was disabled..so we wait a longer time .. for normal switches 750ms should be enough
                                        sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 750) );
 
                                        for (int seq_repeat = 0; seq_repeat < (di_param.m_seq_repeat?2:1); ++seq_repeat)
@@ -562,8 +564,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                if ( send_mask & 2 )
                                                        ++loops;
 
-                                               for ( int i=0; i < di_param.m_repeats; ++i )
-                                                       loops *= 2;
+                                               loops <<= di_param.m_repeats;
 
                                                for ( int i = 0; i < loops;)  // fill commands...
                                                {
@@ -598,7 +599,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                                        cmd=0x38;
                                                                if (cmd)
                                                                {
-                                                                       static int delay = (120 - 54) / 2;  // standard says 100msek between two repeated commands
+                                                                       int delay = di_param.m_repeats ? (120 - 54) / 2 : 120;  // standard says 100msek between two repeated commands
                                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, delay) );
                                                                        diseqc.data[2]=cmd;
                                                                        diseqc.data[3]=(cmd==0x38) ? csw : ucsw;
@@ -774,9 +775,9 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        else
                                csw = band;
 
-                       frontend.setData(eDVBFrontend::NEW_CSW, csw);
-                       frontend.setData(eDVBFrontend::NEW_UCSW, ucsw);
-                       frontend.setData(eDVBFrontend::NEW_TONEBURST, di_param.m_toneburst_param);
+                       frontend.setData(eDVBFrontend::CSW, csw);
+                       frontend.setData(eDVBFrontend::UCSW, ucsw);
+                       frontend.setData(eDVBFrontend::TONEBURST, di_param.m_toneburst_param);
 
                        if (!linked && doSetVoltageToneFrontend)
                        {
@@ -1103,7 +1104,7 @@ struct sat_compare
 
 PyObject *eDVBSatelliteEquipmentControl::get_exclusive_satellites(int tu1, int tu2)
 {
-       PyObject *ret=0;
+       ePyObject ret;
 
        if (tu1 != tu2)
        {