📄 mtfilterdlg.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 + -