#include #include #include "..\lib\7188.h" #define NoError 0 #define Error 1 #define NoCard 2 char szCmd1[80],szCmd2[80]; int read_card(void); int send_to_card_reader(char szStr[]); int read_from_card_reader(char szStr[]); int ascii_to_hex(char c); /* ------------------------------------------------------------------- */ void main() { int now_i1,now_i2,now_i3,now_i4; int old_i1,old_i2,old_i3,old_i4; int j,i,k; char c,str[80]; InitLib(); /* driver initial */ InstallCom(3,9600L,8,0,1); /* COM3, RS-232, full-duplex mode, INT */ /* COM4, RS-232, connect to PC's COM port for download */ Init5DigitLed(); /* initial & blank the 5-digit LED */ LedOn(); /* red-LED on */ j=0; for (;;) { for (i=0; i<70; i++) szCmd2[i]=0; i=read_card(); if (i==NoError) { printf("\nszCmd1=%s, ",szCmd1); printf("szCmd2=%s",szCmd2); LedOff(); for (k=18; k<=23; k++) { j=ascii_to_hex(szCmd2[k]); Show5DigitLed(k-17,j); } DelayTimeMs(1000); LedOn(); for (k=1; k<=5; k++) Show5DigitLed(k,16); /* empty */ } DelayTimeMs(100); if (kbhit()) { /* is user press PC's keyboard from COM4 */ c=getch(); /* if press 'Q' or 'q'-->exit this program */ if ((c=='q') || (c=='Q')) { RestoreCom(3); return; } } } } /* ------------------------------------------------------------------- */ int read_card(void) /* read crad number from COM3 */ { int i,xor; szCmd1[0]=1; /* SOH */ szCmd1[1]='S'; szCmd1[2]='0'; szCmd1[3]='1'; szCmd1[4]='A'; szCmd1[5]='1'; szCmd1[6]=2; /* STX */ szCmd1[7]='4'; szCmd1[8]='2'; szCmd1[9]=3; /* ETX */ xor=0; for (i=0; i<=9; i++) { xor = xor ^ szCmd1[i]; } xor=xor|0x20; szCmd1[10]=xor; /* CheckSum */ szCmd1[11]=0; send_to_card_reader(szCmd1); for (i=0; i<26; i++) szCmd2[i]=0; i=read_from_card_reader(szCmd2); return(i); } /* ------------------------------------------------------------------- */ int send_to_card_reader(char szStr[]) { int i; char c; i=0; for (;;) { c=szStr[i]; i++; if ((c==0) || (c==0x0d)) goto ret_label; ToCom(3,c); } ret_label: return(NoError); } /* ------------------------------------------------------------------- */ int read_from_card_reader(char szStr[]) { int i,j,xor; char c; i=0; j=0; for (;;) { if (IsCom(3)) { c=ReadCom(3); if (c==0x20) { szStr[i]=0; return(NoCard); } szStr[i]=c; i++; if (i>=37) goto ret_label; /* read 0-25 chars --> return */ j=0; } else j++; if (j>30000) return(Error); /* time-out */ } ret_label: szStr[i]=0; return(NoError); }