?? readcard.c
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <api.h>
#include <ExEH0218.h>
#include "Health.h"
int Select_File(unsigned char * FileName)
{
unsigned short SW, rc;
unsigned short pSW, P1;
unsigned char tbuff[40];
int filesze;
tbuff[0]=FileName[0];
tbuff[1]=FileName[1];
rc = ICC_T0_TPDU(0,0xA0,0xA4,0,0,2,tbuff,&SW);
if (rc)
{
clr_scr();
DispStr_CE(0,3,"Select Error",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 1, EXIT_KEY_ALL, 0 );
return(0);
}
pSW = SW;
if (pSW >> 8 != 0x009F)
{
clr_scr();
DispStr_CE(0,3,"Select 1 Error",DISP_CENTER|DISP_CLRSCR);
dump_memory(&SW, 2, 5);
delay_and_wait_key( 1, EXIT_KEY_ALL, 0 );
return(0);
}
pSW = SW;
P1 = 15;
rc = ICC_T0_TPDU(1,0xA0,0xC0,0,0,P1,tbuff,&SW);
if (rc)
{
clr_scr();
DispStr_CE(0,3,"Select 2 Error",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 1, EXIT_KEY_ALL, 0 );
return(0);
}
//(unsigned short * )&pSW = SW;
if (SW != 0x9000)
{
clr_scr();
DispStr_CE(0,3,"Select 3 Error",DISP_CENTER|DISP_CLRSCR);
dump_memory(&SW, 2, 5);
delay_and_wait_key( 1, EXIT_KEY_ALL, 0 );
return(0);
}
filesze = tbuff[2] * 256 + tbuff[3];
return(filesze);
}
void Verify_Adm()
{
unsigned short SW, rc;
unsigned short pSW;
unsigned char tbuff[40];
int filesze;
tbuff[0]=0x39;
tbuff[1]=0x62;
tbuff[2]=0x60;
tbuff[3]=0x33;
tbuff[4]=0x67;
tbuff[5]=0x61;
tbuff[6]=0x35;
tbuff[7]=0xBA;
rc = ICC_T0_TPDU(0,0xA0,0x20,0,0x0B,8,tbuff,&SW);
/* if (rc)
{
clr_scr();
DispStr_CE(0,3,"Select Error",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 1, EXIT_KEY_ALL, 0 );
return(0);
}
pSW = SW;
if (pSW >> 8 != 0x009F)
{
clr_scr();
DispStr_CE(0,3,"Select 1 Error",DISP_CENTER|DISP_CLRSCR);
dump_memory(&SW, 2, 5);
delay_and_wait_key( 1, EXIT_KEY_ALL, 0 );
return(0);
}
pSW = SW;
filesze = (pSW - 0x9F00);
rc = ICC_T0_TPDU(1,0xA0,0xC0,0,0,filesze,tbuff,&SW);
if (rc)
{
clr_scr();
DispStr_CE(0,3,"Select 2 Error",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 1, EXIT_KEY_ALL, 0 );
return(0);
}
//(unsigned short * )&pSW = SW;
if (SW != 0x9000)
{
clr_scr();
DispStr_CE(0,3,"Select 3 Error",DISP_CENTER|DISP_CLRSCR);
dump_memory(&SW, 2, 5);
delay_and_wait_key( 1, EXIT_KEY_ALL, 0 );
return(0);
}
filesze = tbuff[2] * 256 + tbuff[3];
return(filesze);
*/
}
int Read_File(unsigned char * FileName, unsigned char * DataStr)
{
unsigned short SW, rc, pSW;
unsigned char tbuff[260];
unsigned char tempbuff[260];
int filesze;
int cnt = 0;
int leftcnt;
unsigned char P1, P2, P3, P4, P5;
int rcode;
unsigned char abuff[1640];
unsigned char alen;
//*********************20060911********************
//char testbuf1[16],testbuf2[16];
//*********************20060911********************
bzero(DataStr, sizeof(DataStr));
ICC_interface_power(ICC_POWER_ON);
ICC_select_sock(ICC_SOCK_MAIN);
//ICC_select_sock(ICC_SOCK_SAM);
rcode = ICC_cpucard_ATR(abuff,&alen, ICC_CLOCK_4M, ICC_VOLTAGE_5, 0x11, 0);
rcode = ICC_cpucard_ATR(abuff,&alen, ICC_CLOCK_4M, ICC_VOLTAGE_5, 0x11, 0);
if (rcode)
return(-1);
//Verify_Adm();
filesze = Select_File(FileName);
if (!filesze)
return(-1);
leftcnt = filesze;
P5=0;
while (leftcnt > 0)
{
P1 = floor(cnt /2);
P2 = (cnt - P1 * 2)*128;
if (leftcnt < 129 )
{
P3 = leftcnt;
P4=P3;
leftcnt = 0;
}
else
{
P3 = 128;
P4=P3;
leftcnt = leftcnt - 128;
cnt = cnt + 1;
}
memset(tbuff,0,sizeof(tbuff));
rc = ICC_T0_TPDU(1,0xA0,0xB0,P1,P2,P3,tbuff,&SW);
//*********************20060911********************
//memcpy(testbuf1[16],tbuff,16);
//memcpy(testbuf2[16],tbuff+112,16);
//DispStr_CE(0,0,testbuf1,DISP_POSITION|DISP_CLRSCR);
//DispStr_CE(0,3,testbuf2,DISP_POSITION);
//delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
//*********************20060911********************
if (rc)
{
ICC_interface_power(ICC_POWER_OFF);
clr_scr();
DispStr_CE(0,3,"Read Error",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key( 1, EXIT_KEY_ALL, 0 );
return(-1);
}
pSW = SW;
pSW = pSW >> 8;
if ((pSW != 0x009F) && (pSW != 0x0090))
{
ICC_interface_power(ICC_POWER_OFF);
clr_scr();
DispStr_CE(0,3,"Read 1 Error",DISP_CENTER|DISP_CLRSCR);
dump_memory(&SW, 2, 5);
delay_and_wait_key( 1, EXIT_KEY_ALL, 0 );
return(-1);
}
pSW = SW;
P1 = 0;
P2 = 0;
pSW = pSW - 0x9000;
P3 = pSW;
//memcpy(&DataStr[strlen(DataStr)],tbuff,(strlen(tbuff)-2));
memcpy(&DataStr[P5],tbuff,P4);
P5+=P4;
}
ICC_interface_power(ICC_POWER_OFF);
return(0);
}
//please insert read card function
//get Demograhic info
int Read_Per_Info(char *Card_Read_Buff)
{
//Please Insert Function
//Card Reset;
//select Adf
//Read Bin
//memcpy(Card_Read_Buff ,"8ef3ec8a-59c2-4693-a569-313038da47e4|Dunegan|John11|k|||11/24/2005 12:00:00 AM|125456544|M|1234567||1333 Corporate Dr.|suite 360|||Irving|TX|75038||8664886633|123456456489484|8889990000|||jdunegan@healthmeans.com||Catholic|Japanese|healthmeans|1234 abc drive|suite 123|dallas|TX|75038|sales|12/28/2005 12:00:00 AM|False|English||||Single|Full Time|1/18/2006 10:37:04 AM",340);
if(Read_File("\x6F\x91", Card_Read_Buff) != 0)
return (1);
//return 1;//read card error
return 0;//read card right
}
//get RELATIVES info
int NextOfKinInfo(char *Card_Read_Buff)
{
//Please Insert Function
//Card Reset;
//select Adf
//Read Bin
//memcpy(Card_Read_Buff ,"Aaron|John|k|||11/24/2005 12:00:00 AM|125456544|F|1234567||1333 Corporate Dr.|suite 360|Irving|TX|75038||8664886633|123456456489484|8889990000||12344321|jdunegan@healthmeans.com|Catholic|Japanese|healthmeans|1234 abc drive|suite 123|dallas|TX|75038|sales|12/28/2005 12:00:00 AM|False|English|Wife|fff|Single|Full Time",340);
if(Read_File("\x6F\x92", Card_Read_Buff) != 0)
return (1);
//return 1;//read card error
return 0;//read card right
}
int GuarantorInfo(char *Card_Read_Buff)
{
//Please Insert Function
//Card Reset;
//select Adf
//Read Bin
//memcpy(Card_Read_Buff ,"Adeline|Alice|k|||11/24/2005 12:00:00 AM|125456544|F|1234567||1333 Corporate Dr.|suite 360|Irving|TX|75038||8664886633|123456456489484|8889990000||12344321|jdunegan@healthmeans.com|Catholic|Japanese|healthmeans|1234 abc drive|suite 123|dallas|TX|75038|sales|12/28/2005 12:00:00 AM|False|English|Wife|fff|Single|Full Time",340);
if(Read_File("\x6F\x93", Card_Read_Buff) != 0)
return (1);
//return 1;//read card error
return 0;//read card right
}
int EmergencyInfo(char *Card_Read_Buff)
{
//Please Insert Function
//Card Reset;
//select Adf
//Read Bin
//memcpy(Card_Read_Buff ,"Christopher|Peter|k|||11/24/2005 12:00:00 AM|125456544|M|1234567||1333 Corporate Dr.|suite 360|Irving|TX|75038||8664886633|123456456489484|8889990000||12344321|jdunegan@healthmeans.com|Catholic|Japanese|healthmeans|1234 abc drive|suite 123|dallas|TX|75038|sales|12/28/2005 12:00:00 AM|False|English|Wife|fff|Single|Full Time",340);
if(Read_File("\x6F\x94", Card_Read_Buff) != 0)
return (1);
//return 1;//read card error
return 0;//read card right
}
int Insurance1Info(char *Card_Read_Buff)
{
char strtmp[2000],tmp[16];
int i=0,ret;
memset(strtmp,0,2000);
ret=InsuranceInfo(strtmp);
if (ret==1) return 1;
for (i=0;i<2000;i++)
{
if (strtmp[i]==0x01)
{
//sprintf(tmp,"i=%4d",i);
//DispStr_E(0,0,tmp,DISP_POSITION|DISP_CLRSCR);
//delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
break;
}//break;
}
if (i>500) return 1;
memcpy(Card_Read_Buff,strtmp,i);
//return 1;//read card error
return 0;//read card right
}
int Insurance2Info(char *Card_Read_Buff)
{
char strtmp[2000],tmp[16];
int i=0,m=0,n,p,ret;
memset(strtmp,0,2000);
ret=InsuranceInfo(strtmp);
if (ret==1) return 1;
for (i=0;i<2000;i++)
{
if (strtmp[i]==0x01)
{
m++;
if (m==1) n=i+1;
if (m==2) p=i;
if (m==2) break;
}//
}
memcpy(Card_Read_Buff,strtmp+n,p-n);
return 0;//read card right
}
int Insurance3Info(char *Card_Read_Buff)
{
//Please Insert Function
//Card Reset;
//select Adf
//Read Bin
//memcpy(Card_Read_Buff ,"Caichanchina|hongyun|3456789012|Dragon3|121234345656|lastname|firstname|K|11/24/2005 12:00:00 AM|M|1333 Corporate Dr.|suite 360|Irving|TX|75038|112-233-4455|8664886633|123456456489484|jdunegan@healthmeans.com|Catholic| |||||||||||||||dragon|",340);
char strtmp[2000],tmp[16];
int i=0,m=0,n,p,ret;
memset(strtmp,0,2000);
ret=InsuranceInfo(strtmp);
if (ret==1) return 1;
for (i=0;i<2000;i++)
{
if (strtmp[i]==0x01)
{
m++;
if (m==2) n=i+1;
if (m==3) p=i;
if (m==3) break;
}
}
memcpy(Card_Read_Buff,strtmp+n,p-n);
//return 1;//read card error
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -