📄 rtsetupdlg.cpp
字号:
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_SYNCLTAG)) != BST_UNCHECKED)
tpblRT_LoadTTagOnSync = TRUE;
else
tpblRT_LoadTTagOnSync = FALSE;
// Enable Ill Cmd Table
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_ENILLCMD)) != BST_UNCHECKED)
tpblEnIllCmdTable = TRUE;
else
tpblEnIllCmdTable = FALSE;
// Enable Ill Rx Data
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_ENILLRD)) != BST_UNCHECKED)
tpblEnIllRxData = TRUE;
else
tpblEnIllRxData = FALSE;
// RT Tx Mode
tpstRTTxMode.TxMode[oldrt][oldsa] = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTS_CB_TXMODE));
// Vector Word
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_VCTWORD), c, sizeof(c));
tpwdVctWord[oldrt] = (WORD) HEXS(c);
// Bit Word
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_SFTWORD), c, sizeof(c));
tpwdBitWord[oldrt] = (WORD) HEXS(c);
// RT Status Set
//
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_STBUSY)) != BST_UNCHECKED) // busy
tpstStatusWord[oldrt].Busy = TRUE;
else
tpstStatusWord[oldrt].Busy = FALSE;
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_STDYNBUS)) != BST_UNCHECKED) // bus control
tpstStatusWord[oldrt].DBusCtl = TRUE;
else
tpstStatusWord[oldrt].DBusCtl = FALSE;
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_STSVR)) != BST_UNCHECKED) // service
tpstStatusWord[oldrt].ServiceReq = TRUE;
else
tpstStatusWord[oldrt].ServiceReq = FALSE;
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_STSUBSYS)) != BST_UNCHECKED) // sub system flag
tpstStatusWord[oldrt].SubSystemFlag = TRUE;
else
tpstStatusWord[oldrt].SubSystemFlag = FALSE;
if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_STTMIFLAG)) != BST_UNCHECKED) // terminal flag
tpstStatusWord[oldrt].TerminalFlag = TRUE;
else
tpstStatusWord[oldrt].TerminalFlag = FALSE;
// Ill Cmd Table
//
dwr = 0;
dwt = 0;
for (i=0; i<32; i++)
{
dwr = dwr>>1;
dwt = dwt>>1;
switch (ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_RTS_CB_ILL1+i))) // Rx & Tx Ill
{
case 0: // Rx & Tx unIll
dwr = dwr & 0x7FFFFFFF;
dwt = dwt & 0x7FFFFFFF;
break;
case 1: // Tx Ill
dwr = dwr & 0x7FFFFFFF;
dwt = dwt | 0x80000000;
break;
case 2: // Rx Ill
dwr = dwr | 0x80000000;
dwt = dwt & 0x7FFFFFFF;
break;
case 3: // Rx & Tx Ill
dwr = dwr | 0x80000000;
dwt = dwt | 0x80000000;
break;
}
} // end of for (i=0; i<32; i++)
tpstIllCmdTable.CmdTable[oldrt][0][oldsa] = dwr; // Rx
tpstIllCmdTable.CmdTable[oldrt][1][oldsa] = dwt; // Tx
// same operating
//
if ((Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_ALLRTSAME)) != BST_UNCHECKED)&&
(Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_ALLSASAME)) == BST_UNCHECKED)) // same SA
{
for (j=0; j<2; j++)
{
for (k=0; k<32; k++)
{
tpstIllCmdTable.CmdTable[oldrt][j][k] = tpstIllCmdTable.CmdTable[oldrt][j][oldsa];
}
}
}
else if ((Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_ALLRTSAME)) == BST_UNCHECKED)&&
(Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_ALLSASAME)) != BST_UNCHECKED)) // same RT
{
for (i=0; i<32; i++)
{
for (j=0; j<2; j++)
{
tpstIllCmdTable.CmdTable[i][j][oldsa] = tpstIllCmdTable.CmdTable[oldrt][j][oldsa];
}
}
}
else if ((Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_ALLRTSAME)) != BST_UNCHECKED)&&
(Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_ALLSASAME)) != BST_UNCHECKED)) // All same
{
for (i=0; i<32; i++)
{
for (j=0; j<2; j++)
{
for (k=0; k<32; k++)
{
tpstIllCmdTable.CmdTable[i][j][k] = tpstIllCmdTable.CmdTable[oldrt][j][oldsa];
}
}
}
}
}
void CRTSetupDlg::OnOK()
{
// TODO: Add extra validation here
int i=0, j=0, k=0;
this->SaveConf();
/////////////////////////////
// store Values
for (i=0; i<32; i++)
{
for (j=0; j<32; j++)
{
g_RTTxMode.TxMode[i][j] = tpstRTTxMode.TxMode[i][j];
}
}
g_RTConf.dwRTSel = tpdwRTSel;
g_RTConf.blRT_ClearTTagOnSync = tpblRT_ClearTTagOnSync;
g_RTConf.blRT_LoadTTagOnSync = tpblRT_LoadTTagOnSync;
for (i=0; i<RT_ADDR_MAX; i++)
{
g_RTStatusWord[i].Busy = tpstStatusWord[i].Busy;
g_RTStatusWord[i].DBusCtl = tpstStatusWord[i].DBusCtl;
g_RTStatusWord[i].ServiceReq = tpstStatusWord[i].ServiceReq;
g_RTStatusWord[i].SubSystemFlag = tpstStatusWord[i].SubSystemFlag;
g_RTStatusWord[i].TerminalFlag = tpstStatusWord[i].TerminalFlag;
}
g_RTConf.blEnIllCmdTable = tpblEnIllCmdTable;
for (i=0; i<RT_ADDR_MAX; i++)
{
g_RTConf.wdVctWord[i] = tpwdVctWord[i];
g_RTConf.wdBitWord[i] = tpwdBitWord[i];
}
for (i=0; i<32; i++)
{
for (j=0; j<2; j++)
{
for (k=0; k<32; k++)
{
g_RTConf.stIllCmdTable.CmdTable[i][j][k] = tpstIllCmdTable.CmdTable[i][j][k];
}
}
}
g_RTConf.blEnIllRxData = tpblEnIllRxData;
// Setup Card
//
// Setup Card
if (g_CardHandle != NULL)
{
//RT数据发送模式:单缓冲或循环缓冲
RT_TxMode(g_CardHandle, &(g_RTTxMode));
//RT使能
if (!RT_Select(g_CardHandle, g_RTConf.dwRTSel))
{
MessageBox(TEXT("RT 地址选择失败!"), TEXT("RT 错误"), MB_OK | MB_ICONERROR);
return;
}
//清置时标
RT_ClearTTagOnSync(g_CardHandle, g_RTConf.blRT_ClearTTagOnSync);
RT_LoadTTagOnSync(g_CardHandle, g_RTConf.blRT_LoadTTagOnSync);
//设置RT的状态字
for (i=0; i<RT_ADDR_MAX; i++)
{
if (!RT_Status_Set(g_CardHandle, i, &(g_RTStatusWord[i])))
{
MessageBox(TEXT("RT 状态字设置失败!"), TEXT("RT 错误"), MB_OK | MB_ICONERROR);
return;
}
}
//RT非法指令表使能
if (!RT_IllegalCmd(g_CardHandle, g_RTConf.blEnIllCmdTable))
{
MessageBox(TEXT("RT 非法指令表失能失败!"), TEXT("RT 错误"), MB_OK | MB_ICONERROR);
return;
}
//RT非法指令接收数据使能
if (!RT_RevIllegalData(g_CardHandle, g_RTConf.blEnIllRxData))
{
MessageBox(TEXT("RT 非法指令接收数据使能失败!"), TEXT("RT 错误"), MB_OK | MB_ICONERROR);
return;
}
//RT非法指令表设置
RT_SetIllegalCmdTable(g_CardHandle, &(g_RTConf.stIllCmdTable));
//RT设置矢量字
for (i=0; i<RT_ADDR_MAX; i++)
{
RT_SetVectorWord(g_CardHandle, i, g_RTConf.wdVctWord[i]);
}
//RT设置自检字(Build In Test)
for (i=0; i<RT_ADDR_MAX; i++)
{
RT_SetBITWord(g_CardHandle, i, g_RTConf.wdBitWord[i]);
}
}
else
{
// demo mode
}
CDialog::OnOK();
}
void CRTSetupDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
void CRTSetupDlg::OnKillfocusRtsEdSftword()
{
// TODO: Add your control notification handler code here
if (Edit_LineLength(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_SFTWORD), -1)==0)
{
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_SFTWORD), TEXT("0"));
}
else
{
char c[80];
memset(c, 0, sizeof(c));
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_SFTWORD), c, sizeof(c));
strupr(c);
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_SFTWORD), TEXT(c));
}
}
void CRTSetupDlg::OnKillfocusRtsEdVctword()
{
// TODO: Add your control notification handler code here
if (Edit_LineLength(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_VCTWORD), -1)==0)
{
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_VCTWORD), TEXT("0"));
}
else
{
char c[80];
memset(c, 0, sizeof(c));
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_VCTWORD), c, sizeof(c));
strupr(c);
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_VCTWORD), TEXT(c));
}
}
void CRTSetupDlg::OnChangeRtsEdVctword()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
char c[80], s[80];
char tc='\0';
int i=0;
int l=0, j=0;
BOOL isErr=FALSE;
DWORD dw=0;
l = Edit_LineLength(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_VCTWORD), -1);
if (l==0)
return;
memset(s, 0, sizeof(s));
memset(c, 0, sizeof(c));
dw = Edit_GetSel(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_VCTWORD));
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_VCTWORD), c, sizeof(c)); // get data string with HEX
// analyze data string with HEX
//
j=0;
for (i=0; i<l; i++)
{
tc = c[i];
if (((tc>='a')&&(tc<='f'))||((tc>='0')&&(tc<='9'))||((tc>='A')&&(tc<='F')))
{
s[j] = tc;
j++;
}
else
{
isErr=TRUE;
}
}
if (!isErr)
return;
// write back the HEX value
//
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_VCTWORD), TEXT(s));
Edit_SetSel(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_VCTWORD), HIWORD(dw)-1, HIWORD(dw)-1);
}
void CRTSetupDlg::OnChangeRtsEdSftword()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
char c[80], s[80];
char tc='\0';
int i=0;
int l=0, j=0;
BOOL isErr=FALSE;
DWORD dw=0;
l = Edit_LineLength(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_SFTWORD), -1);
if (l==0)
return;
memset(s, 0, sizeof(s));
memset(c, 0, sizeof(c));
dw = Edit_GetSel(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_SFTWORD));
::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_SFTWORD), c, sizeof(c)); // get data string with HEX
// analyze data string with HEX
//
j=0;
for (i=0; i<l; i++)
{
tc = c[i];
if (((tc>='a')&&(tc<='f'))||((tc>='0')&&(tc<='9'))||((tc>='A')&&(tc<='F')))
{
s[j] = tc;
j++;
}
else
{
isErr=TRUE;
}
}
if (!isErr)
return;
// write back the HEX value
//
::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_SFTWORD), TEXT(s));
Edit_SetSel(::GetDlgItem(this->m_hWnd, IDC_RTS_ED_SFTWORD), HIWORD(dw)-1, HIWORD(dw)-1);
}
void CRTSetupDlg::OnIdcRtsBtEnallrt()
{
// TODO: Add your control notification handler code here
tpdwRTSel = 0x7FFFFFFF;
Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_ENRT), BST_CHECKED);
this->OnSelchangeRtsCbRtsel();
this->m_btEnAllRt.EnableWindow(FALSE);
this->m_btDEAllRt.EnableWindow(TRUE);
}
void CRTSetupDlg::OnIdcRtsBtDeallrt()
{
// TODO: Add your control notification handler code here
tpdwRTSel = 0x00000000;
Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_RTS_CK_ENRT), BST_UNCHECKED);
this->OnSelchangeRtsCbRtsel();
this->m_btEnAllRt.EnableWindow(TRUE);
this->m_btDEAllRt.EnableWindow(FALSE);
}
void CRTSetupDlg::OnRtsCkEnrt()
{
// TODO: Add your control notification handler code here
tpdwRTSel = tpdwRTSel&0x7FFFFFFF;
if (tpdwRTSel == 0x7FFFFFFF)
{
this->m_btEnAllRt.EnableWindow(FALSE);
this->m_btDEAllRt.EnableWindow(TRUE);
}
else if (tpdwRTSel == 0x00000000)
{
this->m_btEnAllRt.EnableWindow(TRUE);
this->m_btDEAllRt.EnableWindow(FALSE);
}
else
{
this->m_btEnAllRt.EnableWindow(TRUE);
this->m_btDEAllRt.EnableWindow(TRUE);
}
this->OnSelchangeRtsCbRtsel();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -