X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/2d0d9ad2cf4891c5386a3d8ca040c2738b5c2532..c1234f5fe6458979d4a7b846383dcadf390d84ea:/lib/dvb/frontend.cpp diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index c4d64122..3ae9473e 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -971,17 +971,97 @@ void fillDictWithTerrestrialData(ePyObject dict, const FRONTENDPARAMETERS &parm) PutToDict(dict, "hierarchy_information", tmp); } -PyObject *eDVBFrontend::readTransponderData(bool original) +void eDVBFrontend::getFrontendStatus(ePyObject dest) { - ePyObject ret=PyDict_New(); + if (dest && PyDict_Check(dest)) + { + const char *tmp = "UNKNOWN"; + switch(m_state) + { + case stateIdle: + tmp="IDLE"; + break; + case stateTuning: + tmp="TUNING"; + break; + case stateFailed: + tmp="FAILED"; + break; + case stateLock: + tmp="LOCKED"; + break; + case stateLostLock: + tmp="LOSTLOCK"; + break; + default: + break; + } + PutToDict(dest, "tuner_state", tmp); + PutToDict(dest, "tuner_locked", readFrontendData(locked)); + PutToDict(dest, "tuner_synced", readFrontendData(synced)); + PutToDict(dest, "tuner_bit_error_rate", readFrontendData(bitErrorRate)); + PutToDict(dest, "tuner_signal_power", readFrontendData(signalPower)); + PutToDict(dest, "tuner_signal_quality", readFrontendData(signalQuality)); + } +} - if (ret) +void eDVBFrontend::getTransponderData(ePyObject dest, bool original) +{ + if (m_fd != -1 && dest && PyDict_Check(dest)) { - bool read=m_fd != -1; - const char *tmp=0; + switch(m_type) + { + case feSatellite: + case feCable: + case feTerrestrial: + { + FRONTENDPARAMETERS front; + if (!original && ioctl(m_fd, FE_GET_FRONTEND, &front)<0) + eDebug("FE_GET_FRONTEND (%m)"); + else + { + const FRONTENDPARAMETERS &parm = original ? this->parm : front; + const char *tmp = "INVERSION_AUTO"; + switch(parm_inversion) + { + case INVERSION_ON: + tmp = "INVERSION_ON"; + break; + case INVERSION_OFF: + tmp = "INVERSION_OFF"; + break; + default: + break; + } + if (tmp) + PutToDict(dest, "inversion", tmp); - PutToDict(ret, "tuner_number", m_fe); + switch(m_type) + { + case feSatellite: + fillDictWithSatelliteData(dest, original?parm:front, this); + break; + case feCable: + fillDictWithCableData(dest, original?parm:front); + break; + case feTerrestrial: + fillDictWithTerrestrialData(dest, original?parm:front); + break; + } + } + } + default: + break; + } + } +} +void eDVBFrontend::getFrontendData(ePyObject dest) +{ + if (dest && PyDict_Check(dest)) + { + const char *tmp=0; + PutToDict(dest, "tuner_number", m_fe); switch(m_type) { case feSatellite: @@ -995,85 +1075,10 @@ PyObject *eDVBFrontend::readTransponderData(bool original) break; default: tmp = "UNKNOWN"; - read=false; break; } - PutToDict(ret, "tuner_type", tmp); - - if (read) - { - FRONTENDPARAMETERS front; - - tmp = "UNKNOWN"; - switch(m_state) - { - case stateIdle: - tmp="IDLE"; - break; - case stateTuning: - tmp="TUNING"; - break; - case stateFailed: - tmp="FAILED"; - break; - case stateLock: - tmp="LOCKED"; - break; - case stateLostLock: - tmp="LOSTLOCK"; - break; - default: - break; - } - PutToDict(ret, "tuner_state", tmp); - - PutToDict(ret, "tuner_locked", readFrontendData(locked)); - PutToDict(ret, "tuner_synced", readFrontendData(synced)); - PutToDict(ret, "tuner_bit_error_rate", readFrontendData(bitErrorRate)); - PutToDict(ret, "tuner_signal_power", readFrontendData(signalPower)); - PutToDict(ret, "tuner_signal_quality", readFrontendData(signalQuality)); - - if (!original && ioctl(m_fd, FE_GET_FRONTEND, &front)<0) - eDebug("FE_GET_FRONTEND (%m)"); - else - { - const FRONTENDPARAMETERS &parm = original ? this->parm : front; - tmp = "INVERSION_AUTO"; - switch(parm_inversion) - { - case INVERSION_ON: - tmp = "INVERSION_ON"; - break; - case INVERSION_OFF: - tmp = "INVERSION_OFF"; - break; - default: - break; - } - if (tmp) - PutToDict(ret, "inversion", tmp); - - switch(m_type) - { - case feSatellite: - fillDictWithSatelliteData(ret, original?parm:front, this); - break; - case feCable: - fillDictWithCableData(ret, original?parm:front); - break; - case feTerrestrial: - fillDictWithTerrestrialData(ret, original?parm:front); - break; - } - } - } + PutToDict(dest, "tuner_type", tmp); } - else - { - Py_INCREF(Py_None); - ret = Py_None; - } - return ret; } #ifndef FP_IOCTL_GET_ID @@ -1147,7 +1152,7 @@ void eDVBFrontend::tuneLoop() // called by m_tuneTimer case eSecCommand::IF_VOLTAGE_GOTO: { eSecCommand::pair &compare = m_sec_sequence.current()->compare; - if ( compare.voltage == m_curVoltage && setSecSequencePos(compare.steps) ) + if ( compare.voltage == m_data[CUR_VOLTAGE] && setSecSequencePos(compare.steps) ) break; ++m_sec_sequence.current(); break; @@ -1155,7 +1160,23 @@ void eDVBFrontend::tuneLoop() // called by m_tuneTimer case eSecCommand::IF_NOT_VOLTAGE_GOTO: { eSecCommand::pair &compare = m_sec_sequence.current()->compare; - if ( compare.voltage != m_curVoltage && setSecSequencePos(compare.steps) ) + if ( compare.voltage != m_data[CUR_VOLTAGE] && setSecSequencePos(compare.steps) ) + break; + ++m_sec_sequence.current(); + break; + } + case eSecCommand::IF_TONE_GOTO: + { + eSecCommand::pair &compare = m_sec_sequence.current()->compare; + if ( compare.tone == m_data[CUR_TONE] && setSecSequencePos(compare.steps) ) + break; + ++m_sec_sequence.current(); + break; + } + case eSecCommand::IF_NOT_TONE_GOTO: + { + eSecCommand::pair &compare = m_sec_sequence.current()->compare; + if ( compare.tone != m_data[CUR_TONE] && setSecSequencePos(compare.steps) ) break; ++m_sec_sequence.current(); break; @@ -1214,7 +1235,7 @@ void eDVBFrontend::tuneLoop() // called by m_tuneTimer case eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO: { eSecCommand::pair &compare = m_sec_sequence.current()->compare; - int idx = compare.voltage; + int idx = compare.val; if ( idx == 0 || idx == 1 ) { int idle = readInputpower(); @@ -1261,7 +1282,7 @@ void eDVBFrontend::tuneLoop() // called by m_tuneTimer break; case eSecCommand::IF_INPUTPOWER_DELTA_GOTO: { - int idleInputpower = m_idleInputpower[ (m_curVoltage&1) ? 0 : 1]; + int idleInputpower = m_idleInputpower[ (m_data[CUR_VOLTAGE]&1) ? 0 : 1]; eSecCommand::rotor &cmd = m_sec_sequence.current()->measure; const char *txt = cmd.direction ? "running" : "stopped"; eDebug("[SEC] waiting for rotor %s %d, idle %d, delta %d", @@ -1834,7 +1855,7 @@ RESULT eDVBFrontend::setVoltage(int voltage) bool increased=false; fe_sec_voltage_t vlt; #endif - m_curVoltage=voltage; + m_data[CUR_VOLTAGE]=voltage; switch (voltage) { case voltageOff: @@ -1889,7 +1910,7 @@ RESULT eDVBFrontend::setTone(int t) #else fe_sec_tone_mode_t tone; #endif - + m_data[CUR_TONE]=t; switch (t) { case toneOn: @@ -1999,7 +2020,8 @@ int eDVBFrontend::isCompatibleWith(ePtr &feparm) { ASSERT(m_sec); eDVBFrontendParametersSatellite sat_parm; - ASSERT(!feparm->getDVBS(sat_parm)); + int ret = feparm->getDVBS(sat_parm); + ASSERT(!ret); return m_sec->canTune(sat_parm, this, 1 << m_fe); } else if (m_type == eDVBFrontend::feCable)