⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sc_def.h

📁 在原来基础上新添加了对ST、V、I、C卡的处理
💻 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 + -