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

📄 ty514cpu.c

📁 EMV2000 LEVEL 1实现的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	}

	sw2 = CARD2recvbyte();
	if(STATE_FLAG)
	{
        IC_RST2 = 0;
        IC_IO2 = 0;
	IC_PWR2 = 1;
	CPU2_REST_FLAG = 0;
        command = IFD_ICC_TypeError;return;}
        if(((sw1&0xf0)!=0x60)&&((sw1&0xf0)!=0x90))
        {
         IC_RST2 = 0;
         IC_IO2 = 0;
	 IC_PWR2 = 1;
	 CPU2_REST_FLAG = 0;
         command = IFD_ICC_TypeError;
         return;
                }
	XBYTE[pointer] = sw1;
	pointer++;
	XBYTE[pointer] = sw2;
	pointer ++;
	length = pointer;

	return;

}

//======================================================================================
//SAM1
/*
void transSAM1_t0(void) //using 0
{


	if(length <= 5) 	case3 = 0;
	else 		case3 = 1;

	if(length < 5) 	{XBYTE[4] = 0; pp3 = 0;}

	ET0 = 0;

	//send APDU header
	for(LEN = 0; LEN < 5; LEN++)
	{
		temp = XBYTE[LEN];
		SAM1sendbyte(temp);
		if (STATE_FLAG)
		{	command = IFD_ICC_TypeError;return;}
	}

	//receive sw1
	while(1)
	{
		sw1 = SAM1recvbyte();
		if(STATE_FLAG)
                	{command = sw1;return;}
		if(sw1 != 0x60) break;
		sPC60();
	}

	sw2 = sw1&0xf0;
	if((sw2 == 0x60)||(sw2 == 0x90))
	{
		sw2 = SAM1recvbyte();
		if(STATE_FLAG)
		{	command = IFD_ICC_TypeError;return;}

		XBYTE[0] = sw1;
		XBYTE[1] =sw2;
		length = 2;

		return;
	}

	//sw1 != ins
	if((sw1 != ins)&&((sw1+ins) != 0xff))
	{
//		sw2 = SAM1recvbyte();
//		if(STATE_FLAG)
//		{	command = IFD_ICC_TypeError;return;}
//		XBYTE[0] = sw1;XBYTE[1] =sw2;
//		length = 2;
//		return;
		STATE_FLAG = 1;
		command = IFD_ICC_TypeError;return;
	}

//sw1 == ins
//case3
	if(case3)
	{

		pointer = 5;

        	Detu();                         //方向字符为16 ETU
        	Detu();                         //方向字符为16 ETU
        	Detu();                         //方向字符为16 ETU

		while((sw1+ins) == 0xff)
		{
			temp = XBYTE[pointer];
			pointer ++;
			SAM1sendbyte(temp);
			if (STATE_FLAG)
			{	command = temp; return;}

			do{
				sw1 = SAM1recvbyte();
				if (STATE_FLAG)
				{	command = IFD_ICC_TypeError; return;}
				if(sw1 == 0x60) sPC60();
			} while( sw1 == 0x60);

			if(--pp3 == 0) break;
		}

		if(sw1 == ins)
		{
			while(pp3)
			{
				temp = XBYTE[pointer];
				SAM1sendbyte(temp);
				pointer++;
				pp3--;
				if (STATE_FLAG)
				{	command = sw1; return;}
			}

	  		while(1)
  			{
				sw1 = SAM1recvbyte();
				if(STATE_FLAG)
				{	command = IFD_ICC_TypeError;return;}
				if(sw1 != 0x60) break;
				sPC60();
   			}
		}

		sw2 = SAM1recvbyte();
		if(STATE_FLAG)
		{	command = IFD_ICC_TypeError;return;}

		XBYTE[0] = sw1;
		XBYTE[1] =sw2;
		length = 2;

		return;
	}

//case1,2
	//指针复位
	pointer = 0;

	while((sw1+ins) == 0xff)		// 20040720 add
	{
		temp = SAM1recvbyte();
		if(STATE_FLAG)
	 	{	command = temp;return;}
		XBYTE[pointer] = temp;
		pointer++;

		while(1)				// 200407012 modify
		{
			sw1 = SAM1recvbyte();
			if(STATE_FLAG)
	                	{command = IFD_ICC_TypeError;return;}
			if(sw1 != 0x60) break;
			sPC60();
		}

		if(--pp3 == 0) break;
	}

	if(sw1 == ins)
	{
		do
		{
			temp = SAM1recvbyte();
			if(STATE_FLAG)
		 	{	command = temp;return;}
			XBYTE[pointer] = temp;
			pointer++;
	          pp3--;
		}while(pp3);
	}
//	sw1 = SAM1recvbyte();
//	if(STATE_FLAG)
//   	{	command = sw1;return;}
	while(1)				// 200407012 modify
	{
		sw1 = SAM1recvbyte();
		if(STATE_FLAG)
                	{command = IFD_ICC_TypeError;return;}
		if(sw1 != 0x60) break;
		sPC60();
	}

	sw2 = SAM1recvbyte();
	if(STATE_FLAG)
	{	command = IFD_ICC_TypeError;return;}

	XBYTE[pointer] = sw1;
	pointer++;
	XBYTE[pointer] = sw2;
	pointer ++;
	length = pointer;

	return;
}
*/
//======================================================================================
//SAM2
/*
void transSAM2_t0(void) //using 0
{


	if(length <= 5) 	case3 = 0;
	else 		case3 = 1;

	if(length < 5) 	{XBYTE[4] = 0; pp3 = 0;}

	ET0 = 0;

	//send APDU header
	for(LEN = 0; LEN < 5; LEN++)
	{
		temp = XBYTE[LEN];
		SAM2sendbyte(temp);
		if (STATE_FLAG)
		{	command = IFD_ICC_TypeError;return;}
	}

	//receive sw1
	while(1)
	{
		sw1 = SAM2recvbyte();
		if(STATE_FLAG)
                	{command = sw1;return;}
		if(sw1 != 0x60) break;
		sPC60();
	}

	sw2 = sw1&0xf0;
	if((sw2 == 0x60)||(sw2 == 0x90))
	{
		sw2 = SAM2recvbyte();
		if(STATE_FLAG)
		{	command = IFD_ICC_TypeError;return;}

		XBYTE[0] = sw1;
		XBYTE[1] =sw2;
		length = 2;

		return;
	}

	//sw1 != ins
	if((sw1 != ins)&&((sw1+ins) != 0xff))
	{
//		sw2 = SAM2recvbyte();
//		if(STATE_FLAG)
//		{	command = IFD_ICC_TypeError;return;}
//		XBYTE[0] = sw1;XBYTE[1] =sw2;
//		length = 2;
//		return;
		STATE_FLAG = 1;
		command = IFD_ICC_TypeError;return;
	}

//sw1 == ins
//case3
	if(case3)
	{

		pointer = 5;

        	Detu();                         //方向字符为16 ETU
        	Detu();                         //方向字符为16 ETU
        	Detu();                         //方向字符为16 ETU

		while((sw1+ins) == 0xff)
		{
			temp = XBYTE[pointer];
			pointer ++;
			SAM2sendbyte(temp);
			if (STATE_FLAG)
			{	command = temp; return;}

			do{
				sw1 = SAM2recvbyte();
				if (STATE_FLAG)
				{	command = IFD_ICC_TypeError; return;}
				if(sw1 == 0x60) sPC60();
			} while( sw1 == 0x60);

			if(--pp3 == 0) break;
		}

		if(sw1 == ins)
		{
			while(pp3)
			{
				temp = XBYTE[pointer];
				SAM2sendbyte(temp);
				pointer++;
				pp3--;
				if (STATE_FLAG)
				{	command = sw1; return;}
			}

	  		while(1)
  			{
				sw1 = SAM2recvbyte();
				if(STATE_FLAG)
				{	command = IFD_ICC_TypeError;return;}
				if(sw1 != 0x60) break;
				sPC60();
   			}
		}

		sw2 = SAM2recvbyte();
		if(STATE_FLAG)
		{	command = IFD_ICC_TypeError;return;}

		XBYTE[0] = sw1;
		XBYTE[1] =sw2;
		length = 2;

		return;
	}

//case1,2
	//指针复位
	pointer = 0;

	while((sw1+ins) == 0xff)		// 20040720 add
	{
		temp = SAM2recvbyte();
		if(STATE_FLAG)
	 	{	command = temp;return;}
		XBYTE[pointer] = temp;
		pointer++;

		while(1)				// 200407012 modify
		{
			sw1 = SAM2recvbyte();
			if(STATE_FLAG)
	                	{command = IFD_ICC_TypeError;return;}
			if(sw1 != 0x60) break;
			sPC60();
		}

		if(--pp3 == 0) break;
	}

	if(sw1 == ins)
	{
		do
		{
			temp = SAM2recvbyte();
			if(STATE_FLAG)
		 	{	command = temp;return;}
			XBYTE[pointer] = temp;
			pointer++;
	          pp3--;
		}while(pp3);
	}
//	sw1 = SAM2recvbyte();
//	if(STATE_FLAG)
//   	{	command = sw1;return;}
	while(1)				// 200407012 modify
	{
		sw1 = SAM2recvbyte();
		if(STATE_FLAG)
                	{command = IFD_ICC_TypeError;return;}
		if(sw1 != 0x60) break;
		sPC60();
	}

	sw2 = SAM2recvbyte();
	if(STATE_FLAG)
	{	command = IFD_ICC_TypeError;return;}

	XBYTE[pointer] = sw1;
	pointer++;
	XBYTE[pointer] = sw2;
	pointer ++;
	length = pointer;

	return;
}
*/
//======================================================================================
//SAM3
/*
void transSAM3_t0(void) //using 0
{


	if(length <= 5) 	case3 = 0;
	else 		case3 = 1;

	if(length < 5) 	{XBYTE[4] = 0; pp3 = 0;}

	ET0 = 0;

	//send APDU header
	for(LEN = 0; LEN < 5; LEN++)
	{
		temp = XBYTE[LEN];
		SAM3sendbyte(temp);
		if (STATE_FLAG)
		{	command = IFD_ICC_TypeError;return;}
	}

	//receive sw1
	while(1)
	{
		sw1 = SAM3recvbyte();
		if(STATE_FLAG)
                	{command = sw1;return;}
		if(sw1 != 0x60) break;
		sPC60();
	}

	sw2 = sw1&0xf0;
	if((sw2 == 0x60)||(sw2 == 0x90))
	{
		sw2 = SAM3recvbyte();
		if(STATE_FLAG)
		{	command = IFD_ICC_TypeError;return;}

		XBYTE[0] = sw1;
		XBYTE[1] =sw2;
		length = 2;

		return;
	}

	//sw1 != ins
	if((sw1 != ins)&&((sw1+ins) != 0xff))
	{
//		sw2 = SAM3recvbyte();
//		if(STATE_FLAG)
//		{	command = IFD_ICC_TypeError;return;}
//		XBYTE[0] = sw1;XBYTE[1] =sw2;
//		length = 2;
//		return;
		STATE_FLAG = 1;
		command = IFD_ICC_TypeError;return;
	}

//sw1 == ins
//case3
	if(case3)
	{

		pointer = 5;

        	Detu();                         //方向字符为16 ETU
        	Detu();                         //方向字符为16 ETU
        	Detu();                         //方向字符为16 ETU

		while((sw1+ins) == 0xff)
		{
			temp = XBYTE[pointer];
			pointer ++;
			SAM3sendbyte(temp);
			if (STATE_FLAG)
			{	command = temp; return;}

			do{
				sw1 = SAM3recvbyte();
				if (STATE_FLAG)
				{	command = IFD_ICC_TypeError; return;}
				if(sw1 == 0x60) sPC60();
			} while( sw1 == 0x60);

			if(--pp3 == 0) break;
		}

		if(sw1 == ins)
		{
			while(pp3)
			{
				temp = XBYTE[pointer];
				SAM3sendbyte(temp);
				pointer++;
				pp3--;
				if (STATE_FLAG)
				{	command = sw1; return;}
			}

	  		while(1)
  			{
				sw1 = SAM3recvbyte();
				if(STATE_FLAG)
				{	command = IFD_ICC_TypeError;return;}
				if(sw1 != 0x60) break;
				sPC60();
   			}
		}

		sw2 = SAM3recvbyte();
		if(STATE_FLAG)
		{	command = IFD_ICC_TypeError;return;}

		XBYTE[0] = sw1;
		XBYTE[1] =sw2;
		length = 2;

		return;
	}

//case1,2
	//指针复位
	pointer = 0;

	while((sw1+ins) == 0xff)		// 20040720 add
	{
		temp = SAM3recvbyte();
		if(STATE_FLAG)
	 	{	command = temp;return;}
		XBYTE[pointer] = temp;
		pointer++;

		while(1)				// 200407012 modify
		{
			sw1 = SAM3recvbyte();
			if(STATE_FLAG)
	                	{command = IFD_ICC_TypeError;return;}
			if(sw1 != 0x60) break;
			sPC60();
		}

		if(--pp3 == 0) break;
	}

	if(sw1 == ins)
	{
		do
		{
			temp = SAM3recvbyte();
			if(STATE_FLAG)
		 	{	command = temp;return;}
			XBYTE[pointer] = temp;
			pointer++;
	          pp3--;
		}while(pp3);
	}
//	sw1 = SAM3recvbyte();
//	if(STATE_FLAG)
//   	{	command = sw1;return;}
	while(1)				// 200407012 modify
	{
		sw1 = SAM3recvbyte();
		if(STATE_FLAG)
                	{command = IFD_ICC_TypeError;return;}
		if(sw1 != 0x60) break;
		sPC60();
	}

	sw2 = SAM3recvbyte();
	if(STATE_FLAG)
	{	command = IFD_ICC_TypeError;return;}

	XBYTE[pointer] = sw1;
	pointer++;
	XBYTE[pointer] = sw2;
	pointer ++;
	length = pointer;

	return;
}
*/
//======================================================================================
//SAM4
void transSAM4_t0(void) //using 0
{


	if(length <= 5) 	case3 = 0;
	else 		case3 = 1;

	if(length < 5) 	{XBYTE[4] = 0; pp3 = 0;}

	ET0 = 0;

	//send APDU header
	for(LEN = 0; LEN < 5; LEN++)
	{
		temp = XBYTE[LEN];
		SAM4sendbyte(temp);
		if (STATE_FLAG)
		{	command = IFD_ICC_TypeError;return;}
	}

	//receive sw1
	while(1)
	{
		sw1 = SAM4recvbyte();
		if(STATE_FLAG)
                	{command = sw1;return;}
		if(sw1 != 0x60) break;
		sPC60();
	}

	sw2 = sw1&0xf0;
	if((sw2 == 0x60)||(sw2 == 0x90))
	{
		sw2 = SAM4recvbyte();
		if(STATE_FLAG)
		{	command = IFD_ICC_TypeError;return;}

		XBYTE[0] = sw1;
		XBYTE[1] =sw2;
		length = 2;

		return;
	}

	//sw1 != ins

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -