format, ac3 and crypted indicators now working
[enigma2.git] / lib / dvb / frontend.cpp
index 1cafcec40fc2aa6809aa7df1c74c6859f967968e..103d89495b15a3c77939d7d1272db93aed7ef444 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:
@@ -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()
@@ -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;
 }