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

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

?? serialcommhelper.cpp

?? 這是一個關于手機短信的源代碼,是用Java語言編寫的代碼.
?? CPP
字號:
// RCSerial.cpp: implementation of the CSerialCommHelper class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "SerialCommHelper.h"
#include <Process.h>
#include <string>


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

CDebugDump	m_DebugFile;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

#define ATLTRACE6 m_DebugFile.Dump

void CSerialCommHelper::InvalidateHandle(HANDLE& hHandle )
{
	hHandle = INVALID_HANDLE_VALUE;
}


void CSerialCommHelper::CloseAndCleanHandle(HANDLE& hHandle)
{

	BOOL abRet  = CloseHandle( hHandle ) ;
	if ( !abRet )
	{
		ASSERT(0);
		ATLTRACE6 ( "CSerialCommHelper : Failed to open Close Handle %d :Last Error: %d",hHandle,GetLastError());
	}
	InvalidateHandle ( hHandle );

}
CSerialCommHelper::CSerialCommHelper()
{

	InvalidateHandle( m_hThreadTerm );
	InvalidateHandle( m_hThread	);
	InvalidateHandle( m_hThreadStarted );
	InvalidateHandle( m_hCommPort );
	InvalidateHandle( m_hDataRx );
 	
	InitLock();
	m_eState = SS_UnInit;

	m_DebugFile.Init(_T("c:\\Temp\\") ,_T("SerialIO"),_T("RCSERIAL:"));
}

CSerialCommHelper::~CSerialCommHelper()
{

	m_eState = SS_Unknown;
	DelLock();
}


HRESULT CSerialCommHelper:: Init(std::string szPortName, DWORD dwBaudRate,BYTE byParity,BYTE byStopBits,BYTE byByteSize)
{
	HRESULT hr = S_OK;
	try
	{
		m_hDataRx  = CreateEvent(0,0,0,0);		
		//打開COM串口
		m_hCommPort = ::CreateFile(szPortName.c_str (),
									GENERIC_READ|GENERIC_WRITE,
									0,				//不共享COM口	
									0,				//無安全策略	
									OPEN_EXISTING,	//打開已有的文件
									FILE_FLAG_OVERLAPPED,//I/O重疊
									0				// 不為COM口生成臨時文件
									);
		//串口打開失敗
		if ( m_hCommPort == INVALID_HANDLE_VALUE )
		{
			ATLTRACE6 ( "CSerialCommHelper : Failed to open COM Port Reason: %d",GetLastError());
			AfxMessageBox("這個串口沒有裝備好或者已經(jīng)被其他設備占用了");
			return E_FAIL;
		}

		
		ATLTRACE6 ( "CSerialCommHelper : COM port opened successfully" );
		
		//COM口掩碼參數(shù)設置
		if (!::SetCommMask(m_hCommPort,EV_RXCHAR|EV_TXEMPTY) )
		{
			AfxMessageBox("串口掩碼設置錯誤");
			ATLTRACE6 ( "CSerialCommHelper : Failed to Set Comm Mask Reason: %d",GetLastError());
			return E_FAIL;
		}
		ATLTRACE6 ( "CSerialCommHelper : SetCommMask() success");
		
		//COM口的通信參數(shù)設置
		DCB dcb = {0};		
		dcb.DCBlength = sizeof(DCB);
		
		if (!::GetCommState (m_hCommPort,&dcb))
		{
			ATLTRACE6 ( "CSerialCommHelper : Failed to Get Comm State Reason: %d",GetLastError());
			return E_FAIL;
		}
		
		dcb.BaudRate	= dwBaudRate;//波特率
		dcb.ByteSize	= byByteSize;//數(shù)據(jù)尺寸
		dcb.Parity		= byParity;	 //校驗選擇	
		if ( byStopBits == 1 )		 //終止位	
			dcb.StopBits	= ONESTOPBIT;
		else if (byStopBits == 2 ) 
			dcb.StopBits	= TWOSTOPBITS;
		else 
			dcb.StopBits	= ONE5STOPBITS;

		dcb.fDsrSensitivity = 0;
		dcb.fDtrControl = DTR_CONTROL_ENABLE;
		dcb.fOutxDsrFlow = 0;

		
		if (!::SetCommState (m_hCommPort,&dcb))
		{
			AfxMessageBox("串口通信參數(shù)設置錯誤");
			ATLTRACE6 ( "CSerialCommHelper : Failed to Set Comm State Reason: %d",GetLastError());
			return E_FAIL;
		}
		ATLTRACE6 ( "CSerialCommHelper : Current Settings, (Baud Rate %d; Parity %d; Byte Size %d; Stop Bits %d", dcb.BaudRate, 
								dcb.Parity,dcb.ByteSize,dcb.StopBits);
		

		
		//COM口超時參數(shù)設置( we control the timeout overselves using WaitForXXX()
		COMMTIMEOUTS timeouts;
		
		timeouts.ReadIntervalTimeout			= MAXDWORD; 
		timeouts.ReadTotalTimeoutMultiplier		= 0;
		timeouts.ReadTotalTimeoutConstant		= 0;
		timeouts.WriteTotalTimeoutMultiplier	= 0;
		timeouts.WriteTotalTimeoutConstant		= 0;
		
		if (!SetCommTimeouts(m_hCommPort, &timeouts))
		{
			AfxMessageBox("串口超時狀態(tài)設置錯誤");
			ATLTRACE6 ( "CSerialCommHelper :  Error setting time-outs. %d",GetLastError());
			return E_FAIL;
		}
		//創(chuàng)建線程終結(jié)和開始事件
		m_hThreadTerm = CreateEvent(0,0,0,0);
		m_hThreadStarted = CreateEvent(0,0,0,0);
		
		m_hThread= 	(HANDLE)_beginthreadex(0,0,CSerialCommHelper::ThreadFn,(void*)this,0,0 );

		DWORD dwWait = WaitForSingleObject ( m_hThreadStarted , INFINITE );
		
		ASSERT ( dwWait ==WAIT_OBJECT_0 );
		
		CloseHandle(m_hThreadStarted);
		
		InvalidateHandle(m_hThreadStarted );
		m_abIsConnected = true;
		
	}
	catch(...)
	{
		AfxMessageBox("串口設置異常");
		hr = E_FAIL;
	}
	if ( SUCCEEDED(hr) ) 
	{
		AfxMessageBox("串口設置成功");
		m_eState = SS_Init;
	}
	return hr;
 	
}	
	
 
HRESULT CSerialCommHelper:: Start()
{
		m_eState = SS_Started;
		return S_OK;
}
HRESULT CSerialCommHelper:: Stop()
{

	m_eState = SS_Stopped;
	return S_OK;
}
//終止線程運行
HRESULT CSerialCommHelper:: UnInit()
{
	HRESULT hr = S_OK;
	try
	{
		m_abIsConnected = false;
		SignalObjectAndWait(m_hThreadTerm,m_hThread,INFINITE,FALSE);
		CloseAndCleanHandle( m_hThreadTerm);
		CloseAndCleanHandle( m_hThread);
		CloseAndCleanHandle( m_hDataRx );
		CloseAndCleanHandle( m_hCommPort );
	}
	catch(...)
	{
		ASSERT(0);
		hr = E_FAIL;
	}
	if ( SUCCEEDED(hr)) 
		m_eState = SS_UnInit;
	return hr;
}

unsigned __stdcall CSerialCommHelper::ThreadFn(void*pvParam)
{
	CSerialCommHelper* apThis = (CSerialCommHelper*) pvParam ;
	bool abContinue = true;
	DWORD dwEventMask=0;
	
	OVERLAPPED ov;
	memset(&ov,0,sizeof(ov));
	ov.hEvent = CreateEvent( 0,true,0,0);
	HANDLE arHandles[2];
	arHandles[0] = apThis->m_hThreadTerm;

	DWORD dwWait;
	SetEvent(apThis->m_hThreadStarted);
	while (  abContinue )
	{
		
		BOOL abRet = ::WaitCommEvent(apThis->m_hCommPort,&dwEventMask, &ov) ;
		if ( !abRet )
		{
			ASSERT( GetLastError () == ERROR_IO_PENDING);
		}

		
		arHandles[1] = ov.hEvent ;
		
		dwWait = WaitForMultipleObjects (2,arHandles,FALSE,INFINITE);
		switch ( dwWait )
		{
		case WAIT_OBJECT_0:
			{
				_endthreadex(1);
			}
			break;
		case WAIT_OBJECT_0 + 1:
			{
				DWORD dwMask;
				if (GetCommMask(apThis->m_hCommPort,&dwMask) )
				{
					if ( dwMask == EV_TXEMPTY )
					{
						AfxMessageBox("Data sent");
						ResetEvent ( ov.hEvent );
						continue;
					}
					
				}

				//讀數(shù)據(jù)
				int iAccum = 0;
				
				apThis->m_theSerialBuffer.LockBuffer();
				
				try 
				{
					std::string szDebug;
					BOOL abRet = false;
					
					DWORD dwBytesRead = 0;
					OVERLAPPED ovRead;
					memset(&ovRead,0,sizeof(ovRead));
					ovRead.hEvent = CreateEvent( 0,true,0,0);

					do
					{
						ResetEvent( ovRead.hEvent  );
						char szTmp[1];
						int iSize  = sizeof ( szTmp );
						memset(szTmp,0,sizeof szTmp);
						abRet = ::ReadFile(apThis->m_hCommPort,szTmp,sizeof(szTmp),&dwBytesRead,&ovRead);
						if (!abRet ) 
						{
							abContinue = FALSE;
							break;
						}
						if ( dwBytesRead > 0 )
						{
							apThis->m_theSerialBuffer.AddData ( szTmp,dwBytesRead );
							iAccum += dwBytesRead;
						}
					}while (0);// dwBytesRead > 0 );
					CloseHandle(ovRead.hEvent );
				}
				catch(...)
				{
					ASSERT(0);
				}
				
				//if we are not in started state then we should flush the queue...( we would still read the data)
				if (apThis->GetCurrentState() != SS_Started ) 
				{
					iAccum  = 0;
					apThis->m_theSerialBuffer.Flush ();
				}
				
				apThis->m_theSerialBuffer.UnLockBuffer();
				
				ATLTRACE6(_T("RCSerial: Q Unlocked:"));
				if ( iAccum > 0 )
				{
					ATLTRACE6(_T("CSerialCommHelper(worker thread):  SetDataReadEvent() len:{%d} data:{%s}"),iAccum,(apThis->m_theSerialBuffer.GetData()).c_str ()  );
					apThis->SetDataReadEvent(); 
				}
				ResetEvent ( ov.hEvent );
			}
			break;
		}
	}
	return 0;
}


HRESULT  CSerialCommHelper::CanProcess ()
{
	
	switch ( m_eState  ) 
	{
		case SS_Unknown	:ASSERT(0);return E_FAIL;
		case SS_UnInit	:return E_FAIL;
		case SS_Started :return S_OK;
		case SS_Init		:
		case SS_Stopped :
				return E_FAIL;
		default:ASSERT(0);	

	}	
	return E_FAIL;
}

HRESULT CSerialCommHelper::Write (const char* data,DWORD dwSize)
{
	HRESULT hr = CanProcess();
	if ( FAILED(hr)) return hr;
	int iRet = 0 ;
	OVERLAPPED ov;
	memset(&ov,0,sizeof(ov));
	ov.hEvent = CreateEvent( 0,true,0,0);
	DWORD dwBytesWritten = 0;
	//do
	{
		iRet = WriteFile (m_hCommPort,data,dwSize,&dwBytesWritten  ,&ov);
		if ( iRet == 0 )
		{
			WaitForSingleObject(ov.hEvent ,INFINITE);
		}
 
	}//	while ( ov.InternalHigh != dwSize ) ;
	CloseHandle(ov.hEvent);
	std::string szData(data);
	ATLTRACE6(_T("RCSerial:Writing:{%s} len:{%d}"),(szData).c_str(),szData.size());
	
	return S_OK;
}





HRESULT CSerialCommHelper::Read_Upto	(std::string& data,char chTerminator ,long* alCount,long alTimeOut)
{
	HRESULT hr = CanProcess();
	if ( FAILED(hr)) return hr;

	ATLTRACE6("CSerialCommHelper : CSerialCommHelper: Read_Upto called  ");
	try
	{
	 	
		std::string szTmp;
		szTmp.erase ();
		long alBytesRead;
		
		bool abFound =  m_theSerialBuffer.Read_Upto(szTmp ,chTerminator,alBytesRead,m_hDataRx );

		if ( abFound ) 
		{
			data = szTmp ;
		}
		else
		{//there are either none or less bytes...
			long iRead = 0;
			bool abContinue =  true;
			while (  abContinue )
			{
				ATLTRACE6("CSerialCommHelper : CSerialCommHelper : Read_Upto () making blocking read call  ");
				DWORD dwWait  = ::WaitForSingleObject ( m_hDataRx , alTimeOut ) ;
				
				if  ( dwWait == WAIT_TIMEOUT) 
				{
					ATLTRACE6("CSerialCommHelper : CSerialCommHelper : Read_Upto () timed out in blocking read");
					data.erase ();
					hr = E_FAIL;
					return hr;

				}
   				
				bool abFound =  m_theSerialBuffer.Read_Upto(szTmp ,chTerminator,alBytesRead,m_hDataRx );
				

				if ( abFound ) 
				{
					data = szTmp;
					ATLTRACE6("CSerialCommHelper : CSerialCommHelper: Read_Upto WaitForSingleObject  data:{%s}len:{%d}",((szTmp)).c_str(),szTmp.size ());
					return S_OK;
				}
				ATLTRACE6("CSerialCommHelper : CSerialCommHelper: Read_Upto WaitForSingleObject  not FOUND ");

			}
		}
	}
	catch(...)
	{
		ATLTRACE6(_T("CSerialCommHelperUnhandled exception"));
		ASSERT ( 0  ) ;
	}
	return hr;
	
}
HRESULT CSerialCommHelper::Read_N(std::string& data,long alCount,long  alTimeOut )
{
	HRESULT hr = CanProcess();
	
	if ( FAILED(hr)) 
	{
		ASSERT(0);
		return hr;
	}
	
	ATLTRACE6("CSerialCommHelper : CSerialCommHelper : Read_N called for %d bytes",alCount);
	try
	{
	 	
		std::string szTmp ;
		szTmp.erase();

		ATLTRACE6("CSerialCommHelper : CSerialCommHelper : Read_N (%d) locking the queue  ",alCount);
		
		int iLocal =  m_theSerialBuffer.Read_N(szTmp ,alCount ,m_hDataRx );
		
		if ( iLocal == alCount ) 
		{
			data = szTmp;
		}
		else
		{//there are either none or less bytes...
			long iRead = 0;
			int iRemaining = alCount - iLocal;
			while (  1 )
			{
				
				ATLTRACE6("CSerialCommHelper : CSerialCommHelper : Read_N (%d) making blocking read() ",alCount);
				
				DWORD dwWait  = WaitForSingleObject ( m_hDataRx , alTimeOut ) ;

				if  ( dwWait == WAIT_TIMEOUT ) 
				{
					ATLTRACE6("CSerialCommHelper : CSerialCommHelper : Read_N (%d) timed out in blocking read",alCount);
					data.erase ();
					hr = E_FAIL;
					return hr;

				}
				
				ASSERT ( dwWait == WAIT_OBJECT_0 );
				ATLTRACE6("CSerialCommHelper : CSerialCommHelper : Read_N (%d) Woke Up from WaitXXX() locking Q",alCount);
 				
				
				iRead =  m_theSerialBuffer.Read_N(szTmp , iRemaining  ,m_hDataRx);
				iRemaining -= iRead ;
				
				ATLTRACE6("CSerialCommHelper : CSerialCommHelper : Read_N (%d) Woke Up from WaitXXX() Unlocking Q",alCount);


				if (  iRemaining  == 0) 
				{
					ATLTRACE6("CSerialCommHelper : CSerialCommHelper : Read_N (%d) Woke Up from WaitXXX() Done reading ",alCount);
					data = szTmp;
					return S_OK;
				}
			}
		}
	}
	catch(...)
	{
		ATLTRACE6(_T("CSerialCommHelper Unhandled exception"));
		ASSERT ( 0  ) ;
	}
	return hr;
	
}

//讀取所有本地緩沖區(qū)中的數(shù)據(jù),如果緩沖區(qū)是空的也不會做阻塞調(diào)用
HRESULT CSerialCommHelper::ReadAvailable(std::string& data)
{
	
	HRESULT hr = CanProcess();
	if ( FAILED(hr)) return hr;
	try
	{
		std::string szTemp;
		bool abRet = m_theSerialBuffer.Read_Available (szTemp,m_hDataRx);
		data = szTemp;
	}
	catch(...)
	{
		ATLTRACE6(_T("CSerialCommHelper Unhandled exception in ReadAvailable()"));
		ASSERT ( 0  ) ;
		hr = E_FAIL;
	}
	return hr;
}





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲卡通动漫在线| 青草av.久久免费一区| 欧美一区二区三区人| 99国产麻豆精品| av成人动漫在线观看| 国产成人精品网址| 国产高清久久久| 国产成a人亚洲精| 成人免费福利片| 99久久99久久综合| 91美女片黄在线| 在线免费观看日本一区| 在线一区二区观看| 欧美日韩一区三区| 日韩精品一区二区在线观看| www久久精品| 国产精品人人做人人爽人人添| 亚洲国产日韩综合久久精品| 国产欧美日韩综合| 中文字幕乱码久久午夜不卡 | 欧美精品一区视频| 日韩午夜电影在线观看| 欧美tk丨vk视频| 国产无遮挡一区二区三区毛片日本| 国产色产综合产在线视频| 国产精品久久久久久户外露出| 亚洲人成网站影音先锋播放| 亚洲精品国产视频| 日韩精彩视频在线观看| 极品瑜伽女神91| 99久久综合狠狠综合久久| 欧美色网站导航| 久久久久久夜精品精品免费| 欧美国产一区二区在线观看| 亚洲最大的成人av| 国产一区二区三区在线观看免费| 99久久国产综合精品麻豆| 欧美日韩一区二区在线观看视频 | 免费在线欧美视频| 国产成人精品亚洲日本在线桃色| 在线免费不卡视频| 亚洲精品一区在线观看| 亚洲免费在线播放| 国产专区综合网| 欧美三电影在线| 亚洲国产精品成人综合| 日本成人中文字幕| 欧美日韩专区在线| 精品精品国产高清a毛片牛牛 | 亚洲资源中文字幕| 精品无人码麻豆乱码1区2区| 在线免费视频一区二区| 国产日产亚洲精品系列| 美女网站一区二区| 在线国产亚洲欧美| 中文字幕在线一区免费| 久久99久久久欧美国产| 欧美三级电影网| 国产精品成人免费在线| 国产乱码精品一区二区三区av| 欧美精选午夜久久久乱码6080| 日韩毛片视频在线看| 国产风韵犹存在线视精品| 91精品福利在线一区二区三区| 亚洲色图欧美偷拍| 成人av网站在线观看免费| 久久夜色精品一区| 国模娜娜一区二区三区| 日韩欧美国产一区二区在线播放| 亚洲电影视频在线| 色网综合在线观看| 亚洲欧美日韩国产另类专区| 99久久99久久久精品齐齐| 中文字幕精品一区二区三区精品| 国产在线播放一区三区四| 欧美tickling网站挠脚心| 天堂午夜影视日韩欧美一区二区| 欧美性猛交一区二区三区精品| 中文字幕一区在线| 99re这里都是精品| 亚洲日本青草视频在线怡红院| 成人一区二区三区视频| 中文字幕一区在线观看视频| 99国产精品国产精品毛片| 亚洲精品乱码久久久久久黑人 | 美女脱光内衣内裤视频久久影院| 欧美高清精品3d| 日韩不卡一区二区三区| 日韩欧美国产电影| 国产久卡久卡久卡久卡视频精品| 久久色在线观看| 成人免费观看视频| 国产精品国产三级国产a| 欧美性色aⅴ视频一区日韩精品| 中文字幕一区二区三区视频| 成人国产精品免费网站| 亚洲日本在线观看| 欧美视频一区二区在线观看| 亚洲精品一二三四区| 欧美久久久久久蜜桃| 日本欧美肥老太交大片| 久久综合色天天久久综合图片| 国产精品一区二区三区网站| 国产精品色一区二区三区| 91碰在线视频| 亚洲成人1区2区| 精品久久久久久无| www.亚洲色图.com| 亚洲毛片av在线| 欧美电视剧在线看免费| 岛国精品在线播放| 亚洲制服丝袜av| 欧美r级在线观看| 国产91高潮流白浆在线麻豆| 亚洲丝袜自拍清纯另类| 欧美精品粉嫩高潮一区二区| 国产精品资源在线看| 亚洲美女在线一区| 精品久久久久av影院 | 亚洲免费观看高清完整版在线| 欧美日韩视频在线一区二区| 精品亚洲国产成人av制服丝袜 | 欧美中文字幕久久| 另类综合日韩欧美亚洲| 亚洲四区在线观看| 国产日韩欧美一区二区三区综合| 色94色欧美sute亚洲线路一ni| 免费在线观看一区| 亚洲三级在线观看| 久久蜜桃一区二区| 欧美绝品在线观看成人午夜影视| 国产精品88av| 美女网站色91| 亚洲成a人v欧美综合天堂下载| 国产清纯白嫩初高生在线观看91| 欧美日韩国产综合草草| 菠萝蜜视频在线观看一区| 九色综合狠狠综合久久| 一区二区三区在线观看动漫| 久久久久久久久久久黄色| 这里只有精品99re| 欧美在线视频不卡| 成人性生交大片| 国产激情91久久精品导航| 全部av―极品视觉盛宴亚洲| 亚洲精品乱码久久久久久日本蜜臀| 国产人妖乱国产精品人妖| 欧美一级二级三级蜜桃| 欧美日韩精品免费| 日本电影欧美片| 一本大道综合伊人精品热热 | 91丨porny丨中文| 国产91在线看| 国产精品系列在线播放| 久久www免费人成看片高清| 三级在线观看一区二区| 午夜婷婷国产麻豆精品| 亚洲一区二区三区美女| 亚洲精品免费播放| 亚洲一区二区综合| 亚洲一区在线观看免费| 亚洲综合色丁香婷婷六月图片| 中文字幕一区日韩精品欧美| 国产精品久久久久一区| 亚洲欧洲精品天堂一级| 亚洲少妇30p| 一区二区久久久| 亚洲成人第一页| 日日噜噜夜夜狠狠视频欧美人 | 91精品国产综合久久久蜜臀粉嫩| 欧美视频在线播放| 欧美一级精品在线| 337p粉嫩大胆噜噜噜噜噜91av| 欧美精品一区二区不卡| 中文字幕成人在线观看| 尤物av一区二区| 视频在线在亚洲| 免费观看在线综合| 国产精品一区二区三区网站| 97se亚洲国产综合自在线观| 日本道免费精品一区二区三区| 欧美日韩一区二区电影| 欧美美女激情18p| 亚洲精品在线电影| 国产精品家庭影院| 亚洲成人av一区二区| 狠狠色伊人亚洲综合成人| 成人精品视频网站| 在线观看av不卡| 久久综合九色欧美综合狠狠| 国产精品第五页| 视频在线观看91| 成人午夜免费视频| 精品视频在线免费看| www成人在线观看| 悠悠色在线精品| 国产精品影视在线| 欧美日韩国产影片| 国产色一区二区| 日日夜夜精品视频免费|