fix
[enigma2.git] / lib / dvb / frontend.cpp
index 1cafcec40fc2aa6809aa7df1c74c6859f967968e..0cb910fbde37228ad7e78ab844f1e477c7b010cd 100644 (file)
@@ -177,8 +177,11 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters
                        diff = 1<<29;
                else if (sat.polarisation != osat.polarisation)
                        diff = 1<<28;
-               else 
+               else
+               {
                        diff = abs(sat.frequency - osat.frequency);
+                       diff += abs(sat.symbol_rate - osat.symbol_rate);
+               }
                return 0;
        }
        case iDVBFrontend::feCable:
@@ -209,7 +212,7 @@ RESULT eDVBFrontendParameters::getHash(unsigned long &hash) const
 DEFINE_REF(eDVBFrontend);
 
 eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok)
-       :m_type(-1), m_fe(fe), m_timeout(0), m_tuneTimer(0), m_fd(-1)
+       :m_type(-1), m_fe(fe), m_fd(-1), m_timeout(0), m_tuneTimer(0)
 #if HAVE_DVB_API_VERSION < 3
        ,m_secfd(-1)
 #endif
@@ -229,6 +232,8 @@ eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok)
        for (int i=0; i<entries; ++i)
                m_data[i] = -1;
 
+       m_idleInputpower[0]=m_idleInputpower[1]=0;
+
        ok = !openFrontend();
        closeFrontend();
 }
@@ -313,7 +318,7 @@ int eDVBFrontend::openFrontend()
        return 0;
 }
 
-void eDVBFrontend::closeFrontend()
+int eDVBFrontend::closeFrontend()
 {
        if (!m_fe && m_data[7] != -1)
        {
@@ -323,7 +328,7 @@ void eDVBFrontend::closeFrontend()
                {
                        eDebug("dont close frontend %d until the linked frontend %d is still in use",
                                m_fe, linked_fe->m_frontend->getID());
-                       return;
+                       return -1;
                }
        }
        eDebug("close frontend %d", m_fe);
@@ -344,6 +349,7 @@ void eDVBFrontend::closeFrontend()
 
        setTone(iDVBFrontend::toneOff);
        setVoltage(iDVBFrontend::voltageOff);
+       return 0;
 }
 
 eDVBFrontend::~eDVBFrontend()
@@ -587,12 +593,12 @@ void eDVBFrontend::tuneLoop()  // called by m_tuneTimer
                                        eDebug("[SEC] error read lnbp (%m)");
                                if ( m_sec_sequence.current()->mode == eSecCommand::modeStatic )
                                {
-                                       data[0] |= 0x90;  // enable static current limiting
+                                       data[0] |= 0x80;  // enable static current limiting
                                        eDebug("[SEC] set static current limiting");
                                }
                                else
                                {
-                                       data[0] &= ~0x90;  // enable dynamic current limiting
+                                       data[0] &= ~0x80;  // enable dynamic current limiting
                                        eDebug("[SEC] set dynamic current limiting");
                                }
                                if(::write(fd, data, 1) != 1)
@@ -1058,6 +1064,19 @@ RESULT eDVBFrontend::sendToneburst(int burst)
                cmd = SEC_MINI_B;
        if (::ioctl(m_secfd, SEC_DISEQC_SEND_BURST, cmd))
                return -EINVAL;
+#else
+       fe_sec_mini_cmd_t cmd = SEC_MINI_A;
+       if ( burst == eDVBSatelliteDiseqcParameters::A )
+               cmd = SEC_MINI_A;
+       else if ( burst == eDVBSatelliteDiseqcParameters::B )
+               cmd = SEC_MINI_B;
+       else
+       {
+               eDebug("unknown toneburst!");
+               return -EINVAL;
+       }
+       if (::ioctl(m_fd, FE_DISEQC_SEND_BURST, cmd))
+               return -EINVAL;
 #endif
        return 0;
 }