aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dvb')
-rw-r--r--lib/dvb/dvb.cpp9
-rw-r--r--lib/dvb/dvb.h9
2 files changed, 18 insertions, 0 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp
index 09c9f5f6..bad0ce1a 100644
--- a/lib/dvb/dvb.cpp
+++ b/lib/dvb/dvb.cpp
@@ -78,6 +78,14 @@ eDVBResourceManager::eDVBResourceManager()
CONNECT(m_releaseCachedChannelTimer.timeout, eDVBResourceManager::releaseCachedChannel);
}
+void eDVBResourceManager::feStateChanged()
+{
+ int mask=0;
+ for (eSmartPtrList<eDVBRegisteredFrontend>::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i)
+ if (i->m_inuse)
+ mask |= ( 1 << i->m_frontend->getID() );
+ /* emit */ frontendUseMaskChanged(mask);
+}
DEFINE_REF(eDVBAdapterLinux);
eDVBAdapterLinux::eDVBAdapterLinux(int nr): m_nr(nr)
@@ -215,6 +223,7 @@ void eDVBResourceManager::addAdapter(iDVBAdapter *adapter)
{
frontend->setSEC(m_sec);
m_frontend.push_back(new eDVBRegisteredFrontend(frontend, adapter));
+ CONNECT(m_frontend.back()->stateChanged, eDVBResourceManager::feStateChanged);
}
}
}
diff --git a/lib/dvb/dvb.h b/lib/dvb/dvb.h
index bc51ccd8..4ca986b1 100644
--- a/lib/dvb/dvb.h
+++ b/lib/dvb/dvb.h
@@ -23,6 +23,7 @@ class eDVBRegisteredFrontend: public iObject, public Object
{
DECLARE_REF(eDVBRegisteredFrontend);
eTimer *disable;
+ Signal0<void> stateChanged;
void closeFrontend()
{
if (!m_inuse && m_frontend->closeFrontend()) // frontend busy
@@ -38,12 +39,18 @@ public:
void dec_use()
{
if (!--m_inuse)
+ {
+ /* emit */ stateChanged();
disable->start(3000, true);
+ }
}
void inc_use()
{
if (++m_inuse == 1)
+ {
m_frontend->openFrontend();
+ /* emit */ stateChanged();
+ }
}
iDVBAdapter *m_adapter;
ePtr<eDVBFrontend> m_frontend;
@@ -175,6 +182,7 @@ class eDVBResourceManager: public iObject, public Object
eTimer m_releaseCachedChannelTimer;
void DVBChannelStateChanged(iDVBChannel*);
void releaseCachedChannel();
+ void feStateChanged();
#ifndef SWIG
public:
#endif
@@ -199,6 +207,7 @@ public:
#ifdef SWIG
public:
#endif
+ PSignal1<void,int> frontendUseMaskChanged;
RESULT allocateRawChannel(eUsePtr<iDVBChannel> &, int frontend_index);
static RESULT getInstance(ePtr<eDVBResourceManager> &);
};