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

📄 unit1.cpp

📁 RFID 读卡演示程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "ReadDLL.h"
#include "ISO15693.h"
#include "InputBlockData.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
void __fastcall TForm1::InitGrid(void)
{

  oc->RowCount = 16;
  oc->ColCount = 2;
  oc->FixedCols = 0;
  oc->FixedRows = 1;
  oc->Cells[0][0] = "Code";
  oc->Cells[1][0] = "Command Name";
    oc->Cells[0][1] = "01";
  oc->Cells[1][1] = "Inventory";
    oc->Cells[0][2] = "02";
  oc->Cells[1][2] = "Stay Quiet";
      oc->Cells[0][3] = "03";
  oc->Cells[1][3] = "Select";
      oc->Cells[0][4] = "04";
  oc->Cells[1][4] = "Reset to Ready";
      oc->Cells[0][5] = "05";
  oc->Cells[1][5] = "Write AFI";
        oc->Cells[0][6] = "06";
  oc->Cells[1][6] = "Lock AFI";
        oc->Cells[0][7] = "07";
  oc->Cells[1][7] = "Read Single Block";
        oc->Cells[0][8] = "08";
  oc->Cells[1][8] = "Write Single Block";
        oc->Cells[0][9] = "09";
  oc->Cells[1][9] = "Lock Block";
        oc->Cells[0][10] = "0A";
  oc->Cells[1][10] = "Read Multi Block";
          oc->Cells[0][11] = "0B";
  oc->Cells[1][11] = "Write Multi Block";
          oc->Cells[0][12] = "0C";
  oc->Cells[1][12] = "Write DSFID";
          oc->Cells[0][13] = "0D";
  oc->Cells[1][13] = "Lock DSFID";
          oc->Cells[0][14] = "0E";
  oc->Cells[1][14] = "Get System Info";
          oc->Cells[0][15] = "0F";
  oc->Cells[1][15] = "Get Multi Block Secirotu Status";
  CurrUID=0;
  //oc->retval=
 // ComboBox1-> Items-> Strings[1];
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 InitGrid();
 // InitOperateInfo();     
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     if(Button1->Caption=="open"){
        // SetCom(const char *m_sPort, int BaudRate, int Databit, char *parity, char *stopbit)
                   // char*   m_sPort   =   new   char[  ComboBox1-> Items-> Strings[0].Length()   +   1   ];
                   //strcpy(   m_sPort,   ComboBox1-> Items-> Strings[0].c_str()   );
                  char*   m_sPort   =new   char[ ComboBox1->Text.Length()+1];
            strcpy(   m_sPort,  ComboBox1->Text.c_str()   );
            //ShowOperateInfo( m_sPort);
            int return_value=SetCom( m_sPort ,115200,8,"None","1");
        if(return_value==0){
        BYTE Sendval[200], retval[200];
                ZeroMemory(retval,200 )  ;
    ZeroMemory(Sendval,200 )  ;
       Select(Sendval,retval,"",23,nBytesRead);
       String temp=(char*)retval;

       if(temp==""){
              ShowOperateInfo("not found reader in port");
              CloseCom();
              return;

       }
            Button1->Caption="close";
            ShowOperateInfo("port open success");

        }else {
        switch(return_value){
         case 1:ShowOperateInfo(" port is used or not found :"+return_value);break;
         case 2:ShowOperateInfo(" GetCommState Failed:"+return_value);break;
         case 3:ShowOperateInfo(" port set error :"+return_value);break;
         default:ShowOperateInfo(" unknown error");
        }}
     } else
      if(Button1->Caption=="close"){
          if(CloseCom()==0){
          Button1->Caption="open";
          ShowOperateInfo("port close success");
      }
     }
}

void toUniteByte(const BYTE UID[],BYTE Curr[]){
   BYTE xUID[16];
   for(int i=0;i<16;i++){
       if ((UID[i]-0x30)>9)
           xUID[i]=(UID[i]-0x37);
       else
           xUID[i]=(UID[i]-0x30);
   }

   for(int i=0;i<8;i++){
       Curr[i]=(xUID[2*(8-i)-2]<<4)+xUID[2*(8-i)-1];
   }

   }


void __fastcall TForm1::ShowOperateInfo(String Msgstr)
{
  Memo1->Lines->Add(TimeToStr(Now())+":"+Msgstr);
}
void __fastcall TForm1::ShowTagInfo(String Msgstr)
{
  Form1->Memo_Tag_Info->Lines->Add(TimeToStr(Now())+":"+Msgstr);
}
void __fastcall TForm1::ShowTagDetail(String Msgstr)
{
  Memo_TagDetail->Lines->Add(Msgstr);
}
void __fastcall TForm1::ShowTagInfo(String Msgstr,int index)
{
Memo_Tag_Info->Lines->Delete(index);
  Memo_Tag_Info->Lines->Insert(index,TimeToStr(Now())+":"+Msgstr);
}
void __fastcall TForm1::ClearTagInfo()
{
  Memo_Tag_Info->Lines->Clear() ;
}
void __fastcall TForm1::ClearTagDetailInfo()
{
  Memo_TagDetail->Lines->Clear() ;
}
void __fastcall TForm1::ClearOperateInfo(){
  Memo1->Lines->Clear();
}
void __fastcall TForm1::getOldTagList()
{
  Memo_Tag_Info->Lines->Count;
}

//---------------------------------------------------------------------------




String __fastcall TForm1::toBack (String s,int charNum){
	   if(s.Length()<=charNum){
		   return s;
	   }
	   return s.SubString(s.Length()-charNum+1,charNum)+toBack(s.SubString(0,s.Length()-charNum),charNum);
   }
void __fastcall TForm1::toTagArray(String tag_array[],String tags) {

		if (tags==NULL||tags.Trim()==""||tags.Length() % 20 != 0) {
			return ;
		}

		for (int i = 1, j = 0; i < tags.Length(); i += 20, j++) {
			tag_array[j] = tags.SubString(i,16);
		}
	}

   /**
    * 将从s每charNum个字符合成一个字符,生成一个新串
    * @param s 将要处理的字符串
    * @param charNum 合并取的字符数:例如果s='1234' charNum=2 就是将12,34分别合并生成一个字符,长度为2
    * @return
    */
String __fastcall TForm1::toUniteStr(char   *temp,String s,int charNum){
String str;
	   if(s.Length()<=charNum){
            str=strtol(("0x"+s).c_str(),   &temp,   16);
		   return String((char)str.ToInt());
	   }

            //s.IntToHex(s.SubString(s.Length()-charNum,charNum).ToInt(),16);
           str= strtol(("0x"+s.SubString(s.Length()-charNum+1,charNum)).c_str(),   &temp,   16);
	   return String((char)str.ToInt())+toUniteStr(temp,s.SubString(0,s.Length()-charNum),charNum);
   }
//---------------------------------------------------------------------------

void __fastcall TForm1::ocClick(TObject *Sender)
{               //1
                WriteSG_Data->Visible=false;
                Edit_Data1->Visible=false;
                Edit_Data2->Visible=false;
                Edit_Data3->Visible=false;
                Edit_Data4->Visible=false;
                //2
                ST_PageBlk->Visible=false;
                ST_1stBlkAddr->Visible=false;
                ST_NoOfBlk->Visible=false;
                Edit_1stBlkAddr->Visible=false;
                Edit_NoOfBlk->Visible=false;
                EditCurPageBlk->Visible=false;
                //3
                ST_1stBlkAddr15->Visible=false;
                Edit_1stBlkAddr15->Visible=false;
                ST_BlkCnt->Visible=false;
                Edit_BlkCnt->Visible=false;
                ST_DSIFID->Visible=false;
                Edit_DISFIDval->Visible=false;
                //4
                Edit_Flagval->Text=23;
                Chk_AFI->Checked=false;
                Chk_AFI->Enabled=false;
                ChkPBAddr->Checked=false;
                Combo_TagOfState->ItemIndex=1;
         switch(oc->Row){
        case 1:Edit_Flagval->Text=27;Chk_AFI->Enabled=true;
        Combo_TagOfState->ItemIndex=0;
        Combo_Modulation->ItemIndex=0;
        Combo_NoOfTag->ItemIndex=0;
        break;
        case 2:break;
        case 3:break;
        case 4:break;
        case 5:Chk_AFI->Checked=true;
        break;
        case 6:break;
        case 7:
        ChkPBAddr->Checked=true;
        break;
        case 8:
                ChkPBAddr->Checked=true;

                WriteSG_Data->Visible=true;
                Edit_Data1->Visible=true;
                Edit_Data2->Visible=true;
                Edit_Data3->Visible=true;
                Edit_Data4->Visible=true; break;
        case 9:
                ChkPBAddr->Checked=true;
        break;
        case 10:
                ST_PageBlk->Visible=true;
                ST_1stBlkAddr->Visible=true;
                ST_NoOfBlk->Visible=true;
                Edit_1stBlkAddr->Visible=true;
                Edit_NoOfBlk->Visible=true;
                EditCurPageBlk->Visible=true;break;
        case 11:break;
        case 12:
                ST_DSIFID->Visible=true;
                Edit_DISFIDval->Visible=true;
        break;
        case 13:break;
        case 14:break;
        case 15:
                ST_1stBlkAddr15->Visible=true;
                Edit_1stBlkAddr15->Visible=true;
                ST_BlkCnt->Visible=true;
                Edit_BlkCnt->Visible=true;break;
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Combo_ModulationChange(TObject *Sender)
{                  //FSK ASK NoSelected Selected  Single  Mutiple
if (Combo_TagOfState->Text == "Selected") {
					Edit_Flagval->Text=23;
                                        return;
				}else
				if (Combo_Modulation->Text=="FSK") {
					if (Combo_NoOfTag->Text == "Single") {
						Edit_Flagval->Text=27;
					} else {
						if (Combo_NoOfTag->Text == "Mutiple") {
							Edit_Flagval->Text="07";
						}
					}
				} else if (Combo_TagOfState->Text == "NoSelected") {
					if (Combo_NoOfTag->Text == "Single") {
						Edit_Flagval->Text=26;
					} else {
						if (Combo_NoOfTag->Text == "Mutiple") {
							Edit_Flagval->Text="06";
						}
					}
				}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Combo_TagOfStateChange(TObject *Sender)
{                     //FSK ASK NoSelected Selected  Single  Mutiple
                                if (Combo_TagOfState->Text == "Selected") {
					Edit_Flagval->Text=23;
				} else {
						if (Combo_Modulation->Text=="FSK") {
							if (Combo_NoOfTag->Text == "Single") {
								//flag = "07";
								Edit_Flagval->Text=27;
							} else if (Combo_NoOfTag->Text == "Mutiple") {
								//flag = "06";
								Edit_Flagval->Text="07";
							}
						} else if (Combo_Modulation->Text=="ASK") {
							if (Combo_NoOfTag->Text == "Single") {
								//flag = "26";
								Edit_Flagval->Text=26;
							} else if (Combo_NoOfTag->Text == "Mutiple") {
								//flag = "27";
								Edit_Flagval->Text="06";
							}
						}
				}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Combo_NoOfTagChange(TObject *Sender)
{                      //FSK ASK NoSelected Selected  Single  Mutiple
                                if (Combo_NoOfTag->Text == "Selected") {
					Edit_Flagval->Text=23;
				}else{
				if (Combo_NoOfTag ->Text == "Single") {
					if (Combo_Modulation ->Text == "FSK") {
						Edit_Flagval->Text=27;
					} else {
						if (Combo_Modulation->Text == "ASK") {
							Edit_Flagval->Text=26;
						}
					}
				} else if (Combo_NoOfTag->Text == "Mutiple") {
					if (Combo_Modulation->Text == "FSK") {
						Edit_Flagval->Text="07";
					} else {
						if (Combo_Modulation->Text == "ASK") {
							Edit_Flagval->Text="06";
						}
					}
				}
			}
}
//---------------------------------------------------------------------------
void _fastcall TForm1::run(){
 char   *temp;
    long   flag;
    long  nblock;
    long AFIval;
    long DSIFID;
    int index;
    char* Str_F_val;
    long nStartBlock,nLength;
    BYTE Bval[500];
    String tagArray[100];
    String tags;
    String temp1;
    String temp2;
    String temp3;
       BYTE Sendval[200];//发送命令字符串
BYTE retval[2000];//返回值
int count=0;
        ZeroMemory(retval,2000 )  ;
    ZeroMemory(Sendval,200 )  ;
//ShowOperateInfo(oc->Row);
  //ShowOperateInfo(oc->Col);
  if(CurrUID.Length()<16&&oc->Row!=1){
     ShowOperateInfo("Not Inventory");
     return;
  }

  switch(oc->Row){

  case 1:
  if(Edit_Flagval->Text.Length()==1){
     Edit_Flagval->Text="0"+ Edit_Flagval->Text;
  }
    Str_F_val=("0x"+Edit_Flagval->Text).c_str();
    flag   =   strtol(Str_F_val,   &temp,   16);
    if(Chk_AFI->Checked){
        if(Edit_AFIval->Text.Length()==1){
     Edit_AFIval->Text="0"+ Edit_AFIval->Text;
  }
     Str_F_val=("0x"+Edit_AFIval->Text).c_str();
    AFIval   =   strtol(Str_F_val,   &temp,   16);
    }
  Inventory(Sendval,retval,Chk_AFI->Checked,AFIval,flag,nBytesRead);
    //Inventory(retval,1,1,0,nBytesRead);
  //String message=String((char)retval);
  ShowOperateInfo((char*)Sendval);
  temp2=(char*)retval;
           if(temp2==""){
       ShowOperateInfo("No Reply");
          break;
       }
  ShowOperateInfo((char*)retval);

        temp1=(char*)retval;
       //temp1="010001001000039223344556677E0000102";
       tags = toBack((temp1).SubString(14-4,
       temp1.Length() - 6-13+4), 2);

      toTagArray(tagArray,tags);
      for(int i=0;i<tagArray->Length();i++){
        if(tagArray[i]==NULL || tagArray[i]==""){
                break;
        }
        CurrUID= tagArray[i];
        index=HasTag();
        if(index==-1){
         UIDCountArray[UIDCount]=1;
         UIDArray[UIDCount++]=CurrUID;
         index=UIDCount-1;
         }else{
           UIDCountArray[index]++;
         }
         ShowTagInfo(" "+CurrUID+" Count:"+UIDCountArray[index],index);
      }
      //CurrUID="aa";

   break;

  case 2:
    if(Edit_Flagval->Text.Length()==1){
     Edit_Flagval->Text="0"+ Edit_Flagval->Text;
  }
      Str_F_val=("0x"+Edit_Flagval->Text).c_str();
    flag   =   strtol(Str_F_val,   &temp,   16);
  //StayQuite(Sendval,retval,flag,CurrUID.c_str(),nBytesRead);
  StayQuite(Sendval,retval,flag,toUniteStr(temp,CurrUID,2).c_str(),nBytesRead);
    ShowOperateInfo((char*)Sendval);
temp2=(char*)retval;
           if(temp2==""){
       ShowOperateInfo("No Reply");
          break;
       }
  ShowOperateInfo((char*)retval);
    break;
      case 3:
        if(Edit_Flagval->Text.Length()==1){
     Edit_Flagval->Text="0"+ Edit_Flagval->Text;
  }
      Str_F_val=("0x"+Edit_Flagval->Text).c_str();
    flag   =   strtol(Str_F_val,   &temp,   16);
  Select(Sendval,retval,toUniteStr(temp,CurrUID,2).c_str(),flag,nBytesRead);
    ShowOperateInfo((char*)Sendval);
temp2=(char*)retval;
           if(temp2==""){
       ShowOperateInfo("No Reply");
          break;
       }
       ClearTagDetailInfo();
       if(temp2.SubString(temp2.Length()-7,2)=="00"){
           ShowTagDetail("Select Success!");
       }else{
       ShowTagDetail("Select Faild!");

⌨️ 快捷键说明

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