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

📄 sdemodlg.cpp

📁 利用RFID
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//***************************************************
//		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 + -