dont switch to 18V and measure input current, when slow rotor tuning is selected
[enigma2.git] / lib / dvb / sec.cpp
index 35a8d04a37a8ab5309338a02dd8bd06af441d059..a56dbf0486ff1c2198e60d83af93c3eb1ab57532 100644 (file)
@@ -388,6 +388,11 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        iDVBFrontend *sec_fe=&frontend;
                        eDVBRegisteredFrontend *linked_fe = 0;
                        eDVBSatelliteDiseqcParameters::t_diseqc_mode diseqc_mode = di_param.m_diseqc_mode;
+                       eDVBSatelliteSwitchParameters::t_voltage_mode voltage_mode = sw_param.m_voltage_mode;
+                       bool diseqc13V = voltage_mode == eDVBSatelliteSwitchParameters::HV_13;
+
+                       if (diseqc13V)
+                               voltage_mode = eDVBSatelliteSwitchParameters::HV;
 
                        frontend.getData(eDVBFrontend::SATPOS_DEPENDS_PTR, satposDependPtr);
 
@@ -437,13 +442,13 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        if (!(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical))
                                band |= 2;
 
-                       if ( sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::_14V
+                       if ( voltage_mode == eDVBSatelliteSwitchParameters::_14V
                                || ( sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical
-                                       && sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::HV )  )
+                                       && voltage_mode == eDVBSatelliteSwitchParameters::HV )  )
                                voltage = VOLTAGE(13);
-                       else if ( sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::_18V
+                       else if ( voltage_mode == eDVBSatelliteSwitchParameters::_18V
                                || ( !(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical)
-                                       && sw_param.m_voltage_mode == eDVBSatelliteSwitchParameters::HV )  )
+                                       && voltage_mode == eDVBSatelliteSwitchParameters::HV )  )
                                voltage = VOLTAGE(18);
                        if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::ON)
                                || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && (band&1) ) )
@@ -597,7 +602,9 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE]) );
 
-                                               if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
+                                               if (diseqc13V)
+                                                       vlt = iDVBFrontend::voltage13;
+                                               else if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
                                                {
                                                        if (rotor_param.m_inputpower_parameters.m_use)
                                                                vlt = VOLTAGE(18);  // in input power mode set 18V for measure input power
@@ -637,11 +644,11 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                        diseqc.data[2] = 0;
                                                        // diseqc reset
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_DISEQC_RESET_CMD]) );
                                                        diseqc.data[2] = 3;
                                                        // diseqc peripherial powersupply on
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 150) );
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_DISEQC_PERIPHERIAL_POWERON_CMD]) );
                                                }
 
                                                for (int seq_repeat = 0; seq_repeat < (di_param.m_seq_repeat?2:1); ++seq_repeat)
@@ -790,17 +797,22 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                        bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed);
                                                        eSecCommand::rotor cmd;
                                                        eSecCommand::pair compare;
-                                                       compare.voltage = VOLTAGE(18);
+                                                       if (turn_fast)
+                                                               compare.voltage = VOLTAGE(18);
+                                                       else
+                                                               compare.voltage = VOLTAGE(13);
                                                        compare.steps = +3;
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
 // measure idle power values
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec after voltage change
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) );
-                                                       compare.val = 1;
                                                        compare.steps = -2;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
+                                                       if (turn_fast) {
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec after voltage change
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) );
+                                                               compare.val = 1;
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
+                                                       }
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec before measure
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 0) );
                                                        compare.val = 0;
@@ -894,8 +906,8 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                csw = band;
                        }
 
-                       if (sendDiSEqC)
-                               sec_sequence.push_front( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeStatic) );
+//                     if (sendDiSEqC)
+                       sec_sequence.push_front( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeStatic) );
 
                        sec_fe->setData(eDVBFrontend::NEW_CSW, csw);
                        sec_fe->setData(eDVBFrontend::NEW_UCSW, ucsw);
@@ -923,8 +935,9 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) );
                        }
 
-                       if (sendDiSEqC)
-                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeDynamic) );
+//                     if (sendDiSEqC)
+                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );
+                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeDynamic) );
 
                        frontend.setSecSequence(sec_sequence);