add 5V handling for active DVB-T antennas (needs new drivers)
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Mon, 26 Jun 2006 21:46:10 +0000 (21:46 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Mon, 26 Jun 2006 21:46:10 +0000 (21:46 +0000)
lib/dvb/dvb.cpp
lib/dvb/frontend.cpp
lib/python/Components/NimManager.py
lib/python/Screens/ScanSetup.py

index bad0ce1af58ca54fa58dca097e6c656b7c6ee2da..ff3e4712b8ecbf6564889254031a70fa131455c9 100644 (file)
@@ -215,15 +215,28 @@ void eDVBResourceManager::addAdapter(iDVBAdapter *adapter)
                        m_demux.push_back(new eDVBRegisteredDemux(demux, adapter));
        }
 
+       ePtr<eDVBRegisteredFrontend> prev_dvbt_frontend;
        for (i=0; i<num_fe; ++i)
        {
                ePtr<eDVBFrontend> frontend;
-
                if (!adapter->getFrontend(frontend, i))
                {
+                       int frontendType=0;
+                       frontend->getFrontendType(frontendType);
+                       eDVBRegisteredFrontend *new_fe = new eDVBRegisteredFrontend(frontend, adapter);
+                       CONNECT(new_fe->stateChanged, eDVBResourceManager::feStateChanged);
+                       m_frontend.push_back(new_fe);
                        frontend->setSEC(m_sec);
-                       m_frontend.push_back(new eDVBRegisteredFrontend(frontend, adapter));
-                       CONNECT(m_frontend.back()->stateChanged, eDVBResourceManager::feStateChanged);
+                       // we must link all dvb-t frontends ( for active antenna voltage )
+                       if (frontendType == iDVBFrontend::feTerrestrial)
+                       {
+                               if (prev_dvbt_frontend)
+                               {
+                                       prev_dvbt_frontend->m_frontend->setData(eDVBFrontend::LINKED_NEXT_PTR, (int)new_fe);
+                                       frontend->setData(eDVBFrontend::LINKED_PREV_PTR, (int)&(*prev_dvbt_frontend));
+                               }
+                               prev_dvbt_frontend = new_fe;
+                       }
                }
        }
 }
index e495b1c5a079f4afe0c9d7a92a18dfd3bc72c5d6..8ba68a593dea7625fa6a7ad4a3773e1cd7521172 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>
@@ -1731,6 +1732,14 @@ 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) );
+                       }
                        m_sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) );
                }
                break;
index 8454bbe5f531758a586bd5a1569eca376f197612..a4bcb80b149894c3ed1a388a1f9c3784ab3bbdd9 100644 (file)
@@ -641,6 +641,8 @@ class NimManager:
                pass
 
 def InitNimManager(nimmgr):
+       have_terrestrial_tuner = False
+       config.terrestrial = ConfigSubsection()
        config.Nims = []
        for x in range(nimmgr.nimCount):
                config.Nims.append(ConfigSubsection())
@@ -765,6 +767,7 @@ def InitNimManager(nimmgr):
                elif slot.nimType == nimmgr.nimType["DVB-C"]:
                        nim.cable = configElement(cname + "cable", configSelection, 0, nimmgr.cablesList, False);
                elif slot.nimType == nimmgr.nimType["DVB-T"]:
+                       have_terrestrial_tuner = True
                        list = []
                        for x in nimmgr.terrestrialsList:
                                list.append(x[0])
@@ -772,6 +775,9 @@ def InitNimManager(nimmgr):
                else:
                        print "pls add support for this frontend type!"         
 
+       if have_terrestrial_tuner:
+               config.terrestrial.enable_5V = configElement("config.terrestrial.enable_5V", configSelection, 1, (("yes", _("Yes")), ("no", _("No"))), True);
+
        nimmgr.sec = SecConfigure(nimmgr)
 
 nimmanager = NimManager()
index e8d3781f54c6ae12382888f0183916ef99282d9d..5becc898e5d0744888e36e534c5ae5abf3d01c49 100644 (file)
@@ -254,6 +254,7 @@ class ScanSetup(Screen):
                                self.list.append(getConfigListEntry(_("Hierarchy mode"), config.scan.ter.hierarchy))
                        elif currentConfigSelectionElement(config.scan.typeterrestrial) == "complete":
                                self.list.append(getConfigListEntry(_("Clear before scan"), config.scan.clearallservices))
+                       self.list.append(getConfigListEntry(_("Enable 5V for active antenna"), config.terrestrial.enable_5V))
 
 #              if (nimmanager.getNimType(config.scan.nims.value) == nimmanager.nimType["DVB-S"] and currentConfigSelectionElement(config.scan.type) == "single_transponder") or \
 #                      (nimmanager.getNimType(config.scan.nims.value) == nimmanager.nimType["DVB-C"] and currentConfigSelectionElement(config.scan.typecable) == "single_transponder") or \
@@ -638,19 +639,29 @@ class ScanSimple(Screen):
                tlist = []
 
                nimcount = nimmanager.getNimSocketCount()
+               have_terrestrial = False
                if nimcount > 0:
+                       nimtype = nimmanager.getNimType(0)
                        scan_possible=True
                        config.scan = ConfigSubsection()
                        config.scan.clearallservices = configElement_nonSave("config.scan.clearallservices", configSelection, 0, (("no", _("no")), ("yes", _("yes")), ("yes_hold_feeds", _("yes (keep feeds)"))))
                        self.list.append(getConfigListEntry(_("Clear before scan"), config.scan.clearallservices))
                        nim = configElement_nonSave(0, configSelection, 0, (("yes", _("yes")), ("no", _("no"))))
-                       if nimmanager.getNimType(0) == nimmanager.nimType["DVB-S"] and not len(nimmanager.getSatListForNim(0)):
+                       if nimtype == nimmanager.nimType["DVB-T"]:
+                               have_terrestrial = True
+                       elif nimtype == nimmanager.nimType["DVB-S"] and not len(nimmanager.getSatListForNim(0)):
                                scan_possible=False
                        if scan_possible:
                                self.list.append(getConfigListEntry(_("Scan NIM") + " 0 (" + nimmanager.getNimTypeName(0) + ")", nim))
+       
                if nimcount > 1 and self.ScanNimTwoNeeded():
                        nim = configElement_nonSave(1, configSelection, 0, (("yes", _("yes")), ("no", _("no"))))
                        self.list.append(getConfigListEntry(_("Scan NIM") + " 1 (" + nimmanager.getNimTypeName(1) + ")", nim))
+                       if nimtype = nimmanager.getNimType(1) == nimmanager.nimType["DVB-T"]:
+                               have_terrestrial = True
+
+               if have_terrestrial:
+                       self.list.append(getConfigListEntry(_("Enable 5V for active antenna"), config.terrestrial.enable_5V))
 
                self["config"] = ConfigList(self.list)
                self["header"] = Label(_("Automatic Scan"))