]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
cwc: Add EMM support for the Cryptoworks system
authorJaroslav Kysela <perex@perex.cz>
Tue, 10 Apr 2012 08:26:22 +0000 (10:26 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 10 Apr 2012 08:30:17 +0000 (10:30 +0200)
Add initial EMM support for Cryptoworks. Also add Irdeto CAID numbers
for Czech providers to the src/psi.c table.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/cwc.c
src/psi.c

index 431596a4ea2415112ce235bfac0d8d70d77593be..426c0ddff3ddc9afb9b67b19cc554a6640899144 100644 (file)
--- a/src/cwc.c
+++ b/src/cwc.c
@@ -61,6 +61,7 @@ typedef enum {
   CARD_VIACCESS,
   CARD_NAGRA,
   CARD_NDS,
+  CARD_CRYPTOWORKS,
   CARD_UNKNOWN
 } card_type_t;
 
@@ -280,6 +281,7 @@ void cwc_emm_seca(cwc_t *cwc, uint8_t *data, int len);
 void cwc_emm_viaccess(cwc_t *cwc, uint8_t *data, int len);
 void cwc_emm_nagra(cwc_t *cwc, uint8_t *data, int len);
 void cwc_emm_nds(cwc_t *cwc, uint8_t *data, int len);
+void cwc_emm_cryptoworks(cwc_t *cwc, uint8_t *data, int len);
 
 
 /**
@@ -696,6 +698,11 @@ cwc_detect_card_type(cwc_t *cwc)
     tvhlog(LOG_INFO, "cwc", "%s: nds card",
           cwc->cwc_hostname);
     break;
+  case 0x0d:
+    cwc->cwc_card_type = CARD_CRYPTOWORKS;
+    tvhlog(LOG_INFO, "cwc", "%s: cryptoworks card",
+          cwc->cwc_hostname);
+    break;
   default:
     cwc->cwc_card_type = CARD_UNKNOWN;
     break;
@@ -1210,6 +1217,9 @@ cwc_emm(uint8_t *data, int len)
       case CARD_NDS:
        cwc_emm_nds(cwc, data, len);
        break;
+      case CARD_CRYPTOWORKS:
+       cwc_emm_cryptoworks(cwc, data, len);
+       break;
       case CARD_UNKNOWN:
        break;
       }
@@ -1654,6 +1664,31 @@ cwc_emm_nds(cwc_t *cwc, uint8_t *data, int len)
     cwc_send_msg(cwc, data, len, 0, 1);
 }
 
+void
+cwc_emm_cryptoworks(cwc_t *cwc, uint8_t *data, int len)
+{
+  int match = 0;
+
+  switch (data[0]) {
+  case 0x82: /* unique */
+    match = len >= 10 && memcmp(data + 5, cwc->cwc_ua + 3, 5) == 0;
+    break;
+  case 0x84: /* shared */
+    match = len >= 9 && memcmp(data + 5, cwc->cwc_ua + 3, 4) == 0;
+    break;
+  case 0x86: /* shared header */
+  case 0x88: /* global */
+  case 0x89: /* global */
+    match = 1;
+    break;
+  default:
+    break;
+  }
+
+  if (match)
+    cwc_send_msg(cwc, data, len, 0, 1);
+}
+
 /**
  *
  */
index 116e00148f92296333b3c69c9269d12e234bae3b..9dee140e159f9f1349de31e648e0b12c62628197 100644 (file)
--- a/src/psi.c
+++ b/src/psi.c
@@ -836,13 +836,23 @@ static struct strtab caidnametab[] = {
   { "Irdeto",           0x0600 }, 
   { "Irdeto",           0x0602 }, 
   { "Irdeto",           0x0604 }, 
+  { "Irdeto",          0x0624 },
+  { "Irdeto",          0x0666 },
   { "Jerroldgi",        0x0700 }, 
   { "Matra",            0x0800 }, 
   { "NDS",              0x0900 }, 
   { "Nokia",            0x0A00 }, 
   { "Conax",            0x0B00 }, 
   { "NTL",              0x0C00 }, 
-  { "CryptoWorks",      0x0D00 }, 
+  { "CryptoWorks",     0x0D00 },
+  { "CryptoWorks",     0x0D01 },
+  { "CryptoWorks",     0x0D02 },
+  { "CryptoWorks",     0x0D03 },
+  { "CryptoWorks",     0x0D05 },
+  { "CryptoWorks",     0x0D0F },
+  { "CryptoWorks",     0x0D70 },
+  { "CryptoWorks ICE", 0x0D96 },
+  { "CryptoWorks ICE", 0x0D97 },
   { "PowerVu",          0x0E00 }, 
   { "Sony",             0x0F00 }, 
   { "Tandberg",         0x1000 },