?? mifaredlg.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 + -