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

📄 desfire_test_mini.c

📁 pos机contactless源码
💻 C
字号:
//Desfire Test Program

#include <stdio.h>
#include <stdlib.h>
#include <api.h>
#include <ExEH0218.h>
#include <contactless.h>
#include "common.h"

short desfire_test_mini(void)
{
	char 		ret;
	unsigned char	read_ok;
	unsigned char	trycnt;
	unsigned char 	databuf[1200];
	unsigned char	ATQ[3];
	unsigned char	sno[4];
	unsigned char 	sak;
	unsigned short	atslen;
	unsigned char 	tmpbuf[100];		
	unsigned char   g_comm = sgbCOMM_MODE_ENCIPHERED;
	unsigned char   g_fileid;
	unsigned char 	bAccessKey[17];
	unsigned char 	bnewKey[17];
	unsigned char 	writevalue;
	unsigned char	hintstr0[30];
	unsigned char	hintstr1[30];
	unsigned char	hintstr2[30];
	unsigned char	hintstr3[30];
	unsigned char 	hintstr4[30];
	unsigned char 	hintstr5[30];
	unsigned char	hintstr6[30];
	unsigned char	hintstr7[30];
	unsigned char 	hintstr8[30];
	int 		retint;
	int 		tmpint;
	long 		tmplong;
	
	VERSION_INFO curversion;
	ADDITIONAL_FILE_SETTINGS curfileset;

	if(Get_Language()==LANG_CHN)
	{
		strcpy(hintstr0,"接口打开错误");
		strcpy(hintstr1,"请在%d秒内刷卡");
		strcpy(hintstr2,"未读到合法卡!");
		strcpy(hintstr3,"测试错误:%d");
		strcpy(hintstr4,"测试成功");
		strcpy(hintstr5,"认证成功");
		strcpy(hintstr6,"创建应用成功");
		strcpy(hintstr7,"读测试成功");
		strcpy(hintstr8,"写测试成功");			
	}
	else
	{
		strcpy(hintstr0,"Interface error");
		strcpy(hintstr1,"put card:%d sec");
		strcpy(hintstr2,"no legal card");
		strcpy(hintstr3,"test error:%d");
		strcpy(hintstr4,"test success");
		strcpy(hintstr5,"Auth success");
		strcpy(hintstr6,"Create success");
		strcpy(hintstr7,"read success");
		strcpy(hintstr8,"write success");		
	}

	clr_scr();
	if(RCX_Init(CARD_TYPE_14443A))
	{
		DispStr_CE(0,3,hintstr0,DISP_CENTER|DISP_CLRSCR);
		delay_and_wait_key(0,EXIT_KEY_ALL,0);
		return -1;
	}	
	
	read_ok = 0;
	SPT_set(1);	
	for ( trycnt=11; trycnt>0; )	
	{
		if(!SPT_read())
		{			
			sprintf(tmpbuf,hintstr1,--trycnt);
			DispStr_CE(0,0,tmpbuf,DISP_POSITION|DISP_CLRLINE);
			SPT_set(64);
  		}
  	
		ret = CardTypeARequest(PICC_REQALL,ATQ);
		if( ( ret==RCX_OK )&&(ATQ[0]==0x44)&&(ATQ[1]==0x03) )
		{
			read_ok = 1;
			break;
		}			
	}
	
	if ( !read_ok )
	{		
		DispStr_CE(0,3,hintstr2,DISP_CENTER|DISP_CLRSCR);		
		delay_and_wait_key( 0, EXIT_KEY_ALL, 0 );
		return 1;
	}
	
	clr_scr();
	
	ret = CardTypeAAnticoll(PICC_ANTICOLL1,sno);	
	ret |= CardTypeASelect(PICC_ANTICOLL1,sno,&sak);
	if(ret!=RCX_OK)
	{
		retint = ret;
		goto err;
	}
	if(sak&0x04)
	{		
		ret = CardTypeAAnticoll(PICC_ANTICOLL2,sno);			
		ret |= CardTypeASelect(PICC_ANTICOLL2,sno,&sak);
		if(ret!=RCX_OK)
		{
			retint = ret;
			goto err;
		}		
	}
	
	ret = CardTypeARATS(1,databuf,&atslen);
	if(ret!=RCX_OK)
	{
		retint = ret;
		goto err;
	}
		
	//Authentiaciton
	memset(bAccessKey,0,sizeof(bAccessKey));
	retint = DesFireCard_Authenticate( 0,bAccessKey);
	if(ret!=RCX_OK)
	{
		goto err;
	}
	DispStr_CE(0,0,hintstr5,DISP_CENTER|DISP_CLRLINE);
	
	//Clear data
	retint = DesFireCard_FormatPICC();		
		
	retint |= DesFireCard_CreateApplication( 0xAABBCC, 0xFF, 1 );
	if(retint!=RCX_OK)
	{
		goto err;
	}
	DispStr_CE(0,2,hintstr6,DISP_CENTER|DISP_CLRLINE);
		
	retint = DesFireCard_SelectApplication( 0xAABBCC );		
		
	memset(bAccessKey,0,sizeof(bAccessKey));
	retint |= DesFireCard_Authenticate( 0,bAccessKey);
	if(retint!=RCX_OK)
	{
		goto err;
	}
		
	g_fileid = 2;
	retint = DesFireCard_CreateStdDataFile(g_fileid,g_comm,0,100);	                    
			
	//read write standard data file
	memset(databuf,0x55,1000);
	retint |= DesFireCard_WriteData(g_fileid,g_comm,0,100,databuf);	
	if(retint!=RCX_OK)
	{
		goto err;
	}
	DispStr_CE(0,4,hintstr8,DISP_CENTER|DISP_CLRLINE);
				
	memset(databuf,0x00,sizeof(databuf));
	//retint = DesFireCard_ReadData(g_fileid,g_comm,0,100,databuf,&tmplong);
	retint = DesFireCard_ReadData2(g_fileid,0,100,databuf,&tmplong);
	if( (retint!=RCX_OK)&&(databuf[999]!=0x55) )
	{
		goto err;
	}
	DispStr_CE(0,6,hintstr7,DISP_CENTER|DISP_CLRLINE);
		
	DispStr_CE(0,3,hintstr4,DISP_CENTER|DISP_CLRSCR);
	delay_and_wait_key(0,EXIT_KEY_ALL,0);
	return 0;

err:
	RCX_Close();
	sprintf(tmpbuf,hintstr3,retint);
	DispStr_CE(0,6,tmpbuf,DISP_CENTER);	
	delay_and_wait_key(0,EXIT_KEY_ALL,0);
	return -1;			
}

⌨️ 快捷键说明

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