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

📄 networkifce1.cpp

📁 lwip tcp/ip 协议栈 adsp BF533 DSP 移植 用 visual dsp++ 编译
💻 CPP
字号:
// NetworkIfce1.cpp : implementation file
//

#include "stdafx.h"
#include "TCPIPplugin.h"
#include "NetworkIfce1.h"

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


void ConvertBinaryMacToText(const char *bmac, char *tm);
void ConvertTextMacToBinary(const char *tm, char *bm);


bool  g_EnableNI1Page;
extern bool g_save;
/////////////////////////////////////////////////////////////////////////////
// NetworkIfce1 property page

IMPLEMENT_DYNCREATE(NetworkIfce1, CPropertyPage)

NetworkIfce1::NetworkIfce1() : CPropertyPage(NetworkIfce1::IDD)
{
	//{{AFX_DATA_INIT(NetworkIfce1)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	InitNWIfce1DefaultSettings();
}

NetworkIfce1::~NetworkIfce1()
{
}

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

	PopulateNWIfce1Settings();
}


BEGIN_MESSAGE_MAP(NetworkIfce1, CPropertyPage)
	//{{AFX_MSG_MAP(NetworkIfce1)
	ON_BN_CLICKED(IDC_NIC1_CHECK_DHCP, OnNic1CheckDhcp)
	ON_NOTIFY(IPN_FIELDCHANGED, IDC_NIC1_IPADDRESS, OnFieldchangedNic1Ipaddress)
	ON_NOTIFY(IPN_FIELDCHANGED, IDC_NIC1_IPADDRESS_SUBNET_MASK, OnFieldchangedNic1IpaddressSubnetMask)
	ON_NOTIFY(IPN_FIELDCHANGED, IDC_NIC1_IPADDRESS_GATEWAY, OnFieldchangedNic1IpaddressGateway)
	ON_EN_CHANGE(IDC_NIC1_MAC_ADDRESS, OnChangeNic1MacAddress)
	ON_EN_CHANGE(IDC_EDIT_NIC1_RCV_BUFS, OnChangeEditNic1RcvBufs)
	ON_EN_CHANGE(IDC_EDIT_NIC1_RCV_SIZE, OnChangeEditNic1RcvSize)
	ON_EN_CHANGE(IDC_EDIT_NIC1_XMIT_BUFS, OnChangeEditNic1XmitBufs)
	ON_EN_CHANGE(IDC_EDIT_NIC1_XMIT_SIZE, OnChangeEditNic1XmitSize)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// NetworkIfce1 message handlers

void NetworkIfce1::OnNic1CheckDhcp() 
{
	CButton *pButton_DHCP= (CButton*)GetDlgItem(IDC_NIC1_CHECK_DHCP);
	bool o_use_dhcp = m_use_dhcp;

	if(pButton_DHCP != NULL)
	{
		if(pButton_DHCP->GetCheck() == BST_CHECKED)
		{
			m_use_dhcp = true;
			// DHCP Enabled so diable IP/Subnet Mask/ Gateway boxes
			//
			CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS);
			pIpAddress->EnableWindow(FALSE);

			// Subnet mask
			CIPAddressCtrl *pSubNetMask= (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_SUBNET_MASK);
			pSubNetMask->EnableWindow(FALSE);

			// Gateway
			CIPAddressCtrl *pGateway= (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_GATEWAY);
			pGateway->EnableWindow(FALSE);

		}
		else
		{
			m_use_dhcp = false;
			// DHCP Enabled so Enable IP/Subnet Mask/ Gateway boxes
			//
			CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS);
			pIpAddress->EnableWindow(TRUE);

			// Subnet mask
			CIPAddressCtrl *pSubNetMask= (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_SUBNET_MASK);
			pSubNetMask->EnableWindow(TRUE);

			// Gateway
			CIPAddressCtrl *pGateway= (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_GATEWAY);
			pGateway->EnableWindow(TRUE);

		}

		(o_use_dhcp != m_use_dhcp ) ? g_save = true : 0;
	}	
}

void NetworkIfce1::OnFieldchangedNic1Ipaddress(NMHDR* pNMHDR, LRESULT* pResult) 
{
	CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS);
	DWORD ip_addr;
	DWORD o_ip_addr = m_ip_addr;

	if(pIpAddress != NULL)
	{
		if(pIpAddress->GetAddress(ip_addr) == 4)
		{
			pIpAddress->GetAddress(m_ip_addr);
			if((pIpAddress->IsWindowEnabled()) && (m_ip_addr == 0) && (m_ip_addr != o_ip_addr))
			{
				 AfxMessageBox("Invalid IP Address",MB_ICONEXCLAMATION | MB_ICONWARNING | MB_OK);
				 pIpAddress->SetFocus();
				 return;
			}
			(o_ip_addr != m_ip_addr) ? g_save = true: 0;
		}
		

	}
	
	*pResult = 0;
}

void NetworkIfce1::OnFieldchangedNic1IpaddressSubnetMask(NMHDR* pNMHDR, LRESULT* pResult) 
{	
	CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_SUBNET_MASK);
	DWORD subnet_mask;
	DWORD o_subnet_mask = m_subnet_mask;

	if(pIpAddress != NULL)
	{
		if(pIpAddress->GetAddress(subnet_mask) == 4)
		{
			pIpAddress->GetAddress(m_subnet_mask);
			if((pIpAddress->IsWindowEnabled()) && (m_subnet_mask == 0) && (m_subnet_mask!=o_subnet_mask))
			{
				AfxMessageBox("Invalid Subnet Mask",MB_ICONEXCLAMATION | MB_ICONWARNING | MB_OK);
				pIpAddress->SetFocus();
				return;
			}
			(o_subnet_mask != m_subnet_mask) ? g_save = true: 0;
		}

	}
	
	*pResult = 0;
}

void NetworkIfce1::OnFieldchangedNic1IpaddressGateway(NMHDR* pNMHDR, LRESULT* pResult) 
{
	CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_GATEWAY);
	DWORD gateway;
	DWORD o_gateway = m_gateway;

	if(pIpAddress != NULL)
	{
		if(pIpAddress->GetAddress(gateway) == 4)
		{
			pIpAddress->GetAddress(m_gateway);
			if( (pIpAddress->IsWindowEnabled()) && (m_gateway == 0) && (m_gateway != o_gateway))
			{
				AfxMessageBox("Invalid Gateway Address",MB_ICONEXCLAMATION | MB_ICONWARNING | MB_OK);
				pIpAddress->SetFocus();
				return;
			}
			(o_gateway != m_gateway) ? g_save = true: 0;
		}

	}
	
	*pResult = 0;
}


void NetworkIfce1::OnChangeNic1MacAddress() 
{
	CEdit *pEditBT_MacAddress = (CEdit*)GetDlgItem(IDC_NIC1_MAC_ADDRESS);
	char tbuf[80],ubuf[80];
	char o_mac_addr[32];
	char *ch;
	int nc=0;
	int st,nd;

	strcpy(o_mac_addr,m_mac_addr);

	if(pEditBT_MacAddress != NULL)
	{
		pEditBT_MacAddress->GetWindowText(tbuf,sizeof(tbuf));
		pEditBT_MacAddress->GetSel(st,nd);
		ch = tbuf;
		ubuf[0] = 0;
		while (*ch) {
			if (('0'<=*ch) && (*ch<='9')) {
				ubuf[nc++] = *ch;
			} else {
				if (('A'<=*ch) && (*ch<='F')) {
					ubuf[nc++] = *ch;
				} else {
					if (('a'<=*ch) && (*ch<='f')) {
						ubuf[nc++] = (*ch - 'a' +'A');
					}
				}
			}
			ch++;
		}
		ubuf[nc] = 0;
		ubuf[12] = 0;
		strcpy(m_mac_addr,ubuf);
		if(stricmp(o_mac_addr,m_mac_addr))
			g_save = true;
		if (strcmp(ubuf,tbuf)!=0) {
			pEditBT_MacAddress->SetWindowText(ubuf);
			pEditBT_MacAddress->SetSel(st,nd);
		}

	}
}

void NetworkIfce1::OnChangeEditNic1RcvBufs() 
{
	CEdit *pEditBT_NumRcvBufs = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_RCV_BUFS);
	char  temp_buf_arr[80];
	char  *end_ptr;
	int   o_num_recv_buffers = m_num_recv_buffers;

	if(pEditBT_NumRcvBufs != NULL)
	{
		pEditBT_NumRcvBufs->GetWindowText(temp_buf_arr,sizeof(temp_buf_arr));
		m_num_recv_buffers = strtol(temp_buf_arr,&end_ptr,10);
		if(m_num_recv_buffers == 0)
		{
			AfxMessageBox("Invalid Number of Receive Buffers",MB_ICONEXCLAMATION | MB_ICONWARNING | MB_OK);
			pEditBT_NumRcvBufs->SetFocus();
			return;
		}
		
		(o_num_recv_buffers== m_num_recv_buffers) ? g_save = true : 0;
		
	}
	
	
}

void NetworkIfce1::OnChangeEditNic1RcvSize() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CPropertyPage::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	CEdit *pEditBT_RcvBufSize = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_RCV_SIZE);
	char temp_buf_arr[80];
	char *end_ptr;
	int  o_recv_buf_size = m_recv_buf_size;

	if(pEditBT_RcvBufSize != NULL)
	{
		pEditBT_RcvBufSize->GetWindowText(temp_buf_arr,sizeof(temp_buf_arr));
		m_recv_buf_size = strtol(temp_buf_arr,&end_ptr,10);
		if(m_recv_buf_size == 0)
		{
			AfxMessageBox("Invalid Receive Buffer Size",MB_ICONEXCLAMATION | MB_ICONWARNING | MB_OK);
			pEditBT_RcvBufSize->SetFocus();
			return;
		}
		(o_recv_buf_size != m_recv_buf_size)  ? g_save = true :0;
		
	}
	
}

void NetworkIfce1::OnChangeEditNic1XmitBufs() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CPropertyPage::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	CEdit *pEditBT_NumXmitBufs = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_XMIT_BUFS);
	char temp_buf_arr[80];
	char *end_ptr;

	if(pEditBT_NumXmitBufs != NULL)
	{
		pEditBT_NumXmitBufs->GetWindowText(temp_buf_arr,sizeof(temp_buf_arr));
		m_num_xmit_buffers = strtol(temp_buf_arr,&end_ptr,10);
		if(m_num_xmit_buffers == 0)
		{
			AfxMessageBox("Invalid Number of Transmit Buffers",MB_ICONEXCLAMATION | MB_ICONWARNING | MB_OK);
			pEditBT_NumXmitBufs->SetFocus();
		}
		
	}	
}

void NetworkIfce1::OnChangeEditNic1XmitSize() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CPropertyPage::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	CEdit *pEditBT_XmitBufSize = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_XMIT_SIZE);
	char temp_buf_arr[80];
	char *end_ptr;
	int  o_xmit_buf_size = m_xmit_buf_size;

	if(pEditBT_XmitBufSize != NULL)
	{
		pEditBT_XmitBufSize->GetWindowText(temp_buf_arr,sizeof(temp_buf_arr));
		m_xmit_buf_size = strtol(temp_buf_arr,&end_ptr,10);
		if(m_xmit_buf_size == 0)
		{
			AfxMessageBox("Invalid Transmit Buffer Size",MB_ICONEXCLAMATION | MB_ICONWARNING | MB_OK);
			pEditBT_XmitBufSize->SetFocus();
		}
		(o_xmit_buf_size != m_xmit_buf_size)  ? g_save = true : 0;
	}
}

void NetworkIfce1::InitNWIfce1DefaultSettings()
{
	m_num_recv_buffers = 60;
	m_recv_buf_size = 1600;
	m_num_xmit_buffers = 40;
	m_xmit_buf_size = 1548;
	m_mac_addr[0] = 0;
	m_ip_addr = 0x0;
	m_subnet_mask = 0x0;
	m_gateway = 0x0;
	m_use_dhcp = true;
}

void NetworkIfce1::PopulateNWIfce1Settings()
{
	CEdit *pEdit;
	char temp_buf_arr[80];

	// Setup Number of Receive Buffers
	//
	strcpy(temp_buf_arr,"");
	pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_RCV_BUFS);
	if(pEdit != NULL)
	{
		sprintf(temp_buf_arr,"%d",m_num_recv_buffers);
		pEdit->SetWindowText(temp_buf_arr);
	}

	// Setup Receive Size
	//
	strcpy(temp_buf_arr,"");
	pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_RCV_SIZE);
	if(pEdit != NULL)
	{
		sprintf(temp_buf_arr,"%d",m_recv_buf_size);
		pEdit->SetWindowText(temp_buf_arr);
	}

	// Setup Number of Xmit Buffers
	//
	strcpy(temp_buf_arr,"");
	pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_XMIT_BUFS);
	if(pEdit != NULL)
	{
		sprintf(temp_buf_arr,"%d",m_num_xmit_buffers);
		pEdit->SetWindowText(temp_buf_arr);
	}

	// Setup Xmit Size
	//
	strcpy(temp_buf_arr,"");
	pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_XMIT_SIZE);
	if(pEdit != NULL)
	{
		sprintf(temp_buf_arr,"%d",m_xmit_buf_size);
		pEdit->SetWindowText(temp_buf_arr);
	}

	strcpy(temp_buf_arr,"");
	pEdit = (CEdit*)GetDlgItem(IDC_NIC1_MAC_ADDRESS);
	if(pEdit != NULL)
	{
		pEdit->SetWindowText(m_mac_addr);
	}
	// Setup network settings

	if(m_use_dhcp == true)
	{
		CButton *pButton= (CButton*)GetDlgItem(IDC_NIC1_CHECK_DHCP);
		pButton->SetCheck(TRUE);
		
		CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS);
		pIpAddress->SetAddress(m_ip_addr);
		pIpAddress->EnableWindow(FALSE);

		pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_SUBNET_MASK);
		pIpAddress->SetAddress(m_subnet_mask);
		pIpAddress->EnableWindow(FALSE);

		pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_GATEWAY);
		pIpAddress->SetAddress(m_gateway);
		pIpAddress->EnableWindow(FALSE);
	}
	else
	{
		CButton *pButton= (CButton*)GetDlgItem(IDC_NIC1_CHECK_DHCP);
		pButton->SetCheck(FALSE);

		CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS);
		pIpAddress->SetAddress(m_ip_addr);
		pIpAddress->EnableWindow(TRUE);

		pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_SUBNET_MASK);
		pIpAddress->SetAddress(m_subnet_mask);
		pIpAddress->EnableWindow(TRUE);

		pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_GATEWAY);
		pIpAddress->SetAddress(m_gateway);
		pIpAddress->EnableWindow(TRUE);
	}

	if(g_EnableNI1Page == false)
		DisableNI1Entries(FALSE);
	else
		DisableNI1Entries(TRUE);
	
		
}



bool NetworkIfce1::StoreNIfce1SourceData(network_ifce *nw_ifce)
{
	nw_ifce->ip_addr = m_ip_addr;
	nw_ifce->subnet_mask = m_subnet_mask;
	nw_ifce->default_gateway = m_gateway;

	nw_ifce->rx_bufs = m_num_recv_buffers;
	nw_ifce->rx_buf_sz = m_recv_buf_size;
	nw_ifce->tx_bufs = m_num_xmit_buffers;
	nw_ifce->tx_buf_sz  = m_xmit_buf_size;
	ConvertTextMacToBinary(m_mac_addr,nw_ifce->mac_addr);
	nw_ifce->use_dhcp = m_use_dhcp;

	return true;
}

bool NetworkIfce1::LoadNIfce1SourceData(network_ifce *nw_ifce)
{
	m_ip_addr = nw_ifce->ip_addr;
	m_subnet_mask = nw_ifce->subnet_mask;
	m_gateway     = nw_ifce->default_gateway;

	m_num_recv_buffers = nw_ifce->rx_bufs;
	m_recv_buf_size = nw_ifce->rx_buf_sz;
	m_num_xmit_buffers = nw_ifce->tx_bufs;
	m_xmit_buf_size = nw_ifce->tx_buf_sz;
	if (memcmp(nw_ifce->mac_addr,"\x00\x00\x00\x00\x00\x00",6) == 0) {
		m_mac_addr[0] = 0;
	} else {
		ConvertBinaryMacToText(nw_ifce->mac_addr,m_mac_addr);
	}
	m_use_dhcp = nw_ifce->use_dhcp;

	return true;
}


void NetworkIfce1::DisableNI1Entries(bool state)
{
	CEdit *pEdit;
	CButton *pButton= (CButton*)GetDlgItem(IDC_NIC1_CHECK_DHCP);
	pButton->EnableWindow(state);

		CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS);
		pIpAddress->SetAddress(m_ip_addr);

		(m_use_dhcp == true) ?
			pIpAddress->EnableWindow(false)  : pIpAddress->EnableWindow(state);

		pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_SUBNET_MASK);
		pIpAddress->SetAddress(m_subnet_mask);
		(m_use_dhcp == true) ?
			pIpAddress->EnableWindow(false) : pIpAddress->EnableWindow(state);

		pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC1_IPADDRESS_GATEWAY);
		pIpAddress->SetAddress(m_gateway);
		(m_use_dhcp == true) ?
			pIpAddress->EnableWindow(false):  pIpAddress->EnableWindow(state);

		pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_XMIT_BUFS);
		pEdit->EnableWindow(state);

		pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_RCV_BUFS);
		pEdit->EnableWindow(state);

		pEdit = (CEdit*)GetDlgItem(IDC_NIC1_MAC_ADDRESS);
		pEdit->EnableWindow(state);

		pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_RCV_SIZE);
		pEdit->EnableWindow(state);

		pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NIC1_XMIT_SIZE);
		pEdit->EnableWindow(state);
}
void NetworkIfce1::OnCancel() 
{
	CPropertyPage::OnCancel();
}

⌨️ 快捷键说明

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