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

📄 sdemodlg.cpp

📁 利用RFID
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	//------------------------------------------
	//  Set Data Length, Function code, RF Type
	COMBuf[0] =  19 ;
	COMBuf[1] = 'K';
	COMBuf[2] = '1';
	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);

	//------------------------------------------
	//  Set Data to write
	CEdit* pWData = (CEdit*) GetDlgItem(IDC_WRITE_EDIT);
	pWData->GetWindowText (m_WriteData);
	pAnsiTemp = WChar2SChar(m_WriteData);
	BufMovBuf (pCOMBuf+14, (BYTE*)pAnsiTemp, 8);
	memset (pCOMBuf+6, '0', 8);

	SendCommand();

	if ( RecieveData() )
	{
		dwAnsiByte = (DWORD)COMBuf[0];
		if (dwAnsiByte == 1)
		{
			BufMovBuf ( pWriteBuf, pCOMBuf+3, 1 );
			dwAnsiByte = 1;
			if (WriteBuf[0] == 'N') 
				SetDlgItemText (IDC_STATUS_EDIT, TEXT("Write failed."));
			else
			{
				FunFlag = true;
				sndPlaySound (TEXT("Alarm2.wav"), SND_ASYNC);
			}
		}
		else
		{
			if (COMBuf[4] == '2') SetDlgItemText (IDC_STATUS_EDIT, TEXT("This page is locked."));
			else SetDlgItemText (IDC_STATUS_EDIT, TEXT("Write failed."));
			WriteBuf[0] = 'N';
			dwAnsiByte = 1;
		}
		pUniData = SChar2WChar ((char*)pWriteBuf, dwAnsiByte);
		ShowStr = pUniData;
		SetDlgItemText (IDC_SHOW_EDIT, ShowStr);				// Show Data.
	}
	else
	{
		SetDlgItemText (IDC_STATUS_EDIT, TEXT("Time Out !!"));	// Time Out !!
		FunFlag = true;
	}

}

//////////////////////////////////////////////////////////////////////////////////////////////
//  Lock a Block
//
void CSdemoDlg::OnLockButton() 
{

	if (hComPort == INVALID_HANDLE_VALUE)  return;

	SetDlgItemText (IDC_STATUS_EDIT, TEXT(""));

	BYTE    LockBuf[64];
	BYTE*   pLockBuf = LockBuf;
	WCHAR*	pUniData = NULL;
	DWORD	dwAnsiByte = 0;
	CString m_Page;
	char*	pAnsiTemp;

	memset (pLockBuf, '\0', 64);
	
	//------------------------------------------
	COMBuf[0] =  3 ;
	COMBuf[1] = 'K';
	COMBuf[2] = '2';
	COMBuf[3] = Type;

	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();
	
	if ( RecieveData() )
	{
		dwAnsiByte = (DWORD)COMBuf[0];
		if (dwAnsiByte == 1)
		{
			LockBuf[0] = COMBuf[3];
			dwAnsiByte = 1;
			if (LockBuf[0] == 'Y') 
			{
				FunFlag = true;
				sndPlaySound (TEXT("Alarm2.wav"), SND_ASYNC);
			}
		}
		else
		{
			dwAnsiByte = 0;
		}
		pUniData = SChar2WChar ((char*)pLockBuf, dwAnsiByte);
		ShowStr = pUniData;
		SetDlgItemText (IDC_SHOW_EDIT, ShowStr);				// Show Data.
	}
	else
	{
		SetDlgItemText (IDC_STATUS_EDIT, TEXT("Time Out !!"));	// Time Out !!
		FunFlag = true;
	}

}

//////////////////////////////////////////////////////////////////////////////////////////////
//  Read firmware version
//
void CSdemoDlg::OnVersionButton() 
{
	FunFlag = true;
	
	if (hComPort == INVALID_HANDLE_VALUE)	return;

	SetDlgItemText (IDC_STATUS_EDIT, TEXT(""));

	BYTE    VerBuf[64];
	BYTE*   pVerBuf = VerBuf;
	WCHAR*	pUniData = NULL;
	DWORD	dwAnsiByte = 0;

	memset (pVerBuf, '\0', 64);

	COMBuf[0] =  0 ;
	COMBuf[1] = 'E';
	COMBuf[2] = '1';

	SendCommand();			// Send Command.

	if ( RecieveData() )
	{
		BufMovBuf ( pVerBuf, pCOMBuf+3, (int)COMBuf[0] );
		dwAnsiByte = (DWORD)COMBuf[0];
		pUniData = SChar2WChar ((char*)pVerBuf, dwAnsiByte);
		ShowStr = pUniData;
		SetDlgItemText (IDC_SHOW_EDIT, ShowStr);				// Show Data.
	}
	else
		SetDlgItemText (IDC_STATUS_EDIT, TEXT("Time Out !!"));	// Time Out !!
	
}

///////////////////////////////////////////////////////////////////////////////////////////////
// Reset CF card
// 
void CSdemoDlg::OnResetButton() 
{
	if (hComPort == INVALID_HANDLE_VALUE)	return;

	SetDlgItemText (IDC_STATUS_EDIT, TEXT(""));

	BYTE    VerBuf[64];
	BYTE*   pVerBuf = VerBuf;
	WCHAR*	pUniData = NULL;
	DWORD	dwAnsiByte = 0;

	memset (pVerBuf, '\0', 64);

	COMBuf[0] =  0 ;
	COMBuf[1] = 'E';
	COMBuf[2] = '2';

	SendCommand();			// Send Command.

	if ( RecieveData() )
	{
		SetDlgItemText (IDC_STATUS_EDIT, TEXT("Y"));			// Show Data.
	}
	else
		SetDlgItemText (IDC_STATUS_EDIT, TEXT("Time Out !!"));	// Time Out !!	
	
}

//////////////////////////////////////////////////////////////////////////////////////////////
//  Select a Command
//  
void CSdemoDlg::OnSelchangeCmdCombo() 
{
	CComboBox* pCmd = (CComboBox*) GetDlgItem(IDC_CMD_COMBO);
	CmdCode = pCmd->GetCurSel();
}

//////////////////////////////////////////////////////////////////////////////////////////////
//  Transmit order
//
void CSdemoDlg::OnSendButton() 
{
	int i,j;
	i = GetDlgItemInt(IDC_READTIME_EDIT, NULL, TRUE);
	if (i>50)
	{
		i = 50;
		SetDlgItemInt(IDC_READTIME_EDIT, 50, TRUE);
	}
	FunFlag = false;
	
	for (j = 0; j < i; j++)
	{
		switch (CmdCode)
		{
		case 0:
			OnUidButton();
			break;
		case 1:
			OnReadButton();
			break;
		case 2:
			OnWriteButton();
			break;
		default:
			CmdCode = 0;
			break;
		}
		Sleep(200);				// delay 0.2 s
		if (FunFlag) break;
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////
//
//	Sub Procedure
//
//////////////////////////////////////////////////////////////////////////////////////////////

//--------------------------------------------------------------------------------------------
//  Buf Mov Buf
//
void BufMovBuf (BYTE* pDBuf, BYTE* pSBuf, int length)
{
	if (length < 1)
		return;

	for (int i = 0; i < length; i++)
		*(pDBuf+i) = *(pSBuf+i);
}

//---------------------------------------------------------------------------------------
//   Check Sum routine
// 
BYTE CheckSum(BYTE* pBuf, int length)
{
	BYTE bcc = 0x00;
	int  i=0;
	for(i=0; i< length; i++)
		bcc ^= *(pBuf + i);

	bcc |= 0x20;
	return bcc;
}

//----------------------------------------------------------------------------------
//  Send Command 
//
void SendCommand(void)
{
	BYTE    SendBuf[80];
	BYTE*   pSendBuf = SendBuf;
	DWORD	cBytes;
	int		length = (int)COMBuf[0];	// save DATA length

	SendBuf[0] = SOH;
	SendBuf[1] = 'S';			// PT
	SendBuf[2] = '0';			// ID1
	SendBuf[3] = '1';			// ID2
	SendBuf[4] = COMBuf[1];		// FC1
	SendBuf[5] = COMBuf[2];		// FC2
	SendBuf[6] = STX;

	BufMovBuf ( pSendBuf+7, pCOMBuf+3, length );
	
	SendBuf[length+7] = ETX;
	SendBuf[length+8] = CheckSum( pSendBuf, length+8 );
	//
	WriteFile ( hComPort, pSendBuf, length+9, &cBytes, 0 );

}

//----------------------------------------------------------------------------------------
//  Recieve Data
//
bool RecieveData(void)
{
	bool	RxOK	  = false;		// True if Recieving completes
	BYTE	InBuf[128];				// Input Buffer
	BYTE*	pInBuf	  = InBuf;		// Pointer to Input Buffer
	int		count	  = 0;			// Time Out Counter
	int		step	  = 0;			// Rxd step
	int		index	  = 0;			// Input Buffer Offset
	DWORD	cBytes	  = 0;			
	int 	total	  = 0;			// Recieved Total Data Counter
	BYTE	bcc		  = 0x00;		// Check Sum
	BYTE	i		  = 0x00;
	BYTE	fc1		  = COMBuf[1];
	BYTE	fc2		  = COMBuf[2];
	
	memset (pInBuf, '\0', 128);

	while(!RxOK)	
	{

	/*	ReadFile

⌨️ 快捷键说明

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