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

📄 nustreamobj00.cpp

📁 流量C++驱动的一些源代码,主要是模仿SMARTBIT 的硬件对应的代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SmartObj00.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include <afxdllx.h>
#include "Nustreamobj00.h"
#include "resource.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif

PortInfo_T portinfo[MAX_NUM_OF_PORT];

static AFX_EXTENSION_MODULE NustreamObj00DLL = { NULL, NULL };


extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
	// 如果使用 lpReserved,请将此移除
	UNREFERENCED_PARAMETER(lpReserved);

	if (dwReason == DLL_PROCESS_ATTACH)
	{
		TRACE0("NustreamObj00.DLL 正在初始化!\n");
		
		// 扩展 DLL 一次性初始化
		if (!AfxInitExtensionModule(NustreamObj00DLL, hInstance))
			return 0;

		// 将此 DLL 插入到资源链中
		// 注意: 如果此扩展 DLL 由
		//  MFC 规则 DLL(如 ActiveX 控件)隐式链接到
		//  而不是由 MFC 应用程序链接到,则需要
		//  将此行从 DllMain 中移除并将其放置在一个
		//  从此扩展 DLL 导出的单独的函数中。使用此扩展 DLL 的
		//  规则 DLL 然后应显式
		//  调用该函数以初始化此扩展 DLL。否则,
		//  CDynLinkLibrary 对象不会附加到
		//  规则 DLL 的资源链,并将导致严重的
		//  问题。

		new CDynLinkLibrary(NustreamObj00DLL);

	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		TRACE0("NustreamObj00.DLL 正在终止!\n");

		// 在调用析构函数之前终止该库
		AfxTermExtensionModule(NustreamObj00DLL);
	}
	return 1;   // 确定
}
//创建对象并返回对象指针
extern "C"	__declspec(dllexport) PVOID CreateObject(PSTR sName,PSTR sParam)
{
	return new CNustreamObj00(sName,sParam);
};
//返回对象信息
extern "C"	__declspec(dllexport) VOID GetObjectInfo(PSTR sClass,PSTR sVersion,PSTR sParamList)
{
	sprintf(sClass,"NustreamObj");
	sprintf(sVersion,"00");
	sprintf(sParamList,"None");
};

CNustreamObj00::CNustreamObj00(const CString sObjectName,const CString sParam)
:CVirtualObject(sObjectName,sParam)
{
	/*m_sClass	= "NustreamObj";	//对象类名
	m_sVersion	= "00";			//对象版本
	m_sParam = "";

	m_bOpen = FALSE;
	m_sIp = "";

	m_lstFuncInfo.AddTail(new FUNCINFO("ResetPort","恢复默认值","","",0,_ResetPort));
	m_lstFuncInfo.AddTail(new FUNCINFO("ClearGroup","清除测试组","","",0,_ClearGroup));
	m_lstFuncInfo.AddTail(new FUNCINFO("StartRun","开始测试","","",0,_StartRun));
	m_lstFuncInfo.AddTail(new FUNCINFO("StopRun","停止测试","","",0,_StopRun));*/

	m_lstFuncInfo.AddTail(new FUNCINFO("Connect","连接Nustream测试仪","(STR)IpAddress","ip address",16,_Connect));
	/*
	m_lstFuncInfo.AddTail(new FUNCINFO("SaveCard","保留测试模块","(STR)Card Number","",0,_SaveCard));
	m_lstFuncInfo.AddTail(new FUNCINFO("UnConnect","断开NustreamObj测试仪连接","","",0,_UnConnect));
	m_lstFuncInfo.AddTail(new FUNCINFO("ClearCounter","清除计数器","","",0,_ClearCounter));
	
	m_lstFuncInfo.AddTail(new FUNCINFO("SetGroupName","设置测试组名","(STR)Test Group Name","test group name",256,_SetGroupName));
	m_lstFuncInfo.AddTail(new FUNCINFO("AddMember","添加测试组成员","(STR)Port Number","",0,_AddMember));	
	m_lstFuncInfo.AddTail(new FUNCINFO("SetTrigger","设置触发源","(STR)Port Number,(int)Trigger source Mac Address","",0,_SetTrigger));
	m_lstFuncInfo.AddTail(new FUNCINFO("SetLearn","设置学习参数","(STR)Port Number,(int)source Mac Address","",0,_SetLearn));
	m_lstFuncInfo.AddTail(new FUNCINFO("Learning","进行学习过程","(int)timeout","",0,_Learning));
	m_lstFuncInfo.AddTail(new FUNCINFO("MediaSelect","进行学习过程","(int)timeout","",0,_MediaSelect));
	m_lstFuncInfo.AddTail(new FUNCINFO("Negotiate","自协商过程","(STR)Port Number,(int)timeout","",0,_Negotiate));
	m_lstFuncInfo.AddTail(new FUNCINFO("TranConfig","传输参数配置","(STR)Port Number,(int)source mac address,(int)destination mac address,(int)100M ports number,(int)broadcast flag,(int)data packet length,(int)template type","",0,_TranConfig));
	
	m_lstFuncInfo.AddTail(new FUNCINFO("ReadTrasmit","获取执行完毕数据包数","(STR)Port Number,(int)timeout","receive packet number,send packet number",256,_ReadTrasmit));
	m_lstFuncInfo.AddTail(new FUNCINFO("ReadCounter","获取实时数据包数","(STR)Port Number,(int)timeout","receive packet number,send packet number",256,_ReadCounter));
	m_lstFuncInfo.AddTail(new FUNCINFO("Calculate","丢包运算","(int)total packet number,(int)port packet number...(1-8)","drop packet number",0,_Calculate));
*/
	}
CNustreamObj00::~CNustreamObj00(void)
{
	_UnConnect();
}
void CNustreamObj00::ViewObjectInfo()
{

}
CString CNustreamObj00::GetObjectInfo()
{
	CString sRtn = "";
	sRtn.Format("NustreamObj(IP_Address:%s),%s",m_sIp,m_bOpen?"CONNECT":"UNCONNECT");
	return sRtn;
}
/*
UI16_T ltob_16(UI16_T a)
{
	I8_T *b, temp[2];

    b = (I8_T*) &a;
    temp[0] = *(b + 1);
    temp[1] = *b;

    return *((UI16_T *) temp);
}

BOOLEAN_T Rx_Query_Ack_Pkt(UI8_T *buffer)
{
    I32_T i;
    NU_SYS_QUERY_T *query;
    I32_T NUM_OF_ACTIVE_PORT;

    NUM_OF_ACTIVE_PORT = ltob_16(*((UI16_T *)(buffer + CLIENT_CMD_HDR_LEN)));

    if(NUM_OF_ACTIVE_PORT == 0xFFFF){
        MessageBox(NULL, "No active port!", "Error!", MB_OK);
        return false;
    }

    for(i = 0; i < NUM_OF_ACTIVE_PORT; i++){
        query = (NU_SYS_QUERY_T *) ((buffer + CLIENT_CMD_HDR_LEN + 2) + (i * 6));

        portinfo[i].item_is_used = true;
        portinfo[i].chasid       = ltob_16(query->chasid);
        portinfo[i].boardid      = query->boardid;
        portinfo[i].portid       = query->portid;
        portinfo[i].cardtype     = query->cardtype;
        portinfo[i].portstatus   = query->portstatus;

    } // end of for

    return true;
}

I32_T FindPortInfoIndex(UI16_T chasid, UI8_T boardid, UI8_T portid)
{
    UI32_T  i;
    I32_T index = -1;

    for(i = 0; i < MAX_NUM_OF_PORT; i++){
        if( (chasid  == portinfo[i].chasid) &&
            (boardid == portinfo[i].boardid) &&
            (portid  == portinfo[i].portid) &&
            (portinfo[i].item_is_used) ){
            index = i;
            break;
        }
    }

    return index;
}

void __stdcall CNustreamObj00::mf_RcvParser(UI8_T *buffer, UI32_T buffer_len)
{
	CString	tmps;
	BOOL		b_rcvack = TRUE;
	UI8_T		boardid, portid,linkstatus;
	UI16_T cmdid, chasid, cardtype, clientid, portstatus;
	I32_T		index;
    I16_T self_clientid;
  
   
    XM2202_PKT_FORMAT_T *pkt;

    pkt      = (XM2202_PKT_FORMAT_T *) buffer;
    clientid = ltob_16(pkt->clientid);
    cardtype = ltob_16(pkt->cardtype);
    cmdid    = ltob_16(pkt->cmdid);
    chasid   = ltob_16(pkt->para.simple.chasid);
    boardid  = pkt->para.simple.boardid;
    portid   = pkt->para.simple.portid;
    
   
    if(cmdid == 0x80FC) {
        if((index = FindPortInfoIndex(chasid, boardid, portid)) != -1){
            memcpy(&linkstatus, buffer + CLIENT_CMD_HDR_LEN + 4, 1);
            portinfo[index].linkstatus = linkstatus;
            if(linkstatus == 0xFF){
                portinfo[index].linkdown_flag = true;
                portinfo[index].linkdown_time = time(NULL);
            }

        }

    }

    if(cmdid == 0x0E00){
        memcpy(&clientid, buffer + CLIENT_CMD_HDR_LEN + 6, 2);
        clientid = ltob_16(clientid);
        if(clientid == self_clientid){
            if((index = FindPortInfoIndex(chasid, boardid, portid)) != -1){
                memcpy(&portstatus, buffer + CLIENT_CMD_HDR_LEN + 4, 2);
                portstatus = ltob_16(portstatus);
                if(portstatus == 1)
                    portinfo[index].portstatus = SELF_LOCK;
                if(portstatus == 0)
                    portinfo[index].portstatus = UNLOCK;
             
            }
        }
    }

    switch(cardtype){
        case 0:
            if(cmdid == QUERY_ACK_ID){
                self_clientid = clientid;
                //Form1->Memo1->Lines->Add("client id: " + IntToStr(self_clientid));
                Rx_Query_Ack_Pkt(buffer);
               // Arrange_PortInfo();
            }
            break;

        case 1:
          //  Rx_XM2202_Server_Pkt(cmdid, buffer);
            break;

        case 2:
            break;

        case 3:
//            Rx_XM2301G_Server_Pkt(cmdid, buffer);
            break;

        default:
        break;
    }

	
}
*/

//连接: (string)ip地址
BOOL CNustreamObj00::_Connect(const CString sInput,CString &sOutput)						
{
   
	CHECKPARAMINIT(1,15);
	CHECKSTR(0,address,"",7,15);	//检测参数范围
	//if(!m_bOpen)					//未连接
	//{
		I8_T  s_ip[15];
		memset(s_ip, 0, sizeof(s_ip));
		//wsprintf(s_ip,"%s",address);
       
		//Nu_SYS_Init(mf_RcvParser);
       
		// If return was negative we're not linked. Prompt for IP and link
		if (Nu_SYS_ConnectToServer(s_ip))
         
	{
			// Return Value is negative if link did not succeed.
		    //	if Nu_LinkStatus(UI8_T); 
		    	return FALSE;
		    }
       
		m_sIp.Format("%s",m_server_addr);
		m_bOpen = TRUE;
	//}
	sOutput = m_sIp;
	
	return TRUE;		
}


//断开当前连接
BOOL CNustreamObj00::_UnConnect(const CString sInput,CString &sOutput)
{
	
	if(m_bOpen)
	{
		if(Nu_SYS_TerminateServer())//NSUnLink() < 0){
		{
			//Nu_SYS_StopProcess();
			m_bOpen = FALSE;
			return  FALSE;
		}
		m_bOpen = FALSE;
		return TRUE;
	}
	
	return TRUE;
}
//当前测试组开始进行数据传输
BOOL CNustreamObj00::_StartRun(const CString sInput,CString &sOutput)
{
	
	if(!Nu_StartTxPkt(0, 0) )
		return FALSE;

		
	return TRUE;
	
}
//当前测试组停止进行数据传输
BOOL CNustreamObj00::_StopRun(const CString sInput,CString &sOutput)
{
	/*
	if(!Nu_StopTxPkt(sName))//HGRun(HTSTOP) < 0)
		return FALSE;
	*/	
	return TRUE;
	
}
//保留smartbit测试卡;(string)卡编号
BOOL CNustreamObj00::_SaveCard(const CString sInput,CString &sOutput)						
{
	BM_SETUPPORTSTATUS_T MyConfig;

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

  
//    MyConfig.pstatus_chasid=sub;
		
	//Nu_LockPortStatus(BM_SETUPPORTSTATUS_T);
	if (!Nu_LockPortStatus_RdFile("config"))
	//if(HTSlotReserve(sub,slot)< 0)
		return FALSE;
		
	return TRUE;
}

//设置smartbit当前测试组名称:(string)组名
BOOL CNustreamObj00::_SetGroupName(const CString sInput,CString &sOutput)						
{
	
	CHECKPARAMINIT(1,256);
	CHECKSTR(0,sName,"",1,256);	//检测参数范围
//	if(HGSetCurrentGroupName((char*)(const char*)sName) < 0)
//		return FALSE;
//	sOutput = sName;
	
	return TRUE;		
}
//添加smartbit当前测试组成员:(string)端口配置(仪器编号-测试板编号-端口编号)
BOOL CNustreamObj00::_AddMember(const CString sInput,CString &sOutput)						
{
	/*
	CHECKPARAMINIT(1,32);
	CHECKSTR(0,config,"",1,32);			//检测参数范围
	CONVERTNUMBER(config,1);

	if(HGAddtoGroup(sub,slot,port) < 0)
		return FALSE;
		*/
	return TRUE;
}
//Reset当前测试组成员
BOOL CNustreamObj00::_ResetPort(const CString sInput,CString &sOutput)						
{
	/*
	if(HGResetPort(RESET_FULL) < 0)
		return FALSE;

		*/
	return TRUE;
	
}
//清除当前测试组(包括清除所有成员)
BOOL CNustreamObj00::_ClearGroup(const CString sInput,CString &sOutput)
{
	
	//if(//HGClearGroup() < 0)
	//	return FALSE;
		
	return TRUE;
}
//清除当前测试组计数器
BOOL CNustreamObj00::_ClearCounter(const CString sInput,CString &sOutput)
{
	/*
	if(HGClearPort() < 0)

⌨️ 快捷键说明

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