⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rc531.c.txt

📁 C语言的 RC531
💻 TXT
📖 第 1 页 / 共 3 页
字号:
char MIF_Initival(char *buff,char Block_Adr) 
{ 
char temp; 
char i; 

for (i=0;i<4;i++) 
*(buff+4+i)=~(*(buff+i)); 
for (i=0;i<4;i++) 
*(buff+8+i)=*(buff+i); 
*(buff+12)=Block_Adr; 
*(buff+13)=~Block_Adr; 
*(buff+14)=Block_Adr; 
*(buff+15)=~Block_Adr; 
temp=MIF_Write(buff,Block_Adr); 
return(temp); 
} 
/********************************************************************************************************/ 
/*名称: MIF_private */ 
/*功能: 该函数实现MIFARE卡初始化值操作 */ 
/* */ 
/*输入: */ 
/* SecNR:需设置密码和数据格式的扇区号 */ 
/* */ 
/*输出: */ 
/* RC531_NOTAGERR: 无卡 */ 
/* RC531_BYTECOUNTERR: 接收字节错误 */ 
/* RC531_NOTAUTHERR: 未经权威认证 */ 
/* RC531_EMPTY: 数据溢出错误 */ 
/* RC531_CRCERR: CRC校验错 */ 
/* RC531_PARITYERR: 奇偶校验错 */ 
/* RC531_WRITEERR: 写卡块数据出错 */ 
/* RC531_OK: 应答正确 */ 
/********************************************************************************************************/ 
char MIF_private(char SecNR) 
{ 
char i,temp; 
char Key[12],Access_Bytes[16]; 
for(i=0;i<6;i++) 
{ Access_Bytes[i]=0x00; 
Access_Bytes[10+i]=0xff; 
} 
Access_Bytes[6]=0x80; 
Access_Bytes[7]=0xf7; 
Access_Bytes[8]=0x87; 
Access_Bytes[9]=0x00; 
for(i=0;i<12;i++) 
{ 
Key[i]=0x0f; //key=key_Set_In_Factory 
} 

temp=Load_key_CPY(Key); 
if(temp!=1) 
return(RC531_LOADKEYERR); 

temp=Authentication(UID,SecNR,0); 
if(temp!=0) 
return(temp); 

temp=MIF_Write(Access_Bytes,(SecNR*4+3)); 
if(temp!=0) 
return(temp); 

temp=MIF_Halt(); 
if(temp!=0) 
return(temp); 
return(RC531_OK); 
} 

/********************************************************************************************************/ 
/*名称: MIF_Increment */ 
/*功能: 该函数实现MIFARE卡自动增值操作 */ 
/* */ 
/*输入: */ 
/* buff: 四个字节数值起始地址 */ 
/* Block_Adr: 块地址 */ 
/* */ 
/*输出: */ 
/* RC531_NOTAGERR: 无卡 */ 
/* RC531_BYTECOUNTERR: 接收字节错误 */ 
/* RC531_NOTAUTHERR: 未经权威认证 */ 
/* RC531_EMPTY: 数据溢出错误 */ 
/* RC531_CRCERR: CRC校验错 */ 
/* RC531_PARITYERR: 奇偶校验错 */ 
/* RC531_INCRERR: 卡片增款操作失败 */ 
/* RC531_OK: 应答正确 */ 
/********************************************************************************************************/ 
char MIF_Increment(char *buff,char Block_Adr) 
{ 
char temp; 
char *F_buff; 

F_buff=buff+4; 
*F_buff=RF_CMD_INC; 
*(F_buff+1)=Block_Adr; 
rc531_register_write(ChannelRedundancy,0x0f); 
temp=Command_Send(2,F_buff,Transceive); 
if (temp==FALSE) 
return(RC531_NOTAGERR); 
temp=rc531_register_read(FIFO_Length); 
if (temp==0) 
return(RC531_BYTECOUNTERR); 
Read_FIFO(F_buff); 
temp=*F_buff; 
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_INCRERR); 
} 

temp=Command_Send(4,buff,Transmit); 
if (temp==FALSE) 
return(RC531_INCRERR); 
return(RC531_OK); 
} 


/********************************************************************************************************/ 
/*名称: MIF_Decrement */ 
/*功能: 该函数实现MIFARE卡自动减值操作 */ 
/* */ 
/*输入: */ 
/* buff: 四个字节数值起始地址 */ 
/* Block_Adr: 块地址 */ 
/* */ 
/*输出: */ 
/* RC531_NOTAGERR: 无卡 */ 
/* RC531_BYTECOUNTERR: 接收字节错误 */ 
/* RC531_NOTAUTHERR: 未经权威认证 */ 
/* RC531_EMPTY: 数据溢出错误 */ 
/* RC531_CRCERR: CRC校验错 */ 
/* RC531_PARITYERR: 奇偶校验错 */ 
/* RC531_DECRERR: 卡片扣款操作失败 */ 
/* RC531_OK: 应答正确 */ 
/********************************************************************************************************/ 
char MIF_Decrement(char *buff,char Block_Adr) 
{ 
char temp; 
char *F_buff; 

F_buff=buff+4; 
*F_buff=RF_CMD_DEC; 
*(F_buff+1)=Block_Adr; 
rc531_register_write(ChannelRedundancy,0x0f); 
temp=Command_Send(2,F_buff,Transceive); 
if (temp==FALSE) 
return(RC531_NOTAGERR); 
temp=rc531_register_read(FIFO_Length); 
if (temp==0) 
return(RC531_BYTECOUNTERR); 
Read_FIFO(F_buff); 
temp=*F_buff; 
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_DECRERR); 
} 

temp=Command_Send(4,buff,Transmit); 
if (temp==FALSE) 
return(RC531_DECRERR); 
return(RC531_OK); 
} 

/********************************************************************************************************/ 
/*名称: MIF_Restore */ 
/*功能: 该函数实现MIFARE卡自动恢复,备份操作 */ 
/* */ 
/*输入: */ 
/* Block_Adr: 块地址 */ 
/* */ 
/*输出: */ 
/* RC531_NOTAGERR: 无卡 */ 
/* RC531_BYTECOUNTERR: 接收字节错误 */ 
/* RC531_NOTAUTHERR: 未经权威认证 */ 
/* RC531_EMPTY: 数据溢出错误 */ 
/* RC531_CRCERR: CRC校验错 */ 
/* RC531_PARITYERR: 奇偶校验错 */ 
/* RC531_RESTERR: 卡片恢复,备份操作失败 */ 
/* RC531_OK: 应答正确 */ 
/********************************************************************************************************/ 
char MIF_Restore(char Block_Adr) 
{ 
char temp,i; 
*buffer=RF_CMD_RESTORE; 
*(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: 
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 + -