📄 nustreamobj00.cpp
字号:
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 + -