亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? serialport.cpp

?? 一部容易理解的書
?? CPP
字號:
// SerialPort.cpp: implementation of the CSerialPort class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SerialPort.h"
#include "process.h"
#include <assert.h>
/***********global variable**********/
UINT WINAPI  CommThread(void* lpParameter);
HANDLE g_hReadSignal;
HANDLE g_hWriteSignal;
UCHAR RXBuffer;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSerialPort::CSerialPort()
{
	m_ov.hEvent = NULL;
	m_ov.Offset = 0;
	m_ov.Internal = 0;
	m_hWriteEvent = NULL;
	m_szWriteBuffer = NULL;
	m_hShutdownEvent = NULL;
	m_nSendDataLen = 0;
}

CSerialPort::~CSerialPort()
{
	SetEvent(m_hShutdownEvent);
	delete [] m_szWriteBuffer;
}
/*/*******************************************************************
--Function name: 
--Function Description:  
--Function involved:  
--Global variable  :  
--Input :
--Output:
--Designer: song      Time : 08.3.17
--Modifier:           Time :
--Version: v0.1
--*******************************************************************/
void ReceiveChar(CSerialPort *port)
{
	BOOL bRead = TRUE;
	BOOL bResult = TRUE;
	DWORD dwError = 0;
	DWORD BytesRead = 0;
	COMSTAT comstat;


	while (1)
	{
		bResult = ClearCommError(port->m_hCom,&dwError,&comstat);
		if (comstat.cbInQue == 0)
		{
			break;
		}

		if (bRead)
		{
			bResult = ReadFile(port->m_hCom,
							   &RXBuffer,
							   1,
							   &BytesRead,
							   &port->m_ov);
			if (!bResult)
			{
				switch(dwError = GetLastError())
				{
					case ERROR_IO_PENDING:
						{
							bRead = FALSE;
							break;
						}
					default:
						{
							port->ProcessErrorMessage("ReadFile()");
							break;
						}
						
				}
			}
			else
			{
				bRead = TRUE;
			}
		}
		if (!bRead)
		{
			bRead = TRUE;
			bResult = GetOverlappedResult(port->m_hCom,
										  &port->m_ov,
										  &BytesRead,
										  TRUE);
			if (!bResult)
			{
				port->ProcessErrorMessage("GetOverlappedResult() in ReadFile()");
			}			
		}
			SetEvent(g_hReadSignal);
			ResetEvent(port->m_ov.hEvent);
	}
}
/*/*******************************************************************
--Function name: 
--Function Description:  
--Function involved:  
--Global variable  :  
--Input :
--Output:
--Designer: song      Time : 08.3.17
--Modifier:           Time :
--Version: v0.1
--*******************************************************************/
void WriteChar(CSerialPort *port)
{
	BOOL bWrite = TRUE;
	BOOL bResult = TRUE;
	DWORD BytesSent = 0;

	OutputDebugString("write function  is running");
	ResetEvent(port->m_hWriteEvent);
	if (bWrite)
	{
		port->m_ov.Offset = 0;
		port->m_ov.Internal = 0;
		port->m_ov.OffsetHigh = 0;
        
		/* clear buffer */
		PurgeComm(port->m_hCom,PURGE_RXCLEAR | PURGE_TXCLEAR |PURGE_RXABORT | PURGE_TXABORT);

		bResult = WriteFile(port->m_hCom,
							port->m_szWriteBuffer,
							port->m_nSendDataLen,
							&BytesSent,
							&port->m_ov);
		/* deal with any error codes */
		if (!bResult)
		{
			DWORD dwError = GetLastError();
			switch(dwError)
			{
				case ERROR_IO_PENDING:
					{
						BytesSent = 0;
						bWrite = FALSE;
						break;
					}
				default:
					{
						port->ProcessErrorMessage("WriteFile()");
					}
			}
		}
	}
	if (!bWrite)
	{
		bWrite = TRUE;
		bResult = GetOverlappedResult(port->m_hCom,
										  &port->m_ov,
										  &BytesSent,
										  TRUE);
		if (!bResult)
		{
			port->ProcessErrorMessage("GetoverlappedResults() in WriteFile()");
		}
	}
	
	if (BytesSent != port->m_nSendDataLen)
	{
		OutputDebugString("WARNING:writeFile() error..BytesSent;Message Length\n");
		ResetEvent(port->m_ov.hEvent);
	}	
	FlushFileBuffers(port->m_hCom);
	SetEvent(g_hWriteSignal);
}
/*/*******************************************************************
--Function name: 
--Function Description:  
--Function involved:  
--Global variable  :  
--Input :
--Output:
--Designer: song      Time : 08.3.17
--Modifier:           Time :
--Version: v0.1
--*******************************************************************/ 
UINT WINAPI  CommThread(void* lpParameter)
{
	CSerialPort *port = (CSerialPort*)lpParameter;
	BOOL bResult = TRUE;
	DWORD CommEvent = 0;
	DWORD dwError = 0;
	COMSTAT commStat;
	DWORD receiveEvent = 0;
	if (port->m_hCom)
	{
		PurgeComm(port->m_hCom,PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
	}
	OutputDebugString("thread1  is running");
	while (1)
	{
		bResult = WaitCommEvent(port->m_hCom,&CommEvent,&port->m_ov);
		if (!bResult)
		{
			switch(dwError = GetLastError())
			{
				case ERROR_IO_PENDING:
				{
					break;
				}
				case 87:
				{
					break;		
				}
				default:
				{
					port->ProcessErrorMessage("WaitCommEvent()");
				}
			}
			ClearCommError(port->m_hCom,&dwError,&commStat);
		} //end of if(!bResult)
		
		CommEvent = WaitForMultipleObjects(3,port->m_hEventArray,FALSE,INFINITE);
		switch(CommEvent)
		{
			case 0:  //shutdown event
				{
					_endthreadex(0);
					CloseHandle(port->m_hCom);
					break;
				}
			case 1:  //read event
				{
					ResetEvent(port->m_ov.hEvent);
					if (GetCommMask(port->m_hCom,&receiveEvent))
					{
						if (receiveEvent & EV_RXCHAR)
						{
							ReceiveChar(port);		
						}
					}
					break;
				}
			case 2: //write event
				{
					ResetEvent(port->m_hWriteEvent);
					WriteChar(port);
					break;
				}
		}
	}
	return 0;
}
/*/*******************************************************************
--Function name: 
--Function Description:  
--Function involved:  
--Global variable  :  
--Input :
--Output:
--Designer: song      Time : 08.3.17
--Modifier:           Time :
--Version: v0.1
--*******************************************************************/
BOOL CSerialPort::InitPort(UINT portNum, UINT baud, char parity, UINT dataBits, UINT stopsBits, DWORD dwCommEvents, UINT nBufferSize)
{
	DWORD dwError;
	BOOL bResult = FALSE;
	char *szPort = new char[50];
	char *szBaud = new char[50];

	// prepare port strings
	sprintf(szPort, "COM%d", portNum);
	sprintf(szBaud, "baud=%d parity=%c data=%d stop=%d", baud, parity, dataBits, stopsBits);

	if (m_szWriteBuffer != NULL)
		delete [] m_szWriteBuffer;
	m_szWriteBuffer = new char[nBufferSize];
	
	m_nPortNr	= portNum;
	m_nBaud		= baud;
	m_nParity	= parity;
	m_nDatabits	= dataBits;
	m_nStopbits	= stopsBits;
	
	m_nWriteBufferSize = nBufferSize;
	m_dwCommEvents = dwCommEvents;
	
	if (m_ov.hEvent != NULL)
	{
		ResetEvent(m_ov.hEvent);
	}
	else
	{	
		m_ov.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
	}
	if (m_hWriteEvent != NULL)
	{
		ResetEvent(m_hWriteEvent);
	}
	else
	{
		m_hWriteEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
	}
	if (m_hShutdownEvent != NULL)
	{
		ResetEvent(m_hShutdownEvent);
	}
	else
	{
		m_hShutdownEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
	}
	SetThreadPriority(m_hShutdownEvent,THREAD_PRIORITY_HIGHEST);
	/* this event is used for work thread to notify main thread read operation is complete*/
	g_hReadSignal = CreateEvent(NULL,TRUE,FALSE,NULL);
	g_hWriteSignal = CreateEvent(NULL,TRUE,FALSE,NULL);

	m_hEventArray[0] = m_hShutdownEvent;
	m_hEventArray[1] = m_ov.hEvent;
	m_hEventArray[2] = m_hWriteEvent;

	// get a handle to the port
	m_hCom = CreateFile(szPort,			// communication port string (COMX)
		GENERIC_READ | GENERIC_WRITE,	// read/write types
		0,								// comm devices must be opened with exclusive access
		NULL,							// no security attributes
		OPEN_EXISTING,					// comm devices must use OPEN_EXISTING
		FILE_FLAG_OVERLAPPED,			// Async I/O
		0);							    // template must be 0 for comm devices
	
	if (m_hCom == INVALID_HANDLE_VALUE)
	{
		// port not found
		dwError=GetLastError();
		switch(dwError)
		{
			case 0:
			break;
			default:
			break;
		}
		delete [] szPort;
		delete [] szBaud;
		
		return FALSE;
	}

	/* set the timeout values,the base unit is ms */
	m_Timeouts.ReadIntervalTimeout = 1000;
	m_Timeouts.ReadTotalTimeoutMultiplier = 1000;
	m_Timeouts.ReadTotalTimeoutConstant = 1000;
	m_Timeouts.WriteTotalTimeoutMultiplier = 1000;
	m_Timeouts.WriteTotalTimeoutConstant = 1000;
	/* set the timeout values,if success return nonzero */
	if (SetCommTimeouts(m_hCom,&m_Timeouts))
	{	
		/* set event mask to monitor given port event */
		if (SetCommMask(m_hCom,m_dwCommEvents))
		{
			/* get the current DCB structure */
			if(GetCommState(m_hCom,&m_dcb))
			{	
				/* change DCB settings */
				if (BuildCommDCB(szBaud,&m_dcb))
				{
					/* set the current DCB structure */
					if (SetCommState(m_hCom,&m_dcb))
					{
						/* there is no error ,continue execute */
					}
					else
					{
						ProcessErrorMessage("SetCommState()");
					}
				}
				else
				{
					ProcessErrorMessage("BuildCommDCB()");
				}
			}
			else
			{
				ProcessErrorMessage("GetCommState()");
			}
		}
		else
		{
			ProcessErrorMessage("SetCommMask()");
		}
	}
	else
	{
		ProcessErrorMessage("SetCommTimeouts()");
	}
	 
	return TRUE;
}
/*/*******************************************************************
--Function name: 
--Function Description:  
--Function involved:  
--Global variable  :  
--Input :
--Output:
--Designer: song      Time : 08.3.17
--Modifier:           Time :
--Version: v0.1
--*******************************************************************/
void CSerialPort::ProcessErrorMessage(char *ErrorText)
{
	char *Temp = new char[200];
	LPVOID lpMsgBuf;
	
	FormatMessage( 
		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
		NULL,
		GetLastError(),
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
		(LPTSTR) &lpMsgBuf,
		0,
		NULL 
		);
	
	sprintf(Temp, "WARNING:  %s Failed with the following error: \n%s\nPort: %d\n", (char*)ErrorText, lpMsgBuf, m_nPortNr); 
	MessageBox(NULL, Temp, "Application Error", MB_ICONSTOP);
	
	LocalFree(lpMsgBuf);
	delete[] Temp;
}

/*/*******************************************************************
--Function name: 
--Function Description:  
--Function involved:  
--Global variable  :  
--Input :
--Output:
--Designer: song      Time : 08.3.17
--Modifier:           Time :
--Version: v0.1
--*******************************************************************/
BOOL CSerialPort::StartMonitoring()
{
	if (!(m_handle = (HANDLE)_beginthreadex(NULL,0,CommThread,this,0,NULL)))
	{	
		return FALSE;
	}
	ResumeThread(m_handle);
	OutputDebugString("thread  is running");
	return TRUE;
}
/*/*******************************************************************
--Function name: 
--Function Description:  
--Function involved:  
--Global variable  :  
--Input :
--Output:
--Designer: song      Time : 08.3.17
--Modifier:           Time :
--Version: v0.1
--*******************************************************************/
void CSerialPort::WriteData(char *string,UINT length)
{
	assert(m_hCom);

	memset(m_szWriteBuffer,0,m_nWriteBufferSize);
	memcpy(m_szWriteBuffer,string,length);
	m_nSendDataLen = length;
	SetEvent(m_hWriteEvent);
}
/*/*******************************************************************
--Function name: 
--Function Description:  
--Function involved:  
--Global variable  :  
--Input :
--Output:
--Designer: song      Time : 08.3.17
--Modifier:           Time :
--Version: v0.1
--*******************************************************************/
BOOL CSerialPort::StopMonitoring()
{
	OutputDebugString("Thread suspended\n");
	SuspendThread(m_hCom);
	return TRUE;
}
/*/*******************************************************************
--Function name: 
--Function Description:  
--Function involved:  
--Global variable  :  
--Input :
--Output:
--Designer: song      Time : 08.3.17
--Modifier:           Time :
--Version: v0.1
--*******************************************************************/
BOOL CSerialPort::RestartMonitoring()
{
	OutputDebugString("Thread resumed\n");
	ResumeThread(m_hCom);
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品一区二区三| 久久久国产午夜精品| 亚洲福利视频一区| 欧美福利一区二区| 日韩经典中文字幕一区| 精品国产电影一区二区| 粗大黑人巨茎大战欧美成人| 综合婷婷亚洲小说| 欧美日韩视频在线观看一区二区三区 | 久久激情综合网| 久久久久99精品一区| 91亚洲永久精品| 亚洲国产日韩精品| 日韩欧美久久久| 99久久精品99国产精品| 亚洲国产美女搞黄色| 日韩一级完整毛片| 国产精品系列在线观看| 亚洲一二三四在线| 亚洲精品一区二区三区福利| 国产成人精品亚洲日本在线桃色| 亚洲日本中文字幕区| 日韩亚洲电影在线| 99re6这里只有精品视频在线观看| 午夜精品影院在线观看| 26uuu国产电影一区二区| 91麻豆视频网站| 蜜乳av一区二区| 亚洲色大成网站www久久九九| 91精品婷婷国产综合久久竹菊| 国产99久久久国产精品潘金 | 成人国产在线观看| 亚洲18影院在线观看| 久久久久国产免费免费| 欧美麻豆精品久久久久久| 粉嫩蜜臀av国产精品网站| 日日夜夜一区二区| 亚洲欧洲一区二区三区| 精品国产乱码久久久久久牛牛| 色婷婷狠狠综合| 国产成人精品免费一区二区| 午夜精品一区在线观看| 亚洲天堂精品在线观看| 国产午夜精品美女毛片视频| 欧美精品在线一区二区三区| 91丨porny丨在线| 国产一区二区三区电影在线观看 | 中文字幕av不卡| 欧美一区二区三区四区久久| 91香蕉视频污| 国产成人自拍高清视频在线免费播放| 亚洲一本大道在线| 亚洲素人一区二区| 欧美国产精品劲爆| 精品福利在线导航| 欧美一区二区三区在线电影| 欧美视频一区二| 色屁屁一区二区| 99精品桃花视频在线观看| 国产成人免费视频网站| 国产综合色视频| 国产一二精品视频| 国产曰批免费观看久久久| 美国毛片一区二区三区| 日本中文字幕一区二区有限公司| 亚洲一卡二卡三卡四卡无卡久久| 亚洲视频在线观看一区| 亚洲色欲色欲www| √…a在线天堂一区| 亚洲国产精品黑人久久久| 久久精品人人做| 久久精品夜色噜噜亚洲a∨| 日韩三级免费观看| 欧美成人三级电影在线| 欧美成人一区二区三区在线观看| 日韩精品中文字幕在线不卡尤物| 日韩色视频在线观看| 日韩欧美国产小视频| 欧美一区二区精美| 精品久久久久久久久久久久久久久久久| 欧美精品少妇一区二区三区 | 91福利社在线观看| 在线观看免费视频综合| 欧美日韩在线不卡| 91精品免费在线| 欧美一区二区三区视频免费| 日韩精品一区二区三区老鸭窝| 亚洲精品一区二区三区福利| 久久久国产精品午夜一区ai换脸| 国产三级精品三级| 亚洲日本va午夜在线影院| 亚洲一区二区三区四区五区中文 | 久久精品国产99国产精品| 国产尤物一区二区| 成人免费看片app下载| 一本大道综合伊人精品热热| 欧美日韩精品是欧美日韩精品| 欧美日韩国产另类不卡| 欧美tickling挠脚心丨vk| 国产亚洲人成网站| 亚洲精品日产精品乱码不卡| 三级在线观看一区二区| 国产乱码精品一品二品| 色婷婷激情综合| 欧美成人bangbros| 亚洲欧洲精品一区二区三区| 五月天丁香久久| 国产剧情av麻豆香蕉精品| 91福利视频网站| 久久午夜羞羞影院免费观看| 亚洲色图视频网| 蜜臀av在线播放一区二区三区| 成人黄色电影在线| 91精品久久久久久久99蜜桃| 欧美激情一区二区| 天堂久久一区二区三区| 成人免费福利片| 717成人午夜免费福利电影| 国产人妖乱国产精品人妖| 亚洲一区二区三区四区在线观看 | 国产传媒日韩欧美成人| 精品视频一区 二区 三区| 久久中文娱乐网| 天天影视涩香欲综合网 | 精品亚洲国内自在自线福利| 91丨porny丨最新| 国产亚洲视频系列| 日韩黄色免费网站| 在线日韩一区二区| 国产日本欧美一区二区| 免费成人小视频| 91福利社在线观看| 中文字幕一区二区三区在线播放 | 亚洲国产一二三| 在线观看日韩国产| 欧美日本国产一区| 日本一区二区电影| 精品综合久久久久久8888| 在线精品视频一区二区三四| 久久蜜桃av一区精品变态类天堂 | 日韩一级二级三级精品视频| 精品午夜久久福利影院 | 日本不卡一区二区| 色悠悠亚洲一区二区| 欧美激情在线一区二区| 久久99精品视频| 欧美一级电影网站| 亚洲一区二区在线观看视频 | 666欧美在线视频| 国产在线精品国自产拍免费| 欧美日本视频在线| 亚洲激情在线激情| 一本色道亚洲精品aⅴ| 中文字幕av一区二区三区高 | 精品国产免费人成在线观看| 日本人妖一区二区| 欧美日韩国产美| 亚洲一级二级三级| 欧美日韩一区二区三区四区五区| 亚洲女女做受ⅹxx高潮| 色综合久久综合网97色综合 | 午夜激情一区二区| 欧美日韩不卡视频| 日韩电影在线一区二区三区| 欧美日韩专区在线| 石原莉奈在线亚洲三区| 在线综合亚洲欧美在线视频| 日韩电影免费一区| 91精品欧美综合在线观看最新| 日韩不卡在线观看日韩不卡视频| 欧美绝品在线观看成人午夜影视| 亚洲va欧美va人人爽| 7777精品伊人久久久大香线蕉的| 蜜桃av一区二区在线观看| 欧美精品一区二区三区蜜桃| 国产成人综合视频| 国产精品激情偷乱一区二区∴| 91在线国内视频| 亚洲国产日产av| 欧美一区二区三区四区视频 | 久久精品999| 久久只精品国产| 99r国产精品| 一区二区三区中文字幕| 欧美人成免费网站| 久久91精品国产91久久小草| 亚洲国产精品高清| 日本韩国一区二区| 日本中文字幕不卡| 久久久91精品国产一区二区三区| 成人丝袜18视频在线观看| 亚洲欧美色图小说| 91精品国产综合久久久久久久 | 91在线视频免费91| 亚洲v精品v日韩v欧美v专区| 精品久久国产97色综合| 97久久久精品综合88久久| 婷婷亚洲久悠悠色悠在线播放| 精品国产网站在线观看| 91亚洲大成网污www|