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

📄 networkifce0.cpp

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

#include "stdafx.h"
#include "TCPIPplugin.h"
#include "NetworkIfce0.h"

#include "resource.h"
#include <afxdlgs.h>
#include "ConfigGen.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// If any property is changed the value will be set to true.
// used in classwizplugin.cpp if user presses ok. 
//

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



extern bool g_save;
/////////////////////////////////////////////////////////////////////////////
// NetworkIfce0 property page

IMPLEMENT_DYNCREATE(NetworkIfce0, CPropertyPage)

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

	InitNWIfce0DefaultSettings();
}

NetworkIfce0::~NetworkIfce0()
{
}

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


BEGIN_MESSAGE_MAP(NetworkIfce0, CPropertyPage)
	//{{AFX_MSG_MAP(NetworkIfce0)
	ON_NOTIFY(IPN_FIELDCHANGED, IDC_IPADDRESS_IP, OnFieldchangedIpaddressIp)
	ON_BN_CLICKED(IDC_NIC0_CHECK_DHCP, OnNic0CheckDhcp)
	ON_NOTIFY(IPN_FIELDCHANGED, IDC_NIC0_IPADDRESS_SUBNET_MASK, OnFieldchangedNic0IpaddressSubnetMask)
	ON_NOTIFY(IPN_FIELDCHANGED, IDC_NIC0_IPADDRESS_GATEWAY, OnFieldchangedNic0IpaddressGateway)
	ON_EN_CHANGE(IDC_EDIT_NIC0_RCV_BUFS, OnChangeEditNic0RcvBufs)
	ON_EN_CHANGE(IDC_NIC0_RCV_BUF_SIZE, OnChangeNic0RcvBufSize)
	ON_EN_CHANGE(IDC_NUM_XMIT_BUFFERS, OnChangeNumXmitBuffers)
	ON_EN_CHANGE(IDC_NIC0_XMIT_BUF_SIZE, OnChangeNic0XmitBufSize)
	ON_EN_CHANGE(IDC_MAC_ADDRESS, OnChangeMacAddress)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// NetworkIfce0 message handlers

void NetworkIfce0::OnFieldchangedIpaddressIp(NMHDR* pNMHDR, LRESULT* pResult) 
{

	CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_IP);
	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 NetworkIfce0::OnNic0CheckDhcp() 
{
	CButton *pButton_DHCP= (CButton*)GetDlgItem(IDC_NIC0_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_IPADDRESS_IP);
			pIpAddress->EnableWindow(FALSE);

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

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

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

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

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

	
}

void NetworkIfce0::OnFieldchangedNic0IpaddressSubnetMask(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	
	CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC0_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();
			}
			(o_subnet_mask != m_subnet_mask) ? g_save = true : 0;
			
		}

	}

	*pResult = 0;
}

void NetworkIfce0::OnFieldchangedNic0IpaddressGateway(NMHDR* pNMHDR, LRESULT* pResult) 
{
	
	CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_NIC0_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();
			}
			(o_gateway != m_gateway) ? g_save = true : 0;
		}
	}
	*pResult = 0;
}

void NetworkIfce0::OnChangeEditNic0RcvBufs() 
{
	CEdit *pEditBT_NumRcvBufs = (CEdit*)GetDlgItem(IDC_EDIT_NIC0_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,80);
		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();
		}
		(o_num_recv_buffers != m_num_recv_buffers) ? g_save = true : 0;
	}
}

void NetworkIfce0::OnChangeNic0RcvBufSize() 
{
	CEdit *pEditBT_RcvBufSize = (CEdit*)GetDlgItem(IDC_NIC0_RCV_BUF_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();
		}
		(o_recv_buf_size != m_recv_buf_size) ? g_save = true : 0;
	}	
}

void NetworkIfce0::OnChangeNumXmitBuffers() 
{
	CEdit *pEditBT_NumXmitBufs = (CEdit*)GetDlgItem(IDC_NUM_XMIT_BUFFERS);
	char temp_buf_arr[80];
	char *end_ptr;
	int o_num_xmit_buffers = m_num_xmit_buffers;

	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();
		}
		(o_num_xmit_buffers != m_num_xmit_buffers) ? g_save = true :0;
	}
}

void NetworkIfce0::OnChangeNic0XmitBufSize() 
{
	CEdit *pEditBT_XmitBufSize = (CEdit*)GetDlgItem(IDC_NIC0_XMIT_BUF_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 NetworkIfce0::OnChangeMacAddress() 
{
	
	CEdit *pEditBT_MacAddress = (CEdit*)GetDlgItem(IDC_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 NetworkIfce0::InitNWIfce0DefaultSettings()
{
	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 NetworkIfce0::PopulateNWIfce0Settings()
{
	CEdit *pEdit;
	char temp_buf_arr[80];

	// Setup Number of Receive Buffers
	//
	strcpy(temp_buf_arr,"");
	pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NIC0_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_NIC0_RCV_BUF_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_NUM_XMIT_BUFFERS);
	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_NIC0_XMIT_BUF_SIZE);
	if(pEdit != NULL)
	{
		sprintf(temp_buf_arr,"%d",m_xmit_buf_size);
		pEdit->SetWindowText(temp_buf_arr);
	}

	
	pEdit = (CEdit*)GetDlgItem(IDC_MAC_ADDRESS);
	if(pEdit != NULL)
	{
		//if(!stricmp(m_mac_addr,"") || (!stricmp(m_mac_addr,"0")) || (!stricmp(m_mac_addr,"0x0")))
		//	strcpy(m_mac_addr,"000000");
		
			pEdit->SetWindowText(m_mac_addr);
		
	}
	// Setup network settings

	if(m_use_dhcp == true)
	{
		CButton *pButton= (CButton*)GetDlgItem(IDC_NIC0_CHECK_DHCP);
		pButton->SetCheck(TRUE);

		CIPAddressCtrl *pIpAddress = (CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_IP);
		pIpAddress->SetAddress(m_ip_addr);
		pIpAddress->EnableWindow(FALSE);

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

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

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

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

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

	}

}

bool NetworkIfce0::StoreNIfce0SourceData(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 NetworkIfce0::LoadNIfce0SourceData(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 NetworkIfce0::OnCancel() 
{
	CPropertyPage::OnCancel();
}

⌨️ 快捷键说明

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