📄 reader.c
字号:
CMD_status=SetUserInfo(&u_ram.host.RxBuffer[5]);
if(CMD_status==0) ReturnStatus(inf_ACK);
else ReturnStatus(Fail);
break;
case CMD_Get_User_Info: //上传用户信息
CMD_status=read_Flash(USERINFO,&u_ram.host.RxBuffer[6],32);
if(CMD_status) ReturnStatus(Fail);
TxOut(32,CMD_status,&u_ram.host.RxBuffer[6]);
break;
case CMD_ReadFlash: //读取Flash (系统配置参数),调试用
R_Flash();
break;
case CMD_WriteFlash: //写数据到Flash
CMD_status=Save_Data();
ReturnStatus(CMD_status);
break;
case CMD_Lcd_Display: //LCD 显示命令
DisplayLcd(cls,16,u_ram.host.RxBuffer[6]);
DisplayLcd(&u_ram.host.RxBuffer[7],u_ram.host.RxBuffer[5],u_ram.host.RxBuffer[6]);
ReturnStatus(inf_ACK);
break;
case CMD_Lcd_Manufacturer: // 厂商信息
CMD_status=write_Flash(s_Manufacturer, &u_ram.host.RxBuffer[5],16);//sst Flash 扇区写入
CMD_status= read_Flash(s_Manufacturer,display1,16);
DisplayLcd(cls,16,0);
DisplayLcd(display1,16,0);
DisplayLcd(cls,16,0x40);
DisplayLcd(display4,16,0x40);
if(CMD_status==0) ReturnStatus(inf_ACK);
else ReturnStatus(Fail);
break;
case CMD_Get_Key: //读取键盘数据
getkeys();
break;
case CMD_SofewareReset:
// SFCF=SFCF | 0x02;
// WDTD=0xF0;
// WDTC=0x1F;
while(1);
break;
case CMD_GetVersionNum: //读取硬件版本信息
TxOut(12,inf_ACK,&Version[0]);
break;
case CMD_WeigandMode: //WEIGAND 输出格式设定 for cv5600
Display_Flag=1;
SecondCNT_t1=1900;
wiegand_mode = u_ram.host.RxBuffer[5+0]; //WIEGAND输出格式
wiegand_block = u_ram.host.RxBuffer[5+1]; //读MIFARE块号
wiegand_requst = u_ram.host.RxBuffer[5+2]; //请求模式
// wiegand_io_m = u_ram.host.RxBuffer[5+3]; //IO 输出模式
weigandFlag = u_ram.host.RxBuffer[5+3];
//u_ram.host.RxBuffer[4]; //0x55
//u_ram.host.RxBuffer[5]; //0xaa
key_outmode = u_ram.host.RxBuffer[5+6]; //key mode
csn_outmode = u_ram.host.RxBuffer[5+7]; //csn mode
iso15693block = u_ram.host.RxBuffer[5+8];
CMD_status=write_Flash(S_WIEGAND_MODE,&u_ram.host.RxBuffer[5],10) ;
if(CMD_status==0) ReturnStatus(inf_ACK);
else ReturnStatus(Fail);
break;
#if (MCTYPE!=CV5600S)
case CMD_MF_Request: //Request
if(u_ram.host.RxBuffer[5] == 0x26 || u_ram.host.RxBuffer[5] == 0x52)
{
CMD_status=Mf500PiccCommonRequest(u_ram.host.RxBuffer[5],&u_ram.host.RxBuffer[6]);
if(CMD_status !=0x00)
CMD_status=Mf500PiccCommonRequest(u_ram.host.RxBuffer[5],&u_ram.host.RxBuffer[6]);
if(CMD_status == 0x00)
TxOut(2,CMD_status,&u_ram.host.RxBuffer[6]);
else
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;//inf_nCard;
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_PARITYERR) CMD_status=PARITY_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
}
else ReturnStatus(OutRange);
break;
case CMD_MF_Anticoll://14443A Anticoll
CMD_status=Mf500PiccCascAnticoll(PICC_ANTICOLL1,&u_ram.host.RxBuffer[5]);
if(!CMD_status)
TxOut(5,CMD_status,&u_ram.host.RxBuffer[5]);
else
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status == MI_SERNRERR) CMD_status=MF_SERNRERR;//
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_PARITYERR) CMD_status=PARITY_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
break;
case CMD_MF_Select: //14443A Select
CMD_status=Mf500PiccCascSelect(PICC_ANTICOLL1,&u_ram.host.RxBuffer[5]);
if(!CMD_status)
TxOut(4,CMD_status,&u_ram.host.RxBuffer[5]);
else
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status == MI_CRCERR) CMD_status=CRC_ERR;
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_PARITYERR) CMD_status=PARITY_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
// else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
break;
case CMD_MF_Anticoll2://14443A Anticoll
CMD_status=Mf500PiccCascAnticoll(PICC_ANTICOLL2,&u_ram.host.RxBuffer[5]);
if(!CMD_status)
TxOut(5,CMD_status,&u_ram.host.RxBuffer[5]);
else
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status == MI_SERNRERR) CMD_status=MF_SERNRERR;//
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_PARITYERR) CMD_status=PARITY_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
break;
case CMD_MF_Select2: //14443A Select
CMD_status=Mf500PiccCascSelect(PICC_ANTICOLL2,&u_ram.host.RxBuffer[5]);
if(!CMD_status)
TxOut(4,CMD_status,&u_ram.host.RxBuffer[5]);
else
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status == MI_CRCERR) CMD_status=CRC_ERR;
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_PARITYERR) CMD_status=PARITY_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
// else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
break;
case CMD_MF_Anticoll3://14443A Anticoll
CMD_status=Mf500PiccCascAnticoll(PICC_ANTICOLL3,&u_ram.host.RxBuffer[5]);
if(!CMD_status)
TxOut(5,CMD_status,&u_ram.host.RxBuffer[5]);
else
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status == MI_SERNRERR) CMD_status=MF_SERNRERR;//
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_PARITYERR) CMD_status=PARITY_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
break;
case CMD_MF_Select3: //14443A Select
CMD_status=Mf500PiccCascSelect(PICC_ANTICOLL3,&u_ram.host.RxBuffer[5]);
if(!CMD_status)
TxOut(4,CMD_status,&u_ram.host.RxBuffer[5]);
else
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status == MI_CRCERR) CMD_status=CRC_ERR;
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_PARITYERR) CMD_status=PARITY_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
// else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
break;
case CMD_MF_Authentication: //Authentication
CMD_status=MRC500PiccAuthentication(u_ram.host.RxBuffer[5],&u_ram.host.RxBuffer[6],u_ram.host.RxBuffer[10]);
if(CMD_status == MI_OK) CMD_status=inf_ACK;
else if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status == MI_AUTHERR) CMD_status=MF_AUTHERR;
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
break;
case CMD_MF_Read: //MF_Read
CMD_status=u_ram.host.RxBuffer[5] % 4 + u_ram.host.RxBuffer[6];
if(CMD_status < 5)
{
CMD_status=Mf500PiccMultiRead(u_ram.host.RxBuffer[5],u_ram.host.RxBuffer[6],&u_ram.host.RxBuffer[7]);
if(!CMD_status)
TxOut(u_ram.host.RxBuffer[6]*16,CMD_status,&u_ram.host.RxBuffer[7]);
else
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status==MI_VALERR) CMD_status = MF_VAL;//
else if(CMD_status==MI_NOTAUTHERR) CMD_status = MF_NOAUTHERR;//
else if(CMD_status == MI_CRCERR) CMD_status = CRC_ERR;
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_PARITYERR) CMD_status=PARITY_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
}
else ReturnStatus(OutRange);
break;
case CMD_MF_Write: //MF_Write
CMD_status=u_ram.host.RxBuffer[5] % 4 + u_ram.host.RxBuffer[6];
if(CMD_status < 5)
{
CMD_status=Mf500PiccMultiWrite(u_ram.host.RxBuffer[5],u_ram.host.RxBuffer[6],&u_ram.host.RxBuffer[7]);
if(CMD_status == MI_OK) CMD_status=inf_ACK;
else if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status==MI_NOTAUTHERR) CMD_status = MF_NOAUTHERR;//
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
else ReturnStatus(OutRange);
break;
case CMD_MF_Transfer: //Transfer
CMD_status=Mf500PiccTransfer(u_ram.host.RxBuffer[5]);
if(CMD_status == MI_OK) CMD_status=inf_ACK;
else if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status==MI_NOTAUTHERR) CMD_status = MF_NOAUTHERR;//
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
break;
case CMD_MF_Value: //电子钱包功能
if(u_ram.host.RxBuffer[5] == PICC_DECREMENT || u_ram.host.RxBuffer[5] == PICC_INCREMENT || u_ram.host.RxBuffer[5] == PICC_RESTORE)
{
CMD_status=Mf500PiccValue(u_ram.host.RxBuffer[5],u_ram.host.RxBuffer[6],&u_ram.host.RxBuffer[7]);
if(CMD_status == MI_OK) CMD_status=inf_ACK;
else if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status==MI_NOTAUTHERR) CMD_status = MF_NOAUTHERR;//
else if(CMD_status==MI_VALERR) CMD_status = MF_VAL;//
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
else ReturnStatus(OutRange);
break;
#endif
case CMD_MF_LOADKEY: //装载密钥
CMD_status=MRC500LoadKey1(&u_ram.host.RxBuffer[5]);
if(CMD_status) CMD_status=MRC500LoadKey1(&u_ram.host.RxBuffer[5]);
if(CMD_status == MI_OK) CMD_status=inf_ACK;
else if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
break;
case CMD_MF_LOADEEKEY: //从RC500内部掉用密码。
CMD_status=MRC500LoadKey2(u_ram.host.RxBuffer[5],u_ram.host.RxBuffer[6]);
if(CMD_status == MI_OK) CMD_status=inf_ACK;
else if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
break;
case CMD_MF_LOADKEY2EE: //将密钥存入RC500 EEPROM内
if (u_ram.host.RxBuffer[6]<16)
{
CMD_status=LoadKeyMRC500EE(u_ram.host.RxBuffer[5],u_ram.host.RxBuffer[6],&u_ram.host.RxBuffer[7]);
if(CMD_status == MI_OK) CMD_status=inf_ACK;
else if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
else
{
ReturnStatus(OutRange);
}
break;
case CMD_MF_Halt: //14443 Halt
ReturnStatus(Mf500PiccHalt());
break;
case CMD_MF_PowerDown: //读卡器进入掉电模式
EA=1;
ReturnStatus(Mf500PiccPowerDown());
while (TxFlag1 == 0);
delay_1ms(10);
TxFlag1=0;
RD2IDLEFlag=1;
IE=0x98;
TMOD = 0x11;
TH1=0x4C;
TL1=00;
TR1=1;
while (RD2IDLEFlag)
{
// WDTD=0x87;
// WDTC=0x1F; //Reset watchdog timer
}
TR1=0;
IE=0x93;
TMOD = 0x01;
Mf500PiccPowerWake();
break;
case CMD_MF_RF: //关闭天线
PcdRfReset(u_ram.host.RxBuffer[5]);
ReturnStatus(inf_ACK);
break;
case CMD_MF_RW_ConfigReg: //内部调试命令 读写RC500 register
if(u_ram.host.RxBuffer[5] == 0x00)//for write data to configer register
{
XBYTE[ChipRC632+u_ram.host.RxBuffer[6]]=u_ram.host.RxBuffer[7];
ReturnStatus(inf_ACK);
}
else if(u_ram.host.RxBuffer[5]==0x01)//for read configer register
{
u_ram.host.RxBuffer[7]= XBYTE[ChipRC632+u_ram.host.RxBuffer[6]];
TxOut(1,0,&u_ram.host.RxBuffer[7]);
}
else ReturnStatus(OutRange);
break;
case CMD_ReadE2: //读RC500 E2ROM
HostBuffer=u_ram.host.RxBuffer[6] & 0xFFFF;
HostBuffer=HostBuffer >> 8;
HostBuffer=HostBuffer + u_ram.host.RxBuffer[5];
CMD_status=PcdReadE2(HostBuffer,u_ram.host.RxBuffer[7],&u_ram.host.RxBuffer[8]);
if(CMD_status)
{
if(CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
else
TxOut(u_ram.host.RxBuffer[7],inf_NACK,&u_ram.host.RxBuffer[8]);
break;
case CMD_WriteE2: //写RC500 E2ROM
HostBuffer=u_ram.host.RxBuffer[6] & 0xFFFF;
HostBuffer=HostBuffer >> 8;
HostBuffer=HostBuffer + u_ram.host.RxBuffer[5];
CMD_status=PcdWriteE2(HostBuffer,u_ram.host.RxBuffer[7],&u_ram.host.RxBuffer[8]);
if(CMD_status)
{
if(CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
else ReturnStatus(inf_ACK);
break;
case CMD_MF_HLRead: //高阶读卡操作
CMD_status=MF_HL_Auth(u_ram.host.RxBuffer[5],&u_ram.host.RxBuffer[8],u_ram.host.RxBuffer[7]);
if(CMD_status)
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
break;
}
CMD_status=Mf500PiccMultiRead(u_ram.host.RxBuffer[7],u_ram.host.RxBuffer[6],&u_ram.host.RxBuffer[12]);
if(!CMD_status)
{
TxOut(u_ram.host.RxBuffer[6]*16+4,0,&u_ram.host.RxBuffer[8]);
}
else
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if(CMD_status==MI_NOTAUTHERR) CMD_status = MF_NOAUTHERR;
else if(CMD_status == MI_CRCERR) CMD_status = CRC_ERR;
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_PARITYERR) CMD_status=PARITY_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
break;
case CMD_MF_HLWrite: //高阶写卡命令
CMD_status=MF_HL_Auth(u_ram.host.RxBuffer[5],&u_ram.host.RxBuffer[8],u_ram.host.RxBuffer[7]);
if(CMD_status)
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
break;
}
CMD_status=Mf500PiccMultiWrite(u_ram.host.RxBuffer[7],u_ram.host.RxBuffer[6],&u_ram.host.RxBuffer[12]);
if(!CMD_status)
TxOut(4,CMD_status,&u_ram.host.RxBuffer[8]);
else
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else if (CMD_status == MI_ACCESSTIMEOUT) CMD_status=TMO_ERR;
else if (CMD_status == MI_BITCOUNTERR) CMD_status=BITCNT_ERR;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
}
break;
case CMD_MF_HLDecrement: //减值操作
CMD_status=MF_HL_Auth(u_ram.host.RxBuffer[5],&u_ram.host.RxBuffer[8],u_ram.host.RxBuffer[7]*4);
if(CMD_status)
{
if(CMD_status == MI_NOTAGERR) CMD_status=inf_nCard;
else CMD_status=inf_NACK;
ReturnStatus(CMD_status);
break;
}
CMD_status=Mf500PiccValue(0xC0,u_ram.host.RxBuffer[7]*4+1,&u_ram.host.RxBuffer[12]);
if(CMD_status == MI_OK)
{
CMD_status=Mf500PiccTransfer(u_ram.host.RxBuffer[7]*4+1);
if(CMD_status == MI_OK) //Restore Value Block
CMD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -