On 05/04/08 10:23, Pierre-Yves Paranthoen (PERSO) wrote:
Added in device.c debug output to cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView) : GetDevice 2 0 1 -1
j = 1, i = 0, imp = 020C4C4B, Impact = FFFFFFFF
device 0
GetDevice 2 0 1 -1
no usable CAM slots!
...

Looks like for some reason the CAM is not usable at this time.

Please apply the attched patch instead of the previous one.
It produces additional output and writes it into the syslog,
so that it will be in sync with the other log messages.

Klaus
--- device.c	2008/04/12 14:12:14	2.2
+++ device.c	2008/05/04 09:24:16
@@ -372,26 +372,35 @@
 
 cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView)
 {
+  dsyslog("GetDevice %d %d %d %d %04X", Channel->Number(), Priority, LiveView, avoidDevice ? avoidDevice->CardIndex() : -1, Channel->Ca());//XXX
   cDevice *AvoidDevice = avoidDevice;
   avoidDevice = NULL;
   // Collect the current priorities of all CAM slots that can decrypt the channel:
   int NumCamSlots = CamSlots.Count();
+  dsyslog("NumCamSlots = %d", NumCamSlots);//XXX
   int SlotPriority[NumCamSlots];
   int NumUsableSlots = 0;
   if (Channel->Ca() >= CA_ENCRYPTED_MIN) {
      for (cCamSlot *CamSlot = CamSlots.First(); CamSlot; CamSlot = CamSlots.Next(CamSlot)) {
          SlotPriority[CamSlot->Index()] = MAXPRIORITY + 1; // assumes it can't be used
          if (CamSlot->ModuleStatus() == msReady) {
+            dsyslog("CAM %d ready", CamSlot->Index());//XXX
             if (CamSlot->ProvidesCa(Channel->Caids())) {
+               dsyslog("CAM %d provides CA", CamSlot->Index());//XXX
                if (!ChannelCamRelations.CamChecked(Channel->GetChannelID(), CamSlot->SlotNumber())) {
                   SlotPriority[CamSlot->Index()] = CamSlot->Priority();
                   NumUsableSlots++;
+                  dsyslog("NumUsableSlots = %d", NumUsableSlots);//XXX
                   }
+               else dsyslog("ChannelCamRelations.CamChecked(%s, %d) = 0", *Channel->GetChannelID().ToString(), CamSlot->SlotNumber());//XXX
                }
             }
+         else dsyslog("CAM %d not ready", CamSlot->Index());//XXX
          }
      if (!NumUsableSlots)
+        {dsyslog("no usable CAM slots!");//XXX
         return NULL; // no CAM is able to decrypt this channel
+        }//XXX
      }
 
   bool NeedsDetachReceivers = false;
@@ -432,6 +441,7 @@
              imp <<= 1; imp |= NumUsableSlots ? 0 : device[i]->HasCi();                                              // avoid cards with Common Interface for FTA channels
              imp <<= 1; imp |= device[i]->HasDecoder();                                                              // avoid full featured cards
              imp <<= 1; imp |= NumUsableSlots ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel
+             dsyslog("j = %d, i = %d, imp = %08X, Impact = %08X", j, i, imp, Impact);//XXX
              if (imp < Impact) {
                 // This device has less impact than any previous one, so we take it.
                 Impact = imp;
@@ -446,6 +456,7 @@
          break; // no CAM necessary, so just one loop over the devices
       }
   if (d) {
+     dsyslog("device %d", d->CardIndex());//XXX
      if (NeedsDetachReceivers)
         d->DetachAllReceivers();
      if (s) {
@@ -460,6 +471,7 @@
      else if (d->CamSlot() && !d->CamSlot()->IsDecrypting())
         d->CamSlot()->Assign(NULL);
      }
+  else dsyslog("no device found");//XXX
   return d;
 }
 
_______________________________________________
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr

Reply via email to