better readable code
[enigma2.git] / lib / dvb / sec.cpp
index 70c742a2e6d56c62d50853055ad63e777096c06c..86f549c2f7ec25927369eee5fbef369d195f8256 100644 (file)
@@ -544,8 +544,8 @@ 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 200ms should be enough
-                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 200) );
+                                       // 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 +562,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 +597,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;
@@ -627,25 +626,28 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
                                {
                                        eSecCommand::pair compare;
-                                       compare.voltage = iDVBFrontend::voltageOff;
-                                       compare.steps = +4;
-                                       // the next is a check if voltage is switched off.. then we first set a voltage :)
-                                       // else we set voltage after all diseqc stuff..
-                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) );
-
-                                       if (rotor_param.m_inputpower_parameters.m_use)
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) ); // in normal mode start turning with 13V
-                                       else
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) ); // turn always with 18V
+                                       if (!send_mask)
+                                       {
+                                               compare.voltage = iDVBFrontend::voltageOff;
+                                               compare.steps = +4;
+                                               // the next is a check if voltage is switched off.. then we first set a voltage :)
+                                               // else we set voltage after all diseqc stuff..
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) );
 
-                                       // voltage was disabled..so we wait a longer time ..
-                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 500) );
-                                       sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +7) );  // no need to send stop rotor cmd
+                                               if (rotor_param.m_inputpower_parameters.m_use)
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) ); // in normal mode start turning with 13V
+                                               else
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) ); // turn always with 18V
 
-                                       if (send_mask)
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 750) ); // wait 750ms after send switch cmd
+                                               // voltage was disabled..so we wait a longer time ..
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 750) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +8) );  // no need to send stop rotor cmd and recheck voltage
+                                       }
                                        else
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +1) );
+                                       {
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 750) ); // wait 750ms after send switch cmd
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +8) );  // no need to send stop rotor cmd and recheck voltage
+                                       }
 
                                        eDVBDiseqcCommand diseqc;
                                        diseqc.len = 3;