📄 cmdr6c.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 + -