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

📄 rtsetupdlg.cpp

📁 1553B板卡的源代码,只有购买板卡才能得到的好资料
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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 + -