fix linked tuner
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Sat, 11 Mar 2006 17:19:57 +0000 (17:19 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Sat, 11 Mar 2006 17:19:57 +0000 (17:19 +0000)
lib/dvb/frontend.cpp
lib/dvb/sec.cpp

index 7b71ca1..5d991a4 100644 (file)
@@ -1454,6 +1454,8 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
 {
        eDebug("(%d)tune", m_fe);
 
+       m_timeout->stop();
+
        int res=0;
 
        if (m_type == -1)
@@ -1483,7 +1485,10 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
                        return -EINVAL;
                res=prepare_cable(feparm);
                if (!res)
+               {
+                       m_sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT) );
                        m_sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) );
+               }
                break;
        }
        case feTerrestrial:
@@ -1496,7 +1501,10 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
                }
                res=prepare_terrestrial(feparm);
                if (!res)
+               {
+                       m_sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT) );
                        m_sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) );
+               }
                break;
        }
        }
@@ -1504,7 +1512,6 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
        if (!res)  // prepare ok
        {
                m_tuneTimer->start(0,true);
-               m_timeout->stop();
                m_sec_sequence.current() = m_sec_sequence.begin();
 
                if (m_state != stateTuning)
index 23d386e..b003e16 100644 (file)
@@ -243,6 +243,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                {
                        eDVBSatelliteSwitchParameters &sw_param = sit->second;
                        bool doSetVoltageToneFrontend = true;
+                       bool doSetFrontend = true;
                        int band=0,
                                linked_to=-1, // linked tuner
                                satpos_depends_to=-1,
@@ -666,6 +667,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                        else
                                        {  // use normal turning mode
                                                doSetVoltageToneFrontend=false;
+                                               doSetFrontend=false;
                                                eSecCommand::rotor cmd;
                                                eSecCommand::pair compare;
                                                compare.voltage = VOLTAGE(13);
@@ -711,10 +713,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        frontend.setData(1, ucsw);
                        frontend.setData(2, di_param.m_toneburst_param);
 
-                       if ( linked )
-                               return 0;
-
-                       if (doSetVoltageToneFrontend)
+                       if (!linked && doSetVoltageToneFrontend)
                        {
                                eSecCommand::pair compare;
                                compare.voltage = voltage;
@@ -725,11 +724,13 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
 
                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 15) );
+                       }
 
+                       if (doSetFrontend)
+                       {
                                sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) );
                        }
-
                        frontend.setSecSequence(sec_sequence);
 
                        return 0;