📄 commtran.lst
字号:
253 3 }
254 2
255 2 for(i=1;i<3;i++) //get mad message*/
256 2 {
257 3 Status=MF1_read_key(PICC_AUTHENT1A,i,MADMessage+((i-1)<<4),wdtkey);
C51 COMPILER V4.01, COMMTRAN 19/08/04 14:33:24 PAGE 5
258 3 if(Status!=MI_OK) break;
259 3 }
260 2
261 2 if(Status==MI_OK)
262 2 {
263 3 Status=MF1_read_key(PICC_AUTHENT1A,3,buf,wdtkey);
264 3 if(Status==MI_OK)
265 3 {
266 4 GPB=buf[9];
267 4 //"取认证码区地址
268 4 ComBuffer[3]=ComBuffer[5];
269 4 ComBuffer[4]=ComBuffer[6];
270 4 Status=CheckMad3(§or_n);
271 4 if(Status!=MI_OK) return;
272 4 Read_Ram(0x0010,wdtkey,6);
273 4 Status=MF1_authkey(PICC_AUTHENT1A,wdtkey,60); //2003.1.15
274 4 if(Status==MI_OK)
275 4 {
276 5 block_n=(sector_n<<2);
277 5 for(i=0;i<3;i++)
278 5 {
279 6 Status=MF1_read_key(PICC_AUTHENT1A,block_n+i,Auth_code+(i<<4),wdtkey);
280 6 if(Status!=MI_OK) break;
281 6 }
282 5 }
283 4 }
284 3 }
285 2 if(Status==MI_OK) SendResponse(0x01,6,snr);
286 2 else SendResponse(0x80,6,snr);
287 2
288 2 break;
289 2
290 2 case 0x38: /* close card */
291 2 Status=Mf500PiccHalt();
292 2 if(Status==MI_OK)
293 2 {
294 3 SendResponse(0x01,1,buf);
295 3 }
296 2 else
297 2 {
298 3 SendResponse(0x80,1,buf);
299 3 }
300 2
301 2 break;
302 2
303 2 case 0xc1: /* change baudrate */
304 2 SendResponse(0x01,1,buf);
305 2 SetBaud(ComBuffer[3]);
306 2 break;
307 2
308 2 case 0x32: /* read block */
309 2
310 2 sector_n=ComBuffer[4]>>2; /* sector no. */
311 2 block_n=ComBuffer[4]; /* block no. */
312 2 if(ComBuffer[3]==0x01)
313 2 {
314 3 key_type=PICC_AUTHENT1B;
315 3 }
316 2 else key_type=PICC_AUTHENT1A;
317 2 Status=MF1_auth(key_type,sector_n,block_n);
318 2 if(Status==MI_OPEN_ERROR)
319 2 {
320 3 SendResponse(0x00,1,buf);
321 3 return;
322 3 }
323 2 if(Status==MI_AUTH_ERROR)
C51 COMPILER V4.01, COMMTRAN 19/08/04 14:33:24 PAGE 6
324 2 {
325 3 SendResponse(0x81,1,buf);
326 3 return;
327 3 }
328 2
329 2 Status=MF1_read(key_type,block_n,buf);
330 2
331 2 if(Status==MI_OK)
332 2 {
333 3 SendResponse(0x01,17,buf);
334 3 }
335 2 else
336 2 {
337 3 SendResponse(0x80,1,buf);
338 3 }
339 2
340 2 break;
341 2
342 2 case 0x33: // write block
343 2 sector_n=ComBuffer[4]>>2; // sector no.
344 2 block_n=ComBuffer[4]; // block no.
345 2
346 2 if(ComBuffer[3]==0x01)
347 2 {
348 3 key_type=PICC_AUTHENT1B;
349 3 }
350 2 else key_type=PICC_AUTHENT1A;
351 2
352 2 Status=MF1_auth(key_type,sector_n,block_n);
353 2
354 2 if(Status==MI_OPEN_ERROR)
355 2 {
356 3 SendResponse(0x00,1,buf);
357 3 return;
358 3 }
359 2 if(Status==MI_AUTH_ERROR)
360 2 {
361 3 SendResponse(0x81,1,buf);
362 3 return;
363 3 }
364 2
365 2 Status=MF1_write(key_type,block_n,ComBuffer+5);
366 2
367 2 if(Status==MI_OK)
368 2 {
369 3 SendResponse(0x01,1,buf);
370 3 }
371 2 else
372 2 {
373 3 SendResponse(0x80,1,buf);
374 3 }
375 2 break;
376 2
377 2 case 0x41: /*open more cards*/
378 2 for(i=0;i<10;i++)
379 2 {
380 3 Status=Mf500PiccRequest(PICC_REQIDL,buf);
381 3 if(Status==MI_OK) break;
382 3 }
383 2 if(Status!=MI_OK)
384 2 {
385 3 SendResponse(0x00,1,buf);
386 3 return;
387 3 }
388 2 Status=Mf500PiccAnticoll (0,snr);
389 2 if(Status==MI_OK)
C51 COMPILER V4.01, COMMTRAN 19/08/04 14:33:24 PAGE 7
390 2 {
391 3 Status=Mf500PiccSelect(snr,buf);
392 3 if(Status==MI_OK)
393 3 {
394 4 SendResponse(0x01,5,snr);
395 4 return;
396 4 }
397 3 }
398 2 SendResponse(0x80,1,buf);
399 2 break;
400 2
401 2 case 0x42: /*read m_block*/
402 2
403 2 sector_n=ComBuffer[4]>>2; /* sector no. */
404 2 block_n=ComBuffer[4]; /* block no. */
405 2 if(ComBuffer[3]==0x01)
406 2 {
407 3 key_type=PICC_AUTHENT1B;
408 3 }
409 2 key_type=PICC_AUTHENT1A;
410 2 Status=Mf500PiccAuth(key_type,sector_n,block_n);
411 2 if(Status==MI_OK)
412 2 {
413 3 Status=Mf500PiccRead(block_n,buf);
414 3 if(Status==MI_OK)
415 3 {
416 4 SendResponse(0x01,17,buf);
417 4 }
418 3 else
419 3 {
420 4 SendResponse(0x80,1,buf);
421 4 }
422 3 }
423 2 else
424 2 {
425 3 SendResponse(0x81,1,buf);
426 3 }
427 2
428 2 break;
429 2
430 2 case 0x43: /*write m_block*/
431 2
432 2 sector_n=ComBuffer[4]>>2; /* sector no. */
433 2 block_n=ComBuffer[4]; /* block no. */
434 2
435 2 if(ComBuffer[3]==0x01)
436 2 {
437 3 key_type=PICC_AUTHENT1B;
438 3 }
439 2 key_type=PICC_AUTHENT1A;
440 2 Status=Mf500PiccAuth(key_type,sector_n,block_n);
441 2 if(Status==MI_OK)
442 2 {
443 3 Status=Mf500PiccWrite(block_n,ComBuffer+5);
444 3 if(Status==MI_OK)
445 3 {
446 4 SendResponse(0x01,1,buf);
447 4 }
448 3 else
449 3 {
450 4 SendResponse(0x80,1,buf);
451 4 }
452 3 }
453 2 else
454 2 {
455 3 SendResponse(0x81,1,buf);
C51 COMPILER V4.01, COMMTRAN 19/08/04 14:33:24 PAGE 8
456 3 }
457 2
458 2 break;
459 2 case 0x39: /* write file */
460 2 //"格式 60 xx 39 (文件标识2字节)(密钥类型1字节)(起始块号)(偏移地址)(数据长度)(数据)
461 2 // 0 1 2 3 4 5 6 7 8 9--
462 2 temp[0]=ComBuffer[7];
463 2 temp[1]=ComBuffer[8];
464 2 block_n=(sector_n<<2);
465 2 len_x=(ComBuffer[6]<<4);
466 2
467 2 if((len_x+temp[0]+temp[1])>48)
468 2 {
469 3 SendResponse(0x82,1,buf);//"超界错误
470 3 return;
471 3 }
472 2
473 2 for(i=0;i<3;i++) //
474 2 {
475 3 if(flag1)
476 3 {
477 4 Status=MF1_read_key(key_type,block_n+i,TempBuffer+(i<<4),key);
478 4 }
479 3 else Status=MF1_read(key_type,block_n+i,TempBuffer+(i<<4));
480 3 if(Status!=MI_OK) break;
481 3 }
482 2 if(Status==MI_OK)
483 2 {
484 3 memcpy(TempBuffer+len_x+temp[0],ComBuffer+9,temp[1]);
485 3 for(i=0;i<3;i++) //
486 3 {
487 4 if(flag1)
488 4 {
489 5 Status=MF1_write_key(key_type,block_n+i,TempBuffer+(i<<4),key);
490 5 }
491 4 else Status=MF1_write(key_type,block_n+i,TempBuffer+(i<<4));
492 4 if(Status!=MI_OK) break;
493 4 }
494 3 }
495 2 if(Status==MI_OK) SendResponse(0x01,1,buf);
496 2 else SendResponse(0x80,1,buf);
497 2 flag1=0;
498 2 break;
499 2
500 2
501 2 case 0x3b: /* read file */
502 2 //"格式 60 xx 3b (文件标识2字节)(密钥类型1字节)(起始块号)(块数量)
503 2 // 0 1 2 3 4 5 6 7
504 2
505 2 block_n=(sector_n<<2)+ComBuffer[6];
506 2 temp[0]=ComBuffer[7];
507 2
508 2 if((ComBuffer[6]+temp[0])>3)
509 2 {
510 3 SendResponse(0x82,1,buf);
511 3 return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -