📄 sdemodlg.cpp
字号:
//------------------------------------------
// 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 + -