aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2008-08-04 10:50:15 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2008-08-04 10:50:15 +0000
commitd58968e5ca43995658257b6e89f092c7572cde0a (patch)
tree4aef791be3ba82ab2f621f12fae30799bf39cb4c /lib/dvb
parent62d86f1ac67bfd0391922d766fa62a1849f5ddb4 (diff)
downloadenigma2-d58968e5ca43995658257b6e89f092c7572cde0a.tar.gz
enigma2-d58968e5ca43995658257b6e89f092c7572cde0a.zip
fix tune failed problems on fast zap when a diseqc swicth is in use
Diffstat (limited to 'lib/dvb')
-rw-r--r--lib/dvb/frontend.cpp15
-rw-r--r--lib/dvb/frontend.h3
-rw-r--r--lib/dvb/sec.cpp14
-rw-r--r--lib/dvb/sec.h1
4 files changed, 28 insertions, 5 deletions
diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp
index 02297243..255efd08 100644
--- a/lib/dvb/frontend.cpp
+++ b/lib/dvb/frontend.cpp
@@ -559,7 +559,6 @@ int eDVBFrontend::closeFrontend(bool force)
m_fd=-1;
else
eWarning("couldnt close frontend %d", m_dvbid);
- m_data[CSW] = m_data[UCSW] = m_data[TONEBURST] = -1;
}
#if HAVE_DVB_API_VERSION < 3
if (m_secfd >= 0)
@@ -1519,6 +1518,20 @@ void eDVBFrontend::tuneLoop() // called by m_tuneTimer
else
++m_sec_sequence.current();
break;
+ case eSecCommand::INVALIDATE_CURRENT_SWITCHPARMS:
+ eDebug("[SEC] invalidate current switch params");
+ sec_fe_data[CSW] = -1;
+ sec_fe_data[UCSW] = -1;
+ sec_fe_data[TONEBURST] = -1;
+ ++m_sec_sequence.current();
+ break;
+ case eSecCommand::UPDATE_CURRENT_SWITCHPARMS:
+ sec_fe_data[CSW] = sec_fe_data[NEW_CSW];
+ sec_fe_data[UCSW] = sec_fe_data[NEW_UCSW];
+ sec_fe_data[TONEBURST] = sec_fe_data[NEW_TONEBURST];
+ eDebug("[SEC] update current switch params");
+ ++m_sec_sequence.current();
+ break;
case eSecCommand::INVALIDATE_CURRENT_ROTORPARMS:
eDebug("[SEC] invalidate current rotorparams");
sec_fe_data[ROTOR_CMD] = -1;
diff --git a/lib/dvb/frontend.h b/lib/dvb/frontend.h
index 6643db03..49e2da89 100644
--- a/lib/dvb/frontend.h
+++ b/lib/dvb/frontend.h
@@ -43,6 +43,9 @@ class eDVBFrontend: public iDVBFrontend, public Object
{
public:
enum {
+ NEW_CSW,
+ NEW_UCSW,
+ NEW_TONEBURST,
CSW, // state of the committed switch
UCSW, // state of the uncommitted switch
TONEBURST, // current state of toneburst switch
diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp
index 9e76bb90..3d8084c8 100644
--- a/lib/dvb/sec.cpp
+++ b/lib/dvb/sec.cpp
@@ -544,8 +544,9 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
// check if voltage is disabled
compare.voltage = iDVBFrontend::voltageOff;
- compare.steps = +4;
+ compare.steps = +5;
sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+ sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_SWITCHPARMS) );
// voltage is changed... use DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS
sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, vlt) );
@@ -793,11 +794,14 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
}
}
else
+ {
+ sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_SWITCHPARMS) );
csw = band;
+ }
- sec_fe->setData(eDVBFrontend::CSW, csw);
- sec_fe->setData(eDVBFrontend::UCSW, ucsw);
- sec_fe->setData(eDVBFrontend::TONEBURST, di_param.m_toneburst_param);
+ sec_fe->setData(eDVBFrontend::NEW_CSW, csw);
+ sec_fe->setData(eDVBFrontend::NEW_UCSW, ucsw);
+ sec_fe->setData(eDVBFrontend::NEW_TONEBURST, di_param.m_toneburst_param);
if (doSetVoltageToneFrontend)
{
@@ -813,6 +817,8 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE]) );
}
+ sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_SWITCHPARMS) );
+
if (doSetFrontend)
{
sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT, tunetimeout) );
diff --git a/lib/dvb/sec.h b/lib/dvb/sec.h
index 92aff3dc..2f30e781 100644
--- a/lib/dvb/sec.h
+++ b/lib/dvb/sec.h
@@ -19,6 +19,7 @@ public:
MEASURE_IDLE_INPUTPOWER, MEASURE_RUNNING_INPUTPOWER,
IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, IF_INPUTPOWER_DELTA_GOTO,
UPDATE_CURRENT_ROTORPARAMS, INVALIDATE_CURRENT_ROTORPARMS,
+ UPDATE_CURRENT_SWITCHPARMS, INVALIDATE_CURRENT_SWITCHPARMS,
IF_ROTORPOS_VALID_GOTO,
IF_TUNER_LOCKED_GOTO,
IF_TONE_GOTO, IF_NOT_TONE_GOTO,