📄 commtran.lst
字号:
C51 COMPILER V4.01, COMMTRAN 19/08/04 14:33:24 PAGE 1
DOS C51 COMPILER V4.01, COMPILATION OF MODULE COMMTRAN
OBJECT MODULE PLACED IN D:\13505B\105B\COMMTRAN.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE D:\13505B\105B\COMMTRAN.C DB SB OE
stmt level source
1 #include <string.h>
2 #include "Hardware.h"
3 #include "MfRc500.h"
4 #include "RcComm.h"
5 #include "PcdShare.h"
6 #include "PcdUtils.h"
7 #include "MfReg.h"
8 #include "cardhead.h"
9 #include "MfErrNo.h"
10 #include <intrins.h>
11 #include "x5045.h"
12 #include "newcard.h"
13
14 char code * code send_option[3]={ (char *)I_send4,
15 (char *)I_send1,
16 (char *)I_1send56k
17 };
18
19 char code * code rec_option[3]={ (char *)I_receive4,
20 (char *)I_receive1,
21 (char *)I_1Rda56k,
22 };
23
24
25 uchar xdata ComBuffer[MAXLEN];
26 uchar xdata TempBuffer[MAXLEN];
27 uchar xdata MADMessage[32];
28 uchar xdata Auth_code[48];
29 uchar xdata CosBuffer[80];
30 uchar idata GPB;
31 uchar idata snr[5];
32 static uchar code version_number[11]="JK105B_V1.0";
33 uchar xdata buf2[16];
34 extern uchar Block_Index;
35 extern uchar idata sw1,sw2;
36 extern uchar idata rec_bytelen;
37 ulong idata money2 _at_ 0x30;
38 ulong xdata money1 ;
39 uchar len_x;
40 uchar len_y;
41 uint F;
42 uchar idata D;
43 uchar idata Baudrate=0x00;
44 uchar xdata slot1_baud=0xff;
45 /****************************************************************/
46
47 extern unsigned char ResetAllCard(void);
48 extern unsigned char RfSwitchOff(void);
49 extern unsigned char InitPcd(void);
50 extern char OpenRC(void);
51 extern void CloseRC(void);
52 extern char PcdReadE2(unsigned short startaddr,
53 unsigned char length,
54 unsigned char * DataBuffer);
55 extern void ModifyBaudrate12(void); // pps comand /
56
57 /***************************************************************************************************/
58
59 void CommTransact(void)
C51 COMPILER V4.01, COMMTRAN 19/08/04 14:33:24 PAGE 2
60 {
61 1
62 1 uchar Status,flag1=0;
63 1 uchar idata key_type,keytest;
64 1 uchar idata i,j,key_index,cardsequ,k;
65 1 uchar idata len_index,LEN1,LEN2;
66 1 uchar idata sector_n,block_n,flag=0;
67 1 uchar idata block_ob,Requestmode,piccvaluecmd;
68 1 uchar xdata buf[25],key[6],temp[4];
69 1 uchar ICProtol;
70 1 uint RAM_address;
71 1 uchar xdata wdtkey[6];
72 1 uint xdata freq;
73 1 if(flag)
74 1 {
75 2 Status=cpucard_send(0x00,(void *)(send_option[0]));
76 2 Status=cpucard_rec(&sw1,(void *)(rec_option[cardsequ]));
77 2 block_n=ResetAllCard();
78 2 block_n=RfSwitchOff();
79 2 block_n=InitPcd();
80 2 block_n=OpenRC();
81 2 CloseRC();
82 2 block_n=PcdReadE2(00,10,buf);
83 2 }
84 1
85 1
86 1 if((ComBuffer[2]==0x39)||(ComBuffer[2]==0x3b)||(ComBuffer[2]==0x52)
87 1 ||(ComBuffer[2]==0x54)||(ComBuffer[2]==0x56)
88 1 ||(ComBuffer[2]==0x60)) //readfile writefile decrement increment
89 1 {
90 2 Status=CheckMad(§or_n); /*get sector no.*/
91 2 if(Status!=MI_OK) return;
92 2
93 2 //"当ComBuffer[5]==0时,直接使用KEYSET1的密钥认证
94 2 //"当ComBuffer[5]!=0时, 使用SAM卡导出密钥认证
95 2 if((ComBuffer[2]==0x39)||(ComBuffer[2]==0x60)) //writefile and increment
96 2 keytest=0x04; //KEYB
97 2 else keytest=0x00; //KEYA
98 2
99 2 if(ComBuffer[5]!=0x00)
100 2 {
101 3 Status=Creat_key(keytest,sector_n,ComBuffer[5],key);
102 3 flag1=1;
103 3 if(Status!=MI_OK) return;
104 3 }
105 2 if(keytest==0x04)
106 2 {
107 3 key_type=PICC_AUTHENT1B;
108 3 }
109 2 else key_type=PICC_AUTHENT1A;
110 2 block_n=sector_n<<2;
111 2 if(flag1)
112 2 {
113 3 Status=MF1_authkey(key_type,key,block_n);
114 3 }
115 2 else Status=MF1_auth(key_type,sector_n,block_n);
116 2 if(Status!=MI_OK)
117 2 {
118 3 SendResponse(0x81,1,buf);
119 3 return;
120 3 }
121 2 }
122 1 if((ComBuffer[2]==0x51)||(ComBuffer[2]==0x53)||(ComBuffer[2]==0x55)||ComBuffer[2]==0x59)
123 1 { /*" 格式:3-密钥类型 4-扇区号 */
124 2 if(ComBuffer[3]==0x01)
125 2 {
C51 COMPILER V4.01, COMMTRAN 19/08/04 14:33:24 PAGE 3
126 3 keytest=PICC_AUTHENT1B;
127 3 }
128 2 else keytest=PICC_AUTHENT1A;
129 2
130 2 sector_n=ComBuffer[4];
131 2 block_n=sector_n<<2;
132 2 Status=MF1_auth(keytest,sector_n,block_n);
133 2 if(Status!=MI_OK)
134 2 {
135 3 SendResponse(0x81,1,buf);
136 3 return;
137 3 }
138 2 }
139 1 switch(ComBuffer[2])
140 1 {
141 2 case 0x35: /* open reader */
142 2
143 2 Power_on();
144 2 SleepMs(100);
145 2 SendResponse(0x01,1,buf);
146 2 break;
147 2
148 2 case 0x36: /* close reader */
149 2 Power_off();
150 2 SleepMs(10);
151 2 SendResponse(0x01,1,buf);
152 2 SetBaud(Baud115200);
153 2 break;
154 2
155 2 case 0x37: /* Select ADF */
156 2 if(ComBuffer[1]==3)
157 2 {
158 3 buf[0]=ComBuffer[3];
159 3 buf[1]=ComBuffer[4];
160 3 }
161 2 else
162 2 {
163 3 buf[0]=0x10;
164 3 buf[1]=0x03;
165 3 }
166 2 Status=SelectADF(buf);
167 2 SleepMs(10);
168 2 if(Status==MI_OK) SendResponse(0x01,1,buf);
169 2 else SendResponse(0x91,1,buf); /*ADF error*/
170 2 break;
171 2
172 2
173 2 case 0x31: // opencard
174 2 if(ComBuffer[4]==0x00)
175 2 {
176 3 key_index=0xF0;
177 3 }
178 2 else
179 2 {
180 3 if(ComBuffer[3]==0x26)
181 3 {
182 4 key_index=0;
183 4 }
184 3 else key_index=1;
185 3 }
186 2 Status=OpenCard(key_index);
187 2
188 2 if(Status!=MI_OK) return;
189 2
190 2 Read_Ram(0x0000,wdtkey,6); //read key from dog's E2ROM
191 2 Status=MF1_authkey(PICC_AUTHENT1A,wdtkey,0);
C51 COMPILER V4.01, COMMTRAN 19/08/04 14:33:24 PAGE 4
192 2
193 2 if(Status!=MI_OK)
194 2 {
195 3 SendResponse(0x81,6,snr); // authentication error
196 3 return;
197 3 }
198 2 for(i=1;i<3;i++) //get mad message
199 2 {
200 3 Status=MF1_read_key(PICC_AUTHENT1A,i,MADMessage+((i-1)<<4),wdtkey);
201 3 if(Status!=MI_OK) break;
202 3 }
203 2 if(Status==MI_OK)
204 2 {
205 3 Status=MF1_read_key(PICC_AUTHENT1A,3,buf,wdtkey);
206 3 if(Status==MI_OK)
207 3 {
208 4 GPB=buf[9];
209 4 Read_Ram(0x0010,wdtkey,6);
210 4 Status=MF1_authkey(PICC_AUTHENT1A,wdtkey,60); //2003.1.15
211 4 if(Status==MI_OK)
212 4 {
213 5 for(i=0;i<3;i++)
214 5 {
215 6 Status=MF1_read_key(PICC_AUTHENT1A,60+i,Auth_code+(i<<4),wdtkey);
216 6 if(Status!=MI_OK) break;
217 6 }
218 5 }
219 4 }
220 3 }
221 2 if(Status==MI_OK) SendResponse(0x01,6,snr);
222 2 else SendResponse(0x80,6,snr);
223 2 break;
224 2
225 2
226 2 case 0xF1: //"为浙江作的程序,认证码区的由标识来确定,要求
227 2 //"使用loadkey方式将32-47(KEYSET1)密钥下载
228 2 //"格式:60 05 f1 (卡片打开方式1字节(all或idle))(多卡标志1字节)(认证码区标识2字节)
229 2 // 0 1 2 3 4 5 6
230 2 if(ComBuffer[4]==0x00)
231 2 {
232 3 key_index=0xF0;
233 3 }
234 2 else
235 2 {
236 3 if(ComBuffer[3]==0x26)
237 3 {
238 4 key_index=0;
239 4 }
240 3 else key_index=1;
241 3 }
242 2 Status=OpenCard(key_index);
243 2
244 2 if(Status!=MI_OK) return;
245 2
246 2
247 2 Read_Ram(0x0000,wdtkey,6); //read key from dog's E2ROM 2003.1.15
248 2 Status=MF1_authkey(PICC_AUTHENT1A,wdtkey,0); //
249 2 if(Status!=MI_OK)
250 2 {
251 3 SendResponse(0x81,6,snr); // authentication error */
252 3 return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -