time_t Date(const unsigned char *data, char *buf, int len);
bool DoBlkCmd(unsigned char cmd, int ilen, unsigned char res, int rlen, const unsigned char *data=0);
bool SetIFS(unsigned char len);
+ void PostProcess(void);
public:
cSmartCardNagra(void);
virtual bool Init(void);
return true;
}
+void cSmartCardNagra::PostProcess(void)
+{
+ GetCardStatus();
+ cCondWait::SleepMs(10);
+ if(RENEW_SESSIONKEY()) DoCamExchange();
+ if(SENDDATETIME()) SendDateTimeCmd();
+}
+
bool cSmartCardNagra::GetDataType(unsigned char dt, int len, int shots)
{
bool isdt8 = (dt==0x08);
cCondWait::SleepMs(5);
if(HAS_CW() && DoBlkCmd(0x1C,0x02,0x9C,0x36) && Status()) {
DecryptCW(cw,buff+33,buff+7);
+ PostProcess();
if(swapCW) {
unsigned char tt[8];
memcpy(&tt[0],&cw[0],8);
else {
if(DoBlkCmd(0xD3,data[4]+2,0x53,0x16,data+3+2)) {
DecryptCW(cw,buff+17,buff+9);
+ PostProcess();
return true;
}
}
if(MatchEMM(data)) {
if(DoBlkCmd(data[8],data[9]+2,0x84,0x02,data+8+2) && Status()) {
cCondWait::SleepMs(300);
- GetCardStatus();
- cCondWait::SleepMs(10);
- if(RENEW_SESSIONKEY()) DoCamExchange();
- if(SENDDATETIME()) SendDateTimeCmd();
+ PostProcess();
}
return true;
}