fixed streamguard CA card descrambler .

streamguard CA cardid 0x4ad2.
This commit is contained in:
sangood 2014-07-21 13:14:38 +08:00 committed by Jaroslav Kysela
parent b64b07f5a3
commit ec4e2cff14
5 changed files with 40 additions and 12 deletions

View file

@ -139,6 +139,7 @@ typedef enum {
CARD_NDS,
CARD_CRYPTOWORKS,
CARD_BULCRYPT,
CARD_STREAMGUARD,
CARD_UNKNOWN
} card_type_t;

17
src/descrambler/capmt.c Normal file → Executable file
View file

@ -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);

View file

@ -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)

View file

@ -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;

15
src/input/mpegts/dvb_psi.c Normal file → Executable file
View file

@ -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;