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

📄 mifaredlg.cpp

📁 APIDemo源码
💻 CPP
字号:
// MifareDlg.cpp : implementation file
//

#include "stdafx.h"
#include "APIDemo.h"
#include "MifareDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMifareDlg property page

IMPLEMENT_DYNCREATE(CMifareDlg, CPropertyPage)

CMifareDlg::CMifareDlg() : CPropertyPage(CMifareDlg::IDD)
{
	//{{AFX_DATA_INIT(CMifareDlg)
	m_sCSN = _T("");
	m_sData = _T("");
	m_sKey = _T("FFFFFFFFFFFF");
	//}}AFX_DATA_INIT
	m_pParent		= NULL;
}

CMifareDlg::~CMifareDlg()
{
}

void CMifareDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMifareDlg)
	DDX_Control(pDX, IDC_CMB_SECTOR, m_cmbSector);
	DDX_Control(pDX, IDC_CMB_KEY, m_cmbKey);
	DDX_Control(pDX, IDC_CMB_BLOCK, m_cmbBlock);
	DDX_Control(pDX, IDC_BTN_WRITE, m_btnWrite);
	DDX_Control(pDX, IDC_BTN_REQUEST, m_btnRequest);
	DDX_Control(pDX, IDC_BTN_READ, m_btnRead);
	DDX_Control(pDX, IDC_BTN_AUH, m_btnAuth);
	DDX_Text(pDX, IDC_EDT_CSN, m_sCSN);
	DDV_MaxChars(pDX, m_sCSN, 16);
	DDX_Text(pDX, IDC_EDT_DATA, m_sData);
	DDV_MaxChars(pDX, m_sData, 32);
	DDX_Text(pDX, IDC_EDT_KEY, m_sKey);
	DDV_MaxChars(pDX, m_sKey, 16);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMifareDlg, CPropertyPage)
	//{{AFX_MSG_MAP(CMifareDlg)
	ON_BN_CLICKED(IDC_BTN_REQUEST, OnBtnRequest)
	ON_BN_CLICKED(IDC_BTN_AUH, OnBtnAuh)
	ON_BN_CLICKED(IDC_BTN_READ, OnBtnRead)
	ON_BN_CLICKED(IDC_BTN_WRITE, OnBtnWrite)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMifareDlg message handlers

BOOL CMifareDlg::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	m_pParent	= (CMyPropetySheet*)GetParent();
	ASSERT(m_pParent);

	m_cmbKey.SetCurSel(0);
	m_cmbSector.SetCurSel(0);
	m_cmbBlock.SetCurSel(0);

	m_btnRequest.EnableWindow(m_pParent->m_bConnected);
	m_cmbKey.EnableWindow(m_pParent->m_bConnected);

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

void CMifareDlg::OnBtnRequest() 
{
	BYTE	bRev[32]	= {0};
	BYTE	bLength		= 0;

	CString	sText		= _T("");
	m_sCSN				= _T("");
	
	// 关闭天线
	if(CFSetAntennaStatus(0, 0) == 0)
	{
		//设置读写卡器非接触工作方式 "A"
		if(CFSetWorkMode(0, 0) == 0)
		{
			//启动天线
			if(CFSetAntennaStatus(0, 1) == 0)
			{
				//搜寻所有的卡
				if(CFISO14443_3ARequest(0, 0x52, bRev, &bLength) == 0)
				{
					//返回卡的序列号(防冲突)
					if(CFISO14443_3AAnticoll(0, bRev, &bLength) == 0)
					{
						// 序列号
						for(BYTE n = 0; n < bLength; n++)
						{
							sText.Format(L"%02X", bRev[n]);
							m_sCSN	+= sText;
						}
						UpdateData(FALSE);
						// 锁定一张卡
						if(CFISO14443_3ASelect(0, bRev, bLength, &bLength) == 0)
						{
							m_btnAuth.EnableWindow(TRUE);
						}
						else
						{
							AfxMessageBox(_T("No Tickets!  - CFISO14443_3ASelect -"));
						}
					}
					else
					{
						AfxMessageBox(_T("No Tickets!  - CFISO14443_3AAnticoll -"));
					}
				}
				else
				{
					AfxMessageBox(_T("No Tickets! : - CFISO14443_3ARequest -"));
				}
			}
		}
	}

	
}

void CMifareDlg::OnBtnAuh() 
{
	BYTE	bKey[32]	= {0};
	BYTE	bLength		= 0;
	BYTE	bKeyType	= 0;
	BYTE	bBlock		= 0;


	CString	sText		= _T("");
	CString	sTemp		= _T("");

	UpdateData(TRUE);

	if(m_sKey.IsEmpty())
	{
		m_sKey	= L"FFFFFFFFFFFF";
	}

	StrToHex(m_sKey.GetBuffer(12), bKey);
	m_sKey.ReleaseBuffer();

	if(m_cmbKey.GetCurSel() == 0)
		bKeyType	= 0x60;
	else
		bKeyType	= 0x61;
	bBlock		= m_cmbSector.GetCurSel() * 4 + m_cmbBlock.GetCurSel();

	// 认证
	if(CFISO14443_3AAuthentication2(0, bKeyType, bBlock, bKey) == 0)
	{
		m_btnRead.EnableWindow();
		m_btnWrite.EnableWindow();
	}
	else
	{
		AfxMessageBox(_T("认证错误"));
	}

	
}

void CMifareDlg::OnBtnRead() 
{
	BYTE	bRev[32]	= {0};
	BYTE	bBlock		= m_cmbSector.GetCurSel() * 4 + m_cmbBlock.GetCurSel();
	if(CFISO14443_3ARead(0, bBlock, bRev) == 0)
	{
		m_sData.Format(L"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
			bRev[0], bRev[1], bRev[2], bRev[3],
			bRev[4], bRev[5], bRev[6], bRev[7],
			bRev[8], bRev[9], bRev[10], bRev[11],
			bRev[12], bRev[13], bRev[14], bRev[15]);

		UpdateData(FALSE);
	}
	else
	{
		AfxMessageBox(_T("读卡错误"));
	}
}

void CMifareDlg::OnBtnWrite() 
{
	BYTE	bData[32]	= {0};
	BYTE	bBlock		= m_cmbSector.GetCurSel() * 4 + m_cmbBlock.GetCurSel();

	UpdateData(TRUE);

	StrToHex(m_sData.GetBuffer(32), bData);
	m_sData.ReleaseBuffer();

	if(CFISO14443_3AWrite(0, bBlock, bData))
	{
		AfxMessageBox(_T("写卡错误"));

	}
}

⌨️ 快捷键说明

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