📄 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 + -