Problemet är löst
Sitter nu äntligen och tittar på alla krypterade kanaler jag abonnerar på i vdr-1-3-28 via mitt TT Budget 1.0 DVB-C kort, AD-Tekniks USB Phoenix läsare samt output till TV:n via mitt Hollywood+ kort.
Det visade sig att det var en bugg i vdr-sc:s conax-cardreader kod som ställde till det. Se nedan för en patch.
Det visade sig också att FFdecsa-1.0.0-concurrent-0.3.4 patchen kan ge access errors när sc skall läsa från kortläsaren. Så det är att föredra att köra med FFdecsa utan concurrent patchen. Nackdelen är att det tar lite längre tid att byta kanal samt att det inte går at spela in från flera kanaler samtidigt på samma transponder längre. Men det kan man ju leva med så länge det funkar som det ska.
Kod:
--- system-sc-conax.c.orig 2005-06-12 12:21:53.000000000 +0200
+++ system-sc-conax.c 2005-08-14 10:04:46.000000000 +0200
@@ -197,20 +197,26 @@
buff[1]=secLen+1;
memcpy(buff+sizeof(ecmHeader),data,secLen);
- int l, i[]={0,0};
- if(!IsoWrite(insa2,buff) || !Status()) return false;
- while((l=GetLen())>0) {
- insca[4]=l;
- if(!IsoRead(insca,buff) || !Status()) return false;
- int index=buff[4];
- if(index>1) {
- di(printf("smartcardconax: bad index %d in ECM response\n",index))
- return false;
+ int l;
+ if(!IsoWrite(insa2,buff) || !Status() || (l=GetLen())<0) return false;
+ insca[4]=l;
+ if(!IsoRead(insca,buff) || !Status()) return false;
+ int gotIdx=0;
+ for(int i=0; i<l; i+=buff[i+1]+2) {
+ switch(buff[i]) {
+ case 0x25:
+ if(buff[i+1]>=13) {
+ int idx=buff[i+4];
+ if(idx<=1) {
+ gotIdx|=(1<<idx);
+ memcpy(cw+idx*8,&buff[i+7],8);
+ }
+ }
+ break;
}
- i[index]=1;
- memcpy(cw+(index*8),&buff[7],8);
}
- return (i[0] && i[1]);
+ if(gotIdx!=3) di(printf("smartcardconax: strange, only got index %d cw. Failing... (this may be a bug)\n",gotIdx==1?0:1))
+ return gotIdx==3;
}
bool cSmartCardConax::Update(int pid, const cEcmInfo *ecm, const unsigned char *data)