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

📄 nustreamobj00.cpp

📁 流量C++驱动的一些源代码,主要是模仿SMARTBIT 的硬件对应的代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		return FALSE;
		*/
	return TRUE;
	
}

//设置指定设置指定卡的接口类型:电口或光口.参数:(string)端口配置(仪器编号-测试板编号-端口编号),(int)类型(0:光口,>0:电口)
//默认设置下为光口
BOOL CNustreamObj00::_MediaSelect(const CString sInput,CString &sOutput)
{
	/*
	CHECKPARAMINIT(2,32);
	CHECKSTR(0,config,"",1,32);			//检测参数范围
	CHECKUINT(1,Select_type,0,0,256);
	CONVERTNUMBER(config,1);
	NSPhyConfig MyConfig;
	
	int ret = 0;

//	if((ret = HTGetStructure(NS_PHY_CONFIG_INFO,0,0,0,&MyConfig,sizeof(NSPhyConfig),sub,slot,port)) < 0)
//		return FALSE;
//	if(MyConfig.ulMediaMode)
//	MyConfig.ucActiveMedia = MEDIA_AUTO_SENSE_MODE;
//	MyConfig.ucActiveMedia = MEDIA_USER_EXPLICIT_MODE;
	if(Select_type == 0 )
	{
		MyConfig.ucActiveMedia = MEDIA_USER_EXPLICIT_MODE;
		MyConfig.ulMediaMode = FIBER_MODE;
	}
	else{
		MyConfig.ucActiveMedia = MEDIA_AUTO_SENSE_MODE;
		MyConfig.ulMediaMode = COPPER_MODE;
	}

	if((ret = HTSetStructure(NS_PHY_CONFIG,0,0,0,&MyConfig,sizeof(NSPhyConfig),sub,slot,port)) < 0)
		return FALSE;
		*/
	return TRUE;
}

//设置指定端口trigger参数:(string)端口配置(仪器编号-测试板编号-端口编号),(int)触发源地址
BOOL CNustreamObj00::_SetTrigger(const CString sInput,CString &sOutput)
{
	/*
	CHECKPARAMINIT(2,32);
	CHECKSTR(0,config,"",1,32);			//检测参数范围
	CHECKUINT(1,Source_Addr,0,0,256);
	CONVERTNUMBER(config,1);

	HTTriggerStructure MyTrigger;
	//	HTTriggerStructure MyTrigger1;
	// start 48 bits after preamble (SOURCE MAC)
	MyTrigger.Offset = 48;
	if(Source_Addr == 0x00){
		MyTrigger.Range = 5;
		MyTrigger.Pattern[0] = 0x00;
		MyTrigger.Pattern[1] = 0x00;
		MyTrigger.Pattern[2] = 0x00;
		MyTrigger.Pattern[3] = 0x00;
		MyTrigger.Pattern[4] = 0x00;
	}else{
		MyTrigger.Range = 6;
		MyTrigger.Pattern[0] = Source_Addr;
		MyTrigger.Pattern[1] = 0x00;
		MyTrigger.Pattern[2] = 0x00;
		MyTrigger.Pattern[3] = 0x00;
		MyTrigger.Pattern[4] = 0x00;
		MyTrigger.Pattern[5] = 0x00;
	}
	// send config to card 
	if(HTTrigger(HTTRIGGER_1,HTTRIGGER_ON,&MyTrigger,sub,slot,port) < 0)
		return FALSE;
		*/
	return TRUE;
}
//设置指定端口Learning参数:(string)端口配置(仪器编号-测试板编号-端口编号),(int)源地址
BOOL CNustreamObj00::_SetLearn(const CString sInput,CString &sOutput)
{
	/*
	CHECKPARAMINIT(2,32);
	CHECKSTR(0,config,"",1,32);			//检测参数范围
	CHECKUINT(1,Source_Addr,0,0,256);
	CONVERTNUMBER(config,1);
	
	int iRetVal = FALSE;
	if((iRetVal = HTTransmitMode(SINGLE_BURST_MODE, sub, slot, port)) < 0)
		return FALSE;
	if((iRetVal = HTBurstCount(20000, sub, slot, port)) < 0 )
		return FALSE;
	if((iRetVal = HTGapAndScale(10000, NANO_SCALE, sub, slot, port)) < 0)
		return FALSE;
	HTVFDStructure vfdstruct;
	HTVFDStructure vfdstruct1;
	vfdstruct.Configuration = HVFD_STATIC;
	vfdstruct.Range = 6;
	vfdstruct.Offset = 48;
	int vfdData[6];
	vfdData[0] = Source_Addr; //source mac
	vfdData[1] = 0x00;
	vfdData[2] = 0x00;
	vfdData[3] = 0x00;
	vfdData[4] = 0x00;
	vfdData[5] = 0x00;
	vfdstruct.Data = vfdData;
	if((iRetVal = HTVFD(HVFD_2,&vfdstruct,sub,slot,port)) < 0)
		return FALSE;
	vfdstruct1.Configuration = HVFD_STATIC;
	vfdstruct1.Range = 6;
	vfdstruct1.Offset = 0;  
	vfdData[0] = 0xFF;		  //des mac
	vfdData[1] = 0x00;
	vfdData[2] = 0x00;
	vfdData[3] = 0x00;
	vfdData[4] = 0x00;
	vfdData[5] = 0x00; 
	vfdstruct1.Data = vfdData;
	if((iRetVal = HTVFD(HVFD_1,&vfdstruct1,sub,slot,port)) < 0)
		return FALSE;
		*/
	return TRUE;
}
//设置指定端口自协商参数,并完成自协商动作:(string)端口配置(仪器编号-测试板编号-端口编号),(int)超时
BOOL CNustreamObj00::_Negotiate(const CString sInput,CString &sOutput)
{
	/*
	CHECKPARAMINIT(2,32);
	CHECKSTR(0,config,"",1,32);			//检测参数范围
	CHECKUINT(1,timeout,500,0,30000);
	CONVERTNUMBER(config,1);

	BOOL bRet = FALSE;
	int MII_Reg0 = 0x1300;
	int MII_Reg4 = 0x0181;
	int speed = SPEED_100MHZ;
	int duplex = FULLDUPLEX_MODE;
	int iRetVal;
	if((iRetVal = HTSetSpeed(speed,sub,slot,port)) < 0)
		return FALSE;
	if((iRetVal = HTDuplexMode(duplex,sub,slot,port)) < 0)
		return FALSE;
	if((iRetVal = HTWriteMII(port,0,MII_Reg0,sub,slot,port)) < 0)
		return FALSE;
	if((iRetVal = HTWriteMII(port,4,MII_Reg4,sub,slot,port)) < 0)
		return FALSE;
	ETHMII mii1;
	Sleep(200);
	mii1.uiRegister = 1;
	DWORD starttime = GetTickCount ();
	while((GetTickCount () - starttime) < (DWORD)timeout)
	{
		if((iRetVal = HTGetStructure(ETH_READ_MII_INFO, 0, 0, 0, &mii1, sizeof(ETHMII),sub,slot,port)) < 0)
			return FALSE;
		if((mii1.uiValue & 0x20) == 0x20)
		{
			bRet = TRUE;
			break;
		}
		Sleep(100);
	}
	if(!bRet)
	{
		sOutput.Format("%02d-%02d-%02d",sub,slot,port);
		return FALSE;
	}
	
	return bRet;
	*/
	return true;    //hong
}
//设置指定端口数据传输参数:(string)端口配置(仪器编号-测试板编号-端口编号),(int)源Mac地址
//(int)目标mac地址,(int)分发的端口数目,(int)传输类型(1:1,还是1:多),(int)数据包长,(int)数据模板类型
BOOL CNustreamObj00::_TranConfig(const CString sInput,CString &sOutput)
{
	/*
	CHECKPARAMINIT(7,32);
	CHECKSTR(0,config,"",1,32);				//检测参数范围
	CHECKUINT(1,source_address,0,0,256);
	CHECKUINT(2,dest_address,0,0,256);
	CHECKUINT(3,m_select,0,0,8);
	CHECKUINT(4,broadcast,0,0,100);
	CHECKUINT(5,packetlen,0,0,2048);
	CHECKUINT(6,templateflag,0,0,100);
	CONVERTNUMBER(config,1);
	int iRetVal;
	if((iRetVal = HTTransmitMode(CONTINUOUS_PACKET_MODE, sub, slot, port)) <  0)
		return FALSE;
	//说明:这个传输配置是按照1514的数据位配置的,用在其他的数据位配置上不可
	if(broadcast !=0){
		switch(m_select){
			case 8://78.07%
				if((iRetVal = HTGapAndScale(3552,NANO_SCALE,sub, slot, port)) <  0)
					return FALSE;
				break;
			case 7://68.05%
				if((iRetVal = HTGapAndScale(5872,NANO_SCALE,sub, slot, port)) <  0)
					return FALSE;
				break;
			case 6://59.02%
				if((iRetVal = HTGapAndScale(8640,NANO_SCALE,sub, slot, port)) <  0)
					return FALSE;
				break;
			case 5://50%
				if((iRetVal = HTGapAndScale(12400,NANO_SCALE,sub, slot, port)) <  0)
					return FALSE;
				break;
			case 4://39.52%
				if((iRetVal = HTGapAndScale(18928,NANO_SCALE,sub, slot, port)) <  0)
					return FALSE;
				break;
			case 3://29.91
				if((iRetVal = HTGapAndScale(28928,NANO_SCALE,sub, slot, port)) <  0)
					return FALSE;
				break;
			case 2://19//51544
				if((iRetVal = HTGapAndScale(51544,NANO_SCALE,sub, slot, port)) <  0)
					return FALSE;
				break;
			case 1://9
				if((iRetVal = HTGapAndScale(124496,NANO_SCALE,sub, slot, port)) <  0)
					return FALSE;
				break;
			default:
				if((iRetVal = HTGapAndScale(96,NANO_SCALE,sub, slot, port)) <  0)
					return FALSE;
				break;
		}
	}
	else{
		if((iRetVal = HTGapAndScale(960,NANO_SCALE,sub, slot, port)) <  0)
			return FALSE;
	}
	if((iRetVal = HTDataLength(packetlen,sub, slot, port)) < 0)
		return FALSE;
	//data template select
	int *pData = new int[packetlen];
	switch(templateflag) {
	case 0: // all 0x00
		for(int i =0;i<(int)packetlen;i++)
			*(pData+i) = 0x00;
		break;
	case 1: // all 0xff
		for(int i =0;i<(int)packetlen;i++)
			*(pData+i) =  0xff;
		break;
	case 2: // increment
		for(int i =0;i<(int)packetlen;i++)
			*(pData+i) = (i & 0xff);
		break;
	case 3: //random
		pData = NULL;
		break;
	default:
		break;
	}
	if((iRetVal = HTFillPattern(packetlen,pData,sub, slot, port)) < 0)
	{
		delete [] pData;
		return FALSE;
	}
	HTVFDStructure vfdstruct3;
	HTVFDStructure vfdstruct4;
	vfdstruct3.Configuration = HVFD_STATIC;
	vfdstruct3.Range = 6;
	vfdstruct3.Offset = 48;
	int vfdData[6];
	vfdData[0] = source_address; //source mac
	vfdData[1] = 0x00;
	vfdData[2] = 0x00;
	vfdData[3] = 0x00;
	vfdData[4] = 0x00;
	vfdData[5] = 0x00;
	vfdstruct3.Data = vfdData;
	if((iRetVal = HTVFD(HVFD_2,&vfdstruct3,sub,slot,port)) < 0)
	{
		delete [] pData;
		return FALSE;
	}
	if(broadcast != 0){
		if(m_select > 1 && m_select <= 8)
			vfdstruct4.Configuration = HVFD_INCR;
		else
		//if( m_select == 1 || m_select == 0)
			vfdstruct4.Configuration = HVFD_STATIC;
	}
	else
		vfdstruct4.Configuration = HVFD_STATIC;
	if(broadcast !=0 && ( m_select > 1 && m_select <= 8))// != 1 && m_select != 0)
		vfdstruct4.c = m_select;
	vfdstruct4.Range = 6;
	vfdstruct4.Offset = 0;
	vfdData[0] = dest_address; //des mac
	vfdData[1] = 0x00;
	vfdData[2] = 0x00;
	vfdData[3] = 0x00;
	vfdData[4] = 0x00;
	vfdData[5] = 0x00;
	vfdstruct4.Data = vfdData;
	if((iRetVal = HTVFD(HVFD_1,&vfdstruct4,sub, slot, port)) < 0)
	{
		delete [] pData;
		return FALSE;
	}
	delete [] pData;
	sOutput.Format("%d",packetlen);
	*/
	return TRUE;
}

//指定端口接收,发送数据读取:(string)端口配置(仪器编号-测试板编号-端口编号),(int)超时---------结果数据
BOOL CNustreamObj00::_ReadTrasmit(const CString sInput,CString &sOutput)
{
	/*
	CHECKPARAMINIT(2,32);
	CHECKSTR(0,config,"",1,32);			//检测参数范围
	CHECKUINT(1,timeout,500,0,30000);
	CONVERTNUMBER(config,1);
	long Rx_frame=0,Tx_frame=0;
	BOOL bRet = FALSE;
	long tmp_value;
	HTCountStructure cs;
	// Now wait until transmission stops
	if(HTGetCounters(&cs, sub, slot, port) < 0)
		return FALSE;
	tmp_value = cs.TmtPkt;
	DWORD starttime = GetTickCount ();
	while((GetTickCount () - starttime) < (DWORD)timeout)
	{
		Sleep(500);
		if(HTGetCounters(&cs, sub, slot, port) < 0)
			return FALSE;
		if(cs.TmtPkt == tmp_value){
			bRet = TRUE;
			break;
		}
		tmp_value = cs.TmtPkt;
	}
	Rx_frame = cs.RcvPkt;
	Tx_frame = cs.TmtPkt;
	sOutput.Format("%10d,%10d",Rx_frame,Tx_frame);
	return bRet;
	*/
	return true;   //hong
}
//指定端口接收,发送数据读取:(string)端口配置(仪器编号-测试板编号-端口编号)-----------实时数据
BOOL CNustreamObj00::_ReadCounter(const CString sInput,CString &sOutput)
{

	/*
	CHECKPARAMINIT(1,32);
	CHECKSTR(0,config,"",1,32);			//检测参数范围
	CONVERTNUMBER(config,1);

	HTCountStructure cs;
	if(HTGetCounters(&cs, sub, slot, port) < 0)
		return FALSE;
	sOutput.Format("%10d,%10d",cs.RcvPkt,cs.TmtPkt);
	*/
	return TRUE;
}
//当前测试组进行学习过程:(int)超时(ms)
BOOL CNustreamObj00::_Learning(const CString sInput,CString &sOutput)
{
	/*
	CHECKPARAMINIT(1,24);
	CHECKUINT(0,timeout,500,0,30000);			//检测参数范围
	if(HGRun(HTRUN) < 0)
		return FALSE;
	Sleep(timeout);
	if(HGRun(HTSTOP) < 0)
		return FALSE;
	if(HGClearPort() < 0)
		return FALSE;
		*/
	return TRUE;
}
//计算收发数据的差值:(int)收或发的总的数据,(int)发或收的分支数据,.........(1-8)个分支
BOOL CNustreamObj00::_Calculate(const CString sInput,CString &sOutput)
{
	/*
	CHECKPARAMINIT(9,10);
	if(_paramcount < 2)		//至少有2个输入参数(1发,1收)
		return FALSE;
	int Sun_Counter = 0;
	CHECKUINT(0,Total_Count,0,0,1000000000);
	for(UINT i = 1;i<_paramcount;i++)
	{
		CHECKUINT(i,count,0,0,1000000000);
		Sun_Counter += count;
	}
	sOutput.Format("%10d",Total_Count - Sun_Counter);
	*/
	return TRUE;
}


⌨️ 快捷键说明

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