📄 main.lst
字号:
260 //响应上位机发送的A卡锁定命令
261 /////////////////////////////////////////////////////////////////////
262 void ComSelect()
263 {
264 1 if (MI_OK == PcdSelect(&g_cReceBuf[6], &g_cReceBuf[0]))
265 1 { AnswerOk(&g_cReceBuf[0], 1); }
266 1 else
267 1 { AnswerErr(FAULT10); }
268 1 }
269
270 /////////////////////////////////////////////////////////////////////
271 //响应上位机发送的A卡休眠命令
272 /////////////////////////////////////////////////////////////////////
273 void ComHlta()
274 {
275 1 if (MI_OK == PcdHalt())
276 1 { AnswerCommandOk(); }
277 1 else
278 1 { AnswerErr(FAULT10); }
279 1 }
280
281 /////////////////////////////////////////////////////////////////////
282 //响应上位机发送的A卡验证密钥命令
283 /////////////////////////////////////////////////////////////////////
284 void ComAuthentication()
285 {
286 1 char status = MI_COM_ERR;
287 1 unsigned char *pkeys,*pSNR;
288 1 pkeys = &g_cReceBuf[20];
289 1 pSNR = &g_cSNR;
290 1 if (MI_OK == ChangeCodeKey(&g_cReceBuf[8],pkeys)) //转换密钥格式
291 1 {
292 2 if (MI_OK == PcdAuthKey(pkeys)) //传送密钥到RC500FIFO
293 2 {
294 3 status = PcdAuthState(g_cReceBuf[6], g_cReceBuf[7], pSNR); //验证密钥
295 3 }
296 2 }
297 1 if (status == MI_OK)
298 1 { AnswerCommandOk(); }
299 1 else
300 1 { AnswerErr(FAULT22); }
301 1 }
302
303 /////////////////////////////////////////////////////////////////////
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 6
304 //响应上位机读M1卡命令
305 /////////////////////////////////////////////////////////////////////
306 void ComM1Read()
307 {
308 1 if (MI_OK == PcdRead(g_cReceBuf[6], &g_cReceBuf[0]))
309 1 { AnswerOk(&g_cReceBuf[0], 16); }
310 1 else
311 1 { AnswerErr(FAULT23); }
312 1 }
313
314 /////////////////////////////////////////////////////////////////////
315 //响应上位机写M1卡命令
316 /////////////////////////////////////////////////////////////////////
317 void ComM1Write()
318 {
319 1 if (MI_OK == PcdWrite(g_cReceBuf[6], &g_cReceBuf[7]))
320 1 { AnswerCommandOk(); }
321 1 else
322 1 { AnswerErr(FAULT24); }
323 1 }
324
325 /////////////////////////////////////////////////////////////////////
326 //响应上位机初始化钱包命令
327 /////////////////////////////////////////////////////////////////////
328 void ComM1Initval()
329 {
330 1 g_cReceBuf[11]=~g_cReceBuf[7];g_cReceBuf[12]=~g_cReceBuf[8];
331 1 g_cReceBuf[13]=~g_cReceBuf[9];g_cReceBuf[14]=~g_cReceBuf[10];
332 1 g_cReceBuf[15]=g_cReceBuf[7];g_cReceBuf[16]=g_cReceBuf[8];
333 1 g_cReceBuf[17]=g_cReceBuf[9];g_cReceBuf[18]=g_cReceBuf[10];
334 1 g_cReceBuf[19]=g_cReceBuf[6];g_cReceBuf[20]=~g_cReceBuf[6];
335 1 g_cReceBuf[21]=g_cReceBuf[6];g_cReceBuf[22]=~g_cReceBuf[6];
336 1 if (MI_OK == PcdWrite(g_cReceBuf[6], &g_cReceBuf[7]))
337 1 { AnswerCommandOk(); }
338 1 else
339 1 { AnswerErr(FAULT24); }
340 1 }
341
342 /////////////////////////////////////////////////////////////////////
343 //响应上位机读钱包命令
344 /////////////////////////////////////////////////////////////////////
345 void ComM1Readval()
346 {
347 1 if (MI_OK == PcdRead(g_cReceBuf[6], &g_cReceBuf[0]))
348 1 { AnswerOk(&g_cReceBuf[0], 4); }
349 1 else
350 1 { AnswerErr(FAULT23); }
351 1 }
352
353 /////////////////////////////////////////////////////////////////////
354 //响应上位机扣款命令
355 /////////////////////////////////////////////////////////////////////
356 void ComM1Decrement()
357 {
358 1 if (MI_OK == PcdValue(PICC_DECREMENT, g_cReceBuf[6], &g_cReceBuf[7]))
359 1 { AnswerCommandOk(); }
360 1 else
361 1 { AnswerErr(FAULT24); }
362 1 }
363
364 /////////////////////////////////////////////////////////////////////
365 //响应上位机充值命令
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 7
366 /////////////////////////////////////////////////////////////////////
367 void ComM1Increment()
368 {
369 1 if (MI_OK == PcdValue(PICC_INCREMENT, g_cReceBuf[6], &g_cReceBuf[7]))
370 1 { AnswerCommandOk(); }
371 1 else
372 1 { AnswerErr(FAULT24); }
373 1 }
374
375 /////////////////////////////////////////////////////////////////////
376 //响应上位机M1卡回传命令
377 /////////////////////////////////////////////////////////////////////
378 void ComM1Restore()
379 {
380 1 if (MI_OK == PcdRestore(g_cReceBuf[6]))
381 1 { AnswerCommandOk(); }
382 1 else
383 1 { AnswerErr(FAULT23); }
384 1 }
385
386 /////////////////////////////////////////////////////////////////////
387 //响应上位机M1卡值传送命令
388 /////////////////////////////////////////////////////////////////////
389 void ComM1Transfer()
390 {
391 1 if (MI_OK == PcdTransfer(g_cReceBuf[6]))
392 1 { AnswerCommandOk(); }
393 1 else
394 1 { AnswerErr(FAULT24); }
395 1 }
396
397
398
399
400 /////////////////////////////////////////////////////////////////////
401 //响应上位机TYPEA卡高级复位命令
402 /////////////////////////////////////////////////////////////////////
403 void ComTypeARst()
404 {
405 1 unsigned char status,i;
406 1 i = (FSDI << 4) & 0xF0;
407 1 status = PcdRequest(g_cReceBuf[6], &g_cReceBuf[0]);
408 1
409 1 if (status != MI_OK)
410 1 { status = PcdRequest(g_cReceBuf[6], &g_cReceBuf[0]); }
411 1
412 1 if (status == MI_OK)
413 1 { status = PcdAnticoll(&g_cReceBuf[1]); }
414 1
415 1 if (status == MI_OK)
416 1 { status = PcdSelect(&g_cReceBuf[1], &g_cReceBuf[6]); }
417 1
418 1 if (status == MI_OK)
419 1 { status = MifareProRst(i, &g_cReceBuf[0], &g_cReceBuf[5]); }
420 1
421 1 if (status == MI_OK)
422 1 {
423 2 g_cFWI = g_cReceBuf[8]>>4; //0xff;//
424 2 g_cReceBuf[0] += 4;
425 2 g_cCidNad = 0;//(g_cReceBuf[9] & 0x03) << 2;
426 2 AnswerOk(&g_cReceBuf[1], g_cReceBuf[0]);
427 2 }
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 8
428 1 else
429 1 { AnswerErr(FAULT21); }
430 1 }
431
432 /////////////////////////////////////////////////////////////////////
433 //响应上位机ISO14443-4卡COS命令
434 /////////////////////////////////////////////////////////////////////
435 void ComTypeACOS()
436 {
437 1 g_cReceBuf[0] -= 5;
438 1 if (MI_OK == MifareProCom(g_cCidNad, g_cFWI, &g_cReceBuf[0], &g_cReceBuf[6]))
439 1 { AnswerOk(&g_cReceBuf[6], g_cReceBuf[0]); }
440 1 else
441 1 { AnswerErr(FAULT10); }
442 1 }
443
444
445 /////////////////////////////////////////////////////////////////////
446 //响应上位机T=CL卡退出激活状态命令
447 /////////////////////////////////////////////////////////////////////
448 void ComCL_Deselect()
449 {
450 1 if (MI_OK == CL_Deselect(0))
451 1 { AnswerCommandOk(); }
452 1 else
453 1 { AnswerErr(-1); }
454 1 }
455
456
457
458
459
460
461 /////////////////////////////////////////////////////////////////////
462 //正确执行完上位机指令,应答(无返回数据)
463 /////////////////////////////////////////////////////////////////////
464 void AnswerCommandOk()
465 {
466 1 unsigned char i,chkdata;
467 1 chkdata = 0;
468 1
469 1 TI = 0; //发送命令头
470 1 SBUF = 0xAA;
471 1 while (!TI);
472 1 TI = 0;
473 1 SBUF = 0xBB;
474 1 while (!TI);
475 1
476 1 TI = 0; //发送长度字
477 1 SBUF = 0x06;
478 1 while (!TI);
479 1 TI = 0;
480 1 SBUF = 0x00;
481 1 while (!TI);
482 1
483 1 TI = 0; //发送设备标识
484 1 SBUF = g_cIcdevH;
485 1 while (!TI);
486 1 if (g_cIcdevH == 0xAA)
487 1 {
488 2 TI = 0;
489 2 SBUF = 0;
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 9
490 2 while (!TI);
491 2 }
492 1 TI = 0;
493 1 SBUF = g_cIcdevL;
494 1 while (!TI);
495 1 if (g_cIcdevL == 0xAA)
496 1 {
497 2 TI = 0;
498 2 SBUF = 0;
499 2 while (!TI);
500 2 }
501 1
502 1 TI = 0; //发送命令码
503 1 i = (unsigned char)(g_cCommand & 0xFF);
504 1 SBUF = i;
505 1 chkdata ^= i;
506 1 while (!TI);
507 1
508 1 TI = 0; //发送命令码
509 1 i = (unsigned char)((g_cCommand >>8) & 0xFF);
510 1 SBUF = i;
511 1 chkdata ^= i;
512 1 while (!TI);
513 1
514 1 TI = 0; //发送状态字
515 1 SBUF = 0;
516 1 while (!TI);
517 1
518 1 TI = 0; //发送效验字
519 1 chkdata ^= g_cIcdevH^ g_cIcdevL;
520 1 SBUF = chkdata;
521 1 while (!TI);
522 1 if (chkdata == 0xAA)
523 1 {
524 2 TI = 0;
525 2 SBUF = 0;
526 2 while (!TI);
527 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -