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

📄 reader.c

📁 很强的射频卡reader源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
			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 + -