?? sc_def.h
字號:
/*
本代碼僅作為學習研究的目的使用,請您于24小時內自覺將其刪除,請勿應用于商業活動或其它贏利性活動中,
否則后果自負!
*/
#ifndef __sc_def_h__
#define __sc_def_h__
#define U8 unsigned char
#define U16 unsigned short
#define U32 unsigned int
#define bool unsigned char
#define Smart_Handle_t unsigned int
#define Smart_ErrorCode_t int
#define NULL ((void *)0)
#define SMC_NO_ERROR 0
#define true 1
#define false 0
/*
由于不同的平臺處理不同,smart card復位和數據傳輸的命令各位大蝦根據自己的平臺自己完成吧,
這個應該是小case了!
不過為了使一臺機頂盒可以支持多種卡,
*********** 復位后到各智能卡初始化之間過程,請參考下面的的偽代碼:
if(SMART_Reset(Handle, pucAtrBuffer, pppucAtrLength, pucHistoryLength) == SMC_NO_ERROR)
{
printf("Reset Smart Card successful !!\n"));
//根據ATR特征字節判斷卡的類型
if(ppucAtrLength == 12)
{
if(pucAtrBuffer[0] == 0x3F && pucAtrBuffer[1] == 0x77 &&\
pucAtrBuffer[10] == 0x90 && pucAtrBuffer[11] == 0x00)
{
viaccess_init();
}
}
else if(ppucAtrLength == 7)
{
if(pucAtrBuffer[0] == 0x3B && pucAtrBuffer[1] == 0x24)
{
conax_init();
}
}
else if(ppucAtrLength == 20)
{
if(pucAtrBuffer[0] == 0x3B && pucAtrBuffer[1] == 0x9F)
{
irdeto_init();
}
}
else if(ppucAtrLength == 8)
{
if(pucAtrBuffer[0] == 0x3B && pucAtrBuffer[1] == 0x34)
{
conax_init();
}
if(pucAtrBuffer[0]==0x3B && pucAtrBuffer[1]==0x64)
{
yxtf_init();
}
}
else if(ppucAtrLength == 11)
{
if(pucAtrBuffer[0] == 0x3F && pucAtrBuffer[1] == 0x67 &&\
pucAtrBuffer[9] == 0x90 && pucAtrBuffer[10] == 0x00)
{
viaccess_init();
}
}
else if(ppucAtrLength==16)
{
if(pucAtrBuffer[0] == 0x3B && pucAtrBuffer[1] == 0x6C)
{
yxtf_init();
}
}
else if(ppucAtrLength==18)
{
if(pucAtrBuffer[0]==0x3B && pucAtrBuffer[1]==0xE9)
{
bjst_init();
}
}
else if (ppucAtrLength == 4)
{
if (pucAtrBuffer[0]==0x3B && pucAtrBuffer[1]==0x02)
{
smsx_init();
}
}
}
************ 收到ECM后,一個機頂盒支持多個系統解碼處理過程的偽代碼如下(EMM的處理類似):
switch(CASystemId&0xFF00)
{
case 0x0500: // Viaccess
if (機頂盒中插入的為V卡 && 智能卡已經初始化成功)
{
via_parse_ecm();
}
break;
case 0x0600: // Irdeto
if (機頂盒中插入的為I卡 && 智能卡已經初始化成功)
{
irdeto_parse_ecm();
}
break;
case 0x0B00: // Conax
if (機頂盒中插入的為I卡 && 智能卡已經初始化成功)
{
conax_parse_ecm();
}
break;
case 0x4A00:
if (CASystemId>=0x4A00 && CASystemId<=0x4A0F) // Tongfang
{
if (機頂盒中插入的為T卡 && 智能卡已經初始化成功)
{
yxtf_parse_ecm();
}
}
else if (CASystemId>=0x4AB0 && CASystemId<=0x4ABF)// Suantong
{
if (機頂盒中插入的為ST卡 && 智能卡已經初始化成功)
{
bjst_parse_ecm();
}
}
else if (CASystemId==0x4AD2 || CASystemId<=0x4AD3) // Shuma
{
if (機頂盒中插入的為SM卡 && 智能卡已經初始化成功)
{
smsx_parse_ecm();
}
}
break;
case 0x3000:
if (機頂盒中插入的為ST卡 && 智能卡已經初始化成功)// Suantong
{
bjst_parse_ecm();
}
break;
default:
break;
}
*/
Smart_ErrorCode_t Smart_Reset(Smart_Handle_t Handle,U8* pucAtrBuffer,
U8* pppucAtrLength,U8* pucHistoryLength);/*智能卡復位*/
Smart_ErrorCode_t Smart_Transfer(Smart_Handle_t Handle,U8* pucCommand,
U16 uNumberToWrite, U8* pucResponse,
U16 uNumberToRead,U16* pusNumberRead,
U8* pucPBWords);/*智能卡數據傳輸*/
#endif /* __sc_def_h__ */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -