remove unneeded signals ( eDVBChannel::m_stateChanged give us the same informations )
[vuplus_dvbapp] / lib / dvb / dvb.cpp
index d4cc462..ea51d6a 100644 (file)
@@ -74,7 +74,11 @@ eDVBAdapterLinux::eDVBAdapterLinux(int nr): m_nr(nr)
        {
                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;
@@ -92,7 +96,11 @@ eDVBAdapterLinux::eDVBAdapterLinux(int nr): m_nr(nr)
        {
                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;
@@ -152,7 +160,11 @@ int eDVBAdapterLinux::exist(int nr)
 {
        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;
@@ -228,7 +240,7 @@ RESULT eDVBResourceManager::getChannelList(ePtr<iDVBChannelList> &list)
 }
 
 
-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. */
        
@@ -277,7 +289,7 @@ RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, ePtr
        return 0;
 }
 
-RESULT eDVBResourceManager::allocateRawChannel(ePtr<iDVBChannel> &channel)
+RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel)
 {
        ePtr<eDVBAllocatedFrontend> fe;
        
@@ -309,6 +321,7 @@ RESULT eDVBResourceManager::addChannel(const eDVBChannelID &chid, eDVBChannel *c
 {
        eDebug("add channel %p", ch);
        m_active_channels.push_back(active_channel(chid, ch));
+       /* emit */ m_channelAdded(ch);
        return 0;
 }
 
@@ -330,6 +343,12 @@ RESULT eDVBResourceManager::removeChannel(eDVBChannel *ch)
        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)
@@ -351,6 +370,11 @@ void eDVBChannel::frontendStateChanged(iDVBFrontend*fe)
 {
        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;
        
@@ -376,6 +400,20 @@ void eDVBChannel::frontendStateChanged(iDVBFrontend*fe)
        }
 }
 
+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)