fixes for /dev/misc/pvr opening problems in some conditions
[enigma2.git] / lib / dvb / frontend.cpp
index 5df179314eb212377785cbccac8d97873158183d..e5e83b42cd477fdb0e775a866a0b0ed5cfc148ad 100644 (file)
@@ -379,7 +379,7 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters
                        terrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC_Auto)
                        diff = 1 << 30;
                else
-                       diff = abs(terrestrial.frequency - oterrestrial.frequency);
+                       diff = abs(terrestrial.frequency - oterrestrial.frequency) / 1000;
                return 0;
        default:
                return -1;
@@ -403,7 +403,7 @@ RESULT eDVBFrontendParameters::getHash(unsigned long &hash) const
                return 0;
        case iDVBFrontend::feTerrestrial:
                hash = 0xEEEE0000;
-               hash |= (terrestrial.frequency/1000)&0xFFFF;
+               hash |= (terrestrial.frequency/1000000)&0xFFFF;
                return 0;
        default:
                return -1;
@@ -448,7 +448,7 @@ int eDVBFrontend::PriorityOrder=0;
 eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate)
        :m_simulate(simulate), m_enabled(false), m_type(-1), m_dvbid(fe), m_slotid(fe)
        ,m_fd(-1), m_need_rotor_workaround(false), m_can_handle_dvbs2(false)
-       , m_timeout(0), m_tuneTimer(0)
+       ,m_state(stateClosed), m_timeout(0), m_tuneTimer(0)
 #if HAVE_DVB_API_VERSION < 3
        ,m_secfd(-1)
 #endif
@@ -477,7 +477,7 @@ eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate)
 
 int eDVBFrontend::openFrontend()
 {
-       if (m_sn)
+       if (m_state != stateClosed)
                return -1;  // already opened
 
        m_state=stateIdle;
@@ -858,6 +858,8 @@ int eDVBFrontend::readFrontendData(int type)
                                if (snr != 0)
                                        ret = 10 * (int)(-100 * (log10(snr) - log10(255)));
                        }
+                       else if (!strcmp(m_description, "BCM4506"))
+                               ret = (snr * 100) >> 8;
 
                        if (type == signalQuality)
                        {
@@ -1347,7 +1349,7 @@ void eDVBFrontend::tuneLoop()  // called by m_tuneTimer
                                state = sec_fe->m_state;
                        }
                        // sec_fe is closed... we must reopen it here..
-                       if (state == eDVBFrontend::stateClosed)
+                       if (state == stateClosed)
                        {
                                regFE = prev;
                                prev->inc_use();