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

📄 comthread.cpp

📁 保护装置的mbpc软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// 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 + -