From 8b6a8658b1ea5aa358947a488c80eff75295d0fb Mon Sep 17 00:00:00 2001 From: Andreas Monzner Date: Mon, 26 Jun 2006 21:46:10 +0000 Subject: [PATCH] add 5V handling for active DVB-T antennas (needs new drivers) --- lib/dvb/dvb.cpp | 19 ++++++++++++++++--- lib/dvb/frontend.cpp | 9 +++++++++ lib/python/Components/NimManager.py | 6 ++++++ lib/python/Screens/ScanSetup.py | 13 ++++++++++++- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index bad0ce1a..ff3e4712 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -215,15 +215,28 @@ void eDVBResourceManager::addAdapter(iDVBAdapter *adapter) m_demux.push_back(new eDVBRegisteredDemux(demux, adapter)); } + ePtr prev_dvbt_frontend; for (i=0; i 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; + } } } } diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index e495b1c5..8ba68a59 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -1,5 +1,6 @@ #include #include +#include // access to python config #include #include #include @@ -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; diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index 8454bbe5..a4bcb80b 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -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() diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py index e8d3781f..5becc898 100644 --- a/lib/python/Screens/ScanSetup.py +++ b/lib/python/Screens/ScanSetup.py @@ -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")) -- 2.30.2