alNo(4bytes)
1411.//寻卡?防冲突?选择卡返回卡类型?2bytes?+卡序列号(4bytes) 1412.status=M500PiccCommonRequest(RevBuffer[1],&RevBuffer[2]); 1413.if(status!=0)/*寻卡指令?应答信息*/ 1414.{/*寻卡不成功*/
1415.status=M500PiccCommonRequest(RevBuffer[1],&RevBuffer[2]);/*再次寻卡*/
1416.if(status!=0)
1417.{/*寻卡还是不成功*/ 1418.
1419.RevBuffer[0]=1;
1420.RevBuffer[1]=status;/*做出应答信息给上位机*/ 1421.break; 1422.} 1423.} 1424.
1425.if(RevBuffer[2]==2)//返回信息 1426.cardtype=mifarepro;//MifarePro卡 1427.elseif(RevBuffer[2]==4)
1428.{cardtype=mifare1;//MifareOne卡 1429. 1430.}
1431.elseif(RevBuffer[2]==16)
1432.cardtype=mifarelight;//MifareLight卡 1433.else
1434.cardtype=unknowncard; 1435.
1436.RevBuffer[0]=3;
1437.RevBuffer[1]=status;/*做出应答信息给上位机*/ 1438.
1439.break; 1440.
1441.case3://防冲突读卡的系列号MLastSelectedSnr 1442.{status=M500PiccCascAnticoll(0,&RevBuffer[2]); 1443.status=0;
1444.if(status!=0) 1445.{/*反冲突失败*/ 1446.RevBuffer[0]=1;
1447.RevBuffer[1]=status;/*做出失败的应答信息给上位机*/ 1448.
1449.break; 1450.}
1451./*反冲突成功*/
1452.memcpy(MLastSelectedSnr,&RevBuffer[2],4);/*存储序列号*/
1453.RevBuffer[0]=5;
1454.RevBuffer[1]=status;/*做出成功的应答信息给上位机*/ 1455. 1456.}
1457.break; 1458.
1459.case4://选择卡SelectCard
1460.status=M500PiccCascSelect(MLastSelectedSnr,&RevBuffer[2]); 1461.
1462.if(status!=MI_OK) 1463.{
1464.RevBuffer[0]=1;
1465.RevBuffer[1]=status;/*做出失败的应答信息给上位机*/ 1466.break; 1467.}
1468.RevBuffer[0]=3;
1469.RevBuffer[1]=status;/*做出成功的应答信息给上位机*/ 1470.
1471.break;
1472.case5://KeyloadingintotheMFRC500'sEEPROM 1473.//校验卡密码(E2)
1474.status=M500PiccAuthE2(RevBuffer[1],MLastSelectedSnr,RevBuffer[2],RevBuffer[3]);
1475.RevBuffer[0]=1;/*入口参数?AUTH_MODE:A/B卡型号?SNR:卡序列号?KEYNR:密钥所在EE扇区数?BLOCK:密钥所 在卡数据块*/
1476.RevBuffer[1]=status; 1477.break;
1478.case6://KeyloadingintotheMFRC500'sEEPROM 1479.//下载密码(E2)
1480.status=M500PcdLoadKeyE2(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);
1481.RevBuffer[0]=1;
1482.RevBuffer[1]=status; 1483.break;
1484.case7://AuthenticationwithdirectkeyloadingfromtheuC 1485.//直接校验密码
1486.memcpy(&RevBuffer[9],&RevBuffer[3],6);
1487.M500HostCodeKey(&RevBuffer[9],&RevBuffer[3]);
1488.status=M500PiccAuthKey(RevBuffer[1],MLastSelectedSnr,&RevBuffer[3],RevBuffer[2]);
1489.RevBuffer[0]=1;/*入口参数?AUTH_MODE:A/B卡型号?SNR:卡序列号?KEYNR:密钥所在RAM地址?BLOCK:密钥所在 卡数据块*/
1490.RevBuffer[1]=status; 1491.break;
1492.case8://Readthemifarecard 1493.//读卡
1494.status=M500PiccRead(RevBuffer[1],&RevBuffer[2]); 1495.if(status==0) 1496.{
1497.if(cardtype==mifare1||cardtype==mifarepro)
1498.RevBuffer[0]=17;/*卡类型决定一次能读出的数据个数*/ 1499.elseif(cardtype==1)
1500.RevBuffer[0]=9;/*一次读出9个*/ 1501.else
1502.RevBuffer[0]=16;/*一次读出16个?MIFARE1?*/ 1503.} 1504.else 1505.{
1506.RevBuffer[0]=1; 1507.}
1508.RevBuffer[1]=status; 1509.break;
1510.case9://Writethemifarecard 1511.//写卡下载密码
1512.status=M500PiccWrite(RevBuffer[1],&RevBuffer[2]); 1513.RevBuffer[0]=1;
1514.RevBuffer[1]=status; 1515.break;
1516.case10://写卡改变卡内EEROM中数据块中的内容
1517.status=M500PiccValue(RevBuffer[1],RevBuffer[2],&RevBuffer[3],RevBuffer[7]);
1518.RevBuffer[0]=1;/*入口参数?三种命令?自增?自减?改变??卡块地址?要写入的值?卡块地址*/ 1519.RevBuffer[1]=status; 1520.break;
1521.case12://参数设置
1522.RevBuffer[0]=1;//contact 1523.RevBuffer[1]=0; 1524.break; 1525.} 1526.} 1527.
1528.///////////////////////////////////////////////////////////////////////
1529.//主函数
1530.///////////////////////////////////////////////////////////////
////////
1531.voidmain(void) 1532.{
1533.init(); 1534.while(1) 1535.{
1536.if(CmdValid) 1537.{
1538.CmdValid=FALSE;
1539.cmd_execution();//进入IC卡处理程序 1540.CALL_isr_UART(); 1541.} 1542.} 1543.}