-PyObject *eDVBSatelliteEquipmentControl::get_exclusive_satellites(int tu1, int tu2)
-{
- ePyObject ret;
-
- if (tu1 != tu2)
- {
- eDVBRegisteredFrontend *p1=NULL, *p2=NULL;
- int cnt=0;
- for (eSmartPtrList<eDVBRegisteredFrontend>::iterator it(m_avail_frontends.begin()); it != m_avail_frontends.end(); ++it, ++cnt)
- {
- if (cnt == tu1)
- p1 = *it;
- else if (cnt == tu2)
- p2 = *it;
- }
-
- if (p1 && p2)
- {
- // check for linked tuners
-
- do
- {
- long tmp;
- p1->m_frontend->getData(eDVBFrontend::LINKED_PREV_PTR, tmp);
- if (tmp != -1)
- p1 = (eDVBRegisteredFrontend*)tmp;
- else
- break;
- }
- while (true);
-
- do
- {
- long tmp;
- p2->m_frontend->getData(eDVBFrontend::LINKED_PREV_PTR, tmp);
- if (tmp != -1)
- p2 = (eDVBRegisteredFrontend*)tmp;
- else
- break;
- }
- while (true);
-
- if (p1 != p2)
- {
- long tmp1=-1;
- long tmp2=-1;
- // check for rotor dependency
- p1->m_frontend->getData(eDVBFrontend::SATPOS_DEPENDS_PTR, tmp1);
- if (tmp1 != -1)
- p1 = (eDVBRegisteredFrontend*)tmp1;
- p2->m_frontend->getData(eDVBFrontend::SATPOS_DEPENDS_PTR, tmp2);
- if (tmp2 != -1)
- p2 = (eDVBRegisteredFrontend*)tmp2;
- if (p1 != p2)
- {
- 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()),
- insert2(tu2difference, tu2difference.begin());
- for (int idx=0; idx <= m_lnbidx; ++idx )
- {
- eDVBSatelliteLNBParameters &lnb_param = m_lnbs[idx];
- for (std::map<int, eDVBSatelliteSwitchParameters>::iterator sit(lnb_param.m_satellites.begin());
- sit != lnb_param.m_satellites.end(); ++sit)
- {
- if ( lnb_param.slot_mask & tu1_mask )
- tu1sats.insert(sat_compare(sit->first, lnb_param.m_lof_lo, lnb_param.m_lof_hi));
- if ( lnb_param.slot_mask & tu2_mask )
- tu2sats.insert(sat_compare(sit->first, lnb_param.m_lof_lo, lnb_param.m_lof_hi));
- }
- }
- std::set_difference(tu1sats.begin(), tu1sats.end(),
- tu2sats.begin(), tu2sats.end(),
- insert1);
- std::set_difference(tu2sats.begin(), tu2sats.end(),
- tu1sats.begin(), tu1sats.end(),
- insert2);
- if (!tu1sats.empty() || !tu2sats.empty())
- {
- int idx=0;
- ret = PyList_New(2+tu1difference.size()+tu2difference.size());
-
- PyList_SET_ITEM(ret, idx++, PyInt_FromLong(tu1difference.size()));
- for(std::list<sat_compare>::iterator it(tu1difference.begin()); it != tu1difference.end(); ++it)
- PyList_SET_ITEM(ret, idx++, PyInt_FromLong(it->orb_pos));
-
- PyList_SET_ITEM(ret, idx++, PyInt_FromLong(tu2difference.size()));
- for(std::list<sat_compare>::iterator it(tu2difference.begin()); it != tu2difference.end(); ++it)
- PyList_SET_ITEM(ret, idx++, PyInt_FromLong(it->orb_pos));
- }
- }
- }
- }
- }
- if (!ret)
- {
- ret = PyList_New(2);
- PyList_SET_ITEM(ret, 0, PyInt_FromLong(0));
- PyList_SET_ITEM(ret, 1, PyInt_FromLong(0));
- }
- return ret;
-}
-