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

📄 cmdr6c.c

📁 15693 hf reader 伟根26接口
💻 C
字号:
#include "crc16.h"
#include "comr6c.h"
#include "typedef.h"
#include "time.h"
#include "main.h"
#include "intrins.h"
#include "baseclk.h"
#include "ll.h"
void send_ISO_cmd(uchar flags,uchar cmd,uchar dataPstion,uchar paraLength)
{
/*
	uchar i;
	uint crc_val;
	if( dataPstion > 6 )                // 6 是R6C命令发送的核心数据起始位置
	{     
		for(i=0;i<paraLength;i++)
		{
			pcdata[6+i] = pcdata[dataPstion+i];
		}
	}
	else if(dataPstion<6)
	{ 
		dataPstion --;
		for(i=paraLength;i>0;i--)
		{
			pcdata[5+i] = pcdata[dataPstion+i];
		}
	}

	pcdata[4] = flags;
	pcdata[5] = cmd;	
	crc_val = crc16Calculate(pcdata+4,2+paraLength);
	pcdata[6+paraLength] = LOBYTE(crc_val);
	pcdata[7+paraLength] = HIBYTE(crc_val);
	pcdata[0] = 8+paraLength;
	ES = 0;
	_commandrd();
	ES = 1;
*/
	uchar i;
   	uint crc_val;
   if( dataPstion > 6 )                /* 6 是R6C命令发送的核心数据起始位置*/
   {     
      for(i=0;i<paraLength;i++)
      {
         pcdata[6+i] = pcdata[dataPstion+i];
      }
   }
   else if(dataPstion<6)
   { 
      dataPstion --;
      for(i=paraLength;i>0;i--)
      {
         pcdata[5+i] = pcdata[dataPstion+i];
      }
   }
      
   pcdata[4] = flags;
   pcdata[5] = cmd;
   
   crc_val = crc16Calculate(pcdata+4,2+paraLength);
   pcdata[6+paraLength] = LOBYTE(crc_val);
   pcdata[7+paraLength] = HIBYTE(crc_val);
   pcdata[0] = 8+paraLength;   
   _commandrd();
}
/*
uchar idata nb_l= 0,nb_col=0,mask_len=0;
uchar idata num_card=0;
uchar idata lev_col[4] = {0,0,0,0};     //最多三级,每级3张,最多10张
uchar idata mask[6]={0,0,0,0,0,0};           //最多3级
uchar idata pushData[8]={0,0,0,0,0,0,0,0};    //缓冲数据

void init_inventory(void)
{
	
	nb_l= 0 ; nb_col=0; mask_len=0;
	num_card=0;
	lev_col[0] = 0;  lev_col[1] = 0;   //最多二级,每级2张,最多4张
	lev_col[2] = 0;  lev_col[3] = 0;   //最多二级,每级2张,最多4张
	//   lev_col[4] = 0;   //最多二级,每级2张,最多4张
	mask[0]=0;
	mask[1]=0;
	mask[2]=0;
	mask[3]=0;           //最多2级
	mask[4]=0;
	mask[5]=0;
	pushData[0]=0;pushData[1]=0;pushData[2]=0;pushData[3]=0;    //缓冲数据
	pushData[4]=0;pushData[5]=0;pushData[6]=0;pushData[7]=0;    //缓冲数据
	//   pushData[8]=0;pushData[9]=0;
}


void push(uchar inData)
{
	if(nb_col%2) { pushData[nb_col/2] |= (inData<<4);}
	else         { pushData[nb_col/2]  = inData;}
	nb_col ++;
}

uchar pop(void)
{
	uchar i;
	nb_col --;
	if(nb_col%2) { i = pushData[nb_col/2] >> 4; }
	else         { i = pushData[nb_col/2] & 0x0f; }
	return(i);
}

void poll_loop(void) 
{
	uchar i=0,k=0,n=0,m=0,l=0;
	uint crc_val=0;
	
	uchar bitcnt=0,Bytecnt=0,bitval=0,temp=0;
	bit TAGRDY=0,TAGDONE=0,ASICRDY=0,b_col=0;	
	
	if(nb_col!=0)
	{
		i = pop();
		temp = mask_len/4;
		if(temp%2) { mask[temp/2] |= (i<<4); }
		else       { mask[temp/2] =  i;      }
		mask_len+= 4;
	}
   
	pcdata[4] = 0x05;		//iso15693 request flag
	pcdata[5] = 0x01;		//iso15693 command

   	i = 0;temp = 0;
//   pcdata[6] = mask_len;     
//   pcdata[7] = mask[0];
//   temp = 1;
	if(mask_len==0) { pcdata[6] = 0; }
	else
	{
		pcdata[6] = mask_len;
		temp = mask_len/4;
		temp = (temp+1)/2;
		for(i=0;i<temp;i++)
		{
		 	pcdata[7+i] = mask[i];
		}
	}

	crc_val = crc16Calculate(pcdata+4,3+temp);
	pcdata[7+temp] = LOBYTE(crc_val);		//crc MSByte
	pcdata[8+temp] = HIBYTE(crc_val);		//crc LMSByte
	
	pcdata[0] = 9+temp;
	pcdata[1] = 0;
	pcdata[2] = 0x00;
	pcdata[3] = 0x30;
	for(i= 4;i<9+temp;i++) { pcdata[i] = ReflectBYTE(pcdata[i]);	}

//   pcdata[0] = 3;
//   pcdata[1] = 0;
//   pcdata[2] = 0xFF; //convention to define first slot

   	_sendfifocmd();

	for(i=0;i<16;i++)
	{
		pcdata[0] = 3;
		pcdata[1] = 0;
		pcdata[2] = 0xFF; //convention to define first slot
		bitcnt=0;
		Bytecnt=0;
		bitval=0;
		temp=0;
		TAGRDY=0; 
		TAGDONE=0;
		ASICRDY=0;
		b_col=0;
	//      DOUT = 1; 
		_setTimer(2);
	
		while((DOUT)&&(!TIMERINT)); 
		_stopBit();
	//      while((DOUT)); _stopBit();
	//      DOUT = 1; 
		while((DOUT)); 
		_trans1();
	//      _clrTimer();
		if(0==i)
		{
			TH0 = 0xeA; 
			TL0 = 0x66;                      //16ms
			clrTimer(); 
			_setTimer(2);
			while ((!ERR)&&(!TIMERINT));
			if (ERR) 
			{
				while ((ERR)&&(!TIMERINT));
				if (!ERR)
				{                                       //err pulse (typ. 18us) detected
					ASICRDY = 1;
					TH0 = 0xeA; TL0 = 0x66;                      //16ms
					_setTimer(2);
				}
			}
		}
		else
		{
			ASICRDY = 1; 
			TH0 = 0xeA; TL0 = 0x66;                      //16ms
			_setTimer(2);
		}
		if(ASICRDY)
		{
			while((!TAGRDY)&&(!TIMERINT))
			{
				if (_findS2())
				{
					TAGRDY=1;
					TH0 = 0xdc; TL0 = 0x80;                      //16ms
					_setTimer(4);
					break;
				}
			}
		}
		if(TAGRDY)
		{
			TAGDONE=0;
			bitcnt=0;
			Bytecnt = 3;
		//	      Bytecnt=pcdata[0];                      //Bytecounter keeps track of nr of bytes stored .
		//It's value is nr of bytes -1 (i.e. the value in [o])
			m = 0;
			while ((!TAGDONE)&&(!TIMERINT))
			{
				bitval =_readbit();
				switch (bitval)
				{
					case 0x02:
						b_col = 1; 
						push(i); 
						n++;
					break;
				
					case 0x03:
						TAGDONE =1; 		//received ES2		
						pcdata[Bytecnt] = m;
						pcdata[0] = Bytecnt;
						pcdata[1] = bitcnt;
						if(chkCRC(pcdata+3,Bytecnt-3))
						{
							temp = num_card*10 + 25;
							pcdata[temp] = 0x03;   temp++;     //ISO兼容卡
							k = temp+9;
							l = 4;
							for(;temp<k;temp++)
							{ 
								pcdata[temp] = pcdata[l];
								l++;
								if(temp>125) { break;}
							}
							num_card ++;
							userCardOk = 1;			
						}
					break;

					case 0x04: //timeout
					break;

					default:
						if (bitcnt==8) //start new byte
						{
							if(Bytecnt <25) 
							{
								pcdata[Bytecnt] = m;
								m=0;
								bitcnt =0;
								Bytecnt++; 
							}
						}
						bitcnt++;
						m = m*2 + bitval;
					}
					if(b_col) 
					{
						b_col=0; 
						for(k=0;k<(15-mask_len/4);k++) 
						{
							for(crc_val=0;crc_val<150;crc_val++);         //1.2ms
						}
						break;
					}
				}
				for(k=0;k<25;k++) {pcdata[k] = 0;}

				for(k=0;k<0xff;k++);
				for(k=0;k<0xff;k++);
			}
//      DOUT = 1; 
			_setTimer(2);
			while((DOUT)&&(!TIMERINT));  
			_trans2();
//      while((DOUT));  _trans2();
			_clrTimer();
		}

		if(n==0)
		{
			if(nb_col==0) {return;}
			else
			{			
				temp = mask_len/4;
				temp --; 
				if(temp%2) { mask[temp/2] &= 0x0f; }
				else       { mask[temp/2] &= 0xf0; }
				mask_len -= 4;
				
				lev_col[nb_l-1] --;
				if(lev_col[nb_l-1] ==0)
				{
					nb_l --; 
					lev_col[nb_l-1] --;
					//            mask >>= 4;
					temp = mask_len/4;
					temp --; 
					if(temp%2) { mask[temp/2] &= 0x0f; }
					else       { mask[temp/2] &= 0xf0; }
					mask_len -= 4;
				}
			}
		}
		else
		{		
			lev_col[nb_l] = n; nb_l ++;
		}
   		return;   
}

void inventory(void)
{
	init_inventory();
	do
	{
	  	poll_loop();
	}while(nb_col);   
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -