From 1cd961e28c5ba981a00006b7d4e800e3d2bd4a67 Mon Sep 17 00:00:00 2001
From: leslie <unknown>
Date: Sat, 17 Mar 2012 17:32:53 +0100
Subject: [PATCH] cardclient: handle Seca global EMM

---
 parse.c                   | 4 ++--
 system.c                  | 4 ++--
 systems/sc-seca/sc-seca.c | 1 +
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/parse.c b/parse.c
index f552028..16e1862 100644
--- a/parse.c
+++ b/parse.c
@@ -261,8 +261,8 @@ cCardSeca::cCardSeca(const unsigned char *u)
 
 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 ---------------------------------------------------------------
diff --git a/system.c b/system.c
index 3e96c9a..0bd9b73 100644
--- a/system.c
+++ b/system.c
@@ -174,9 +174,9 @@ void cSystem::ParseCAT(cPids *pids, const unsigned char *buffer, int source, int
     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
           }
diff --git a/systems/sc-seca/sc-seca.c b/systems/sc-seca/sc-seca.c
index 2766a37..49b7537 100644
--- a/systems/sc-seca/sc-seca.c
+++ b/systems/sc-seca/sc-seca.c
@@ -319,6 +319,7 @@ bool cSmartCardSeca::Update(int pid, int caid, const unsigned char *data)
 {
   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)) {
-- 
2.39.5