add - untestd - frontend compatibility/priority check
authorFelix Domke <tmbinc@elitedvb.net>
Wed, 16 Nov 2005 09:23:09 +0000 (09:23 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Wed, 16 Nov 2005 09:23:09 +0000 (09:23 +0000)
lib/dvb/dvb.cpp
lib/dvb/frontend.cpp
lib/dvb/frontend.h
lib/dvb/idvb.h

index bd3571a..7156dbb 100644 (file)
@@ -204,13 +204,28 @@ void eDVBResourceManager::addAdapter(iDVBAdapter *adapter)
 
 RESULT eDVBResourceManager::allocateFrontend(const eDVBChannelID &chid, ePtr<eDVBAllocatedFrontend> &fe)
 {
-               /* find first unused frontend. we ignore compatibility for now. */
+       ePtr<eDVBRegisteredFrontend> best;
+       int bestval = 0;
+       
        for (eSmartPtrList<eDVBRegisteredFrontend>::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i)
                if (!i->m_inuse)
                {
-                       fe = new eDVBAllocatedFrontend(i);
-                       return 0;
+                       int c = i->m_frontend->isCompatibleWith(chid);
+                       if (c > bestval)
+                       {
+                               c = bestval;
+                               best = i;
+                       }
                }
+
+       if (best)
+       {
+               fe = new eDVBAllocatedFrontend(best);
+               return 0;
+       }
+       
+       fe = 0;
+       
        return -1;
 }
 
index 640c32c..79b56e1 100644 (file)
@@ -908,3 +908,7 @@ RESULT eDVBFrontend::setData(int num, int val)
        return -EINVAL;
 }
 
+int eDVBFrontend::isCompatibleWith(const eDVBChannelID &chid)
+{
+       return 1;
+}
index da9c703..764d6b3 100644 (file)
@@ -91,6 +91,8 @@ public:
        RESULT getData(int num, int &data);
        RESULT setData(int num, int val);
        
+       int isCompatibleWith(const eDVBChannelID &chid);
+       
        int getID() { return m_fe; }
 };
 
index ea5e256..c6cf20e 100644 (file)
@@ -333,6 +333,9 @@ public:
        virtual RESULT setSecSequence(const eSecCommandList &list)=0;
        virtual RESULT getData(int num, int &data)=0;
        virtual RESULT setData(int num, int val)=0;
+       
+               /* 0 means: not compatible. other values are a priority. */
+       virtual int isCompatibleWith(const eDVBChannelID &chid)=0;
 };
 
 class iDVBSatelliteEquipmentControl: public iObject