📄 rc531_10月10日.c
字号:
Read_FIFO(buffer);
temp=*buffer;
switch(temp)
{
case 0x00 :
return(RC531_NOTAUTHERR);
case 0x04:
return(RC531_EMPTY);
case 0x0a:
break;
case 0x01:
return(RC531_CRCERR);
case 0x05:
return(RC531_PARITYERR);
default:
return(RC531_RESTERR);
}
for (i=0;i<4;i++)
buffer[i]=0x00;
temp=Command_Send(4,buffer,Transmit);
if (temp==FALSE)
return(RC531_RESTERR);
return(RC531_OK);
}
/********************************************************************************************************/
/*名称: MIF_Transfer */
/*功能: 该函数实现MIFARE卡电子钱包保存操作 */
/* */
/*输入: */
/* Block_Adr: 块地址 */
/* */
/*输出: */
/* RC531_NOTAGERR: 无卡 */
/* RC531_BYTECOUNTERR: 接收字节错误 */
/* RC531_NOTAUTHERR: 未经权威认证 */
/* RC531_EMPTY: 数据溢出错误 */
/* RC531_CRCERR: CRC校验错 */
/* RC531_PARITYERR: 奇偶校验错 */
/* RC531_TRANSERR: 卡片恢复,备份操作失败 */
/* RC531_OK: 应答正确 */
/********************************************************************************************************/
char MIF_Transfer(char Block_Adr)
{
char temp;
buffer[0]=RF_CMD_TRANSFER;
buffer[1]=Block_Adr;
temp=Command_Send(2,buffer,Transceive);
if (temp==FALSE)
return(RC531_NOTAGERR);
temp=rc531_register_read(FIFO_Length);
if (temp==0)
return(RC531_BYTECOUNTERR);
Read_FIFO(buffer);
temp=*buffer;
switch(temp)
{
case 0x00 :
return(RC531_NOTAUTHERR);
case 0x04:
return(RC531_EMPTY);
case 0x0a:
return(RC531_OK);
case 0x01:
return(RC531_CRCERR);
case 0x05:
return(RC531_PARITYERR);
default:
return(RC531_TRANSERR);
}
}
/********************************************************************************************************/
/*名称: HL_Initial */
/*功能: 该函数实现高级初始化命令 */
/* */
/*输入: */
/* buff: 待写入初始化数据的首地址 */
/* Secnr: 扇区号 */
/* Block_Adr: 块地址 */
/* */
/*输出: */
/* 操作状态码 */
/********************************************************************************************************/
char HL_Initial(char *buff,char Block_Adr,char Mode)
{
char temp;
Secnr=Block_Adr/4;
//Halt
MIF_Halt();
//Request
temp=Request(RF_CMD_REQUEST_ALL );
if(temp!=RC531_OK)
return(RC531_REQERR);
//AntiCol and Select
temp=AntiColl();
if(temp!=RC531_OK)
return(RC531_ANTICOLLERR);
temp=Select_Card();
if(temp!=RC531_OK)
return(RC531_SELERR);
//LoadKey
Load_keyE2_CPY(Secnr,Mode);
//Authentication
temp=Authentication(UID,Secnr,Mode);
if(temp!=RC531_OK)
return(RC531_AUTHERR);
//Initial
temp=MIF_Initival(buff,Block_Adr);
if(temp!=RC531_OK)
return(RC531_INTIVALERR);
//Halt
MIF_Halt();
return(RC531_OK);
}
/********************************************************************************************************/
/*名称: HL_Read */
/*功能: 该函数实现高级读命令 */
/* */
/*输入: */
/* Secnr: 扇区号 */
/* Block_Adr: 块地址 */
/* */
/*输出: */
/* 操作状态码 */
/* 读出数据存于buffer中 */
/********************************************************************************************************/
char HL_Read(char *buff,char Block_Adr,char Mode)
{
char temp;
Secnr=Block_Adr/4;
//Halt
MIF_Halt();
//Request
temp=Request(RF_CMD_REQUEST_STD);
if(temp!=RC531_OK)
return(RC531_REQERR);
//AntiCol and Select
temp=AntiColl();
if(temp!=RC531_OK)
return(RC531_ANTICOLLERR);
temp=Select_Card();
if(temp!=RC531_OK)
return(RC531_SELERR);
//LoadKey
Load_keyE2_CPY(Secnr,Mode);
//Authentication
temp=Authentication(UID,Secnr,Mode);
if(temp!=RC531_OK)
return(RC531_AUTHERR);
//Read
temp=MIF_READ(buff,Block_Adr);
//Halt
MIF_Halt();
if(temp!=RC531_OK)
return(RC531_READERR);
else
return(RC531_CMD_ERR);
}
/********************************************************************************************************/
/*名称: HL_Write */
/*功能: 该函数实现高级写命令 */
/* */
/*输入: */
/* buff: 待写入数据的首地址 */
/* Secnr: 扇区号 */
/* Block_Adr: 块地址 */
/* */
/*输出: */
/* 操作状态码 */
/********************************************************************************************************/
char HL_Write(char *buff,char Block_Adr,char Mode)
{
char temp;
Secnr=Block_Adr/4;
//Halt
MIF_Halt();
//Request
temp=Request(RF_CMD_REQUEST_STD );
if(temp!=RC531_OK)
return(RC531_REQERR);
//AntiCol and Select
temp=AntiColl();
if(temp!=RC531_OK)
return(RC531_ANTICOLLERR);
temp=Select_Card();
if(temp!=RC531_OK)
return(RC531_SELERR);
//LoadKey
Load_keyE2_CPY(Secnr,Mode);
//Authentication
temp=Authentication(UID,Secnr,Mode);
if(temp!=RC531_OK)
return(RC531_AUTHERR);
//Write
temp=MIF_Write(buff,Block_Adr);
//Halt
MIF_Halt();
if(temp!=RC531_OK)
return(RC531_WRITEERR);
else
return(RC531_CMD_ERR);
}
/********************************************************************************************************/
/*名称: HL_Increment */
/*功能: 该函数实现高级增款命令 */
/* */
/*输入: */
/* buff: 待写入增款值的首地址 */
/* Secnr: 扇区号 */
/* Block_Adr: 块地址 */
/* */
/*输出: */
/* 操作状态码 */
/********************************************************************************************************/
char HL_Increment(char *buff,char Block_Adr,char Mode)
{
char temp;
Secnr=Block_Adr/4;
//Halt
MIF_Halt();
//Request
temp=Request(RF_CMD_REQUEST_STD );
if(temp!=RC531_OK)
return(RC531_REQERR);
//AntiCol and Select
temp=AntiColl();
if(temp!=RC531_OK)
return(RC531_ANTICOLLERR);
temp=Select_Card();
if(temp!=RC531_OK)
return(RC531_SELERR);
//LoadKey
Load_keyE2_CPY(Secnr,Mode);
//Authentication
temp=Authentication(UID,Secnr,Mode);
if(temp!=RC531_OK)
return(RC531_AUTHERR);
//Increment
temp=MIF_Increment(buff,Block_Adr);
if(temp!=RC531_OK)
return(RC531_INCRERR);
//Transfer
temp=MIF_Transfer(Block_Adr);
//Halt
MIF_Halt();
if(temp!=RC531_OK)
return(RC531_TRANSERR);
else
return(RC531_CMD_ERR);
}
/********************************************************************************************************/
/*名称: HL_Decrement */
/*功能: 该函数实现高级扣款命令 */
/* */
/*输入: */
/* buff: 待写入扣款值的首地址 */
/* Secnr: 扇区号 */
/* Block_Adr: 块地址 */
/* */
/*输出: */
/* 操作状态码 */
/********************************************************************************************************/
char HL_Decrement(char *buff,char Block_Adr,char Mode)
{
char temp;
Secnr=Block_Adr/4;
//Halt
MIF_Halt();
//Request
temp=Request(RF_CMD_REQUEST_STD );
if(temp!=RC531_OK)
return(RC531_REQERR);
//AntiCol and Select
temp=AntiColl();
if(temp!=RC531_OK)
return(RC531_ANTICOLLERR);
temp=Select_Card();
if(temp!=RC531_OK)
return(RC531_SELERR);
//LoadKey
Load_keyE2_CPY(Secnr,Mode);
//Authentication
temp=Authentication(UID,Secnr,Mode);
if(temp!=RC531_OK)
return(RC531_AUTHERR);
//decrement
temp=MIF_Decrement(buff,Block_Adr);
if(temp!=RC531_OK)
return(RC531_DECRERR);
//Transfer
temp=MIF_Transfer(Block_Adr);
//Halt
MIF_Halt();
if(temp!=RC531_OK)
return(RC531_TRANSERR);
else
return(RC531_CMD_ERR);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -