bool cCardSeca::MatchEMM(const unsigned char *data)
{
- return TID(data)==0x82 &&
- !memcmp(UA(data),ua,sizeof(ua));
+ return TID(data)==0x83 ||
+ (TID(data)==0x82 && !memcmp(UA(data),ua,sizeof(ua)));
}
// -- cParseSeca ---------------------------------------------------------------
int pid=WORD(buffer,4,0x1FFF);
if(overrides.AddEmmPids(caid,source,transponder,pids,pid)) return;
switch(caid>>8) {
- case 0x01: // Seca style (82/84)
+ case 0x01: // Seca style (82/83/84)
if(buffer[1]>4) {
- pids->AddPid(pid,0x82,0xFF); // Unique updates
+ pids->AddPid(pid,0x82,0xFE); // Unique/global updates
for(int i=7, nn=buffer[6] ; nn ; nn--,i+=4)
pids->AddPid(WORD(buffer,i,0x1FFF),0x84,0xFF); // Shared updates
}
{
static unsigned char ins40[] = { 0xC1,0x40,0x00,0x00,0x00 };
+ if(data[0]==0x83) return false; // don't know how to handle
if(blocker==0 || (data[0]==0x82 && blocker==2) || (data[0]==0x84 && blocker==1)) {
cProviderScSeca *p=(cProviderScSeca *)FindProv(data);
if(p && MatchEMM(data)) {