aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2007-11-12 18:42:54 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2007-11-12 18:42:54 +0000
commit99e6feec1546d5fa2ff8e5cdfdf84438db4281b3 (patch)
tree3d52309c89f8345fcc8e77d0b0a0117cc7dac00c /lib/dvb
parent233d539468f8a5b89782e9e92be224fcd7c21ab6 (diff)
downloadenigma2-99e6feec1546d5fa2ff8e5cdfdf84438db4281b3.tar.gz
enigma2-99e6feec1546d5fa2ff8e5cdfdf84438db4281b3.zip
add possibility to set tuner priority for alternative services in Customize
menu (just with expert usage level)
Diffstat (limited to 'lib/dvb')
-rw-r--r--lib/dvb/dvb.cpp35
-rw-r--r--lib/dvb/frontend.cpp2
-rw-r--r--lib/dvb/frontend.h3
3 files changed, 35 insertions, 5 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp
index 03c2aab6..b7d278cc 100644
--- a/lib/dvb/dvb.cpp
+++ b/lib/dvb/dvb.cpp
@@ -597,14 +597,41 @@ int eDVBResourceManager::canAllocateFrontend(ePtr<iDVBFrontendParameters> &fepar
return bestval;
}
+int tuner_type_channel_default(ePtr<iDVBChannelList> &channellist, const eDVBChannelID &chid)
+{
+ if (channellist)
+ {
+ ePtr<iDVBFrontendParameters> feparm;
+ if (!channellist->getChannelFrontendData(chid, feparm))
+ {
+ int system;
+ if (!feparm->getSystem(system))
+ {
+ switch(system)
+ {
+ case iDVBFrontend::feSatellite:
+ return 50000;
+ case iDVBFrontend::feCable:
+ return 40000;
+ case iDVBFrontend::feTerrestrial:
+ return 30000;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ return 0;
+}
+
int eDVBResourceManager::canAllocateChannel(const eDVBChannelID &channelid, const eDVBChannelID& ignore)
{
- int ret=30000;
+ int ret=0;
if (m_cached_channel)
{
eDVBChannel *cache_chan = (eDVBChannel*)&(*m_cached_channel);
if(channelid==cache_chan->getChannelID())
- return ret;
+ return tuner_type_channel_default(m_list, channelid);
}
/* first, check if a channel is already existing. */
@@ -615,7 +642,7 @@ int eDVBResourceManager::canAllocateChannel(const eDVBChannelID &channelid, cons
if (i->m_channel_id == channelid)
{
// eDebug("found shared channel..");
- return ret;
+ return tuner_type_channel_default(m_list, channelid);
}
}
@@ -685,14 +712,12 @@ int eDVBResourceManager::canAllocateChannel(const eDVBChannelID &channelid, cons
if (!m_list)
{
eDebug("no channel list set!");
- ret = 0;
goto error;
}
if (m_list->getChannelFrontendData(channelid, feparm))
{
eDebug("channel not found!");
- ret = 0;
goto error;
}
diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp
index 8b214130..6a26ae98 100644
--- a/lib/dvb/frontend.cpp
+++ b/lib/dvb/frontend.cpp
@@ -382,6 +382,8 @@ RESULT eDVBFrontendParameters::getHash(unsigned long &hash) const
DEFINE_REF(eDVBFrontend);
+int eDVBFrontend::PriorityOrder=0;
+
eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok)
:m_enabled(false), m_type(-1), m_dvbid(fe), m_slotid(fe)
,m_fd(-1), m_need_rotor_workaround(false), m_sn(0), m_timeout(0), m_tuneTimer(0)
diff --git a/lib/dvb/frontend.h b/lib/dvb/frontend.h
index 2a180bab..5821e54d 100644
--- a/lib/dvb/frontend.h
+++ b/lib/dvb/frontend.h
@@ -97,6 +97,7 @@ class eDVBFrontend: public iDVBFrontend, public Object
int readInputpower();
bool setSecSequencePos(int steps);
void setRotorData(int pos, int cmd);
+ static int PriorityOrder;
public:
eDVBFrontend(int adap, int fe, int &ok);
virtual ~eDVBFrontend();
@@ -126,6 +127,8 @@ public:
int getDVBID() { return m_dvbid; }
int getSlotID() { return m_slotid; }
bool setSlotInfo(ePyObject obj); // get a tuple (slotid, slotdescr)
+ static void setTypePriorityOrder(int val) { PriorityOrder = val; }
+ static int getTypePriorityOrder() { return PriorityOrder; }
int openFrontend();
int closeFrontend();