📄 unit1.cpp
字号:
//---------------------------------------------------------------------------
#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 + -