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

📄 ratelimit.cpp

📁 ks8995m5口交换机启动eeprom配置源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -