disable WSS when 4:3 letterbox or 4:3 panscan is selected and "WSS on 4:3"
[enigma2.git] / lib / dvb / sec.cpp
index ec2de848a73996aa1b75bce55269280fb85e6a23..ff3f9bd04ddfffca73b6b5bbf2cc32a6c4f4babc 100644 (file)
@@ -1,6 +1,7 @@
 #include <lib/dvb/dvb.h>
 #include <lib/dvb/sec.h>
 #include <lib/dvb/rotor_calc.h>
 #include <lib/dvb/dvb.h>
 #include <lib/dvb/sec.h>
 #include <lib/dvb/rotor_calc.h>
+#include <lib/dvb/dvbtime.h>
 
 #include <set>
 
 
 #include <set>
 
 #endif
 #include <lib/base/eerror.h>
 
 #endif
 #include <lib/base/eerror.h>
 
+//#define SEC_DEBUG
+
+#ifdef SEC_DEBUG
+#define eSecDebug(arg...) eDebug(arg)
+#else
+#define eSecDebug(arg...)
+#endif
+
 DEFINE_REF(eDVBSatelliteEquipmentControl);
 
 eDVBSatelliteEquipmentControl *eDVBSatelliteEquipmentControl::instance;
 DEFINE_REF(eDVBSatelliteEquipmentControl);
 
 eDVBSatelliteEquipmentControl *eDVBSatelliteEquipmentControl::instance;
@@ -245,6 +254,30 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
        return ret;
 }
 
        return ret;
 }
 
+bool need_turn_fast(int turn_speed)
+{
+       if (turn_speed == eDVBSatelliteRotorParameters::FAST)
+               return true;
+       else if (turn_speed != eDVBSatelliteRotorParameters::SLOW)
+       {
+               int begin = turn_speed >> 16; // high word is start time
+               int end = turn_speed&0xFFFF; // low word is end time
+               time_t now_time = eDVBLocalTimeHandler::getInstance()->nowTime();
+               tm nowTime;
+               localtime_r(&now_time, &nowTime);
+               int now = (nowTime.tm_hour + 1) * 60 + nowTime.tm_min + 1;
+               bool neg = end <= begin;
+               if (neg) {
+                       int tmp = begin;
+                       begin = end;
+                       end = tmp;
+               }
+               if ((now >= begin && now < end) ^ neg)
+                       return true;
+       }
+       return false;
+}
+
 #define VOLTAGE(x) (lnb_param.m_increased_voltage ? iDVBFrontend::voltage##x##_5 : iDVBFrontend::voltage##x)
 
 RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int slot_id)
 #define VOLTAGE(x) (lnb_param.m_increased_voltage ? iDVBFrontend::voltage##x##_5 : iDVBFrontend::voltage##x)
 
 RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int slot_id)
@@ -460,31 +493,41 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
 
                                        if ( send_mask )
                                        {
 
                                        if ( send_mask )
                                        {
+                                               int vlt = iDVBFrontend::voltageOff;
                                                eSecCommand::pair compare;
                                                compare.steps = +3;
                                                compare.tone = iDVBFrontend::toneOff;
                                                sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE]) );
                                                eSecCommand::pair compare;
                                                compare.steps = +3;
                                                compare.tone = iDVBFrontend::toneOff;
                                                sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) );
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE]) );
-                                               compare.voltage = iDVBFrontend::voltageOff;
-                                               compare.steps = +3;
-                                               // 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 ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
                                                {
                                                        if (rotor_param.m_inputpower_parameters.m_use)
 
                                                if ( RotorCmd != -1 && RotorCmd != lastRotorCmd )
                                                {
                                                        if (rotor_param.m_inputpower_parameters.m_use)
-                                                               compare.voltage = VOLTAGE(18);  // in input power mode set 18V for measure input power
+                                                               vlt = VOLTAGE(18);  // in input power mode set 18V for measure input power
                                                        else
                                                        else
-                                                               compare.voltage = VOLTAGE(13);  // in normal mode start turning with 13V
+                                                               vlt = VOLTAGE(13);  // in normal mode start turning with 13V
                                                }
                                                else
                                                }
                                                else
-                                                       compare.voltage = voltage;
+                                                       vlt = voltage;
 
 
-                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
+                                               // check if voltage is already correct..
+                                               compare.voltage = vlt;
+                                               compare.steps = +7;
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
 
 
-                                                       // voltage was disabled..so we wait a longer time .. for normal switches 250ms should be enough
+                                               // check if voltage is disabled
+                                               compare.voltage = iDVBFrontend::voltageOff;
+                                               compare.steps = +4;
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+
+                                               // voltage is changed... use DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, vlt) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS]) );
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +3) );
+
+                                               // voltage was disabled.. use DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS
+                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, vlt) );
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS]) );
 
                                                for (int seq_repeat = 0; seq_repeat < (di_param.m_seq_repeat?2:1); ++seq_repeat)
                                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS]) );
 
                                                for (int seq_repeat = 0; seq_repeat < (di_param.m_seq_repeat?2:1); ++seq_repeat)
@@ -657,11 +700,11 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );  // check if rotor has started
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout .. we assume now the rotor is already at the correct position
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // goto loop start
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );  // check if rotor has started
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) );  // timeout .. we assume now the rotor is already at the correct position
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // goto loop start
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_NO_MORE_ROTOR_DISEQC_RETRYS_GOTO, +10 ) );  // timeout .. we assume now the rotor is already at the correct position
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_NO_MORE_ROTOR_DISEQC_RETRYS_GOTO, +9 ) );  // timeout .. we assume now the rotor is already at the correct position
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -8) );  // goto loop start
 ////////////////////
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -8) );  // goto loop start
 ////////////////////
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeDynamic) );
+                                                       if (need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed))
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, m_params[MOTOR_RUNNING_TIMEOUT]*20) );  // 2 minutes running timeout
 // rotor running loop
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // wait 50msec
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, m_params[MOTOR_RUNNING_TIMEOUT]*20) );  // 2 minutes running timeout
 // rotor running loop
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );  // wait 50msec
@@ -669,11 +712,11 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                        cmd.direction=0;  // check for stopped rotor
                                                        cmd.steps=+4;
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );
                                                        cmd.direction=0;  // check for stopped rotor
                                                        cmd.steps=+4;
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +4 ) );  // timeout ? this should never happen
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +3 ) );  // timeout ? this should never happen
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // running loop start
 /////////////////////
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) );  // running loop start
 /////////////////////
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeDynamic) );
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
+                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeDynamic) );
                                                }
                                                else
                                                {  // use normal turning mode
                                                }
                                                else
                                                {  // use normal turning mode
@@ -758,6 +801,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
 
 RESULT eDVBSatelliteEquipmentControl::clear()
 {
 
 RESULT eDVBSatelliteEquipmentControl::clear()
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::clear()");
        for (int i=0; i <= m_lnbidx; ++i)
        {
                m_lnbs[i].m_satellites.clear();
        for (int i=0; i <= m_lnbidx; ++i)
        {
                m_lnbs[i].m_satellites.clear();
@@ -790,11 +834,13 @@ RESULT eDVBSatelliteEquipmentControl::addLNB()
                eDebug("no more LNB free... cnt is %d", m_lnbidx);
                return -ENOSPC;
        }
                eDebug("no more LNB free... cnt is %d", m_lnbidx);
                return -ENOSPC;
        }
+       eSecDebug("eDVBSatelliteEquipmentControl::addLNB(%d)", m_lnbidx-1);
        return 0;
 }
 
 RESULT eDVBSatelliteEquipmentControl::setLNBSlotMask(int slotmask)
 {
        return 0;
 }
 
 RESULT eDVBSatelliteEquipmentControl::setLNBSlotMask(int slotmask)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setLNBSlotMask(%d)", slotmask);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].slot_mask = slotmask;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].slot_mask = slotmask;
        else
@@ -804,6 +850,7 @@ RESULT eDVBSatelliteEquipmentControl::setLNBSlotMask(int slotmask)
 
 RESULT eDVBSatelliteEquipmentControl::setLNBLOFL(int lofl)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setLNBLOFL(int lofl)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setLNBLOFL(%d)", lofl);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_lof_lo = lofl;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_lof_lo = lofl;
        else
@@ -813,6 +860,7 @@ RESULT eDVBSatelliteEquipmentControl::setLNBLOFL(int lofl)
 
 RESULT eDVBSatelliteEquipmentControl::setLNBLOFH(int lofh)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setLNBLOFH(int lofh)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setLNBLOFH(%d)", lofh);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_lof_hi = lofh;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_lof_hi = lofh;
        else
@@ -822,6 +870,7 @@ RESULT eDVBSatelliteEquipmentControl::setLNBLOFH(int lofh)
 
 RESULT eDVBSatelliteEquipmentControl::setLNBThreshold(int threshold)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setLNBThreshold(int threshold)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setLNBThreshold(%d)", threshold);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_lof_threshold = threshold;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_lof_threshold = threshold;
        else
@@ -831,6 +880,7 @@ RESULT eDVBSatelliteEquipmentControl::setLNBThreshold(int threshold)
 
 RESULT eDVBSatelliteEquipmentControl::setLNBIncreasedVoltage(bool onoff)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setLNBIncreasedVoltage(bool onoff)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setLNBIncreasedVoltage(%d)", onoff);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_increased_voltage = onoff;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_increased_voltage = onoff;
        else
@@ -841,6 +891,7 @@ RESULT eDVBSatelliteEquipmentControl::setLNBIncreasedVoltage(bool onoff)
 /* DiSEqC Specific Parameters */
 RESULT eDVBSatelliteEquipmentControl::setDiSEqCMode(int diseqcmode)
 {
 /* DiSEqC Specific Parameters */
 RESULT eDVBSatelliteEquipmentControl::setDiSEqCMode(int diseqcmode)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setDiSEqcMode(%d)", diseqcmode);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_diseqc_mode = (eDVBSatelliteDiseqcParameters::t_diseqc_mode)diseqcmode;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_diseqc_mode = (eDVBSatelliteDiseqcParameters::t_diseqc_mode)diseqcmode;
        else
@@ -850,6 +901,7 @@ RESULT eDVBSatelliteEquipmentControl::setDiSEqCMode(int diseqcmode)
 
 RESULT eDVBSatelliteEquipmentControl::setToneburst(int toneburst)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setToneburst(int toneburst)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setToneburst(%d)", toneburst);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_toneburst_param = (eDVBSatelliteDiseqcParameters::t_toneburst_param)toneburst;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_toneburst_param = (eDVBSatelliteDiseqcParameters::t_toneburst_param)toneburst;
        else
@@ -859,6 +911,7 @@ RESULT eDVBSatelliteEquipmentControl::setToneburst(int toneburst)
 
 RESULT eDVBSatelliteEquipmentControl::setRepeats(int repeats)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setRepeats(int repeats)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setRepeats(%d)", repeats);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_repeats=repeats;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_repeats=repeats;
        else
@@ -868,6 +921,7 @@ RESULT eDVBSatelliteEquipmentControl::setRepeats(int repeats)
 
 RESULT eDVBSatelliteEquipmentControl::setCommittedCommand(int command)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setCommittedCommand(int command)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setCommittedCommand(%d)", command);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_committed_cmd=command;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_committed_cmd=command;
        else
@@ -877,6 +931,7 @@ RESULT eDVBSatelliteEquipmentControl::setCommittedCommand(int command)
 
 RESULT eDVBSatelliteEquipmentControl::setUncommittedCommand(int command)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setUncommittedCommand(int command)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setUncommittedCommand(%d)", command);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_uncommitted_cmd = command;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_uncommitted_cmd = command;
        else
@@ -886,6 +941,7 @@ RESULT eDVBSatelliteEquipmentControl::setUncommittedCommand(int command)
 
 RESULT eDVBSatelliteEquipmentControl::setCommandOrder(int order)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setCommandOrder(int order)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setCommandOrder(%d)", order);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_command_order=order;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_command_order=order;
        else
@@ -895,6 +951,7 @@ RESULT eDVBSatelliteEquipmentControl::setCommandOrder(int order)
 
 RESULT eDVBSatelliteEquipmentControl::setFastDiSEqC(bool onoff)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setFastDiSEqC(bool onoff)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setFastDiSEqc(%d)", onoff);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_use_fast=onoff;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_use_fast=onoff;
        else
@@ -904,6 +961,7 @@ RESULT eDVBSatelliteEquipmentControl::setFastDiSEqC(bool onoff)
 
 RESULT eDVBSatelliteEquipmentControl::setSeqRepeat(bool onoff)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setSeqRepeat(bool onoff)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setSeqRepeat(%d)", onoff);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_seq_repeat = onoff;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_diseqc_parameters.m_seq_repeat = onoff;
        else
@@ -914,6 +972,7 @@ RESULT eDVBSatelliteEquipmentControl::setSeqRepeat(bool onoff)
 /* Rotor Specific Parameters */
 RESULT eDVBSatelliteEquipmentControl::setLongitude(float longitude)
 {
 /* Rotor Specific Parameters */
 RESULT eDVBSatelliteEquipmentControl::setLongitude(float longitude)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setLongitude(%f)", longitude);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_longitude=longitude;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_longitude=longitude;
        else
@@ -923,6 +982,7 @@ RESULT eDVBSatelliteEquipmentControl::setLongitude(float longitude)
 
 RESULT eDVBSatelliteEquipmentControl::setLatitude(float latitude)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setLatitude(float latitude)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setLatitude(%f)", latitude);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_latitude=latitude;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_latitude=latitude;
        else
@@ -932,6 +992,7 @@ RESULT eDVBSatelliteEquipmentControl::setLatitude(float latitude)
 
 RESULT eDVBSatelliteEquipmentControl::setLoDirection(int direction)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setLoDirection(int direction)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setLoDirection(%d)", direction);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_lo_direction=direction;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_lo_direction=direction;
        else
@@ -941,6 +1002,7 @@ RESULT eDVBSatelliteEquipmentControl::setLoDirection(int direction)
 
 RESULT eDVBSatelliteEquipmentControl::setLaDirection(int direction)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setLaDirection(int direction)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setLaDirection(%d)", direction);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_la_direction=direction;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_gotoxx_parameters.m_la_direction=direction;
        else
@@ -950,6 +1012,7 @@ RESULT eDVBSatelliteEquipmentControl::setLaDirection(int direction)
 
 RESULT eDVBSatelliteEquipmentControl::setUseInputpower(bool onoff)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setUseInputpower(bool onoff)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setUseInputpower(%d)", onoff);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_inputpower_parameters.m_use=onoff;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_inputpower_parameters.m_use=onoff;
        else
@@ -959,6 +1022,7 @@ RESULT eDVBSatelliteEquipmentControl::setUseInputpower(bool onoff)
 
 RESULT eDVBSatelliteEquipmentControl::setInputpowerDelta(int delta)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setInputpowerDelta(int delta)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setInputpowerDelta(%d)", delta);
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_inputpower_parameters.m_delta=delta;
        else
        if ( currentLNBValid() )
                m_lnbs[m_lnbidx].m_rotor_parameters.m_inputpower_parameters.m_delta=delta;
        else
@@ -969,6 +1033,7 @@ RESULT eDVBSatelliteEquipmentControl::setInputpowerDelta(int delta)
 /* Satellite Specific Parameters */
 RESULT eDVBSatelliteEquipmentControl::addSatellite(int orbital_position)
 {
 /* Satellite Specific Parameters */
 RESULT eDVBSatelliteEquipmentControl::addSatellite(int orbital_position)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::addSatellite(%d)", orbital_position);
        if ( currentLNBValid() )
        {
                std::map<int, eDVBSatelliteSwitchParameters>::iterator it =
        if ( currentLNBValid() )
        {
                std::map<int, eDVBSatelliteSwitchParameters>::iterator it =
@@ -994,6 +1059,7 @@ RESULT eDVBSatelliteEquipmentControl::addSatellite(int orbital_position)
 
 RESULT eDVBSatelliteEquipmentControl::setVoltageMode(int mode)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setVoltageMode(int mode)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setVoltageMode(%d)", mode);
        if ( currentLNBValid() && m_curSat != m_lnbs[m_lnbidx].m_satellites.end() )
                m_curSat->second.m_voltage_mode = (eDVBSatelliteSwitchParameters::t_voltage_mode)mode;
        else
        if ( currentLNBValid() && m_curSat != m_lnbs[m_lnbidx].m_satellites.end() )
                m_curSat->second.m_voltage_mode = (eDVBSatelliteSwitchParameters::t_voltage_mode)mode;
        else
@@ -1004,6 +1070,7 @@ RESULT eDVBSatelliteEquipmentControl::setVoltageMode(int mode)
 
 RESULT eDVBSatelliteEquipmentControl::setToneMode(int mode)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setToneMode(int mode)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setToneMode(%d)", mode);
        if ( currentLNBValid() )
        {
                if ( m_curSat != m_lnbs[m_lnbidx].m_satellites.end() )
        if ( currentLNBValid() )
        {
                if ( m_curSat != m_lnbs[m_lnbidx].m_satellites.end() )
@@ -1018,6 +1085,7 @@ RESULT eDVBSatelliteEquipmentControl::setToneMode(int mode)
 
 RESULT eDVBSatelliteEquipmentControl::setRotorPosNum(int rotor_pos_num)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setRotorPosNum(int rotor_pos_num)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setRotorPosNum(%d)", rotor_pos_num);
        if ( currentLNBValid() )
        {
                if ( m_curSat != m_lnbs[m_lnbidx].m_satellites.end() )
        if ( currentLNBValid() )
        {
                if ( m_curSat != m_lnbs[m_lnbidx].m_satellites.end() )
@@ -1030,6 +1098,16 @@ RESULT eDVBSatelliteEquipmentControl::setRotorPosNum(int rotor_pos_num)
        return 0;
 }
 
        return 0;
 }
 
+RESULT eDVBSatelliteEquipmentControl::setRotorTurningSpeed(int speed)
+{
+       eSecDebug("eDVBSatelliteEquipmentControl::setRotorTurningSpeed(%d)", speed);
+       if ( currentLNBValid() )
+               m_lnbs[m_lnbidx].m_rotor_parameters.m_inputpower_parameters.m_turning_speed = speed;
+       else
+               return -ENOENT;
+       return 0;
+}
+
 struct sat_compare
 {
        int orb_pos, lofl, lofh;
 struct sat_compare
 {
        int orb_pos, lofl, lofh;
@@ -1162,6 +1240,7 @@ PyObject *eDVBSatelliteEquipmentControl::get_exclusive_satellites(int tu1, int t
 
 RESULT eDVBSatelliteEquipmentControl::setTunerLinked(int tu1, int tu2)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setTunerLinked(int tu1, int tu2)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setTunerLinked(%d, %d)", tu1, tu2);
        if (tu1 != tu2)
        {
                eDVBRegisteredFrontend *p1=NULL, *p2=NULL;
        if (tu1 != tu2)
        {
                eDVBRegisteredFrontend *p1=NULL, *p2=NULL;
@@ -1186,6 +1265,7 @@ RESULT eDVBSatelliteEquipmentControl::setTunerLinked(int tu1, int tu2)
 
 RESULT eDVBSatelliteEquipmentControl::setTunerDepends(int tu1, int tu2)
 {
 
 RESULT eDVBSatelliteEquipmentControl::setTunerDepends(int tu1, int tu2)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setTunerDepends(%d, %d)", tu1, tu2);
        if (tu1 == tu2)
                return -1;
 
        if (tu1 == tu2)
                return -1;
 
@@ -1210,6 +1290,7 @@ RESULT eDVBSatelliteEquipmentControl::setTunerDepends(int tu1, int tu2)
 
 void eDVBSatelliteEquipmentControl::setSlotNotLinked(int slot_no)
 {
 
 void eDVBSatelliteEquipmentControl::setSlotNotLinked(int slot_no)
 {
+       eSecDebug("eDVBSatelliteEquipmentControl::setSlotNotLinked(%d)", slot_no);
        m_not_linked_slot_mask |= (1 << slot_no);
 }
 
        m_not_linked_slot_mask |= (1 << slot_no);
 }