📄 physerver.cpp
字号:
#include "physerver.h"CPhyService::CPhyService(CSerialPortDef *pChannel) : m_serial(pChannel){ m_nStatus = -1;}CPhyService::~CPhyService(){ Disconnect();}bool CPhyService::Connect(){ bool bRet = false; //open IO port if (m_serial.Open()) { pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); m_nStatus = 0; if (pthread_create(&m_hThread,&attr,ReadSerial,(void *)this) == 0) { bRet = true; } else { m_nStatus = -1; m_serial.Close(); } pthread_attr_destroy(&attr); } return bRet;}void CPhyService::Disconnect(){ if (m_nStatus != -1) { m_nStatus = -1; if (m_hThread) { cout << "phy: " << m_hThread << endl; pthread_cancel(m_hThread); } m_serial.Close(); }}bool CPhyService::Reset(){ Disconnect(); sleep(2); return Connect();}void *ReadSerial(void *p){ CPhyService * pPS= (CPhyService *)p; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL); BYTE aBuf[256]; timeval tv; sleep(5); while(1) { if (pPS->Status()!=-1) { int nLen=0; nLen= read(pPS->m_serial.GetFileHandle(),aBuf,256); if (nLen > 0) { gettimeofday(&tv,NULL); CDataNode* pDN = new CDataNode(tv,aBuf,nLen); pPS->m_queRecv.Add(pDN); pPS->AddIOStream(tv,aBuf,nLen,true); #ifdef _COMMONITOR cout << endl; cout << '{' <<nLen << '}'; for (int nnn=0; nnn<nLen; nnn++) { char c[16]; sprintf(c," %02x ",aBuf[nnn]); cout << c; } #endif } } usleep(10000); //10 milliseconds }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -