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

📄 cscdll.cpp

📁 一个通讯管理机的源代码。比较好用。推荐
💻 CPP
字号:
#include "cscdll.h"int CCSCDLL::GetStatus(){	return m_physvr.Status();}CCSCDLL::CCSCDLL(CSubdevMgr* pDevMgr,BYTE bySrcAddr){	m_pDevMgr = pDevMgr;	pthread_mutex_init(&m_csWrite,NULL);// PTHREAD_MUTEX_INITIALIZER)	m_bySrcAddr = bySrcAddr;	m_pFrame = new CCSCFrame;	m_nStatus = -1;}bool CCSCDLL::Init(){	bool bRet = false;	if (m_physvr.Status() == 0)		bRet = true;	return bRet;}CCSCDLL::~CCSCDLL(){	pthread_mutex_destroy(&m_csWrite);}int CCSCDLL::IND(CFrameNode& fn){	int nIndications = -1;	if (m_physvr.Status() == 0)	{		nIndications = 0;		CDQue* pDQueRecv = m_physvr.GetRecvQueue(0);		if (pDQueRecv)		{			CCSCFrame frmInput;			if (frmInput.BufferToFrame(pDQueRecv))			{				frmInput.FrameToBuf(fn);//				m_wDesAddr = FNRecv.m_wSAddr;				if ((fn.m_wDAddr == m_bySrcAddr) || (fn.m_wDAddr == 0xf))					nIndications = 1;			}		}	}	return nIndications;}bool CCSCDLL::WriteToPL(BYTE* pBuf,WORD wSize,DWORD dwPeerIPADDR){	pthread_mutex_lock(&m_csWrite);	BYTE asdf[1024];	asdf[0] = asdf[2] = 0;	asdf[1] = wSize;	memcpy(&asdf[3],pBuf,wSize);	bool bRet = m_physvr.Write(asdf,wSize+3,dwPeerIPADDR);/*	cout  << '{' <<wSize << '}';	for (int nnn=0; nnn<wSize; nnn++)	{		char c[8];		sprintf(c," %02x ",pBuf[nnn]);		cout << c;	}	cout  << endl;*/	usleep(10000);	pthread_mutex_unlock(&m_csWrite);	return bRet;}int CCSCDLL::REQ(BYTE byService,CFrameNode *pFNSend,BYTE byPriority/*0:H;1:L*/,bool bRetry){	int nConfirm = 4; //等待物理层可用	CSubdev* pDev = m_pDevMgr->GetDevFrmDevNo(m_pDevMgr->GetDevNoFrmAddr(pFNSend->m_wDAddr));	if (m_physvr.Status() == 0)	{			switch (byService)			{			case 0: //send-confirm; Request-Respond				if (GetStatus() == 0)				{					pFNSend->m_wSAddr = m_bySrcAddr;					m_pFrame->SetupFrame(pFNSend);					CDataNode dn;					m_pFrame->FrameToBuffer(dn);					if (WriteToPL(dn.m_pbyData,dn.m_wSize,pDev->m_dwIPAddr))						nConfirm = 1;				}				break;/*				AddIOStream(1,dn.m_pbyData,dn.m_wSize);				if (BufferToFrame(pDQueRecv))				{					AddIOStream(2,m_pFrame->m_pbyInBuf,m_pFrame->m_wInLength);					m_pFrame->FrameToBuf(FNRecv);					nConfirm = 1;				}*/			case 1: //send-no-reply				if (GetStatus() == 0)				{					pFNSend->m_wSAddr = m_bySrcAddr;					pFNSend->m_wDAddr = 0xff;					m_pFrame->SetupFrame(pFNSend);										CDataNode dn;					m_pFrame->FrameToBuffer(dn);//					CDQue* pDQueRecv = m_physvr.GetRecvQueue();//					pDQueRecv->RemoveAll();					WriteToPL(dn.m_pbyData,dn.m_wSize,0xff01a8c0);//					m_physvr.Write(dn.m_pbyData,dn.m_wSize);//				AddIOStream(1,dn.m_pbyData,dn.m_wSize);					nConfirm = 0;				}				break;			case 2: //send-confirm ,cancel current secondary frames for half duplex				break;			case 3: //send-no-reply ,cancel current secondary frames for half duplex				break;			case 4: //return link status, return successful if the data link is not busy				nConfirm = GetStatus();				break;			default: break;			}	}	return nConfirm;}

⌨️ 快捷键说明

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