+ // check if this CI is already assigned to this pmthandler
+ eDVBCISlot *tmp = it->cislot;
+ while(tmp)
+ {
+ if (tmp == ci_it)
+ break;
+ }
+
+ if (tmp) // ignore already assigned cislots...
+ continue;
+
+ ++ci_it->use_count;
+// eDebug("usecount now %d", ci_it->use_count);
+
+ data_source ci_source=CI_A;
+ switch(ci_it->getSlotID())
+ {
+ case 0: ci_source = CI_A; break;
+ case 1: ci_source = CI_B; break;
+ case 2: ci_source = CI_C; break;
+ case 3: ci_source = CI_D; break;
+ default:
+ eDebug("try to get source for CI %d!!\n", ci_it->getSlotID());
+ break;
+ }
+
+ if (!it->cislot)
+ {
+ int tunernum = -1;
+ eUsePtr<iDVBChannel> channel;
+ if (!pmthandler->getChannel(channel))
+ {
+ ePtr<iDVBFrontend> frontend;
+ if (!channel->getFrontend(frontend))
+ {
+ eDVBFrontend *fe = (eDVBFrontend*) &(*frontend);
+ tunernum = fe->getID();
+ }
+ }
+ ASSERT(tunernum != -1);
+ data_source tuner_source = TUNER_A;
+ switch (tunernum)
+ {
+ case 0: tuner_source = TUNER_A; break;
+ case 1: tuner_source = TUNER_B; break;
+ case 2: tuner_source = TUNER_C; break;
+ case 3: tuner_source = TUNER_D; break;
+ default:
+ eDebug("try to get source for tuner %d!!\n", tunernum);
+ break;
+ }
+ ci_it->current_tuner = tunernum;
+ setInputSource(tunernum, ci_source);
+ ci_it->setSource(tuner_source);
+ }
+ else
+ {
+ ci_it->current_tuner = it->cislot->current_tuner;
+ ci_it->linked_next = it->cislot;
+ ci_it->setSource(ci_it->linked_next->current_source);
+ ci_it->linked_next->setSource(ci_source);
+ }