{
struct stat s;
char filename[128];
+#if HAVE_DVB_API_VERSION < 3
+ sprintf(filename, "/dev/dvb/card%d/frontend%d", m_nr, num_fe);
+#else
sprintf(filename, "/dev/dvb/adapter%d/frontend%d", m_nr, num_fe);
+#endif
if (stat(filename, &s))
break;
ePtr<eDVBFrontend> fe;
{
struct stat s;
char filename[128];
+#if HAVE_DVB_API_VERSION < 3
+ sprintf(filename, "/dev/dvb/card%d/demux%d", m_nr, num_demux);
+#else
sprintf(filename, "/dev/dvb/adapter%d/demux%d", m_nr, num_demux);
+#endif
if (stat(filename, &s))
break;
ePtr<eDVBDemux> demux;
{
struct stat s;
char filename[128];
+#if HAVE_DVB_API_VERSION < 3
+ sprintf(filename, "/dev/dvb/card%d", nr);
+#else
sprintf(filename, "/dev/dvb/adapter%d", nr);
+#endif
if (!stat(filename, &s))
return 1;
return 0;
}
-RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, ePtr<iDVBChannel> &channel)
+RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUsePtr<iDVBChannel> &channel)
{
/* first, check if a channel is already existing. */
return 0;
}
-RESULT eDVBResourceManager::allocateRawChannel(ePtr<iDVBChannel> &channel)
+RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel)
{
ePtr<eDVBAllocatedFrontend> fe;
{
eDebug("add channel %p", ch);
m_active_channels.push_back(active_channel(chid, ch));
+ /* emit */ m_channelAdded(ch);
return 0;
}
return -ENOENT;
}
+RESULT eDVBResourceManager::connectChannelAdded(const Slot1<void,eDVBChannel*> &channelAdded, ePtr<eConnection> &connection)
+{
+ connection = new eConnection((eDVBResourceManager*)this, m_channelAdded.connect(channelAdded));
+ return 0;
+}
+
DEFINE_REF(eDVBChannel);
eDVBChannel::eDVBChannel(eDVBResourceManager *mgr, eDVBAllocatedFrontend *frontend, eDVBAllocatedDemux *demux): m_state(state_idle), m_mgr(mgr)
{
eDebug("fe state changed!");
int state, ourstate = 0;
+
+ /* if we are already in shutdown, don't change state. */
+ if (m_state == state_release)
+ return;
+
if (fe->getState(state))
return;
}
}
+void eDVBChannel::AddUse()
+{
+ ++m_use_count;
+}
+
+void eDVBChannel::ReleaseUse()
+{
+ if (!--m_use_count)
+ {
+ m_state = state_release;
+ m_stateChanged(this);
+ }
+}
+
RESULT eDVBChannel::setChannel(const eDVBChannelID &channelid)
{
if (m_channel_id)