]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
fixed streamguard CA card descrambler .
authorsangood <sangood@macmini.lan>
Mon, 21 Jul 2014 05:14:38 +0000 (13:14 +0800)
committerJaroslav Kysela <perex@perex.cz>
Mon, 4 Aug 2014 17:03:57 +0000 (19:03 +0200)
streamguard CA cardid 0x4ad2.

src/descrambler.h
src/descrambler/capmt.c [changed mode: 0644->0755]
src/descrambler/cwc.c
src/descrambler/descrambler.c
src/input/mpegts/dvb_psi.c [changed mode: 0644->0755]

index f0423cfc88eb4e41ed728039d86945ba55a11fbf..fbf9b73c303e8b6cea565907643a312f86cddb24 100755 (executable)
@@ -139,6 +139,7 @@ typedef enum {
   CARD_NDS,
   CARD_CRYPTOWORKS,
   CARD_BULCRYPT,
+  CARD_STREAMGUARD,
   CARD_UNKNOWN
 } card_type_t;
 
old mode 100644 (file)
new mode 100755 (executable)
index 6e88d0d..fc468d0
@@ -644,9 +644,13 @@ capmt_queue_msg
   msg->cm_adapter = adapter;
   msg->cm_sid     = sid;
   if (flags & CAPMT_MSG_FAST)
+  {
     TAILQ_INSERT_HEAD(&capmt->capmt_writeq, msg, cm_link);
+  }
   else
-    TAILQ_INSERT_TAIL(&capmt->capmt_writeq, msg, cm_link);
+  {
+      TAILQ_INSERT_TAIL(&capmt->capmt_writeq, msg, cm_link);
+  }
   tvh_write(capmt->capmt_pipe.wr, "c", 1);
 }
 
@@ -1650,10 +1654,13 @@ capmt_send_request(capmt_service_t *ct, int lm)
         cad.cad_length = 0x07;
         cad.cad_data[5] = cce2->cce_providerid >> 8;
         cad.cad_data[6] = cce2->cce_providerid & 0xff;
-      } else if (cce2->cce_caid >> 8 == 0x4a) {
-        cad.cad_length = 0x05;
-        cad.cad_data[4] = cce2->cce_providerid & 0xff;
-      } else
+      } else if (cce2->cce_caid == 0x4ad2) {
+        cad.cad_length = 0x04;
+        cad.cad_data[3] = cce2->cce_providerid & 0xffffff;
+      }else if (cce2->cce_caid >> 8 == 0x4a && cce2->cce_caid!=0x4ad2) {
+          cad.cad_length = 0x05;
+          cad.cad_data[4] = cce2->cce_providerid & 0xff;
+      }else
         tvhlog(LOG_WARNING, "capmt", "Unknown CAID type, don't know where to put provider ID");
     }
     memcpy(&buf[pos], &cad, cad.cad_length + 2);
index 5b7138a5b846585778693fd93b76fb15daffc393..d5641a0e42c833e000b87375a7338c755a8aa1cb 100755 (executable)
@@ -286,7 +286,7 @@ void cwc_emm_nagra(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data,
 void cwc_emm_nds(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len);
 void cwc_emm_cryptoworks(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len);
 void cwc_emm_bulcrypt(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len);
-
+void cwc_emm_streamguard(cwc_t *cwc, struct cs_card_data *pcard,const uint8_t *data, int len);//add by sangood
 
 /**
  *
@@ -1339,6 +1339,9 @@ cwc_emm(void *opaque, int pid, const uint8_t *data, int len)
       case CARD_BULCRYPT:
         cwc_emm_bulcrypt(cwc, pcard, data, len);
         break;
+      case CARD_STREAMGUARD:
+        cwc_emm_streamguard(cwc, pcard, data, len);
+        break;
       case CARD_UNKNOWN:
         break;
     }
@@ -1847,6 +1850,18 @@ cwc_emm_nds(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len
   if (match)
     cwc_send_msg(cwc, data, len, 0, 1, 0, 0);
 }
+/**
+ * streamguard emm handler
+ */
+void
+cwc_emm_streamguard(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len)
+{
+    //sangood todo
+    int match = 1;
+    tvhlog(LOG_INFO, "cwc", "cwc_emm_streamguard streamguard card data emm get,here lots of works todo...");
+    if (match)
+        cwc_send_msg(cwc, data, len, 0, 1, 0, 0);
+}
 
 void
 cwc_emm_cryptoworks(cwc_t *cwc, struct cs_card_data *pcard, const uint8_t *data, int len)
index ed790daaa7cca381471d58520e83fd4b7cbef71f..483c23789271341da7845f6254fb706be39f3b07 100755 (executable)
@@ -771,6 +771,8 @@ detect_card_type(const uint16_t caid)
   uint8_t c_sys = caid >> 8;
   
   switch(caid) {
+    case 0x4ad2:
+      return CARD_STREAMGUARD;
     case 0x5581:
     case 0x4aee:
       return CARD_BULCRYPT;
old mode 100644 (file)
new mode 100755 (executable)
index cbedbd3..b9ac9a5
@@ -1204,11 +1204,14 @@ psi_desc_ca(mpegts_service_t *t, const uint8_t *buffer, int size)
       i += nanolen;
     }
     break;
-  case 0x4a00://DRECrypt
-    if (caid != 0x4aee) { // Bulcrypt
+  case 0x4a00://DRECrypt or streamguard
+     if (caid==0x4ad2) {
+         provid=0;
+     }
+     if (caid != 0x4aee && caid!=0x4ad2) { // Bulcrypt
       provid = size < 4 ? 0 : buffer[4];
-      break;
-    }
+     }
+    break;
   default:
     provid = 0;
     break;
@@ -1369,11 +1372,11 @@ psi_parse_pmt
     case 0x04:
       hts_stream_type = SCT_MPEG2AUDIO;
       break;
-
+            
     case 0x81:
       hts_stream_type = SCT_AC3;
       break;
-    
+            
     case 0x0f:
       hts_stream_type = SCT_MP4A;
       break;