diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-06-08 12:01:25 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-06-08 12:01:25 +0000 |
| commit | 49fbebfa0877a8c794163b5b0fcb89fd38141c1b (patch) | |
| tree | bc91516d2c6bc86296ee30b5809cb9f1cce55c2b /lib/dvb/frontend.cpp | |
| parent | 02c6d19ed834d530384050a5831f16ec2b7aaaf0 (diff) | |
| download | enigma2-49fbebfa0877a8c794163b5b0fcb89fd38141c1b.tar.gz enigma2-49fbebfa0877a8c794163b5b0fcb89fd38141c1b.zip | |
hopefully fix "secondary cable from motorized tuner" setting
some code cleanups
now link tuners in all directions should be possible
Diffstat (limited to 'lib/dvb/frontend.cpp')
| -rw-r--r-- | lib/dvb/frontend.cpp | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index b6e5e8ab..4df362e4 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -383,8 +383,8 @@ RESULT eDVBFrontendParameters::getHash(unsigned long &hash) const DEFINE_REF(eDVBFrontend); eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok) - :m_type(-1), m_dvbid(fe), m_slotid(fe), m_need_rotor_workaround(false) - ,m_fd(-1), m_sn(0), m_timeout(0), m_tuneTimer(0) + :m_type(-1), m_dvbid(fe), m_slotid(fe) + ,m_fd(-1), m_need_rotor_workaround(false), m_sn(0), m_timeout(0), m_tuneTimer(0) #if HAVE_DVB_API_VERSION < 3 ,m_secfd(-1) #endif @@ -1164,6 +1164,35 @@ bool eDVBFrontend::setSecSequencePos(int steps) return true; } +void eDVBFrontend::setRotorData(int pos, int cmd) +{ + m_data[ROTOR_CMD] = cmd; + m_data[ROTOR_POS] = pos; + if ( m_data[SATPOS_DEPENDS_PTR] != -1 ) + { + eDVBRegisteredFrontend *satpos_depends_to_fe = (eDVBRegisteredFrontend*) m_data[SATPOS_DEPENDS_PTR]; + satpos_depends_to_fe->m_frontend->m_data[ROTOR_CMD] = cmd; + satpos_depends_to_fe->m_frontend->m_data[ROTOR_POS] = pos; + } + else + { + eDVBRegisteredFrontend *next = (eDVBRegisteredFrontend *)m_data[LINKED_NEXT_PTR]; + while ( (int)next != -1 ) + { + next->m_frontend->m_data[ROTOR_CMD] = cmd; + next->m_frontend->m_data[ROTOR_POS] = pos; + next = (eDVBRegisteredFrontend *)next->m_frontend->m_data[LINKED_NEXT_PTR]; + } + eDVBRegisteredFrontend *prev = (eDVBRegisteredFrontend *)m_data[LINKED_PREV_PTR]; + while ( (int)prev != -1 ) + { + prev->m_frontend->m_data[ROTOR_CMD] = cmd; + prev->m_frontend->m_data[ROTOR_POS] = pos; + prev = (eDVBRegisteredFrontend *)prev->m_frontend->m_data[LINKED_PREV_PTR]; + } + } +} + void eDVBFrontend::tuneLoop() // called by m_tuneTimer { int delay=0; @@ -1359,14 +1388,13 @@ void eDVBFrontend::tuneLoop() // called by m_tuneTimer ++m_sec_sequence.current(); break; case eSecCommand::INVALIDATE_CURRENT_ROTORPARMS: - m_data[ROTOR_CMD] = m_data[ROTOR_POS] = -1; eDebug("[SEC] invalidate current rotorparams"); + setRotorData(-1,-1); ++m_sec_sequence.current(); break; case eSecCommand::UPDATE_CURRENT_ROTORPARAMS: - m_data[ROTOR_CMD] = m_data[NEW_ROTOR_CMD]; - m_data[ROTOR_POS] = m_data[NEW_ROTOR_POS]; - eDebug("[SEC] update current rotorparams %d %04x %d", m_timeoutCount, m_data[5], m_data[6]); + setRotorData(m_data[NEW_ROTOR_POS], m_data[NEW_ROTOR_CMD]); + eDebug("[SEC] update current rotorparams %d %04x %d", m_timeoutCount, m_data[ROTOR_CMD], m_data[ROTOR_POS]); ++m_sec_sequence.current(); break; case eSecCommand::SET_ROTOR_DISEQC_RETRYS: |
