]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
descrambler emm: add experimental griffin caid support
authorJaroslav Kysela <perex@perex.cz>
Mon, 11 Jan 2016 08:43:31 +0000 (09:43 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 11 Jan 2016 08:43:31 +0000 (09:43 +0100)
src/descrambler/caid.c
src/descrambler/caid.h
src/descrambler/emm_reass.c

index cab86b7a4ebcb9d25913bee1d3417789ef4e03b1..7c01988e8a17cfb17e58bd277b18d414f08a598f 100644 (file)
@@ -129,6 +129,8 @@ detect_card_type(const uint16_t caid)
     case 0x5581:
     case 0x4aee:
       return CARD_BULCRYPT;
+    case 0x5500 ... 0x551a:
+      return CARD_GRIFFIN;
   }
   
   switch(c_sys) {
index 03fdcfe077f5bd906bcea01bc5669adae53db751..98d2ef319e6ea1993c21303ff8b3e94e6aa804ab 100644 (file)
@@ -33,6 +33,7 @@ typedef enum {
   CARD_CRYPTOWORKS,
   CARD_BULCRYPT,
   CARD_STREAMGUARD,
+  CARD_GRIFFIN,
   CARD_UNKNOWN
 } card_type_t;
 
index ccc0dafd30b9db04fc6e492c8a5562b324c8d3eb..cf5df654a8a28774442fa6b37f27bffd072f1e21 100644 (file)
@@ -552,6 +552,29 @@ emm_bulcrypt
     send(aux, data, len, mux);
 }
 
+static void
+emm_griffin
+  (emm_reass_t *ra, const uint8_t *data, int len, void *mux,
+   emm_send_t send, void *aux)
+{
+  emm_provider_t *ep;
+  int i;
+
+  if (len < 1)
+    return;
+
+  switch (data[0]) {
+  case 0x82:
+  case 0x83:
+    PROVIDERS_FOREACH(ra, i, ep)
+      if (memcmp(&data[3], &ep->sa[0], 4) == 0) {
+        send(aux, data, len, mux);
+        break;
+      }
+    break;
+  }
+}
+
 void
 emm_filter(emm_reass_t *ra, const uint8_t *data, int len, void *mux,
            emm_send_t send, void *aux)
@@ -579,6 +602,7 @@ emm_reass_init(emm_reass_t *ra, uint16_t caid)
   case CARD_CRYPTOWORKS: ra->do_emm = emm_cryptoworks;  break;
   case CARD_BULCRYPT:    ra->do_emm = emm_bulcrypt;     break;
   case CARD_STREAMGUARD: ra->do_emm = emm_streamguard;  break;
+  case CARD_GRIFFIN:     ra->do_emm = emm_griffin;      break;
   default: break;
   }
 }