?? iso15693.cpp
字號:
#include "stdafx.h"
#include "ISO15693.h"
#include "ReadDLL.h"
unsigned char m_count=255; // 記錄楨數據
//int _stdcall Inventory(BYTE Sendval[],BYTE REVval[],bool AFI,bool Singletag,bool ASK,DWORD &nBytestoRead )
int _stdcall Inventory(BYTE Sendval[],BYTE REVval[],bool AFI,int AFIval,int Flag,DWORD &nBytestoRead)
{
//BYTE Sendval[20];
//BYTE REVval[2000];
char CRCval[10];
int CRC16;
int i;
int ret;
m_count++;
Sendval[0]=0x3A;
Sendval[1]=(m_count>>4) &0x0f;
Sendval[2]=m_count &0x0f;
CRCval[0]=m_count;
Sendval[3]=0;
Sendval[4]=0x01;// vinventory
CRCval[1]=0x01;
Sendval[5]=0;
if(!AFI){
Sendval[6]=0x02;
CRCval[2]=0x02;
}
else
{
Sendval[6]=0x04;
CRCval[2]=0x04;
CRCval[5]=AFIval;//AFIval;
Sendval[11]=0;
Sendval[12]=AFIval;//AFIval;
}
Sendval[7]=0;
Sendval[8]=0;
CRCval[3]=0x00;
/*
if(Singletag==true)
{ Sendval[9]=0x30+0x02;
CRCval[4]=0x02;
}
else
{ Sendval[9]=0x30;
CRCval[4]=0x00;
} */
/* if(ASK==true)
{
Sendval[10]=0x30+0x06; //ASK
CRCval[4]=CRCval[4]<<4+0x06;
}
else
{
Sendval[10]=0x30+0x07; //FSK
CRCval[4]=(CRCval[4]<<4)+0x07;
} */
Sendval[9]=(Flag>>4)&0x0f;
Sendval[10]=Flag&0x0f;//Flag;
CRCval[4]=Flag;//Flag;
CRC16=RFcrc_16(0,CRCval,AFI?6:5,0xFFFF);
CRCval[AFI?6:5]=CRC16&0xff;
CRCval[AFI?7:6]=(CRC16>>8)&0xff;
Sendval[AFI?15:13]=((CRCval[6]>>4)&0x0f);
Sendval[AFI?16:14]=(CRCval[6]&0x0f);
Sendval[AFI?13:11]=((CRCval[5]>>4)&0x0f);
Sendval[AFI?14:12]=(CRCval[5]&0x0f);
for(i=1;i<(AFI?17:15);i++)
{
if (Sendval[i]>9)
Sendval[i]=Sendval[i]+0x37;
else
Sendval[i]=Sendval[i]+0x30;
}
Sendval[AFI?17:15]=0x0A;
Sendval[AFI?18:16]=0x0D;
/* */
ret=WriteCom(Sendval,AFI?19:17);
nBytestoRead=0;
ret=ReadCom(REVval,nBytestoRead,500);
// Retval=&REVval[0];300
return 1;
}
int _stdcall StayQuite(BYTE Sendval[],BYTE retval[],int Flag,BYTE UID[],DWORD &nBytestoRead)
{
// :020212002339B23201004005E0C9BF
// 3A3032303231323030323333394232333230313030343030354530433942460A
char Sendval16[100];
//BYTE Sendval[200];
char CRCval[10];
int ret;
int i;
int CRC16;
m_count++;
Sendval[0]=0x3A;
Sendval16[1]=m_count&0xff;
Sendval16[2]=0x02;
Sendval16[3]=0x12;
Sendval16[4]=0x00;
Sendval16[5]=Flag;
for(i=0;i<8;i++)
Sendval16[6+i]=UID[i];
for(i=1;i<14;i++)
{
if((0x0F&(Sendval16[i]>>4))>9)
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x37;
else
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x30;
if((0x0F&(Sendval16[i]))>9)
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x37;
else
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x30;
}
CRC16=RFcrc_16(1,Sendval16,14,0xFFFF);
CRCval[5]=CRC16&0xff;
CRCval[6]=(CRC16>>8)&0xff;
Sendval[2*i+1]=((CRCval[6]>>4)&0x0f);
Sendval[2*i+2]=(CRCval[6]&0x0f);
Sendval[2*i-1]=((CRCval[5]>>4)&0x0f);
Sendval[2*i]=(CRCval[5]&0x0f);
//Sendval16[14]=CRC16&0xff;
//Sendval16[15]=(CRC16>>8)&0xff;
if(Sendval[2*i-1]>9){
Sendval[2*i-1]=Sendval[2*i-1]+0x37;
}else {
Sendval[2*i-1]=Sendval[2*i-1]+0x30;
}
if(Sendval[2*i]>9){
Sendval[2*i]=Sendval[2*i]+0x37;
}else {
Sendval[2*i]=Sendval[2*i]+0x30;
}
if(Sendval[2*i+1]>9){
Sendval[2*i+1]=Sendval[2*i+1]+0x37;
}else {
Sendval[2*i+1]=Sendval[2*i+1]+0x30;
}
if(Sendval[2*i+2]>9){
Sendval[2*i+2]=Sendval[2*i+2]+0x37;
}else {
Sendval[2*i+2]=Sendval[2*i+2]+0x30;
}
Sendval[2*i+3]=0x0A;
Sendval[2*i+4]=0x0D;
ret=WriteCom(Sendval,31);
nBytestoRead=0;
ret=ReadCom(retval,nBytestoRead,500);
return 1;
}
int _stdcall Select(BYTE Sendval[],BYTE retval[],BYTE UID[],int Flag,DWORD &nBytestoRead)
{
//:010312002786363301004005E01671
//3A3031303331323030323738363336333330313030343030354530313637310A
char Sendval16[100];
//BYTE Sendval[][200];
char CRCval[10];
int ret;
int i;
int CRC16;
m_count++;
Sendval[0]=0x3A;
Sendval16[1]=m_count&0xff;
Sendval16[2]=0x03;
Sendval16[3]=0x12;
Sendval16[4]=0x00;
Sendval16[5]=Flag;
for(i=0;i<8;i++)
Sendval16[6+i]=UID[i];
for(i=1;i<14;i++)
{
if((0x0F&(Sendval16[i]>>4))>9)
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x37;
else
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x30;
if((0x0F&(Sendval16[i]))>9)
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x37;
else
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x30;
}
CRC16=RFcrc_16(1,Sendval16,14,0xFFFF);
CRCval[5]=CRC16&0xff;
CRCval[6]=(CRC16>>8)&0xff;
Sendval[2*i+1]=((CRCval[6]>>4)&0x0f);
Sendval[2*i+2]=(CRCval[6]&0x0f);
Sendval[2*i-1]=((CRCval[5]>>4)&0x0f);
Sendval[2*i]=(CRCval[5]&0x0f);
if(Sendval[2*i-1]>9){
Sendval[2*i-1]=Sendval[2*i-1]+0x37;
}else {
Sendval[2*i-1]=Sendval[2*i-1]+0x30;
}
if(Sendval[2*i]>9){
Sendval[2*i]=Sendval[2*i]+0x37;
}else {
Sendval[2*i]=Sendval[2*i]+0x30;
}
if(Sendval[2*i+1]>9){
Sendval[2*i+1]=Sendval[2*i+1]+0x37;
}else {
Sendval[2*i+1]=Sendval[2*i+1]+0x30;
}
if(Sendval[2*i+2]>9){
Sendval[2*i+2]=Sendval[2*i+2]+0x37;
}else {
Sendval[2*i+2]=Sendval[2*i+2]+0x30;
}
Sendval[2*i+3]=0x0A;
Sendval[2*i+4]=0x0D;
ret=WriteCom(Sendval,31);
nBytestoRead=0;
ret=ReadCom(retval,nBytestoRead,500);
return 1;
}
int _stdcall ResetToReady(BYTE Sendval[],BYTE retval[],BYTE UID[],int Flag,DWORD &nBytestoRead)
{
//:020412002786363301004005E079FD
//3A3032303431323030323738363336333330313030343030354530373946440A
char Sendval16[100];
//BYTE Sendval[][200];
char CRCval[10];
int ret;
int i;
int CRC16;
m_count++;
Sendval[0]=0x3A;
Sendval16[1]=m_count&0xff;
Sendval16[2]=0x04;
Sendval16[3]=0x12;
Sendval16[4]=0x00;
Sendval16[5]=Flag;
for(i=0;i<8;i++)
Sendval16[6+i]=UID[i];
for(i=1;i<14;i++)
{
if((0x0F&(Sendval16[i]>>4))>9)
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x37;
else
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x30;
if((0x0F&(Sendval16[i]))>9)
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x37;
else
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x30;
}
CRC16=RFcrc_16(1,Sendval16,13,0xFFFF);
CRCval[5]=CRC16&0xff;
CRCval[6]=(CRC16>>8)&0xff;
Sendval[2*i+1]=((CRCval[6]>>4)&0x0f);
Sendval[2*i+2]=(CRCval[6]&0x0f);
Sendval[2*i-1]=((CRCval[5]>>4)&0x0f);
Sendval[2*i]=(CRCval[5]&0x0f);
Sendval[2*i+3]=0x0A;
Sendval[2*i+4]=0x0D;
if(Sendval[2*i-1]>9){
Sendval[2*i-1]=Sendval[2*i-1]+0x37;
}else {
Sendval[2*i-1]=Sendval[2*i-1]+0x30;
}
if(Sendval[2*i]>9){
Sendval[2*i]=Sendval[2*i]+0x37;
}else {
Sendval[2*i]=Sendval[2*i]+0x30;
}
if(Sendval[2*i+1]>9){
Sendval[2*i+1]=Sendval[2*i+1]+0x37;
}else {
Sendval[2*i+1]=Sendval[2*i+1]+0x30;
}
if(Sendval[2*i+2]>9){
Sendval[2*i+2]=Sendval[2*i+2]+0x37;
}else {
Sendval[2*i+2]=Sendval[2*i+2]+0x30;
}
ret=WriteCom(Sendval,2*i+5);
nBytestoRead=0;
ret=ReadCom(retval,nBytestoRead,500);
return 1;
}
int _stdcall WriteAFI(BYTE Sendval[],BYTE retval[],int AFIval,int Flag,BYTE UID[],DWORD &nBytestoRead)
{
//:030514002786363301004005E0003192
//3A30333035313430303237383633363333303130303430303545303030333139320A
char Sendval16[100];
//BYTE Sendval[][200];
char CRCval[10];
int ret;
int i;
int CRC16;
m_count++;
Sendval[0]=0x3A;
Sendval16[1]=m_count&0xff;
Sendval16[2]=0x05;
Sendval16[3]=0x14;
Sendval16[4]=0x00;
Sendval16[5]=Flag;
for(i=0;i<8;i++)
Sendval16[6+i]=UID[i];
Sendval16[i+6]=AFIval;
for(i=1;i<7+8;i++)
{
if((0x0F&(Sendval16[i]>>4))>9)
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x37;
else
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x30;
if((0x0F&(Sendval16[i]))>9)
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x37;
else
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x30;
}
CRC16=RFcrc_16(1,Sendval16,15,0xFFFF);
CRCval[5]=CRC16&0xff;
CRCval[6]=(CRC16>>8)&0xff;
Sendval[2*i+1]=((CRCval[6]>>4)&0x0f);
Sendval[2*i+2]=(CRCval[6]&0x0f);
Sendval[2*i-1]=((CRCval[5]>>4)&0x0f);
Sendval[2*i]=(CRCval[5]&0x0f);
Sendval[2*i+3]=0x0A;
Sendval[2*i+4]=0x0D;
if(Sendval[2*i-1]>9){
Sendval[2*i-1]=Sendval[2*i-1]+0x37;
}else {
Sendval[2*i-1]=Sendval[2*i-1]+0x30;
}
if(Sendval[2*i]>9){
Sendval[2*i]=Sendval[2*i]+0x37;
}else {
Sendval[2*i]=Sendval[2*i]+0x30;
}
if(Sendval[2*i+1]>9){
Sendval[2*i+1]=Sendval[2*i+1]+0x37;
}else {
Sendval[2*i+1]=Sendval[2*i+1]+0x30;
}
if(Sendval[2*i+2]>9){
Sendval[2*i+2]=Sendval[2*i+2]+0x37;
}else {
Sendval[2*i+2]=Sendval[2*i+2]+0x30;
}
ret=WriteCom(Sendval,2*i+7);
nBytestoRead=0;
ret=ReadCom(retval,nBytestoRead,500);
return 1;
}
int _stdcall LockAFI(BYTE Sendval[],BYTE retval[],int Flag,BYTE UID[],DWORD &nBytestoRead)
{
//:010612002786363301004005E035F1
//3A3031303631323030323738363336333330313030343030354530333546310A
char Sendval16[100];
//BYTE Sendval[][200];
char CRCval[10];
int ret;
int i;
int CRC16;
m_count++;
Sendval[0]=0x3A;
Sendval16[1]=m_count&0xff;
Sendval16[2]=0x06;
Sendval16[3]=0x12;
Sendval16[4]=0x00;
Sendval16[5]=Flag;
for(i=0;i<8;i++)
Sendval16[6+i]=UID[i];
for(i=1;i<7+7;i++)
{
if((0x0F&(Sendval16[i]>>4))>9)
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x37;
else
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x30;
if((0x0F&(Sendval16[i]))>9)
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x37;
else
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x30;
}
CRC16=RFcrc_16(1,Sendval16,15,0xFFFF);
CRCval[5]=CRC16&0xff;
CRCval[6]=(CRC16>>8)&0xff;
Sendval[2*i+1]=((CRCval[6]>>4)&0x0f);
Sendval[2*i+2]=(CRCval[6]&0x0f);
Sendval[2*i-1]=((CRCval[5]>>4)&0x0f);
Sendval[2*i]=(CRCval[5]&0x0f);
Sendval[2*i+3]=0x0A;
Sendval[2*i+4]=0x0D;
if(Sendval[2*i-1]>9){
Sendval[2*i-1]=Sendval[2*i-1]+0x37;
}else {
Sendval[2*i-1]=Sendval[2*i-1]+0x30;
}
if(Sendval[2*i]>9){
Sendval[2*i]=Sendval[2*i]+0x37;
}else {
Sendval[2*i]=Sendval[2*i]+0x30;
}
if(Sendval[2*i+1]>9){
Sendval[2*i+1]=Sendval[2*i+1]+0x37;
}else {
Sendval[2*i+1]=Sendval[2*i+1]+0x30;
}
if(Sendval[2*i+2]>9){
Sendval[2*i+2]=Sendval[2*i+2]+0x37;
}else {
Sendval[2*i+2]=Sendval[2*i+2]+0x30;
}
ret=WriteCom(Sendval,2*i+7);
nBytestoRead=0;
ret=ReadCom(retval,nBytestoRead,500);
return 1;
}
int _stdcall ReadSingleBlock(BYTE Sendval[],BYTE retval[],int nBlock,int Flag,BYTE UID[],DWORD &nBytestoRead)
{
char Sendval16[100];
//BYTE Sendval[][200];
char CRCval[10];
int ret;
int i;
int CRC16;
m_count++;
Sendval[0]=0x3A;
Sendval16[1]=m_count&0xff;
Sendval16[2]=0x07;
Sendval16[3]=0x16;
Sendval16[4]=0x00;
Sendval16[5]=0x04;
Sendval16[6]=Flag;
Sendval16[7]=nBlock;
for(i=0;i<8;i++)
Sendval16[8+i]=UID[i];
for(i=1;i<16;i++)
{
if((0x0F&(Sendval16[i]>>4))>9)
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x37;
else
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x30;
if((0x0F&(Sendval16[i]))>9)
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x37;
else
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x30;
}
CRC16=RFcrc_16(1,Sendval16,15,0xFFFF);
CRCval[5]=CRC16&0xff;
CRCval[6]=(CRC16>>8)&0xff;
Sendval[2*i+1]=((CRCval[6]>>4)&0x0f);
Sendval[2*i+2]=(CRCval[6]&0x0f);
Sendval[2*i-1]=((CRCval[5]>>4)&0x0f);
Sendval[2*i]=(CRCval[5]&0x0f);
Sendval[2*i+3]=0x0A;
Sendval[2*i+4]=0x0D;
if(Sendval[2*i-1]>9){
Sendval[2*i-1]=Sendval[2*i-1]+0x37;
}else {
Sendval[2*i-1]=Sendval[2*i-1]+0x30;
}
if(Sendval[2*i]>9){
Sendval[2*i]=Sendval[2*i]+0x37;
}else {
Sendval[2*i]=Sendval[2*i]+0x30;
}
if(Sendval[2*i+1]>9){
Sendval[2*i+1]=Sendval[2*i+1]+0x37;
}else {
Sendval[2*i+1]=Sendval[2*i+1]+0x30;
}
if(Sendval[2*i+2]>9){
Sendval[2*i+2]=Sendval[2*i+2]+0x37;
}else {
Sendval[2*i+2]=Sendval[2*i+2]+0x30;
}
ret=WriteCom(Sendval,37);
nBytestoRead=0;
ret=ReadCom(retval,nBytestoRead,500);
return 1;
}
// write block
int _stdcall WriteSingleBlock(BYTE Sendval[],BYTE retval[],int nBlock,BYTE Bval[],BYTE UID[],int flag,DWORD &nBytestoRead)
{
char Sendval16[100];
//BYTE Sendval[][200];
char CRCval[10];
int ret;
int i;
int CRC16;
m_count++;
Sendval[0]=0x3A;
Sendval16[1]=m_count&0xff;
Sendval16[2]=0x08; // write block
Sendval16[3]=0x1E; // data length ,4 bit/ 1 block
Sendval16[4]=0x00; //
Sendval16[5]=0x04;
Sendval16[6]=flag;
Sendval16[7]=nBlock;
Sendval16[8]=Bval[0]; //
Sendval16[9]=Bval[1];
Sendval16[10]=Bval[2];
Sendval16[11]=Bval[3];
for(i=0;i<8;i++)
Sendval16[12+i]=UID[i];
for(i=1;i<20;i++)
{
if((0x0F&(Sendval16[i]>>4))>9)
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x37;
else
Sendval[2*i-1]=(0x0F&(Sendval16[i]>>4))+0x30;
if((0x0F&(Sendval16[i]))>9)
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x37;
else
Sendval[2*i]=(0x0F&(Sendval16[i]))+0x30;
}
CRC16=RFcrc_16(1,Sendval16,19,0xFFFF);
CRCval[5]=CRC16&0xff;
CRCval[6]=(CRC16>>8)&0xff;
Sendval[2*i+1]=((CRCval[6]>>4)&0x0f);
Sendval[2*i+2]=(CRCval[6]&0x0f);
Sendval[2*i-1]=((CRCval[5]>>4)&0x0f);
Sendval[2*i]=(CRCval[5]&0x0f);
Sendval[2*i+3]=0x0A;
Sendval[2*i+4]=0x0D;
if(Sendval[2*i-1]>9){
Sendval[2*i-1]=Sendval[2*i-1]+0x37;
}else {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -