X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/e613232c4159b23b7160f474e5b09534d42f78ec..c797d4040a1dfac3873b481111a84a5c557432f3:/lib/dvb/frontend.cpp diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index ae72401b..168ff052 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -382,8 +382,10 @@ RESULT eDVBFrontendParameters::getHash(unsigned long &hash) const DEFINE_REF(eDVBFrontend); +int eDVBFrontend::PriorityOrder=0; + eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok) - :m_type(-1), m_dvbid(fe), m_slotid(fe) + :m_enabled(false), 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) @@ -449,21 +451,6 @@ int eDVBFrontend::openFrontend() { case FE_QPSK: m_type = iDVBFrontend::feSatellite; -#if HAVE_DVB_API_VERSION < 3 - if (m_secfd < 0) - { - m_secfd = ::open(m_sec_filename, O_RDWR); - if (m_secfd < 0) - { - eWarning("failed! (%s) %m", m_sec_filename); - ::close(m_fd); - m_fd=-1; - return -1; - } - } - else - eWarning("sec %d already opened", m_dvbid); -#endif break; case FE_QAM: m_type = iDVBFrontend::feCable; @@ -480,6 +467,25 @@ int eDVBFrontend::openFrontend() eDebug("detected %s frontend", "satellite\0cable\0 terrestrial"+fe_info.type*10); } +#if HAVE_DVB_API_VERSION < 3 + if (m_type == iDVBFrontend::feSatellite) + { + if (m_secfd < 0) + { + m_secfd = ::open(m_sec_filename, O_RDWR); + if (m_secfd < 0) + { + eWarning("failed! (%s) %m", m_sec_filename); + ::close(m_fd); + m_fd=-1; + return -1; + } + } + else + eWarning("sec %d already opened", m_dvbid); + } +#endif + setTone(iDVBFrontend::toneOff); setVoltage(iDVBFrontend::voltageOff); @@ -2115,7 +2121,7 @@ RESULT eDVBFrontend::setData(int num, int val) int eDVBFrontend::isCompatibleWith(ePtr &feparm) { int type; - if (feparm->getSystem(type) || type != m_type) + if (feparm->getSystem(type) || type != m_type || !m_enabled) return 0; if (m_type == eDVBFrontend::feSatellite) @@ -2131,25 +2137,28 @@ int eDVBFrontend::isCompatibleWith(ePtr &feparm) return 1; } -void eDVBFrontend::setSlotInfo(ePyObject obj) +bool eDVBFrontend::setSlotInfo(ePyObject obj) { - ePyObject Id, Descr; - if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 2) + ePyObject Id, Descr, Enabled; + if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 3) goto arg_error; Id = PyTuple_GET_ITEM(obj, 0); Descr = PyTuple_GET_ITEM(obj, 1); - if (!PyInt_Check(Id) || !PyString_Check(Descr)) + Enabled = PyTuple_GET_ITEM(obj, 2); + if (!PyInt_Check(Id) || !PyString_Check(Descr) || !PyBool_Check(Enabled)) goto arg_error; strcpy(m_description, PyString_AS_STRING(Descr)); m_slotid = PyInt_AsLong(Id); - + m_enabled = Enabled == Py_True; // HACK.. the rotor workaround is neede for all NIMs with LNBP21 voltage regulator... - m_need_rotor_workaround = !!strstr(m_description, "Alps BSBE1") || !!strstr(m_description, "Alps -S"); - - eDebug("setSlotInfo for dvb frontend %d to slotid %d, descr %s, need rotorworkaround %s", - m_dvbid, m_slotid, m_description, m_need_rotor_workaround ? "Yes" : "No"); - return; + m_need_rotor_workaround = !!strstr(m_description, "Alps BSBE1") || + !!strstr(m_description, "Alps BSBE2") || + !!strstr(m_description, "Alps -S"); + eDebug("setSlotInfo for dvb frontend %d to slotid %d, descr %s, need rotorworkaround %s, enabled %s", + m_dvbid, m_slotid, m_description, m_need_rotor_workaround ? "Yes" : "No", m_enabled ? "Yes" : "No" ); + return true; arg_error: PyErr_SetString(PyExc_StandardError, - "eDVBFrontend::setSlotInfo must get a tuple with first param slotid and second param slot description"); + "eDVBFrontend::setSlotInfo must get a tuple with first param slotid, second param slot description and third param enabled boolean"); + return false; }