Merge branch 'master' of /git/enigma2
[enigma2.git] / lib / dvb / frontend.cpp
index 10e89453069132daaa95776be3904ae8219e60d3..c6bf6aa83efe4fba3c9b3dc4c8ddcf3375bbebb5 100644 (file)
@@ -666,15 +666,28 @@ void eDVBFrontend::feEvent(int w)
 #if HAVE_DVB_API_VERSION < 3
                if (event.type == FE_COMPLETION_EV)
 #else
-               eDebug("(%d)fe event: status %x, inversion %s", m_dvbid, event.status, (event.parameters.inversion == INVERSION_ON) ? "on" : "off");
+               eDebug("(%d)fe event: status %x, inversion %s, m_tuning %d", m_dvbid, event.status, (event.parameters.inversion == INVERSION_ON) ? "on" : "off", m_tuning);
                if (event.status & FE_HAS_LOCK)
 #endif
                {
                        state = stateLock;
                } else
                {
-                       if (m_tuning)
+                       if (m_tuning) {
                                state = stateTuning;
+#if HAVE_DVB_API_VERSION >= 3
+                               if (event.status & FE_TIMEDOUT) {
+                                       eDebug("FE_TIMEDOUT! ..abort");
+                                       m_tuneTimer->stop();
+                                       timeout();
+                                       return;
+                               }
+                               ++m_tuning;
+#else
+                               m_tuneTimer->stop();
+                               timeout();
+#endif
+                       }
                        else
                        {
                                eDebug("stateLostLock");
@@ -791,7 +804,7 @@ int eDVBFrontend::readFrontendData(int type)
                                ret = (int)(snr_in_db * 100);
                        }
                        else if (strstr(m_description, "Alps BSBE1 C01A") ||
-                               !strcmp(m_description, "Alps -S(STV0288)"))
+                               strstr(m_description, "Alps -S(STV0288)"))
                        {
                                if (snr == 0)
                                        ret = 0;
@@ -860,7 +873,7 @@ int eDVBFrontend::readFrontendData(int type)
                                if (snr != 0)
                                        ret = 10 * (int)(-100 * (log10(snr) - log10(255)));
                        }
-                       else if (!strcmp(m_description, "BCM4506"))
+                       else if (strstr(m_description, "BCM4506") || strstr(m_description, "BCM4505"))
                                ret = (snr * 100) >> 8;
 
                        if (type == signalQuality)
@@ -2387,9 +2400,9 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
        if (!m_simulate)
        {
                m_tuneTimer->start(0,true);
+               m_tuning = 1;
                if (m_state != stateTuning)
                {
-                       m_tuning = 1;
                        m_state = stateTuning;
                        m_stateChanged(this);
                }