📄 ratelimit.cpp
字号:
// RateLimit.cpp : implementation file
//
#include "stdafx.h"
#include "DgbTool.h"
#include "RateLimit.h"
#include "ks95mspi.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRateLimit property page
IMPLEMENT_DYNCREATE(CRateLimit, CPropertyPage)
CRateLimit::CRateLimit() : CPropertyPage(CRateLimit::IDD)
{
int i;
WORD wTemp;
BYTE bData;
CDgbToolApp *pApp;
pApp = (CDgbToolApp *)AfxGetApp();
// Block background MIB read
pApp->m_bHWSemaphore = NOMIBREAD;
//
// Read enable bits
//
for ( i = 0; i < PORTCOUNT; i++)
{
bData = pApp->ReadData ( ENABLERATELIMITPORT1 + i * PORTCTLREGOFFSET );
m_TxEnableRateLimitHi[i] = ( bData & TXRATELIMITHIENABLE ) ? 1:0;
m_TxEnableRateLimitLo[i] = ( bData & TXRATELIMITLOENABLE ) ? 1:0;
m_RxEnableRateLimitHi[i] = ( bData & RXRATELIMITHIENABLE ) ? 1:0;
m_RxEnableRateLimitLo[i] = ( bData & RXRATELIMITLOENABLE ) ? 1:0;
m_bTxDisablePriority[i] = ( bData & TXDIFFPRIORITYCTL ) ? 0 : 1;
m_bRxDisablePriority[i] = ( bData & RXDIFFPRIORITYCTL ) ? 0 : 1;
}
for ( i = 0; i < PORTCOUNT; i++ )
{
wTemp = pApp->ReadData ( TXRATELIMITHIPORT1LSB + i * PORTCTLREGOFFSET );
wTemp |= ( pApp->ReadData ( TXRATELIMITPORT1MSB + i * PORTCTLREGOFFSET ) & RATELIMITHIMSBMASK ) << 8;
m_sTxRateLimitHi[i].Format ("%d", wTemp * RATEUNIT / 1000);
wTemp = pApp->ReadData ( TXRATELIMITLOPORT1LSB + i * PORTCTLREGOFFSET );
wTemp |= ( pApp->ReadData ( TXRATELIMITPORT1MSB + i * PORTCTLREGOFFSET ) & RATELIMITLOMSBMASK ) << 4;
m_sTxRateLimitLo[i].Format ("%d", wTemp * RATEUNIT / 1000);
wTemp = pApp->ReadData ( RXRATELIMITHIPORT1LSB + i * PORTCTLREGOFFSET );
wTemp |= ( pApp->ReadData ( RXRATELIMITPORT1MSB + i * PORTCTLREGOFFSET ) & RATELIMITHIMSBMASK ) << 8;
m_sRxRateLimitHi[i].Format ("%d", wTemp * RATEUNIT / 1000);
wTemp = pApp->ReadData ( RXRATELIMITLOPORT1LSB + i * PORTCTLREGOFFSET );
wTemp |= ( pApp->ReadData ( RXRATELIMITPORT1MSB + i * PORTCTLREGOFFSET ) & RATELIMITLOMSBMASK ) << 4;
m_sRxRateLimitLo[i].Format ("%d", wTemp * RATEUNIT / 1000);
}
wTemp = pApp->ReadData ( PORT1CTL11 );
m_bEnableFlowControl = ( wTemp & RXFLOWCTRLLOENABLE ) ? 1 : 0;
// Release background MIB read
pApp->m_bHWSemaphore = ~NOMIBREAD;
}
CRateLimit::~CRateLimit()
{
}
void CRateLimit::DoDataExchange(CDataExchange* pDX)
{
int i;
CPropertyPage::DoDataExchange(pDX);
for ( i = 0; i < PORTCOUNT; i++ )
{
DDX_Control(pDX, IDC_EDIT21 + i, m_cTxRateLimitHi[ i ]);
DDX_Text(pDX, IDC_EDIT21 + i, m_sTxRateLimitHi[ i ]);
DDV_MaxChars(pDX, m_sTxRateLimitHi[ i ], 3);
DDX_Control(pDX, IDC_EDIT26 + i, m_cTxRateLimitLo[ i ]);
DDX_Text(pDX, IDC_EDIT26 + i, m_sTxRateLimitLo[ i ]);
DDV_MaxChars(pDX, m_sTxRateLimitLo[ i ], 3);
DDX_Control(pDX, IDC_EDIT31 + i, m_cRxRateLimitHi[ i ]);
DDX_Text(pDX, IDC_EDIT31 + i, m_sRxRateLimitHi[ i ]);
DDV_MaxChars(pDX, m_sRxRateLimitHi[ i ], 3);
DDX_Control(pDX, IDC_EDIT36 + i, m_cRxRateLimitLo[ i ]);
DDX_Text(pDX, IDC_EDIT36 + i, m_sRxRateLimitLo[ i ]);
DDV_MaxChars(pDX, m_sRxRateLimitLo[ i ], 3);
}
for ( i = 0; i < PORTCOUNT; i++ )
{
DDX_Check(pDX, IDC_CHECK1 + i, m_TxEnableRateLimitHi[ i ]);
DDX_Check(pDX, IDC_CHECK6 + i, m_TxEnableRateLimitLo[ i ]);
DDX_Check(pDX, IDC_CHECK11 + i, m_RxEnableRateLimitHi[ i ]);
DDX_Check(pDX, IDC_CHECK16 + i, m_RxEnableRateLimitLo[ i ]);
DDX_Check(pDX, IDC_CHECK22 + i, m_bTxDisablePriority[ i ]);
DDX_Check(pDX, IDC_CHECK27 + i, m_bRxDisablePriority[ i ]);
}
DDX_Check(pDX, IDC_CHECK21, m_bEnableFlowControl);
}
BEGIN_MESSAGE_MAP(CRateLimit, CPropertyPage)
ON_EN_UPDATE(IDC_EDIT21, OnUpdate)
ON_EN_UPDATE(IDC_EDIT22, OnUpdate)
ON_EN_UPDATE(IDC_EDIT23, OnUpdate)
ON_EN_UPDATE(IDC_EDIT24, OnUpdate)
ON_EN_UPDATE(IDC_EDIT25, OnUpdate)
ON_EN_UPDATE(IDC_EDIT26, OnUpdate)
ON_EN_UPDATE(IDC_EDIT27, OnUpdate)
ON_EN_UPDATE(IDC_EDIT28, OnUpdate)
ON_EN_UPDATE(IDC_EDIT29, OnUpdate)
ON_EN_UPDATE(IDC_EDIT30, OnUpdate)
ON_EN_UPDATE(IDC_EDIT31, OnUpdate)
ON_EN_UPDATE(IDC_EDIT32, OnUpdate)
ON_EN_UPDATE(IDC_EDIT33, OnUpdate)
ON_EN_UPDATE(IDC_EDIT34, OnUpdate)
ON_EN_UPDATE(IDC_EDIT35, OnUpdate)
ON_EN_UPDATE(IDC_EDIT36, OnUpdate)
ON_EN_UPDATE(IDC_EDIT37, OnUpdate)
ON_EN_UPDATE(IDC_EDIT38, OnUpdate)
ON_EN_UPDATE(IDC_EDIT39, OnUpdate)
ON_EN_UPDATE(IDC_EDIT40, OnUpdate)
ON_BN_CLICKED(IDC_CHECK1, OnCombineRate)
ON_BN_CLICKED(IDC_CHECK2, OnUpdate)
ON_BN_CLICKED(IDC_CHECK3, OnUpdate)
ON_BN_CLICKED(IDC_CHECK4, OnUpdate)
ON_BN_CLICKED(IDC_CHECK5, OnUpdate)
ON_BN_CLICKED(IDC_CHECK6, OnUpdate)
ON_BN_CLICKED(IDC_CHECK7, OnUpdate)
ON_BN_CLICKED(IDC_CHECK8, OnUpdate)
ON_BN_CLICKED(IDC_CHECK9, OnUpdate)
ON_BN_CLICKED(IDC_CHECK10, OnUpdate)
ON_BN_CLICKED(IDC_CHECK11, OnUpdate)
ON_BN_CLICKED(IDC_CHECK12, OnUpdate)
ON_BN_CLICKED(IDC_CHECK13, OnUpdate)
ON_BN_CLICKED(IDC_CHECK14, OnUpdate)
ON_BN_CLICKED(IDC_CHECK15, OnUpdate)
ON_BN_CLICKED(IDC_CHECK16, OnUpdate)
ON_BN_CLICKED(IDC_CHECK17, OnUpdate)
ON_BN_CLICKED(IDC_CHECK18, OnUpdate)
ON_BN_CLICKED(IDC_CHECK19, OnUpdate)
ON_BN_CLICKED(IDC_CHECK20, OnUpdate)
ON_BN_CLICKED(IDC_CHECK22, OnCombineRate)
ON_BN_CLICKED(IDC_CHECK23, OnCombineRate)
ON_BN_CLICKED(IDC_CHECK24, OnCombineRate)
ON_BN_CLICKED(IDC_CHECK25, OnCombineRate)
ON_BN_CLICKED(IDC_CHECK26, OnCombineRate)
ON_BN_CLICKED(IDC_CHECK27, OnCombineRate)
ON_BN_CLICKED(IDC_CHECK28, OnCombineRate)
ON_BN_CLICKED(IDC_CHECK29, OnCombineRate)
ON_BN_CLICKED(IDC_CHECK30, OnCombineRate)
ON_BN_CLICKED(IDC_CHECK31, OnCombineRate)
ON_BN_CLICKED(IDC_RADIODIFFSER, OnDiffSer)
ON_BN_CLICKED(IDC_RADIO8021P, On8021p)
ON_BN_CLICKED(IDC_RADIOPORTBASED, OnPortBased)
// Flow control check box
ON_BN_CLICKED(IDC_CHECK21, OnUpdate)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRateLimit message handlers
BOOL CRateLimit::OnInitDialog()
{
int i;
byte bData;
CDgbToolApp *pApp;
pApp = (CDgbToolApp *)AfxGetApp();
// Block background MIB read
pApp->m_bHWSemaphore = NOMIBREAD;
CDialog::OnInitDialog();
// TODO: Add extra initialization here
for (i = 0; i < PORTCOUNT ; i++)
{
m_cTxRateLimitHi[ i ].EnableWindow(TRUE);
m_cTxRateLimitLo[ i ].EnableWindow(TRUE);
m_cRxRateLimitHi[ i ].EnableWindow(TRUE);
m_cRxRateLimitLo[ i ].EnableWindow(TRUE);
}
//
// Use port 1 as global setting.
//
bData = pApp->ReadData ( PORT1CTL0 ) & PRIORITYMASK;
switch ( bData )
{
case PRIORITYDIFFSER:
CheckRadioButton (IDC_RADIODIFFSER, IDC_RADIOPORTBASED, IDC_RADIODIFFSER);
break;
case PRIORITY8021P:
CheckRadioButton (IDC_RADIODIFFSER, IDC_RADIOPORTBASED, IDC_RADIO8021P);
break;
case PRIORITYPORTBASED:
CheckRadioButton (IDC_RADIODIFFSER, IDC_RADIOPORTBASED, IDC_RADIOPORTBASED);
break;
}
SetPriorityMode ();
// Release background MIB read
pApp->m_bHWSemaphore = ~NOMIBREAD;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CRateLimit::OnSetActive()
{
UpdateData(FALSE);
return CPropertyPage::OnSetActive();
}
void CRateLimit::OnUpdate()
{
SetModified(TRUE);
}
void CRateLimit::OnDiffSer()
{
m_wPriorityScheme = PRIORITYDIFFSER;
SetModified(TRUE);
}
void CRateLimit::On8021p()
{
m_wPriorityScheme = PRIORITY8021P;
SetModified(TRUE);
}
void CRateLimit::OnPortBased()
{
m_wPriorityScheme = PRIORITYPORTBASED;
SetModified(TRUE);
}
void CRateLimit::OnCombineRate()
{
UpdateData(TRUE);
SetPriorityMode ();
SetModified(TRUE);
}
void CRateLimit::SetPriorityMode ()
{
CWnd *pWnd;
int i;
for ( i = 0; i < PORTCOUNT; i++ )
{
pWnd = GetDlgItem (IDC_CHECK1 + i);
if ( m_bTxDisablePriority[i] ) // Checked
{
pWnd->EnableWindow (FALSE);
m_cTxRateLimitHi[i].EnableWindow ( FALSE );
}
else
{
pWnd->EnableWindow (TRUE);
m_cTxRateLimitHi[i].EnableWindow ( TRUE );
}
pWnd = GetDlgItem (IDC_CHECK11 + i);
if ( m_bRxDisablePriority[i] ) // Checked
{
pWnd->EnableWindow (FALSE);
m_cRxRateLimitHi[i].EnableWindow ( FALSE );
}
else
{
pWnd->EnableWindow (TRUE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -