📄 mydl.cpp
字号:
#include "mydl.h"/*static UINT thrdRead(void* pVoid){ CMyDL *pDL = (CMyDL *)pVoid;// pDL->m_mutex.Lock(); pDL->m_bThreadAlive2 = true; while (1) { pDL->ReadFrmPL(); } return 0;}*/bool CMyDL::Init(){ bool bRet = false; if (m_plsvr.Status() == 0) {/* m_hShutdownEvent2 = CreateEvent(NULL, TRUE, FALSE, NULL); if (m_pThrdRead = AfxBeginThread(thrdRead,this)) bRet = true; else m_pThrdRead = NULL;*/ bRet = true; } return bRet;}void CMyDL::Destroy(){/* if (m_pThrdRead) { while (m_bThreadAlive2) { SetEvent(m_hShutdownEvent2); Sleep(20); } m_pThrdRead = NULL; }*/ m_plsvr.Disconnect();}CMyDL::~CMyDL(){ Destroy();}bool CMyDL::WriteToPL(BYTE* pBuf,WORD wSize){ bool bRet = false; if (m_plsvr.Status() == 0) bRet = m_plsvr.Write(pBuf,wSize); return bRet;}int CMyDL::IND(CFrameNode*& pfn,int nMilliSecs){ int nIndications = 0; if (m_plsvr.Status() == 0) { CFrameNode fnR; CDQue* pDQueRecv = m_plsvr.GetRecvQueue(0); CMyFrame rf; if (pDQueRecv && rf.BufferToFrame(pDQueRecv)) { rf.FrameToBuf(fnR); if (fnR.m_wSize > 0) //有用户数据 { pfn = new CFrameNode; *pfn = fnR; nIndications = 1; } } } return nIndications;}/*int CMyDL::ReadFrmPL(){ bool bIndications = false; int nFunc = -1; if (m_plsvr.Status() == 0) { CFrameNode fnR; CDev* pDev = NULL; for (BYTE b=0;b<256;b++) { CDQue* pDQueRecv = m_plsvr.GetRecvQueue(); if (pDQueRecv == NULL) break; if (BufferToFrame(pDQueRecv)) { AddIOStream(3,m_pFrameRecv->m_pbyInBuf,m_pFrameRecv->m_wInLength); m_pFrameRecv->FrameToBuf(fnR); if (fnR.m_wSize >= 0) //有用户数据 { CFrameNode* pfn = new CFrameNode; *pfn = fnR; m_queUsrData.Add(pfn); } } } } if (WAIT_OBJECT_0 == WaitForSingleObject(m_hShutdownEvent2, 20)) { m_bThreadAlive2 = false; AfxEndThread(101); } ////////////////// m_nStatus = 0; return nFunc;}*/int CMyDL::REQ(BYTE byService,CFrameNode *pFNSend,DWORD dwMilliSecs,bool bRetry){ int nConfirm = -4; //等待物理层可用 if (Status() == 0) { switch (byService) { case 0: //send-confirm; Request-Respond { CDataNode dn; CMyFrame sf; sf.SetupFrame(pFNSend); sf.FrameToBuffer(dn); if (WriteToPL(dn.m_pbyData,dn.m_wSize)) { nConfirm = 0; } else nConfirm = -1; } 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 = 0;//GetStatus(pDev); break; default: break; } } else nConfirm = -1; return nConfirm;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -