From 5cdabb1038ec3f628001f26f5d587eb95ca6465d Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 18 Nov 2005 03:35:17 +0000 Subject: [PATCH] scan: add allocateFrontendByIndex, so ServiceScan uses a fixed frontend ID - currently hardcoded 0 in python. --- lib/components/scan.cpp | 6 ++--- lib/components/scan.h | 2 +- lib/dvb/dvb.cpp | 37 +++++++++++++--------------- lib/dvb/dvb.h | 9 ++++--- lib/python/Components/ServiceScan.py | 5 ++-- lib/python/Screens/ScanSetup.py | 11 +++++---- lib/python/Screens/ServiceScan.py | 4 +-- 7 files changed, 37 insertions(+), 37 deletions(-) diff --git a/lib/components/scan.cpp b/lib/components/scan.cpp index 2f3c4d62..bfbb02da 100644 --- a/lib/components/scan.cpp +++ b/lib/components/scan.cpp @@ -78,7 +78,7 @@ void eComponentScan::addInitial(const eDVBFrontendParametersTerrestrial &p) } -int eComponentScan::start(int flags) +int eComponentScan::start(int feid, int flags) { if (m_initial.empty()) return -2; @@ -93,9 +93,9 @@ int eComponentScan::start(int flags) eUsePtr channel; - if (mgr->allocateRawChannel(channel)) + if (mgr->allocateRawChannel(channel, feid)) { - eDebug("scan: allocating raw channel failed!"); + eDebug("scan: allocating raw channel (on frontend %d) failed!", feid); return -1; } diff --git a/lib/components/scan.h b/lib/components/scan.h index 04218b98..eb18f104 100644 --- a/lib/components/scan.h +++ b/lib/components/scan.h @@ -42,7 +42,7 @@ public: /* please keep the flags in sync with lib/dvb/scan.h ! */ enum { scanNetworkSearch=1 }; - int start(int flags=0); + int start(int feid, int flags=0); }; #endif diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 04c2b40e..5315c0e5 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -206,7 +206,7 @@ void eDVBResourceManager::addAdapter(iDVBAdapter *adapter) } } -RESULT eDVBResourceManager::allocateFrontend(ePtr &feparm, ePtr &fe) +RESULT eDVBResourceManager::allocateFrontend(ePtr &fe, ePtr &feparm) { ePtr best; int bestval = 0; @@ -233,6 +233,19 @@ RESULT eDVBResourceManager::allocateFrontend(ePtr &fepar return -1; } +RESULT eDVBResourceManager::allocateFrontendByIndex(ePtr &fe, int nr) +{ + for (eSmartPtrList::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i, --nr) + if ((!nr) && !i->m_inuse) + { + fe = new eDVBAllocatedFrontend(i); + return 0; + } + + fe = 0; + return -1; +} + RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr &demux, int cap) { /* find first unused demux which is on same adapter as frontend (or any, if PVR) @@ -317,15 +330,9 @@ RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUse ePtr fe; - if (allocateFrontend(feparm, fe)) + if (allocateFrontend(fe, feparm)) return errNoFrontend; -// will be allocated on demand: -// ePtr demux; -// -// if (allocateDemux(*fe, demux)) -// return errNoDemux; - RESULT res; ePtr ch; ch = new eDVBChannel(this, fe); @@ -341,20 +348,13 @@ RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUse return 0; } -RESULT eDVBResourceManager::allocateRawChannel(eUsePtr &channel) +RESULT eDVBResourceManager::allocateRawChannel(eUsePtr &channel, int frontend_index) { ePtr fe; -#warning FIXME allocateRawChannel - -// if (allocateFrontend(eDVBChannelID(), fe)) + if (allocateFrontendByIndex(fe, frontend_index)) return errNoFrontend; -// ePtr demux; - // -// if (allocateDemux(*fe, demux)) -// return errNoDemux; - eDVBChannel *ch; ch = new eDVBChannel(this, fe); @@ -367,9 +367,6 @@ RESULT eDVBResourceManager::allocatePVRChannel(eUsePtr &channel) { ePtr demux; -// if (allocateDemux(0, demux)) -// return errNoDemux; - eDVBChannel *ch; ch = new eDVBChannel(this, 0); diff --git a/lib/dvb/dvb.h b/lib/dvb/dvb.h index 924d4e6e..fcfbdfe7 100644 --- a/lib/dvb/dvb.h +++ b/lib/dvb/dvb.h @@ -106,15 +106,16 @@ class eDVBResourceManager: public iObject void addAdapter(iDVBAdapter *adapter); - /* allocates a frontend able to tune to channelID "chid". + /* allocates a frontend able to tune to frontend paramters 'feperm'. the frontend must be tuned lateron. there is no guarante - that tuning will suceed - it just means that if this frontend + that tuning will succeed - it just means that if this frontend can't tune, no other frontend could do it. there might be a priority given to certain frontend/chid combinations. this will be evaluated here. */ - RESULT allocateFrontend(ePtr &feparm, ePtr &fe); + RESULT allocateFrontend(ePtr &fe, ePtr &feparm); + RESULT allocateFrontendByIndex(ePtr &fe, int index); /* allocate a demux able to filter on the selected frontend. */ RESULT allocateDemux(eDVBRegisteredFrontend *fe, ePtr &demux, int cap); @@ -158,7 +159,7 @@ public: /* allocate channel... */ RESULT allocateChannel(const eDVBChannelID &channelid, eUsePtr &channel); - RESULT allocateRawChannel(eUsePtr &channel); + RESULT allocateRawChannel(eUsePtr &channel, int frontend_index); RESULT allocatePVRChannel(eUsePtr &channel); RESULT connectChannelAdded(const Slot1 &channelAdded, ePtr &connection); diff --git a/lib/python/Components/ServiceScan.py b/lib/python/Components/ServiceScan.py index 915a26a0..76836961 100644 --- a/lib/python/Components/ServiceScan.py +++ b/lib/python/Components/ServiceScan.py @@ -34,11 +34,12 @@ class ServiceScan: if self.state == self.Error: self.text.setText("ERROR - failed to scan (%s)!" % (self.Errors[self.errorcode]) ) - def __init__(self, progressbar, text, transponders, flags): + def __init__(self, progressbar, text, transponders, feid, flags): self.progressbar = progressbar self.text = text self.scan = eComponentScan() self.state = self.Idle + self.feid = feid self.flags = flags self.scanStatusChanged() @@ -74,7 +75,7 @@ class ServiceScan: def execBegin(self): self.scan.statusChanged.get().append(self.scanStatusChanged) self.state = self.Running - err = self.scan.start(self.flags) + err = self.scan.start(self.feid, self.flags) if err: self.state = self.Error self.errorcode = 0 diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py index 6b05cd47..2b25cce7 100644 --- a/lib/python/Screens/ScanSetup.py +++ b/lib/python/Screens/ScanSetup.py @@ -269,7 +269,7 @@ class ScanSetup(Screen): if (config.scan.type.value == 1): # single sat scan getInitialTransponderList(tlist, int(self.satList[config.scan.nims.value][config.scan.satselection[config.scan.nims.value].value][1])) - flags |= eComponentScan.scanNetworkSearch + flags |= eComponentScan.scanNetworkSearch if (config.scan.type.value == 2): # multi sat scan SatList = nimmanager.getSatListForNim(config.scan.nims.value) @@ -278,14 +278,14 @@ class ScanSetup(Screen): if x[1].parent.value == 0: print " " + str(x[1].parent.configPath) getInitialTransponderList(tlist, x[1].parent.configPath) - flags |= eComponentScan.scanNetworkSearch + flags |= eComponentScan.scanNetworkSearch for x in self["config"].list: x[1].save() - + feid = 0 # insert correct frontend id here (should be user-selectable) # flags |= eComponentScan.scanSearchBAT - self.session.openWithCallback(self.keyCancel, ServiceScan, tlist, flags) + self.session.openWithCallback(self.keyCancel, ServiceScan, tlist, feid, flags) #self.close() @@ -304,7 +304,8 @@ class ScanSimple(Screen): print " " + str(x[1].parent.configPath) getInitialTransponderList(tlist, x[1].parent.configPath) - self.session.openWithCallback(self.keyCancel, ServiceScan, tlist, eComponentScan.scanNetworkSearch) + feid = 0 # FIXME + self.session.openWithCallback(self.keyCancel, ServiceScan, tlist, feid, eComponentScan.scanNetworkSearch) def keyCancel(self): self.close() diff --git a/lib/python/Screens/ServiceScan.py b/lib/python/Screens/ServiceScan.py index 17b7da75..88730ee9 100644 --- a/lib/python/Screens/ServiceScan.py +++ b/lib/python/Screens/ServiceScan.py @@ -13,14 +13,14 @@ class ServiceScan(Screen): def cancel(self): self.close() - def __init__(self, session, transponders, flags): + def __init__(self, session, transponders, feid, flags): Screen.__init__(self, session) self.session.nav.stopService() self["scan_progress"] = ProgressBar() self["scan_state"] = Label("scan state") - self["scan"] = CScan(self["scan_progress"], self["scan_state"], transponders, flags) + self["scan"] = CScan(self["scan_progress"], self["scan_state"], transponders, feid, flags) self["actions"] = ActionMap(["OkCancelActions"], { -- 2.30.2