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

📄 rwtagdlg.cpp

📁 Mifare非接触IC读卡器与PC通信程序
💻 CPP
字号:
// RWTagDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Mifare.h"
#include "RWTagDlg.h"
#include "zlg500.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CRWTagDlg dialog


CRWTagDlg::CRWTagDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CRWTagDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRWTagDlg)
	m_form = 1;
	//}}AFX_DATA_INIT
	szpwd[0] = 0xff;
	szpwd[1] = 0xff;
	szpwd[2] = 0xff;
	szpwd[3] = 0xff;
	szpwd[4] = 0xff;
	szpwd[5] = 0xff;
	szpwd[6] = 0xff;
}


void CRWTagDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRWTagDlg)
	DDX_Control(pDX, IDC_COMBO3, m_ComboBlockNum2);
	DDX_Control(pDX, IDC_COMBO2, m_ComboBlockNum);
	DDX_Control(pDX, IDC_COMBO1, m_ComboReader);
	DDX_Radio(pDX, IDC_RADIO1, m_form);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRWTagDlg, CDialog)
	//{{AFX_MSG_MAP(CRWTagDlg)
	ON_BN_CLICKED(IDC_TAG_INIT, OnTagInit)
	ON_BN_CLICKED(IDC_TAG_WRITE, OnTagWrite)
	ON_BN_CLICKED(IDC_TAG_READ, OnTagRead)
	ON_BN_CLICKED(IDC_LIGHT, OnLight)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRWTagDlg message handlers


BOOL CRWTagDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
    

	if(zlg500_ReadAddr(cardaddrlen,cardaddr)==1) //取得线上的读卡器的地址
	{
	    AfxMessageBox("取得线上的读卡器的地址失败!"); //如果失败则返回
	}
	
	CString str;
	for(int i=0;i<cardaddrlen;i++)
	{
		str.Format("%x",cardaddr[i]);
		m_ComboReader.AddString(str);
	}
	
	m_ComboReader.SetCurSel(0);

	CString str2;
	for(int j=0;j<64;j++)
	{
		str2.Format("%d",j);
		m_ComboBlockNum.AddString(str2);
	}
	m_ComboBlockNum.SetCurSel(1);

	for(j=0;j<64;j++)
	{
		str2.Format("%d",j);
		m_ComboBlockNum2.AddString(str2);
	}
	m_ComboBlockNum2.SetCurSel(1);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}



void CRWTagDlg::OnTagInit() 
{
	// TODO: Add your control notification handler code here
	for(int i=0;i<16;i++)
	{
		if(zlg500_LoadPwd(cardaddr[0],0,i,szpwd)==1) //往第0 密钥区装载密钥A
		{
			MessageBox("加载密钥失败!");
		}
		Sleep(2);
	}
	
	if(zlg500_Request(cardaddr[0],1,type)==1) //对第一个读卡器进行操作
	{
	    if(zlg500_Request(cardaddr[0],1,type)==1)
		{
			MessageBox("请求读卡器失败!");
		}
	}
	Sleep(2);
	
	if(zlg500_Anticoll(cardaddr[0],0,snr)==1) //进行防碰撞选择成功则返回卡号
	{
     	MessageBox("防碰撞失败!");
	}
	Sleep(2);
	
	if(zlg500_Select(cardaddr[0],snr,size)==1) //选择卡
	{
	    MessageBox("选择标签失败!");
	}
	Sleep(2);
	
/*	if(zlg500_AuthenPwd(cardaddr[0],0,0)==1) //验证第0 扇区的密钥A
	{
		MessageBox("验证密钥失败!");
	}*/
}

void CRWTagDlg::OnTagWrite() 
{
	// TODO: Add your control notification handler code here
	writeblocknum = m_ComboBlockNum.GetCurSel();
	m_ComboBlockNum2.SetCurSel(writeblocknum);

	if(zlg500_Request(cardaddr[0],1,type)==1) //对第一个读卡器进行操作
	{
	    if(zlg500_Request(cardaddr[0],1,type)==1)
		{
			MessageBox("无法和读卡器建立连接!");
			zlg500_SetControl(cardaddr[0],0x07,10,10,10);
		}
	}
	Sleep(2);
	
	if(zlg500_Anticoll(cardaddr[0],0,snr)==1) //进行防碰撞选择成功则返回卡号
	{
     	MessageBox("防碰撞失败!");
	}
	Sleep(2);
	
	if(zlg500_Select(cardaddr[0],snr,size)==1) //选择卡
	{
	    MessageBox("选择标签失败!");
	}
	Sleep(2);

	int KeyBlock;
	KeyBlock = writeblocknum/4;
	if(zlg500_AuthenPwd(cardaddr[0],0,KeyBlock)==1) //验证第0 扇区的密钥A
	{
		MessageBox("验证密钥失败!");
	}

	char szdata[100];
	int tmp;
	char sztmp[3]={0};
	GetDlgItem(IDC_EDIT1)->GetWindowText(szdata,99);
	for(int i=0;i<16;i++)
	{
		memcpy(sztmp,szdata+i*3,2);
		sscanf(sztmp,"%x",&tmp);
		writedata[i]=tmp;
	}

//	GetDlgItem(IDC_EDIT1)->GetWindowText(writedata,16);
    Sleep(2);

	writeblocknum = m_ComboBlockNum.GetCurSel();
    if(zlg500_WriteBlock(cardaddr[0],writeblocknum,writedata)==1) //往第二块写入数据
	{
	    MessageBox("写入数据失败!");
		zlg500_SetControl(cardaddr[0],0x07,10,10,10);
	}
	Sleep(2);
}


void CRWTagDlg::OnTagRead() 
{
	// TODO: Add your control notification handler code here
	readblocknum = m_ComboBlockNum2.GetCurSel();
    writeblocknum = m_ComboBlockNum.GetCurSel();
	
/*	if(zlg500_Request(cardaddr[0],1,type)==1) //对第一个读卡器进行操作
	{
	    if(zlg500_Request(cardaddr[0],1,type)==1)
		{
			MessageBox("请求读卡器失败!");
		}
	}
	Sleep(2);
	
	if(zlg500_Anticoll(cardaddr[0],0,snr)==1) //进行防碰撞选择成功则返回卡号
	{
     	MessageBox("防碰撞失败!");
	}
	Sleep(2);
	
	if(zlg500_Select(cardaddr[0],snr,size)==1) //选择卡
	{
	    MessageBox("选择标签失败!");
	}
	Sleep(2);*/

//	if(readblocknum != writeblocknum)
//	{
	int KeyBlock;
	KeyBlock = readblocknum/4;
	if(zlg500_AuthenPwd(cardaddr[0],0,KeyBlock)==1) //验证第0 扇区的密钥A
	{
		MessageBox("验证密钥失败!");
	}
//	}
	
//	readblocknum = m_ComboBlockNum2.GetCurSel();
	if(zlg500_ReadBlock(cardaddr[0],readblocknum,readdata)==1) //读取第二块的数据
	{
	    MessageBox("读取数据失败!");
		zlg500_SetControl(cardaddr[0],0x07,10,10,10);
	}
    
	CString str1;
	CString str = "";

	UpdateData();
	if(m_form == 0)
	{
		for(int i=0;i<16;i++)
		{
			str1.Format("%d",readdata[i]);
			str += str1;
			str += "  ";
		}
	}
	
	if(m_form == 1)
	{
		for(int i=0;i<16;i++)
		{
			str1.Format("%x",readdata[i]);
			str += str1;
			str += "  ";
		}
	}
    // MessageBox(str);
	GetDlgItem(IDC_EDIT2)->SetWindowText(str);
}


void CRWTagDlg::OnLight() 
{
	// TODO: Add your control notification handler code here
	zlg500_SetControl(cardaddr[0],0x07,10,10,10);
}

⌨️ 快捷键说明

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