📄 cscdll.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 + -