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

📄 uldlg.cpp

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

#include "stdafx.h"
//#include "CFDemo.h"
#include "UlDlg.h"
//#include "Com.h"

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

/////////////////////////////////////////////////////////////////////////////
// CUlDlg property page

IMPLEMENT_DYNCREATE(CUlDlg, CPropertyPage)

CUlDlg::CUlDlg() : CPropertyPage(CUlDlg::IDD)
{
	//{{AFX_DATA_INIT(CUlDlg)
	m_sCSN = _T("");
	m_sData = _T("");
	//}}AFX_DATA_INIT
}

CUlDlg::~CUlDlg()
{
}

void CUlDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUlDlg)
	DDX_Control(pDX, IDC_CMB_PAGE, m_cmbPage);
	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_Text(pDX, IDC_EDT_CSN, m_sCSN);
	DDX_Text(pDX, IDC_EDT_DATA, m_sData);
	DDV_MaxChars(pDX, m_sData, 8);
	//}}AFX_DATA_MAP
}


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

/////////////////////////////////////////////////////////////////////////////
// CUlDlg message handlers

BOOL CUlDlg::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	m_pParent	= (CMyPropetySheet*)GetParent();
	ASSERT(m_pParent);
	
	CString	sTemp;
	for(int n = 2; n < 16; n++)
	{
		sTemp.Format(L"%d", n);
		m_cmbPage.AddString(sTemp);
	}
	m_cmbPage.SetCurSel(0);

	m_btnRequest.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 CUlDlg::OnBtnRequest() 
{
	// 寻 UL
	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)
					{

						// 锁定一张卡
						if(CFULSelect(0, bRev) == 0)
						{
							// 序列号
							m_sCSN.Format(L"%02X%02X%02X%02X%02X%02X%02X",
								bRev[0], bRev[1], bRev[2], bRev[3]
								, bRev[4], bRev[5], bRev[6]);
							m_btnRead.EnableWindow(TRUE);
							m_btnWrite.EnableWindow(TRUE);
						}
						else
						{
							AfxMessageBox(_T("No Tickets!  - CFULSelect -"));
						}
					}
					else
					{
						AfxMessageBox(_T("No Tickets!  - CFISO14443_3AAnticoll -"));
					}
				}
				else
				{
					AfxMessageBox(_T("No Tickets! : - CFISO14443_3ARequest -"));
				}
			}
		}
	}

	UpdateData(FALSE);

}

void CUlDlg::OnBtnRead() 
{
	BYTE	bRev[32]	= {0};
	DWORD	nLength		= 1;

	m_sData.Empty();
	// 读卡
	int nError = CFISO14443_3ARead(0, m_cmbPage.GetCurSel()+2, bRev);
	if(nError == 0)
	{
		m_sData.Format(L"%02X%02X%02X%02X",
			bRev[0], bRev[1], bRev[2], bRev[3]);

	}
	else
	{
		m_sData.IsEmpty();
		AfxMessageBox(_T("Read Error!"));
	}
	UpdateData(FALSE);
}

void CUlDlg::OnBtnWrite() 
{
	BYTE	bSend[32]	= {0};
	BYTE	bRev[32]	= {0};

	// 数据
	UpdateData();
	if(m_sData.IsEmpty() || m_sData.GetLength() < 8)
	{
		GetDlgItem(IDC_EDT_DATA)->SetFocus();
		AfxMessageBox(L"input 8 chars");
		return;
	}
	StrToHex(m_sData.GetBuffer(8), bSend);
	m_sData.ReleaseBuffer();

	// 写卡
	int nError = CFULWrite(0, m_cmbPage.GetCurSel()+2, bSend, bRev);
	if(nError)
	{
		AfxMessageBox(L"Write Error!");
	}
	
}

⌨️ 快捷键说明

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