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 bd3571a6d446e39cd2df5278c322fae007e2719e..7156dbb88b7508304dc81dcbb34e2ee9c58fccc1 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 640c32cadce0dfe96d9ac3755136dc9cfe60c060..79b56e1e6b8ca588c08e700d22c4f0a3d0b6b284 100644 (file)
@@ -908,3 +908,7 @@ RESULT eDVBFrontend::setData(int num, int val)
        return -EINVAL;
 }
 
+int eDVBFrontend::isCompatibleWith(const eDVBChannelID &chid)
+{
+       return 1;
+}
index da9c703414fe8b7fec08252b5975e4f7ab06a946..764d6b3ff3f3fdde3ec5cba6452f89c62fefdbbf 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 ea5e2568510b57da5ec65c57317d6d7484ce8785..c6cf20eb87d0d04ee4296d1c696f2821bfd8ce7a 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