Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[vdr] Re: Cam Aston problem



Le 01/23/2004 07:10 PM, tho68@ssisrl.com a joliment écrit :
I am using VDR 1.2.6 with two cam Aston 1.05 and an original smartcard
SkyItalia, The first cam has Rev 1.1 and everithing work almost fine, the
second one is a Rev 1.2 and does not decrypt. I am using link layer ci
interface and I start debugging the behaviour of both CAM. I observed that
Rev 1.2 CAM does not handle open_session_response for session 00100041
and answer with three bytes "00 01 00" that VDR does not understand and
start a open_session -> close_session -> open_session loop, during which
is really slow to answer channel switching or everithing else command.
I does not really know anything about the protocol specification between
CAM and applications, and I would be very grateful if someone can tell me
where this specifications can be found, to avoid me a long and blind
research.
I had to apply this patch make cam Aston 1.05 to work with canal+.
Maybe it helps you.

Nicolas.


--
   Powered           .~.
   by Linux          /V\
    ------          // \\
 solutions for     /(   )\
 smart penguins     ^`~'^
Here is a rough patch to make it work:
--- vdr-1.2.2/ci.c      2003-08-02 12:00:01.000000000 +0200
+++ vdr-1.2.2-mod/ci.c  2003-09-14 15:16:56.000000000 +0200
@@ -1253,10 +1253,10 @@
   capmt[length++] = 0x00; // program_info_length L
 }

-void cCiCaPmt::AddPid(int Pid)
+void cCiCaPmt::AddPid(int Pid, int StreamType)
 {
   //XXX buffer overflow check???
-  capmt[length++] = 0x00; //XXX stream_type (apparently doesn't matter)
+  capmt[length++] = StreamType; //XXX stream_type (apparently doesn't matter, except for Aston/SECA)
   capmt[length++] = (Pid >> 8) & 0xFF;
   capmt[length++] =  Pid       & 0xFF;
   esInfoLengthPos = length;

vdr-1.2.2-mod/ci.h
--- vdr-1.2.2/ci.h      2003-05-25 13:44:47.000000000 +0200
+++ vdr-1.2.2-mod/ci.h  2003-09-14 16:51:40.000000000 +0200
@@ -66,7 +66,7 @@
   uint8_t capmt[2048]; ///< XXX is there a specified maximum?
 public:
   cCiCaPmt(int ProgramNumber);
-  void AddPid(int Pid);
+  void AddPid(int Pid, int StreamType);
   void AddCaDescriptor(int Length, uint8_t *Data);
   };

vdr-1.2.2-mod/dvbdevice.c
--- vdr-1.2.2/dvbdevice.c       2003-05-24 15:23:51.000000000 +0200
+++ vdr-1.2.2-mod/dvbdevice.c   2003-09-14 16:52:25.000000000 +0200
@@ -276,13 +276,13 @@
                               cCiCaPmt CaPmt(channel.Sid());
                               CaPmt.AddCaDescriptor(length, buffer);
                               if (channel.Vpid())
-                                 CaPmt.AddPid(channel.Vpid());
+                                 CaPmt.AddPid(channel.Vpid(),0x02);
                               if (channel.Apid1())
-                                 CaPmt.AddPid(channel.Apid1());
+                                 CaPmt.AddPid(channel.Apid1(),0x04);
                               if (channel.Apid2())
-                                 CaPmt.AddPid(channel.Apid2());
+                                 CaPmt.AddPid(channel.Apid2(),0x04);
                               if (channel.Dpid1())
-                                 CaPmt.AddPid(channel.Dpid1());
+                                 CaPmt.AddPid(channel.Dpid1(),0x00);
                               if (ciHandler->SetCaPmt(CaPmt, Slot)) {
                                  tunerStatus = tsCam;
                                  startTime = 0; 

Home | Main Index | Thread Index