frontend.cpp: use m_state != stateClosed instead of use m_sn to check if the frontend...
[enigma2.git] / lib / dvb / frontend.cpp
index e0291ec1731eb91ae4477d2df67c813dcb817b56..a2ccf3b0e8e82f7e767d5dc0caac24a1e50a9dc7 100644 (file)
@@ -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)
                        {
@@ -961,14 +963,15 @@ void PutToDict(ePyObject &dict, const char*key, const char *value)
                eDebug("could not create PyObject for %s", key);
 }
 
-void fillDictWithSatelliteData(ePyObject dict, const FRONTENDPARAMETERS &parm, eDVBFrontend *fe)
+void fillDictWithSatelliteData(ePyObject dict, const FRONTENDPARAMETERS &parm, long freq_offset, int orb_pos, int polarization)
 {
-       long freq_offset=0;
        long tmp=0;
-       fe->getData(eDVBFrontend::FREQ_OFFSET, freq_offset);
        int frequency = parm_frequency + freq_offset;
        PutToDict(dict, "frequency", frequency);
        PutToDict(dict, "symbol_rate", parm_u_qpsk_symbol_rate);
+       PutToDict(dict, "orbital_position", orb_pos);
+       PutToDict(dict, "polarization", polarization);
+
        switch(parm_u_qpsk_fec_inner)
        {
        case FEC_1_2: tmp = eDVBFrontendParametersSatellite::FEC_1_2; break;
@@ -1224,7 +1227,7 @@ void eDVBFrontend::getTransponderData(ePyObject dest, bool original)
                                        switch(m_type)
                                        {
                                                case feSatellite:
-                                                       fillDictWithSatelliteData(dest, original?parm:front, this);
+                                                       fillDictWithSatelliteData(dest, original?parm:front, m_data[FREQ_OFFSET], m_cur_orbpos, m_cur_pol);
                                                        break;
                                                case feCable:
                                                        fillDictWithCableData(dest, original?parm:front);
@@ -1346,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();
@@ -1750,6 +1753,8 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
                        feparm.fec,
                        feparm.orbital_position);
 #endif
+               m_cur_pol = feparm.polarisation;
+               m_cur_orbpos = feparm.orbital_position;
                parm_u_qpsk_symbol_rate = feparm.symbol_rate;
                switch (feparm.inversion)
                {