📄 sdemodlg.cpp
字号:
//***************************************************
// Hong Kong RFID Ltd.2005
// www.hk-rfid.com
// Project Name : RFID_HF_CF
// Project file : Sdemo.vcp
// Date : 11/07/2005
//***************************************************
#include "stdafx.h"
#include "Sdemo.h"
#include "SdemoDlg.h"
#include "Mmsystem.h"
#include <string.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Definition
//
#define SOH 0x01
#define STX 0x02
#define ETX 0x03
/////////////////////////////////////////////////////////////////////////////
// Global Variables
//
HANDLE hComPort = INVALID_HANDLE_VALUE;
BYTE COMBuf[64];
BYTE* pCOMBuf = COMBuf;
CString ShowStr = TEXT("");
char Type = 'M';
int CmdCode = 0;
bool FunFlag = false;
//////////////////////////////////////////////////////////////////////////////
// Function Prototypes
//
void BufMovBuf (BYTE* pDBuf, BYTE* pSBuf, int length);
BYTE CheckSum(BYTE* pBuf, int length);
void SendCommand(void);
bool RecieveData(void);
char* WChar2SChar(CString &s);
WCHAR* SChar2WChar(char* ansitring, DWORD dwAnsiBytes);
/////////////////////////////////////////////////////////////////////////////
// CSdemoDlg dialog
CSdemoDlg::CSdemoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSdemoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSdemoDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CSdemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSdemoDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSdemoDlg, CDialog)
//{{AFX_MSG_MAP(CSdemoDlg)
ON_BN_CLICKED(IDC_OPEN_BUTTON, OnOpenButton)
ON_BN_CLICKED(IDC_CLOSE_BUTTON, OnCloseButton)
ON_BN_CLICKED(IDC_UID_BUTTON, OnUidButton)
ON_BN_CLICKED(IDC_READ_BUTTON, OnReadButton)
ON_BN_CLICKED(IDC_WRITE_BUTTON, OnWriteButton)
ON_BN_CLICKED(IDC_LOCK_BUTTON, OnLockButton)
ON_BN_CLICKED(IDC_VERSION_BUTTON, OnVersionButton)
ON_BN_CLICKED(IDC_RESET_BUTTON, OnResetButton)
ON_CBN_SELCHANGE(IDC_CMD_COMBO, OnSelchangeCmdCombo)
ON_BN_CLICKED(IDC_SEND_BUTTON, OnSendButton)
ON_BN_CLICKED(IDC_BTN_READ, OnBtnRead)
ON_BN_CLICKED(IDC_BTN_WRITE, OnBtnWrite)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//message handlers
BOOL CSdemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
CComboBox* pCom = (CComboBox*) GetDlgItem (IDC_COM_COMBO);
CComboBox* pPage = (CComboBox*) GetDlgItem (IDC_PAGE_COMBO);
CComboBox* pCmd = (CComboBox*) GetDlgItem (IDC_CMD_COMBO);
SetDlgItemText(IDC_WRITE_EDIT, TEXT("12345678"));
SetDlgItemText(IDC_READTIME_EDIT, TEXT("1"));
pCom->SetCurSel(6);// almost default value is com 7
pPage->SetCurSel(0);
pCmd->SetCurSel(0);
return TRUE; // return TRUE unless you set the focus to a control
}
////////////////////////////////////////////////////////////////////////////////////////////
// COM PORT open
//
void CSdemoDlg::OnOpenButton()
{
if (hComPort != INVALID_HANDLE_VALUE)
{
SetDlgItemText (IDC_STATUS_EDIT, TEXT("Already opened."));
return;
}
// Open the selected COM port.
CComboBox* pSelCom;
CString m_temp;
DCB dcb;
COMMTIMEOUTS cto;
pSelCom = (CComboBox*) GetDlgItem(IDC_COM_COMBO);
pSelCom->GetLBText(pSelCom->GetCurSel(),m_temp);
hComPort = CreateFile ( m_temp, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL );
if (hComPort == INVALID_HANDLE_VALUE)
{
SetDlgItemText (IDC_STATUS_EDIT, TEXT("Open failed."));
return;
}
else
{
SetDlgItemText (IDC_STATUS_EDIT, TEXT("COM port Opened"));
// Configure com port.
dcb.DCBlength = sizeof (dcb);
GetCommState (hComPort, &dcb);
dcb.BaudRate = CBR_9600;
dcb.fParity = FALSE;
dcb.fNull = FALSE;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
SetCommState (hComPort, &dcb);
// Set the timeouts. Set infinite read timeout.
cto.ReadIntervalTimeout = 1;
cto.ReadTotalTimeoutMultiplier = 1;
cto.ReadTotalTimeoutConstant = 1;
cto.WriteTotalTimeoutMultiplier = 0;
cto.WriteTotalTimeoutConstant = 0;
SetCommTimeouts (hComPort, &cto);
}
}
////////////////////////////////////////////////////////////////////////////////////////////
// COM PORT close
//
void CSdemoDlg::OnCloseButton()
{
if (hComPort != INVALID_HANDLE_VALUE)
{
CloseHandle(hComPort);
SetDlgItemText(IDC_STATUS_EDIT, TEXT("COM port closed."));
hComPort = INVALID_HANDLE_VALUE;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
// UID Read
//
void CSdemoDlg::OnUidButton()
{
if (hComPort == INVALID_HANDLE_VALUE) return;
SetDlgItemText (IDC_TAG_ID, TEXT(""));
SetDlgItemText (IDC_STATUS_EDIT, TEXT("Get Tag ID"));
BYTE UIDBuf[64];
BYTE* pUIDBuf = UIDBuf;
WCHAR* pUniData = NULL;
DWORD dwAnsiByte = 0;
memset (pUIDBuf, '\0', 64);
//---------------------------------------------------------------
// Set Data length, Function code, RF type
COMBuf[0] = 0 ;
COMBuf[1] = 'A';
COMBuf[2] = '1';
SendCommand(); // Send Command.
if ( RecieveData() )
{
dwAnsiByte = (DWORD)COMBuf[0];
if (dwAnsiByte == 17)
{
BufMovBuf ( pUIDBuf, pCOMBuf+4, 16 );
dwAnsiByte = 16;
sndPlaySound (TEXT("Alarm2.wav"), SND_ASYNC);
FunFlag = true;
}
else
{
SetDlgItemText (IDC_STATUS_EDIT, TEXT("Read failed."));
BufMovBuf ( pUIDBuf, pCOMBuf+3, 1 );
dwAnsiByte = 1;
}
pUniData = SChar2WChar ((char*)pUIDBuf, dwAnsiByte);
ShowStr = pUniData;
SetDlgItemText (IDC_TAG_ID, ShowStr); // Show Data.
}
else
{
SetDlgItemText (IDC_STATUS_EDIT, TEXT("Time Out !!")); // Time Out !!
FunFlag = true;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
// Read a Block
//
void CSdemoDlg::OnReadButton()
{
if (hComPort == INVALID_HANDLE_VALUE) return;
SetDlgItemText (IDC_STATUS_EDIT, TEXT(""));
BYTE ReadBuf[64];
BYTE* pReadBuf = ReadBuf;
WCHAR* pUniData = NULL;
DWORD dwAnsiByte = 0;
CString m_Page;
char* pAnsiTemp;
memset (pReadBuf, '\0', 64);
//------------------------------------------
// Set Data length, Function code, RF type
COMBuf[0] = 3 ;
COMBuf[1] = 'K';
COMBuf[2] = '0';
COMBuf[3] = Type;
//------------------------------------------
// Set Page
CComboBox* pSelPage = (CComboBox*) GetDlgItem(IDC_PAGE_COMBO);
pSelPage->GetLBText(pSelPage->GetCurSel(),m_Page);
pAnsiTemp = WChar2SChar(m_Page);
COMBuf[4] = *(pAnsiTemp);
COMBuf[5] = *(pAnsiTemp + 1);
SendCommand();
SetDlgItemText (IDC_STATUS_EDIT, TEXT("Read Tag Data"));
if ( RecieveData() )
{
dwAnsiByte = (DWORD)COMBuf[0];
if (dwAnsiByte == 20)
{
BufMovBuf ( pReadBuf, pCOMBuf+15, 8 ); // Display 4 Bytes
dwAnsiByte = 8;
sndPlaySound (TEXT("Alarm2.wav"), SND_ASYNC);
FunFlag = true;
}
else
{
SetDlgItemText (IDC_STATUS_EDIT, TEXT("Read failed."));
BufMovBuf ( pReadBuf, pCOMBuf+3, 1 );
dwAnsiByte = 1;
}
pUniData = SChar2WChar ((char*)pReadBuf, dwAnsiByte);
ShowStr = pUniData;
SetDlgItemText (IDC_WRITE_EDIT, ShowStr); // Show Data.
SetDlgItemText (IDC_SHOW_EDIT, TEXT("Get Block Data Successful")); // Show Data.
}
else
{
SetDlgItemText (IDC_STATUS_EDIT, TEXT("Time Out !!")); // Time Out !!
FunFlag = true;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
// Read a Block
//
void CSdemoDlg::OnWriteButton()
{
if (hComPort == INVALID_HANDLE_VALUE) return;
SetDlgItemText (IDC_STATUS_EDIT, TEXT(""));
BYTE WriteBuf[64];
BYTE* pWriteBuf = WriteBuf;
WCHAR* pUniData = NULL;
DWORD dwAnsiByte = 0;
CString m_Page, m_WriteData;
char* pAnsiTemp;
memset (pWriteBuf, '\0', 64);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -