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

📄 mtfilterdlg.cpp

📁 1553B板卡的源代码,只有购买板卡才能得到的好资料
💻 CPP
字号:
// MTFilterDlg.cpp : implementation file
//

#include "stdafx.h"
#include "sf1553.h"
#include "MTFilterDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMTFilterDlg dialog
static int oldrt=0;
static MT_CMD_FILTER_TABLE_STRUCT tpstFilterTable={0};

CMTFilterDlg::CMTFilterDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMTFilterDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMTFilterDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CMTFilterDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMTFilterDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMTFilterDlg, CDialog)
	//{{AFX_MSG_MAP(CMTFilterDlg)
	ON_BN_CLICKED(IDC_MTF_CK_ALLRTSET, OnMtfCkAllrtset)
	ON_CBN_SELCHANGE(IDC_MTF_CB_RTLIST, OnSelchangeMtfCbRtlist)
	ON_BN_CLICKED(IDC_MTF_BT_SETT, OnMtfBtSett)
	ON_BN_CLICKED(IDC_MTF_BT_SETR, OnMtfBtSetr)
	ON_BN_CLICKED(IDC_MTF_BT_SETTR, OnMtfBtSettr)
	ON_BN_CLICKED(IDC_MTF_BT_SETCLR, OnMtfBtSetclr)
	ON_BN_CLICKED(IDC_MTF_BT_LOADF, OnMtfBtLoadf)
	ON_BN_CLICKED(IDC_MTF_BT_SAVEF, OnMtfBtSavef)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMTFilterDlg message handlers

void CMTFilterDlg::OnMtfCkAllrtset() 
{
	// TODO: Add your control notification handler code here
		int i=0, j=0;

	if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_MTF_CK_ALLRTSET)) != BST_UNCHECKED)
	{
		this->OnSelchangeMtfCbRtlist();

		for (i=0; i<32; i++)
		{
			for (j=0; j<2; j++)
			{
				tpstFilterTable.Filter[i][j] = tpstFilterTable.Filter[oldrt][j];
			}
		}
	}

	
}

void CMTFilterDlg::OnSelchangeMtfCbRtlist() 
{
	// TODO: Add your control notification handler code here
	int i=0, j=0;
	int irt=0, isa=0;
	DWORD dwr=0, dwt=0;

	irt = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_RTLIST));

	//	Store Confiure
	//
	// Filter 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_MTF_CB_SA0+i))) // Rx & Tx
		{
			case 0: // clr
				dwr = dwr & 0x7FFFFFFF;
				dwt = dwt & 0x7FFFFFFF;
				break;

			case 1: // Tx
				dwt = dwt | 0x80000000;
				dwr = dwr & 0x7FFFFFFF;
				break;

			case 2: // Rx
				dwt = dwt & 0x7FFFFFFF;
				dwr = dwr | 0x80000000;
				break;

			case 3: // Rx & Tx
				dwr = dwr | 0x80000000;
				dwt = dwt | 0x80000000;
				break;
		}
	} // end of for (i=0; i<32; i++)
	tpstFilterTable.Filter[oldrt][0] = dwr; // Rx
	tpstFilterTable.Filter[oldrt][1] = dwt; // Tx

	//	same operation
	//
	if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_MTF_CK_ALLRTSET)) != BST_UNCHECKED)
	{
		for (i=0; i<32; i++)
		{
			for (j=0; j<2; j++)
			{
				tpstFilterTable.Filter[i][j] = tpstFilterTable.Filter[oldrt][j];
			}
		}
	}

	//	Resume Configure
	//
	oldrt = irt;

	// Filter Table
	dwr = tpstFilterTable.Filter[oldrt][0]; // Rx
	dwt = tpstFilterTable.Filter[oldrt][1]; // Tx
	for (i=0; i<32; i++)
	{
		if (((dwr&0x00000001)==0x00000001)&&((dwt&0x00000001)==0x00000001)) // Rx & Tx
		{
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), 3);
		}
		else
		{
			if (((dwr&0x00000001)!=0x00000001)&&((dwt&0x00000001)!=0x00000001)) // clr
			{
				ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), 0);
			}
			else
			{
				if ((dwr&0x00000001)==0x00000001) // Rx
				{
					ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), 2);
				}
				else // Tx
				{
					ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), 1);
				}
			} // end of // clr
		} // end of // Rx & Tx
		dwr = dwr>>1;
		dwt = dwt>>1;
	} // end of for (i=0; i<32; i++)

	
}

void CMTFilterDlg::OnMtfBtSett() 
{
	// TODO: Add your control notification handler code here
		int i=0;

	for (i=0; i<RT_ADDR_MAX; i++)
	{
		ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), 1); // Tx
	}

}

void CMTFilterDlg::OnMtfBtSetr() 
{
	// TODO: Add your control notification handler code here
	int i=0;

	for (i=0; i<RT_ADDR_MAX; i++)
	{
		ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), 2); // Rx
	}	
}

void CMTFilterDlg::OnMtfBtSettr() 
{
	// TODO: Add your control notification handler code here
	int i=0;

	for (i=0; i<RT_ADDR_MAX; i++)
	{
		ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), 3); // Tx & Rx
	}
}

void CMTFilterDlg::OnMtfBtSetclr() 
{
	// TODO: Add your control notification handler code here
	int i=0;

	for (i=0; i<RT_ADDR_MAX; i++)
	{
		ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), 0); // clr
	}

	
}

void CMTFilterDlg::OnMtfBtLoadf() 
{
	// TODO: Add your control notification handler code here
	FILE *pf;
	CString strpath;
	char flag[8];

	memset(flag, 0, sizeof(flag));

	CFileDialog OpenDlg(TRUE, TEXT(".mtf"), TEXT("BM Filter.mtf"), 
						OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
						TEXT("BM过滤配置文件 (*.mtf)|*.mtf||"), NULL);

	if ((OpenDlg.DoModal())!=IDOK)
	{
		return;
	}

	strpath = OpenDlg.GetPathName(); // create file
	pf = fopen(strpath, "r+b");
	if (pf==NULL)
	{
		MessageBox("打开文件失败!", "错误", MB_OK | MB_ICONERROR);
		return;
	}

	if (fread(flag, sizeof(char), 4, pf)!=4) // read message Head flag
	{
		fclose(pf);
		MessageBox("加载BM过滤配置文件失败!", "错误", MB_OK | MB_ICONERROR);
		return;
	}
	else
	{
		if (strcmp(flag, "MTFT")!=0)
		{
			fclose(pf);
			MessageBox("非BM过滤配置文件类型!", "错误", MB_OK | MB_ICONERROR);
			return;
		}
	}

	fread(&tpstFilterTable, sizeof(tpstFilterTable), 1, pf);

	fclose(pf); // close file

	this->ShowConf();
	
}

void CMTFilterDlg::OnMtfBtSavef() 
{
	// TODO: Add your control notification handler code here
	FILE *pf;
	CString strpath;
	BYTE selall=0;

	CFileDialog OpenDlg(FALSE, TEXT(".mtf"), TEXT("BM Filter.mtf"), 
						OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
						TEXT("BM过滤配置文件 (*.mtf)|*.mtf||"), NULL);

	if ((OpenDlg.DoModal())!=IDOK)
	{
		return;
	}

	this->OnSelchangeMtfCbRtlist();

	strpath = OpenDlg.GetPathName(); // create file
	pf = fopen(strpath, "w+b");
	if (pf==NULL)
	{
		MessageBox("创建文件失败!", "错误", MB_OK | MB_ICONERROR);
		return;
	}

	fwrite("MTFT", sizeof(char), 4, pf); // write message Head flag
	fwrite(&tpstFilterTable, sizeof(tpstFilterTable), 1, pf);
	fclose(pf); // close file	
}

void CMTFilterDlg::ShowConf()
{
	int i=0, j=0;
	DWORD dwr=0, dwt=0;

	//oldrt = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_RTLIST));
	ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_RTLIST), oldrt);

	// Filter 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_MTF_CB_SA0+i))) // Rx & Tx
		{
			case 0: // clr
				dwr = dwr & 0x7FFFFFFF;
				dwt = dwt & 0x7FFFFFFF;
				break;

			case 1: // Tx
				dwt = dwt | 0x80000000;
				dwr = dwr & 0x7FFFFFFF;
				break;

			case 2: // Rx
				dwt = dwt & 0x7FFFFFFF;
				dwr = dwr | 0x80000000;
				break;

			case 3: // Rx & Tx
				dwr = dwr | 0x80000000;
				dwt = dwt | 0x80000000;
				break;
		}
	} // end of for (i=0; i<32; i++)
	tpstFilterTable.Filter[oldrt][0] = dwr; // Rx
	tpstFilterTable.Filter[oldrt][1] = dwt; // Tx

	//	same operation
	//
	if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_MTF_CK_ALLRTSET)) != BST_UNCHECKED)
	{
		for (i=0; i<32; i++)
		{
			for (j=0; j<2; j++)
			{
				tpstFilterTable.Filter[i][j] = tpstFilterTable.Filter[oldrt][j];
			}
		}
	}

	return;
}

void CMTFilterDlg::OnOK() 
{
	// TODO: Add extra validation here
	int i=0, j=0, k=0;

	this->SaveConf();

	for (i=0; i<32; i++)
	{
		for (j=0; j<2; j++)
		{
			g_MTConf.stFilterTable.Filter[i][j] = 0;
		}
	}

	//	Store Values
	//
	for (i=0; i<32; i++)
	{
		for (j=0; j<2; j++)
		{
			g_MTConf.stFilterTable.Filter[i][j] = tpstFilterTable.Filter[i][j];
		}
	}

	if (g_CardHandle != NULL)
	{
		MT_SetCmdFilterTable(g_CardHandle, &(g_MTConf.stFilterTable));
	}
	else
	{
		// demo mode
	}
	
	CDialog::OnOK();
}

void CMTFilterDlg::SaveConf()
{
	int i=0, j=0;
	DWORD dwr=0, dwt=0;

	oldrt = ComboBox_GetCurSel(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_RTLIST));

	// Filter 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_MTF_CB_SA0+i))) // Rx & Tx
		{
			case 0: // clr
				dwr = dwr & 0x7FFFFFFF;
				dwt = dwt & 0x7FFFFFFF;
				break;

			case 1: // Tx
				dwt = dwt | 0x80000000;
				dwr = dwr & 0x7FFFFFFF;
				break;

			case 2: // Rx
				dwt = dwt & 0x7FFFFFFF;
				dwr = dwr | 0x80000000;
				break;

			case 3: // Rx & Tx
				dwr = dwr | 0x80000000;
				dwt = dwt | 0x80000000;
				break;
		}
	} // end of for (i=0; i<32; i++)
	tpstFilterTable.Filter[oldrt][0] = dwr; // Rx
	tpstFilterTable.Filter[oldrt][1] = dwt; // Tx

	//	same operation
	//
	if (Button_GetCheck(::GetDlgItem(this->m_hWnd, IDC_MTF_CK_ALLRTSET)) != BST_UNCHECKED)
	{
		for (i=0; i<32; i++)
		{
			for (j=0; j<2; j++)
			{
				tpstFilterTable.Filter[i][j] = tpstFilterTable.Filter[oldrt][j];
			}
		}
	}
}

BOOL CMTFilterDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	int i=0, j=0, k=0;
	char c[80];

	/////////////////////////////
	//  Init GUI

	// RT Addr Sel
	ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_RTLIST));
	for (i=0; i<RT_ADDR_MAX; i++)
	{
		itoa(i, c, 10);
		ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_RTLIST), TEXT(c));
	}

	// SA Addr Sel
	for (i=0; i<RT_ADDR_MAX; i++)
	{
		ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i));
		itoa(i, c, 10);
		ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), TEXT(""));
		ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), TEXT("发送(T)"));
		ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), TEXT("接收(R)"));
		ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MTF_CB_SA0+i), TEXT("发/收"));
	}

	//	Resume Values
	//
	for (i=0; i<32; i++)
	{
		for (j=0; j<2; j++)
		{
			tpstFilterTable.Filter[i][j] = g_MTConf.stFilterTable.Filter[i][j];
		}
	}

	oldrt = 0;

	this->ShowConf();
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CMTFilterDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}

⌨️ 快捷键说明

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