some fixes for empty tuner slots (use slotid instead of dvb api frontend
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 6 Jun 2007 00:03:39 +0000 (00:03 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 6 Jun 2007 00:03:39 +0000 (00:03 +0000)
device id)
replace some hacks with some better hacks ;)

lib/dvb/dvb.cpp
lib/dvb/dvb.h
lib/dvb/frontend.cpp
lib/dvb/frontend.h
lib/dvb/sec.cpp
lib/dvb_ci/dvbci.cpp
lib/python/Components/NimManager.py
lib/python/Screens/ScanSetup.py

index 9ea4ac8..9ebe08a 100644 (file)
@@ -90,7 +90,7 @@ void eDVBResourceManager::feStateChanged()
        int mask=0;
        for (eSmartPtrList<eDVBRegisteredFrontend>::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i)
                if (i->m_inuse)
        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() );
+                       mask |= ( 1 << i->m_frontend->getSlotID() );
        /* emit */ frontendUseMaskChanged(mask);
 }
 
        /* emit */ frontendUseMaskChanged(mask);
 }
 
@@ -248,6 +248,29 @@ void eDVBResourceManager::addAdapter(iDVBAdapter *adapter)
        }
 }
 
        }
 }
 
+void eDVBResourceManager::setFrontendSlotInformations(ePyObject list)
+{
+       if (!PyList_Check(list))
+       {
+               PyErr_SetString(PyExc_StandardError, "eDVBResourceManager::setFrontendSlotInformations argument should be a python list");
+               return;
+       }
+       if (PyList_Size(list) != m_frontend.size())
+       {
+               char blasel[256];
+               sprintf(blasel, "eDVBResourceManager::setFrontendSlotInformations list size incorrect %d frontends avail, but %d entries in slotlist",
+                       m_frontend.size(), PyList_Size(list));
+               PyErr_SetString(PyExc_StandardError, blasel);
+               return;
+       }
+       int pos=0;
+       for (eSmartPtrList<eDVBRegisteredFrontend>::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i)
+       {
+               ePyObject obj = PyList_GET_ITEM(list, pos++);
+               i->m_frontend->setSlotInfo(obj);
+       }
+}
+
 RESULT eDVBResourceManager::allocateFrontend(ePtr<eDVBAllocatedFrontend> &fe, ePtr<iDVBFrontendParameters> &feparm)
 {
        ePtr<eDVBRegisteredFrontend> best;
 RESULT eDVBResourceManager::allocateFrontend(ePtr<eDVBAllocatedFrontend> &fe, ePtr<iDVBFrontendParameters> &feparm)
 {
        ePtr<eDVBRegisteredFrontend> best;
@@ -275,10 +298,10 @@ RESULT eDVBResourceManager::allocateFrontend(ePtr<eDVBAllocatedFrontend> &fe, eP
        return -1;
 }
 
        return -1;
 }
 
-RESULT eDVBResourceManager::allocateFrontendByIndex(ePtr<eDVBAllocatedFrontend> &fe, int nr)
+RESULT eDVBResourceManager::allocateFrontendByIndex(ePtr<eDVBAllocatedFrontend> &fe, int slot_index)
 {
 {
-       for (eSmartPtrList<eDVBRegisteredFrontend>::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i, --nr)
-               if ((!nr) && !i->m_inuse)
+       for (eSmartPtrList<eDVBRegisteredFrontend>::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i)
+               if (!i->m_inuse && i->m_frontend->getSlotID() == slot_index)
                {
                        fe = new eDVBAllocatedFrontend(i);
                        return 0;
                {
                        fe = new eDVBAllocatedFrontend(i);
                        return 0;
@@ -323,7 +346,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA
                        
                        demux = new eDVBAllocatedDemux(i);
                        if (fe)
                        
                        demux = new eDVBAllocatedDemux(i);
                        if (fe)
-                               demux->get().setSourceFrontend(fe->m_frontend->getID());
+                               demux->get().setSourceFrontend(fe->m_frontend->getDVBID());
                        else
                                demux->get().setSourcePVR(0);
                        return 0;
                        else
                                demux->get().setSourcePVR(0);
                        return 0;
@@ -447,7 +470,7 @@ void eDVBResourceManager::releaseCachedChannel()
        m_cached_channel=0;
 }
 
        m_cached_channel=0;
 }
 
-RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel, int frontend_index)
+RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel, int slot_index)
 {
        ePtr<eDVBAllocatedFrontend> fe;
 
 {
        ePtr<eDVBAllocatedFrontend> fe;
 
@@ -458,7 +481,7 @@ RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel, in
                m_releaseCachedChannelTimer.stop();
        }
 
                m_releaseCachedChannelTimer.stop();
        }
 
-       if (allocateFrontendByIndex(fe, frontend_index))
+       if (allocateFrontendByIndex(fe, slot_index))
                return errNoFrontend;
        
        eDVBChannel *ch;
                return errNoFrontend;
        
        eDVBChannel *ch;
index 7bfaa48..f36e6f6 100644 (file)
@@ -149,7 +149,7 @@ class eDVBResourceManager: public iObject, public Object
                           combinations. this will be evaluated here. */
                           
        RESULT allocateFrontend(ePtr<eDVBAllocatedFrontend> &fe, ePtr<iDVBFrontendParameters> &feparm);
                           combinations. this will be evaluated here. */
                           
        RESULT allocateFrontend(ePtr<eDVBAllocatedFrontend> &fe, ePtr<iDVBFrontendParameters> &feparm);
-       RESULT allocateFrontendByIndex(ePtr<eDVBAllocatedFrontend> &fe, int index);
+       RESULT allocateFrontendByIndex(ePtr<eDVBAllocatedFrontend> &fe, int slot_index);
        
                        /* allocate a demux able to filter on the selected frontend. */
        RESULT allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBAllocatedDemux> &demux, int cap);
        
                        /* allocate a demux able to filter on the selected frontend. */
        RESULT allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBAllocatedDemux> &demux, int cap);
@@ -209,7 +209,8 @@ public:
 public:
 #endif
        PSignal1<void,int> frontendUseMaskChanged;
 public:
 #endif
        PSignal1<void,int> frontendUseMaskChanged;
-       SWIG_VOID(RESULT) allocateRawChannel(eUsePtr<iDVBChannel> &SWIG_OUTPUT, int frontend_index);
+       SWIG_VOID(RESULT) allocateRawChannel(eUsePtr<iDVBChannel> &SWIG_OUTPUT, int slot_index);
+       void setFrontendSlotInformations(SWIG_PYOBJECT(ePyObject) list);
 };
 SWIG_TEMPLATE_TYPEDEF(ePtr<eDVBResourceManager>, eDVBResourceManager);
 SWIG_EXTEND(ePtr<eDVBResourceManager>,
 };
 SWIG_TEMPLATE_TYPEDEF(ePtr<eDVBResourceManager>, eDVBResourceManager);
 SWIG_EXTEND(ePtr<eDVBResourceManager>,
index d2730a2..b6e5e8a 100644 (file)
@@ -383,7 +383,8 @@ RESULT eDVBFrontendParameters::getHash(unsigned long &hash) const
 DEFINE_REF(eDVBFrontend);
 
 eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok)
 DEFINE_REF(eDVBFrontend);
 
 eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok)
-       :m_type(-1), m_fe(fe), m_fd(-1), m_sn(0), m_timeout(0), m_tuneTimer(0)
+       :m_type(-1), m_dvbid(fe), m_slotid(fe), m_need_rotor_workaround(false)
+       ,m_fd(-1), m_sn(0), m_timeout(0), m_tuneTimer(0)
 #if HAVE_DVB_API_VERSION < 3
        ,m_secfd(-1)
 #endif
 #if HAVE_DVB_API_VERSION < 3
        ,m_secfd(-1)
 #endif
@@ -428,12 +429,12 @@ int eDVBFrontend::openFrontend()
                }
        }
        else
                }
        }
        else
-               eWarning("sec %d already opened", m_fe);
+               eWarning("sec %d already opened", m_dvbid);
        FrontendInfo fe_info;
 #else
        dvb_frontend_info fe_info;
 #endif
        FrontendInfo fe_info;
 #else
        dvb_frontend_info fe_info;
 #endif
-       eDebug("opening frontend %d", m_fe);
+       eDebug("opening frontend %d", m_dvbid);
        if (m_fd < 0)
        {
                m_fd = ::open(m_filename, O_RDWR|O_NONBLOCK);
        if (m_fd < 0)
        {
                m_fd = ::open(m_filename, O_RDWR|O_NONBLOCK);
@@ -448,7 +449,7 @@ int eDVBFrontend::openFrontend()
                }
        }
        else
                }
        }
        else
-               eWarning("frontend %d already opened", m_fe);
+               eWarning("frontend %d already opened", m_dvbid);
        if (m_type == -1)
        {
                if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
        if (m_type == -1)
        {
                if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
@@ -503,15 +504,15 @@ int eDVBFrontend::closeFrontend()
        {
                if (linked_fe->m_inuse)
                {
        {
                if (linked_fe->m_inuse)
                {
-                       eDebug("dont close frontend %d until the linked frontend %d is still in use",
-                               m_fe, linked_fe->m_frontend->getID());
+                       eDebug("dont close frontend %d until the linked frontend %d in slot %d is still in use",
+                               m_dvbid, linked_fe->m_frontend->getDVBID(), linked_fe->m_frontend->getSlotID());
                        return -1;
                }
                linked_fe->m_frontend->getData(LINKED_NEXT_PTR, (int&)linked_fe);
        }
        if (m_fd >= 0)
        {
                        return -1;
                }
                linked_fe->m_frontend->getData(LINKED_NEXT_PTR, (int&)linked_fe);
        }
        if (m_fd >= 0)
        {
-               eDebug("close frontend %d", m_fe);
+               eDebug("close frontend %d", m_dvbid);
                m_tuneTimer->stop();
                setTone(iDVBFrontend::toneOff);
                setVoltage(iDVBFrontend::voltageOff);
                m_tuneTimer->stop();
                setTone(iDVBFrontend::toneOff);
                setVoltage(iDVBFrontend::voltageOff);
@@ -520,7 +521,7 @@ int eDVBFrontend::closeFrontend()
                if (!::close(m_fd))
                        m_fd=-1;
                else
                if (!::close(m_fd))
                        m_fd=-1;
                else
-                       eWarning("couldnt close frontend %d", m_fe);
+                       eWarning("couldnt close frontend %d", m_dvbid);
                m_data[CSW] = m_data[UCSW] = m_data[TONEBURST] = -1;
        }
 #if HAVE_DVB_API_VERSION < 3
                m_data[CSW] = m_data[UCSW] = m_data[TONEBURST] = -1;
        }
 #if HAVE_DVB_API_VERSION < 3
@@ -529,7 +530,7 @@ int eDVBFrontend::closeFrontend()
                if (!::close(m_secfd))
                        m_secfd=-1;
                else
                if (!::close(m_secfd))
                        m_secfd=-1;
                else
-                       eWarning("couldnt close sec %d", m_fe);
+                       eWarning("couldnt close sec %d", m_dvbid);
        }
 #endif
        delete m_sn;
        }
 #endif
        delete m_sn;
@@ -573,7 +574,7 @@ void eDVBFrontend::feEvent(int w)
 #if HAVE_DVB_API_VERSION < 3
                if (event.type == FE_COMPLETION_EV)
 #else
 #if HAVE_DVB_API_VERSION < 3
                if (event.type == FE_COMPLETION_EV)
 #else
-               eDebug("(%d)fe event: status %x, inversion %s", m_fe, event.status, (event.parameters.inversion == INVERSION_ON) ? "on" : "off");
+               eDebug("(%d)fe event: status %x, inversion %s", m_dvbid, event.status, (event.parameters.inversion == INVERSION_ON) ? "on" : "off");
                if (event.status & FE_HAS_LOCK)
 #endif
                {
                if (event.status & FE_HAS_LOCK)
 #endif
                {
@@ -691,7 +692,7 @@ int eDVBFrontend::readFrontendData(int type)
                        return !!(status&FE_HAS_SYNC);
                }
                case frontendNumber:
                        return !!(status&FE_HAS_SYNC);
                }
                case frontendNumber:
-                       return m_fe;
+                       return m_slotid;
        }
        return 0;
 }
        }
        return 0;
 }
@@ -1098,7 +1099,7 @@ void eDVBFrontend::getFrontendData(ePyObject dest)
        if (dest && PyDict_Check(dest))
        {
                const char *tmp=0;
        if (dest && PyDict_Check(dest))
        {
                const char *tmp=0;
-               PutToDict(dest, "tuner_number", m_fe);
+               PutToDict(dest, "tuner_number", m_dvbid);
                switch(m_type)
                {
                        case feSatellite:
                switch(m_type)
                {
                        case feSatellite:
@@ -1123,7 +1124,7 @@ void eDVBFrontend::getFrontendData(ePyObject dest)
 #endif
 int eDVBFrontend::readInputpower()
 {
 #endif
 int eDVBFrontend::readInputpower()
 {
-       int power=m_fe;  // this is needed for read inputpower from the correct tuner !
+       int power=m_slotid;  // this is needed for read inputpower from the correct tuner !
 
        // open front prozessor
        int fp=::open("/dev/dbox/fp0", O_RDWR);
 
        // open front prozessor
        int fp=::open("/dev/dbox/fp0", O_RDWR);
@@ -1383,9 +1384,19 @@ void eDVBFrontend::tuneLoop()  // called by m_tuneTimer
                                break;
                        case eSecCommand::SET_POWER_LIMITING_MODE:
                        {
                                break;
                        case eSecCommand::SET_POWER_LIMITING_MODE:
                        {
-                               int fd = m_fe ?
-                                       ::open("/dev/i2c/1", O_RDWR) :
-                                       ::open("/dev/i2c/0", O_RDWR);
+                               if (!m_need_rotor_workaround)
+                                       break;
+
+                               char dev[16];
+
+                               // FIXMEEEEEE hardcoded i2c devices for dm7025 and dm8000
+                               if (m_slotid < 2)
+                                       sprintf(dev, "/dev/i2c/%d", m_slotid);
+                               else if (m_slotid == 2)
+                                       sprintf(dev, "/dev/i2c/2"); // first nim socket on DM8000 use /dev/i2c/2
+                               else if (m_slotid == 3)
+                                       sprintf(dev, "/dev/i2c/4"); // second nim socket on DM8000 use /dev/i2c/4
+                               int fd = ::open(dev, O_RDWR);
 
                                unsigned char data[2];
                                ::ioctl(fd, I2C_SLAVE_FORCE, 0x10 >> 1);
 
                                unsigned char data[2];
                                ::ioctl(fd, I2C_SLAVE_FORCE, 0x10 >> 1);
@@ -1418,7 +1429,7 @@ void eDVBFrontend::tuneLoop()  // called by m_tuneTimer
 
 void eDVBFrontend::setFrontend()
 {
 
 void eDVBFrontend::setFrontend()
 {
-       eDebug("setting frontend %d", m_fe);
+       eDebug("setting frontend %d", m_dvbid);
        m_sn->start();
        feEvent(-1);
        if (ioctl(m_fd, FE_SET_FRONTEND, &parm) == -1)
        m_sn->start();
        feEvent(-1);
        if (ioctl(m_fd, FE_SET_FRONTEND, &parm) == -1)
@@ -1444,7 +1455,7 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm)
                eWarning("no SEC module active!");
                return -ENOENT;
        }
                eWarning("no SEC module active!");
                return -ENOENT;
        }
-       res = m_sec->prepare(*this, parm, feparm, 1 << m_fe);
+       res = m_sec->prepare(*this, parm, feparm, 1 << m_slotid);
        if (!res)
        {
                eDebug("prepare_sat System %d Freq %d Pol %d SR %d INV %d FEC %d orbpos %d",
        if (!res)
        {
                eDebug("prepare_sat System %d Freq %d Pol %d SR %d INV %d FEC %d orbpos %d",
@@ -1775,7 +1786,7 @@ RESULT eDVBFrontend::prepare_terrestrial(const eDVBFrontendParametersTerrestrial
 
 RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
 {
 
 RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
 {
-       eDebug("(%d)tune", m_fe);
+       eDebug("(%d)tune", m_dvbid);
 
        m_timeout->stop();
 
 
        m_timeout->stop();
 
@@ -1846,7 +1857,7 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
 
                std::string enable_5V;
                char configStr[255];
 
                std::string enable_5V;
                char configStr[255];
-               snprintf(configStr, 255, "config.Nims.%d.terrestrial_5V", m_fe);
+               snprintf(configStr, 255, "config.Nims.%d.terrestrial_5V", m_slotid);
                m_sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT) );
                ePythonConfigQuery::getConfigValue(configStr, enable_5V);
                if (enable_5V == "True")
                m_sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT) );
                ePythonConfigQuery::getConfigValue(configStr, enable_5V);
                if (enable_5V == "True")
@@ -2059,9 +2070,32 @@ int eDVBFrontend::isCompatibleWith(ePtr<iDVBFrontendParameters> &feparm)
                eDVBFrontendParametersSatellite sat_parm;
                int ret = feparm->getDVBS(sat_parm);
                ASSERT(!ret);
                eDVBFrontendParametersSatellite sat_parm;
                int ret = feparm->getDVBS(sat_parm);
                ASSERT(!ret);
-               return m_sec->canTune(sat_parm, this, 1 << m_fe);
+               return m_sec->canTune(sat_parm, this, 1 << m_slotid);
        }
        else if (m_type == eDVBFrontend::feCable)
                return 2;  // more prio for cable frontends
        return 1;
 }
        }
        else if (m_type == eDVBFrontend::feCable)
                return 2;  // more prio for cable frontends
        return 1;
 }
+
+void eDVBFrontend::setSlotInfo(ePyObject obj)
+{
+       ePyObject Id, Descr;
+       if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 2)
+               goto arg_error;
+       Id = PyTuple_GET_ITEM(obj, 0);
+       Descr = PyTuple_GET_ITEM(obj, 1);
+       if (!PyInt_Check(Id) || !PyString_Check(Descr))
+               goto arg_error;
+       strcpy(m_description, PyString_AS_STRING(Descr));
+       m_slotid = PyInt_AsLong(Id);
+
+       // HACK.. the rotor workaround is neede for all NIMs with LNBP21 voltage regulator...
+       m_need_rotor_workaround = !!strstr(m_description, "Alps BSBE1") || !!strstr(m_description, "Alps -S");
+
+       eDebug("setSlotInfo for dvb frontend %d to slotid %d, descr %s, need rotorworkaround %s",
+               m_dvbid, m_slotid, m_description, m_need_rotor_workaround ? "Yes" : "No");
+       return;
+arg_error:
+       PyErr_SetString(PyExc_StandardError,
+               "eDVBFrontend::setSlotInfo must get a tuple with first param slotid and second param slot description");
+}
index eb91eb7..c9474ae 100644 (file)
@@ -39,9 +39,12 @@ class eDVBFrontend: public iDVBFrontend, public Object
 {
        DECLARE_REF(eDVBFrontend);
        int m_type;
 {
        DECLARE_REF(eDVBFrontend);
        int m_type;
-       int m_fe;
+       int m_dvbid;
+       int m_slotid;
        int m_fd;
        int m_fd;
+       bool m_need_rotor_workaround;
        char m_filename[128];
        char m_filename[128];
+       char m_description[128];
 #if HAVE_DVB_API_VERSION < 3
        int m_secfd;
        char m_sec_filename[128];
 #if HAVE_DVB_API_VERSION < 3
        int m_secfd;
        char m_sec_filename[128];
@@ -115,7 +118,9 @@ public:
        void getFrontendData(ePyObject dest);
 
        int isCompatibleWith(ePtr<iDVBFrontendParameters> &feparm);
        void getFrontendData(ePyObject dest);
 
        int isCompatibleWith(ePtr<iDVBFrontendParameters> &feparm);
-       int getID() { return m_fe; }
+       int getDVBID() { return m_dvbid; }
+       int getSlotID() { return m_slotid; }
+       void setSlotInfo(ePyObject obj); // get a tuple (slotid, slotdescr)
 
        int openFrontend();
        int closeFrontend();
 
        int openFrontend();
        int closeFrontend();
index a1e9499..76e9efb 100644 (file)
@@ -1151,8 +1151,8 @@ PyObject *eDVBSatelliteEquipmentControl::get_exclusive_satellites(int tu1, int t
                                        p2 = (eDVBRegisteredFrontend*)tmp2;
                                if (p1 != p2)
                                {
                                        p2 = (eDVBRegisteredFrontend*)tmp2;
                                if (p1 != p2)
                                {
-                                       int tu1_mask = 1 << p1->m_frontend->getID(),
-                                               tu2_mask = 1 << p2->m_frontend->getID();
+                                       int tu1_mask = 1 << p1->m_frontend->getSlotID(),
+                                               tu2_mask = 1 << p2->m_frontend->getSlotID();
                                        std::set<sat_compare> tu1sats, tu2sats;
                                        std::list<sat_compare> tu1difference, tu2difference;
                                        std::insert_iterator<std::list<sat_compare> > insert1(tu1difference, tu1difference.begin()),
                                        std::set<sat_compare> tu1sats, tu2sats;
                                        std::list<sat_compare> tu1difference, tu2difference;
                                        std::insert_iterator<std::list<sat_compare> > insert1(tu1difference, tu1difference.begin()),
index d8b3b0b..79f1c0d 100644 (file)
@@ -402,7 +402,7 @@ void eDVBCIInterfaces::recheckPMTHandlers()
                                                        if (!channel->getFrontend(frontend))
                                                        {
                                                                eDVBFrontend *fe = (eDVBFrontend*) &(*frontend);
                                                        if (!channel->getFrontend(frontend))
                                                        {
                                                                eDVBFrontend *fe = (eDVBFrontend*) &(*frontend);
-                                                               tunernum = fe->getID();
+                                                               tunernum = fe->getSlotID();
                                                        }
                                                }
                                                ASSERT(tunernum != -1);
                                                        }
                                                }
                                                ASSERT(tunernum != -1);
index e5c5642..bcdd944 100644 (file)
@@ -4,7 +4,8 @@ from enigma import eDVBSatelliteEquipmentControl as secClass, \
        eDVBSatelliteLNBParameters as lnbParam, \
        eDVBSatelliteDiseqcParameters as diseqcParam, \
        eDVBSatelliteSwitchParameters as switchParam, \
        eDVBSatelliteLNBParameters as lnbParam, \
        eDVBSatelliteDiseqcParameters as diseqcParam, \
        eDVBSatelliteSwitchParameters as switchParam, \
-       eDVBSatelliteRotorParameters as rotorParam
+       eDVBSatelliteRotorParameters as rotorParam, \
+       eDVBResourceManager
 
 import xml.dom.minidom
 from xml.dom import EMPTY_NAMESPACE
 
 import xml.dom.minidom
 from xml.dom import EMPTY_NAMESPACE
@@ -732,12 +733,17 @@ def InitNimManager(nimmgr):
        for x in range(len(nimmgr.nim_slots)):
                config.Nims.append(ConfigSubsection())
 
        for x in range(len(nimmgr.nim_slots)):
                config.Nims.append(ConfigSubsection())
 
+       used_nim_slots = [ ]
+
        for slot in nimmgr.nim_slots:
                x = slot.slot
                nim = config.Nims[x]
                
                # HACK: currently, we can only looptrough to socket A
 
        for slot in nimmgr.nim_slots:
                x = slot.slot
                nim = config.Nims[x]
                
                # HACK: currently, we can only looptrough to socket A
 
+               if slot.type is not None:
+                       used_nim_slots.append((slot.slot, slot.description))
+
                if slot.isCompatible("DVB-S"):
                        if slot.slot == 0:
                                nim.configMode = ConfigSelection(
                if slot.isCompatible("DVB-S"):
                        if slot.slot == 0:
                                nim.configMode = ConfigSelection(
@@ -926,6 +932,8 @@ def InitNimManager(nimmgr):
                        print "pls add support for this frontend type!"         
 #                      assert False
 
                        print "pls add support for this frontend type!"         
 #                      assert False
 
+       eDVBResourceManager.getInstance().setFrontendSlotInformations(used_nim_slots)
+
        nimmgr.sec = SecConfigure(nimmgr)
 
 nimmanager = NimManager()
        nimmgr.sec = SecConfigure(nimmgr)
 
 nimmanager = NimManager()
index 4b2f309..9980df5 100644 (file)
@@ -205,9 +205,10 @@ class CableTransponderSearchSupport:
                self.cable_search_container.dataAvail.get().append(self.getCableTransponderData)
                cableConfig = config.Nims[nim_idx].cable
                cmd = "tda1002x --init --scan --verbose --wakeup --inv 2 --bus "
                self.cable_search_container.dataAvail.get().append(self.getCableTransponderData)
                cableConfig = config.Nims[nim_idx].cable
                cmd = "tda1002x --init --scan --verbose --wakeup --inv 2 --bus "
+               #FIXMEEEEEE hardcoded i2c devices for dm7025 and dm8000
                if nim_idx < 2:
                        cmd += str(nim_idx)
                if nim_idx < 2:
                        cmd += str(nim_idx)
-               else: # FIXMEE DM8000
+               else:
                        if nim_idx == 2:
                                cmd += "2" # first nim socket on DM8000 use /dev/i2c/2
                        else:
                        if nim_idx == 2:
                                cmd += "2" # first nim socket on DM8000 use /dev/i2c/2
                        else: