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