📄 comthread.cpp
字号:
// ComThread.cpp : implementation file
//
#include "stdafx.h"
#include "mbpc.h"
#include "ComThread.h"
#include "MyObject.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "mbpcDoc.h"
/////////////////////////////////////////////////////////////////////////////
// CComThread
IMPLEMENT_DYNCREATE(CComThread, CWinThread)
CComThread::CComThread()
{
m_nTimeCntr = 0;
// memset(m_szTxFIFO, 0 , sizeof(m_szTxFIFO));
memset(m_szRxFIFO, 0, sizeof(m_szRxFIFO));
// memset(m_szInterfaceBuf, 0, sizeof(m_szInterfaceBuf));
memset(m_szInPacket, 0, sizeof(m_szInPacket));
m_pRxFront = 0;
m_pRxRear = 0;
// m_pTxFront = 0;
// m_pTxRear = 0;
m_osWrite.Offset = 0;
m_osWrite.OffsetHigh = 0;
m_osRead.Offset = 0;
m_osRead.OffsetHigh = 0;
// m_pRIB = 0;
m_pInPosition = 0;
m_bNewInPacket = FALSE;
m_szOutPacket[0] = 0xeb;
m_szOutPacket[1] = 0x90;
m_szOutPacket[2] = REMOTE_ADDRESS;
m_szOutPacket[3] = LOCAL_ADDRESS;
m_szOutPacket[5] = 0;
m_szOutPacket[6] = PROG_PRIM_VERSION;
m_szOutPacket[7] = PROG_SCND_VERSION;
}
CComThread::~CComThread()
{
}
BOOL CComThread::InitInstance()
{
// TODO: perform and per-thread initialization here
return TRUE;
}
int CComThread::ExitInstance()
{
// TODO: perform any per-thread cleanup here
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CComThread, CWinThread)
//{{AFX_MSG_MAP(CComThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CComThread message handlers
int CComThread::Run()
{
// TODO: Add your specialized code here and/or call the base class
DWORD dw_event_mask;
BOOL b_read_flag;
DWORD dwLength, tLoop;
BYTE tBuf[1280];//, tTxBuf[256], tx_length;
// DWORD data_written;
memset(tBuf, 0, sizeof(tBuf));
if (!SetCommMask( m_hCommDev, EV_RXCHAR | EV_TXEMPTY))
return ( FALSE );
while ( m_bConnected )
{
dw_event_mask = 0;
// WaitCommEvent( m_hCommDev, &dw_event_mask, &m_osRead);
WaitCommEvent( m_hCommDev, &dw_event_mask, NULL);
if ((dw_event_mask & EV_RXCHAR) == EV_RXCHAR)
{
b_read_flag = ReadFile(m_hCommDev, tBuf, 128, &dwLength, &m_osRead);
if((TRUE == b_read_flag) || (dwLength))
{
for(tLoop = 0; tLoop < dwLength; tLoop++)
{
m_szRxFIFO[m_pRxRear++] = tBuf[tLoop];
}
}
}
RcvProc();
}
return 0;
}
void CComThread::RcvProc()
{
while(GetInPacket())
{
if(1 == ProcessIncomming())
m_bNewInPacket = 0;
}
// m_pRxRear = 0;
// m_pRxFront = 0;
}
BOOL CComThread::ProcessIncomming()
{
WriteDisplayBuf();
BOOL tProcFlag = FALSE;
switch(m_szInPacket[8])
{
case ACK_DEVICE_INFO:
{
if(m_pDoc->m_nNeedMsg == ACK_DEVICE_INFO)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = RcvDeviceinfo();
m_pDoc->m_nMsgtype = ACK_DEVICE_INFO;
break;
}
case ACK_ANALOG_INFO:
{
if(m_pDoc->m_nNeedMsg == ACK_ANALOG_INFO)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = RcvAnalogInfo();
m_pDoc->m_nMsgtype = ACK_ANALOG_INFO;
m_pDoc->m_cId = m_szInPacket[9];
break;
}
case ACK_METER_INFO:
{
if(m_pDoc->m_nNeedMsg == ACK_METER_INFO)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = RcvMeterinfo();
m_pDoc->m_nMsgtype = ACK_METER_INFO;
m_pDoc->m_cId = m_szInPacket[9];
break;
}
case ACK_DI_INFO:
{
if(m_pDoc->m_nNeedMsg == ACK_DI_INFO)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvDiInfo();
m_pDoc->m_nMsgtype = ACK_DI_INFO;
m_pDoc->m_cId = m_szInPacket[9];
break;
}
case ACK_DO_INFO:
{
if(m_pDoc->m_nNeedMsg == ACK_DO_INFO)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvDoInfo();
m_pDoc->m_nMsgtype = ACK_DO_INFO;
m_pDoc->m_cId = m_szInPacket[9];
break;
}
case ACK_ENABLE_INFO:
{
if(m_pDoc->m_nNeedMsg == ACK_ENABLE_INFO)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvEnableInfo();
m_pDoc->m_nMsgtype = ACK_ENABLE_INFO;
m_pDoc->m_cId = m_szInPacket[9];
break;
}
case ACK_SETTING_INFO:
{
if(m_pDoc->m_nNeedMsg == ACK_SETTING_INFO)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvSettingInfo();
m_pDoc->m_nMsgtype = ACK_SETTING_INFO;
m_pDoc->m_cId = m_szInPacket[9];
break;
}
case ACK_ALARM_INFO:
{
if(m_pDoc->m_nNeedMsg == ACK_ALARM_INFO)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvAlarmInfo();
m_pDoc->m_nMsgtype = ACK_ALARM_INFO;
m_pDoc->m_cId = m_szInPacket[9];
break;
}
case ACK_RECORD_INFO:
{
if(m_pDoc->m_nNeedMsg == ACK_RECORD_INFO)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvRecordInfo();
m_pDoc->m_nMsgtype = ACK_RECORD_INFO;
m_pDoc->m_cId = m_szInPacket[9];
break;
}
case SEND_ANALOG:
{
if(m_pDoc->m_nNeedMsg == SEND_ANALOG)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvAnalogValue();
m_pDoc->m_nMsgtype = SEND_ANALOG;
break;
}
case SEND_METER:
{
if(m_pDoc->m_nNeedMsg == SEND_METER)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvMeterValue();
m_pDoc->m_nMsgtype = SEND_METER;
break;
}
case SEND_FREQUENCY:
{
if(m_pDoc->m_nNeedMsg == SEND_FREQUENCY)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvFrequency();
m_pDoc->m_nMsgtype = SEND_FREQUENCY;
break;
}
case SEND_DI_CHANGE:
{
if(m_pDoc->m_nNeedMsg == SEND_DI_CHANGE)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvDiChange();
m_pDoc->m_nMsgtype = SEND_DI_CHANGE;
break;
}
case SEND_DI_REGU:
{
if(m_pDoc->m_nNeedMsg == SEND_DI_REGU)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvDiRoutine();
m_pDoc->m_nMsgtype = SEND_DI_REGU;
break;
}
case SEND_DO_REGU:
{
if(m_pDoc->m_nNeedMsg == SEND_DO_REGU)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvDoRoutine();
m_pDoc->m_nMsgtype = SEND_DO_REGU;
break;
}
case SEND_DO_CHANGE:
{
if(m_pDoc->m_nNeedMsg == SEND_DO_CHANGE)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvDoChange();
m_pDoc->m_nMsgtype = SEND_DO_CHANGE;
break;
}
case SEND_ENABLE_REGU:
{
if(m_pDoc->m_nNeedMsg == SEND_ENABLE_REGU)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvEnableRoutine();
m_pDoc->m_nMsgtype = SEND_ENABLE_REGU;
break;
}
case SEND_ENABLE_CHANGE:
{
if(m_pDoc->m_nNeedMsg == SEND_ENABLE_CHANGE)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvEnableChange();
m_pDoc->m_nMsgtype = SEND_ENABLE_CHANGE;
break;
}
case SEND_ALARM:
{
if(m_pDoc->m_nNeedMsg == SEND_ALARM)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvAlarmValue();
m_pDoc->m_nMsgtype = SEND_ALARM;
break;
}
case ACK_INFO_CHANGE:
{
if(m_pDoc->m_nNeedMsg == ACK_INFO_CHANGE)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvInfoChange();
m_pDoc->m_nMsgtype = ACK_INFO_CHANGE;
break;
}
case ACK_DO_ENABLE:
{
if(m_pDoc->m_nNeedMsg == ACK_DO_ENABLE)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvDoEnable();
m_pDoc->m_nMsgtype = ACK_DO_ENABLE;
break;
}
case ACK_DO_CMD:
{
if(m_pDoc->m_nNeedMsg == ACK_DO_CMD)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvDoCmd();
m_pDoc->m_nMsgtype = ACK_DO_CMD;
break;
}
case ACK_ENABLE_ENABLE:
{
if(m_pDoc->m_nNeedMsg == ACK_ENABLE_ENABLE)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvEnableEnable();
m_pDoc->m_nMsgtype = ACK_ENABLE_ENABLE;
break;
}
case ACK_ENABLE_SETTING:
{
if(m_pDoc->m_nNeedMsg == ACK_ENABLE_SETTING)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvEnableSet();
m_pDoc->m_nMsgtype = ACK_ENABLE_SETTING;
break;
}
case ACK_RESET:
{
if(m_pDoc->m_nNeedMsg == ACK_RESET)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = TRUE;
m_pDoc->m_nMsgtype = ACK_RESET;
break;
}
case SOE_INDEX_SENDING:
{
if(m_pDoc->m_nNeedMsg == SOE_INDEX_SENDING)
{
m_pDoc->m_bArrived = TRUE;
}
tProcFlag = this->RcvSOEIndex();
m_pDoc->m_nMsgtype = SOE_INDEX_SENDING;
break;
}
case SOE_SENDING:
{
if(m_pDoc->m_nNeedMsg == SOE_SENDING)
{
m_pDoc->m_bArrived = TRUE;
}
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -