aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-11-18 03:35:17 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-11-18 03:35:17 +0000
commit5cdabb1038ec3f628001f26f5d587eb95ca6465d (patch)
treec8b20083f641110d08ebff7bdc4c2ebd096a76d3
parent22dd42bd9ac717c439bd339f0c85adbf3defe2b6 (diff)
downloadenigma2-5cdabb1038ec3f628001f26f5d587eb95ca6465d.tar.gz
enigma2-5cdabb1038ec3f628001f26f5d587eb95ca6465d.zip
scan: add allocateFrontendByIndex, so ServiceScan uses a fixed frontend ID - currently hardcoded 0 in python.
-rw-r--r--lib/components/scan.cpp6
-rw-r--r--lib/components/scan.h2
-rw-r--r--lib/dvb/dvb.cpp37
-rw-r--r--lib/dvb/dvb.h9
-rw-r--r--lib/python/Components/ServiceScan.py5
-rw-r--r--lib/python/Screens/ScanSetup.py11
-rw-r--r--lib/python/Screens/ServiceScan.py4
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<iDVBChannel> 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<iDVBFrontendParameters> &feparm, ePtr<eDVBAllocatedFrontend> &fe)
+RESULT eDVBResourceManager::allocateFrontend(ePtr<eDVBAllocatedFrontend> &fe, ePtr<iDVBFrontendParameters> &feparm)
{
ePtr<eDVBRegisteredFrontend> best;
int bestval = 0;
@@ -233,6 +233,19 @@ RESULT eDVBResourceManager::allocateFrontend(ePtr<iDVBFrontendParameters> &fepar
return -1;
}
+RESULT eDVBResourceManager::allocateFrontendByIndex(ePtr<eDVBAllocatedFrontend> &fe, int nr)
+{
+ for (eSmartPtrList<eDVBRegisteredFrontend>::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<eDVBAllocatedDemux> &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<eDVBAllocatedFrontend> fe;
- if (allocateFrontend(feparm, fe))
+ if (allocateFrontend(fe, feparm))
return errNoFrontend;
-// will be allocated on demand:
-// ePtr<eDVBAllocatedDemux> demux;
-//
-// if (allocateDemux(*fe, demux))
-// return errNoDemux;
-
RESULT res;
ePtr<eDVBChannel> ch;
ch = new eDVBChannel(this, fe);
@@ -341,20 +348,13 @@ RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUse
return 0;
}
-RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel)
+RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel, int frontend_index)
{
ePtr<eDVBAllocatedFrontend> fe;
-#warning FIXME allocateRawChannel
-
-// if (allocateFrontend(eDVBChannelID(), fe))
+ if (allocateFrontendByIndex(fe, frontend_index))
return errNoFrontend;
-// ePtr<eDVBAllocatedDemux> demux;
- //
-// if (allocateDemux(*fe, demux))
-// return errNoDemux;
-
eDVBChannel *ch;
ch = new eDVBChannel(this, fe);
@@ -367,9 +367,6 @@ RESULT eDVBResourceManager::allocatePVRChannel(eUsePtr<iDVBPVRChannel> &channel)
{
ePtr<eDVBAllocatedDemux> 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<iDVBFrontendParameters> &feparm, ePtr<eDVBAllocatedFrontend> &fe);
+ RESULT allocateFrontend(ePtr<eDVBAllocatedFrontend> &fe, ePtr<iDVBFrontendParameters> &feparm);
+ RESULT allocateFrontendByIndex(ePtr<eDVBAllocatedFrontend> &fe, int index);
/* allocate a demux able to filter on the selected frontend. */
RESULT allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBAllocatedDemux> &demux, int cap);
@@ -158,7 +159,7 @@ public:
/* allocate channel... */
RESULT allocateChannel(const eDVBChannelID &channelid, eUsePtr<iDVBChannel> &channel);
- RESULT allocateRawChannel(eUsePtr<iDVBChannel> &channel);
+ RESULT allocateRawChannel(eUsePtr<iDVBChannel> &channel, int frontend_index);
RESULT allocatePVRChannel(eUsePtr<iDVBPVRChannel> &channel);
RESULT connectChannelAdded(const Slot1<void,eDVBChannel*> &channelAdded, ePtr<eConnection> &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"],
{