X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/01921e17fbec0161d4f1578d6648c08e4968f0c4..ac896c99e4cdcaf8090bdb2b76763d84c2d5191c:/lib/dvb/frontend.cpp diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index 8a8e591f..d4704a9d 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -414,7 +414,7 @@ bool eDVBFrontend::setSecSequencePos(int steps) { if (m_sec_sequence.current() != m_sec_sequence.begin() && m_sec_sequence.current() != m_sec_sequence.end()) --m_sec_sequence.current(); - --steps; + ++steps; } return true; } @@ -428,55 +428,55 @@ void eDVBFrontend::tuneLoop() // called by m_tuneTimer { case eSecCommand::SLEEP: delay = m_sec_sequence.current()++->msec; - eDebug("sleep %dms\n", delay); + eDebug("[SEC] sleep %dms", delay); break; case eSecCommand::GOTO: if ( !setSecSequencePos(m_sec_sequence.current()->steps) ) ++m_sec_sequence.current(); break; case eSecCommand::SET_VOLTAGE: + eDebug("[SEC] setVoltage %d", m_sec_sequence.current()->voltage); setVoltage(m_sec_sequence.current()++->voltage); - eDebug("setVoltage %d", m_sec_sequence.current()->voltage); break; case eSecCommand::SET_TONE: + eDebug("[SEC] setTone %d", m_sec_sequence.current()->tone); setTone(m_sec_sequence.current()++->tone); - eDebug("setTone %d", m_sec_sequence.current()->tone); break; case eSecCommand::SEND_DISEQC: sendDiseqc(m_sec_sequence.current()->diseqc); eDebugNoNewLine("sendDiseqc: "); for (int i=0; i < m_sec_sequence.current()->diseqc.len; ++i) eDebugNoNewLine("%02x", m_sec_sequence.current()->diseqc.data[i]); - eDebug(""); + eDebug("[SEC] "); ++m_sec_sequence.current(); break; case eSecCommand::SEND_TONEBURST: + eDebug("[SEC] sendToneburst: %d", m_sec_sequence.current()->toneburst); sendToneburst(m_sec_sequence.current()++->toneburst); - eDebug("sendToneburst: %d", m_sec_sequence.current()->toneburst); break; case eSecCommand::SET_FRONTEND: - eDebug("setFrontend"); + eDebug("[SEC] setFrontend"); setFrontend(); ++m_sec_sequence.current(); break; case eSecCommand::MEASURE_IDLE_INPUTPOWER: m_idleInputpower = readInputpower(); - eDebug("idleInputpower is %d", m_idleInputpower); + eDebug("[SEC] idleInputpower is %d", m_idleInputpower); ++m_sec_sequence.current(); break; case eSecCommand::MEASURE_RUNNING_INPUTPOWER: m_runningInputpower = readInputpower(); - eDebug("runningInputpower is %d", m_runningInputpower); + eDebug("[SEC] runningInputpower is %d", m_runningInputpower); ++m_sec_sequence.current(); break; case eSecCommand::SET_TIMEOUT: m_timeoutCount = m_sec_sequence.current()++->val; - eDebug("set timeout %d", m_timeoutCount); + eDebug("[SEC] set timeout %d", m_timeoutCount); break; case eSecCommand::UPDATE_CURRENT_ROTORPARAMS: m_data[5] = m_data[3]; m_data[6] = m_data[4]; - eDebug("update current rotorparams %d", m_timeoutCount); + eDebug("[SEC] update current rotorparams %d %04x %d", m_timeoutCount, m_data[5], m_data[6]); ++m_sec_sequence.current(); break; case eSecCommand::IF_TIMEOUT_GOTO: @@ -485,11 +485,40 @@ void eDVBFrontend::tuneLoop() // called by m_tuneTimer else ++m_sec_sequence.current(); break; - case eSecCommand::IF_RUNNING_GOTO: - case eSecCommand::IF_STOPPED_GOTO: + case eSecCommand::IF_INPUTPOWER_DELTA_GOTO: + { + eSecCommand::rotor &cmd = m_sec_sequence.current()->measure; + const char *txt = cmd.direction ? "running" : "stopped"; + eDebug("[SEC] waiting for rotor %s", txt); + eDebug("[SEC] %s %d, idle %d, delta %d", + txt, + m_runningInputpower, + m_idleInputpower, + cmd.deltaA); + if ( (cmd.direction && abs(m_runningInputpower - m_idleInputpower) >= cmd.deltaA) + || (!cmd.direction && abs(m_runningInputpower - m_idleInputpower) <= cmd.deltaA) ) + { + ++cmd.okcount; + eDebug("[SEC] rotor %s step %d ok", txt, cmd.okcount); + if ( cmd.okcount > 1 ) + { + eDebug("[SEC] rotor is %s", txt); + if (setSecSequencePos(cmd.steps)) + break; + } + } + else + { + eDebug("[SEC] rotor not %s... reset counter.. increase timeout", txt); + --m_timeoutCount; + cmd.okcount=0; + } + ++m_sec_sequence.current(); + break; + } default: ++m_sec_sequence.current(); - eDebug("unhandled sec command"); + eDebug("[SEC] unhandled sec command"); } m_tuneTimer->start(delay,true); } @@ -805,7 +834,7 @@ RESULT eDVBFrontend::setSecSequence(const eSecCommandList &list) RESULT eDVBFrontend::getData(int num, int &data) { - if ( num < 5 ) + if ( num < 7 ) { data = m_data[num]; return 0; @@ -815,7 +844,7 @@ RESULT eDVBFrontend::getData(int num, int &data) RESULT eDVBFrontend::setData(int num, int val) { - if ( num < 5 ) + if ( num < 7 ) { m_data[num] = val; return 0;