dvb-t 5V antenna voltage fix
[enigma2.git] / lib / dvb / frontend.cpp
index a1bc3d9ff2a5361eaf20991ef01bfb2e8c4f1846..1318a0c3dc51d70d2162dd378552e6a63bdba319 100644 (file)
@@ -1,5 +1,6 @@
 #include <lib/dvb/dvb.h>
 #include <lib/base/eerror.h>
+#include <lib/base/nconfig.h> // access to python config
 #include <errno.h>
 #include <unistd.h>
 #include <fcntl.h>
@@ -1002,6 +1003,7 @@ PyObject *eDVBFrontend::readTransponderData(bool original)
                                eDebug("FE_GET_FRONTEND (%m)");
                        else
                        {
+                               const FRONTENDPARAMETERS &parm = original ? this->parm : front;
                                tmp = "INVERSION_AUTO";
                                switch(parm_inversion)
                                {
@@ -1679,6 +1681,12 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
 
        int res=0;
 
+       if (!m_sn)
+       {
+               eDebug("no frontend device opened... do not try to tune !!!");
+               return -ENODEV;
+       }
+
        if (m_type == -1)
                return -ENODEV;
 
@@ -1724,6 +1732,18 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
                if (!res)
                {
                        m_sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT) );
+                       eDVBRegisteredFrontend *linked_fe = (eDVBRegisteredFrontend*)m_data[LINKED_PREV_PTR];
+                       if (linked_fe == (eDVBRegisteredFrontend*)-1)
+                       {
+                               std::string enable_5V;
+                               ePythonConfigQuery::getConfigValue("config.terrestrial.enable_5V", enable_5V);
+                               if (enable_5V == "yes")
+                                       m_sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
+                               else
+                                       m_sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltageOff) );
+                       }
+                       else
+                               m_sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltageOff) );
                        m_sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) );
                }
                break;