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

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

?? serialport.cpp

?? bluetooth c++ hci層的指令控制代碼。
?? CPP
字號:
#include "StdAfx.h"
#include ".\serialport.h"

CSerialPort::CSerialPort(void)
{
	m_hComm			= INVALID_HANDLE_VALUE;
//	m_hWriteThread	= NULL;
	m_hWatchThread	= NULL;

	m_fOpen			= FALSE;

	SetDCB();
	SetTimeouts();

	InitializeCriticalSection(&m_CriticalSection);

	m_osWrite.Offset		= 0;
	m_osWrite.OffsetHigh	= 0;
	m_osWrite.hEvent		= CreateEvent(NULL,FALSE,FALSE,NULL);
	
	m_osRead.Offset			= 0;
	m_osRead.OffsetHigh		= 0;
	m_osRead.hEvent			= CreateEvent(NULL,FALSE,FALSE,NULL);
}

CSerialPort::~CSerialPort(void)
{
	Close();

	DeleteCriticalSection(&m_CriticalSection);

	CloseHandle(m_osWrite.hEvent);
	CloseHandle(m_osRead.hEvent);
}

// property inquire
BOOL CSerialPort::IsOpen(void)
{
	return m_fOpen;
}

// port process
BOOL CSerialPort::Open(DWORD dwComPort,DWORD dwBaudrate,BYTE bByteBits,BYTE bStopBits,BYTE bParity)
{
	TCHAR			szComName[20];
	DWORD			dwResult = TRUE;
	DWORD			dwID;

	Close();

	wsprintf(szComName,"COM%d",dwComPort+1);
	m_hComm = CreateFile(szComName,
							GENERIC_READ|GENERIC_WRITE,0,NULL,
							OPEN_EXISTING,
							FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,NULL);
	if (INVALID_HANDLE_VALUE != m_hComm)
	{			
		SetDCB(dwBaudrate,bByteBits,bStopBits,bParity);
		if (FALSE != SetupConnect())
		{
			m_hWatchThread = CreateThread(NULL,0,WatchThreadProc,this,0,&dwID);
			if (NULL != m_hWatchThread)
			{
				;
			}
			else
			{
				CloseHandle(m_hComm);
				dwResult = FALSE;
			}
		}
		else	// setup port property error
		{
			CloseHandle(m_hComm);
			dwResult = FALSE;
		}
	}	// errror open port
	else
	{		
		dwResult = FALSE;
	}
	m_fOpen = dwResult;
	return dwResult;
}
BOOL CSerialPort::Close(void)
{
	if (TRUE == m_fOpen)
	{
		m_fOpen			= FALSE;
		PurgeComm(m_hComm,PURGE_TXABORT | PURGE_RXABORT);
		SetCommMask(m_hComm,EV_RXCHAR | EV_BREAK);
		WaitForSingleObject(m_hWatchThread,INFINITE);

		CloseHandle(m_hComm);
		CloseHandle(m_hWatchThread);
		m_hComm			= INVALID_HANDLE_VALUE;
		m_hWatchThread	= NULL;
	}
	return 0;
}

// set port property	
BOOL CSerialPort::SetupConnect()
{
	COMSTAT			ComStat;
	DWORD			dwError;
	DWORD			dwResult1,dwResult2,dwResult3,dwResult4,dwResult5;

	dwResult1 = SetCommState(m_hComm,&m_Dcb);
	dwResult2 = SetCommTimeouts(m_hComm,&m_CommTimeouts);
	dwResult3 = ClearCommError(m_hComm,&dwError,&ComStat);
	dwResult4 = SetupComm(m_hComm,1024,1024);
	dwResult5 = PurgeComm(m_hComm,PURGE_TXABORT | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_RXCLEAR);
	
	return dwResult1 && dwResult2 && dwResult3 && dwResult4 && dwResult5;
}
void CSerialPort::SetDCB(DWORD dwBaudrate,BYTE bByteBits,BYTE bStopBits,BYTE bParity)
{
	m_Dcb.BaudRate	= dwBaudrate;
	m_Dcb.ByteSize	= bByteBits;
	m_Dcb.StopBits	= bStopBits;

	switch (bParity)
	{
		case NOPARITY:
			m_Dcb.fParity	= FALSE;
			m_Dcb.Parity	= bParity;
			break;

		case ODDPARITY:
		case EVENPARITY:
		case MARKPARITY:
		case SPACEPARITY:
			m_Dcb.fParity	= TRUE;
			m_Dcb.Parity	= bParity;
			break;
	}
}
void CSerialPort::SetDCB(DCB* pDcb)
{
	TCHAR	szDef[40] = "baud=9600 parity=N data=8 stop=1";

	if (NULL != pDcb)
	{
		memcpy(&m_Dcb,pDcb,sizeof(m_Dcb));
	}
	else
	{
		BuildCommDCB(szDef,&m_Dcb);

		m_Dcb.fOutxCtsFlow		= FALSE;
		m_Dcb.fOutxDsrFlow		= FALSE;
		m_Dcb.fDsrSensitivity	= FALSE;

		m_Dcb.fTXContinueOnXoff = FALSE;

		m_Dcb.fDtrControl		= DTR_CONTROL_ENABLE;
		m_Dcb.fRtsControl		= RTS_CONTROL_ENABLE;//RTS_CONTROL_TOGGLE;

		m_Dcb.fBinary			= TRUE;

		m_Dcb.XoffLim			= 0;
		m_Dcb.XonLim			= 0;

		m_Dcb.XoffChar			= 0x13;
		m_Dcb.XonChar			= 0x11;

		m_Dcb.fBinary			= TRUE;

		m_Dcb.fErrorChar		= FALSE;
		m_Dcb.fNull				= FALSE;
	}
}
void CSerialPort::SetTimeouts(COMMTIMEOUTS* pCommTimeouts)
{
	if (NULL != pCommTimeouts)
	{
		memcpy(&m_CommTimeouts,pCommTimeouts,sizeof(m_CommTimeouts));
	}
	else
	{
		m_CommTimeouts.ReadIntervalTimeout			= 20;
		m_CommTimeouts.ReadTotalTimeoutMultiplier	= 10;
		m_CommTimeouts.ReadTotalTimeoutConstant		= 100;
		m_CommTimeouts.WriteTotalTimeoutMultiplier	= 10;
		m_CommTimeouts.WriteTotalTimeoutConstant	= 100;
	}
}
void CSerialPort::SetFlowControl(DWORD dwDtrControl,DWORD dwRtsControl,
									BOOL fOutCtsFlow,BOOL fOutDsrFlow,							
									BOOL fOutX,BOOL fInX,char cXonChar,char cXoffChar)
{
	m_Dcb.fDtrControl	= dwDtrControl;
	m_Dcb.fRtsControl	= dwRtsControl;
	m_Dcb.fOutxCtsFlow	= fOutCtsFlow;
	m_Dcb.fOutxDsrFlow	= fOutDsrFlow;
	m_Dcb.fOutX			= fOutX;
	m_Dcb.fInX			= fInX;
	m_Dcb.XonChar		= cXonChar;
	m_Dcb.XoffChar		= cXoffChar;
}

// communication
BOOL CSerialPort::PortOutput(BYTE* pData,UINT uLen)
{
	DWORD			dwError;
	DWORD			dwResult = TRUE;
	DWORD			dwLen;
	
	if (NULL != m_osWrite.hEvent)
	{
		EnterCriticalSection(&m_CriticalSection);

		ClearCommError(m_hComm,&dwError,NULL);

		dwResult = WriteFile(m_hComm,pData,uLen,&dwLen,&m_osWrite);
		if (FALSE != dwResult)
		{
			dwResult = TRUE;
		}
		else	// Written data to port is error or not complete
		{
			dwResult = GetLastError();
			if (dwResult == ERROR_IO_PENDING)	// Sent data is pending
			{
				GetOverlappedResult(m_hComm,&m_osWrite,&dwLen,TRUE);
				dwResult = TRUE;
			}
			else
			{
				dwResult = FALSE;
			}
		}
		LeaveCriticalSection(&m_CriticalSection);

	}	// Created evnet handle is error
	else
	{
		dwResult = FALSE;
	}
	return dwResult;
}

BOOL CSerialPort::PortInput(BYTE* pData,UINT& uLen)
{
	DWORD					dwError;
	COMSTAT					cs;
	DWORD					dwResult = TRUE;
	DWORD					dwReadLen;
	
	if (NULL != m_osRead.hEvent)
	{
		EnterCriticalSection(&m_CriticalSection);

		ClearCommError(m_hComm,&dwError,&cs);
		uLen = uLen < cs.cbInQue ? uLen : cs.cbInQue;
		dwResult = ReadFile(m_hComm,pData,uLen,&dwReadLen,&m_osRead);
		if (FALSE != dwResult)
		{
			dwResult = TRUE;
		}
		else	// Written data to port is error or not complete
		{
			dwResult = GetLastError();
			if (ERROR_IO_PENDING == dwResult)	// received data is pending
			{
				GetOverlappedResult(m_hComm,&m_osRead,&dwReadLen,TRUE);
				dwResult = TRUE;
			}
			else
			{
				dwResult = FALSE;
			}
		}
		LeaveCriticalSection(&m_CriticalSection);
	}
	else	// Created evnet handle is error
	{
		dwResult = FALSE;
	}
	return dwResult;
}
// receive buffer using queue
#include <queue>
using namespace std;

queue<BYTE> g_qReceive;

// interface of device
BOOL CSerialPort::Send(BYTE* pData,UINT uLen)
{	
	return PortOutput(pData,uLen);
}
BOOL CSerialPort::Receive(BYTE* pData,UINT& uLen,DWORD dwMilliSecond)
{	
	clock_t		tStart,tEnd;
	UINT		uReceiveLen = uLen;
//	DWORD		dwResult = TRUE;

	tEnd = tStart = clock();
	while (((tEnd - tStart) * 1000 < dwMilliSecond*CLK_TCK) && (uReceiveLen > 0))
	{
		tEnd = clock();
		Sleep(100);

		Receive(pData,uReceiveLen);
		pData		+= uReceiveLen;
		uReceiveLen	 = uLen - uReceiveLen;
	}	
	return uReceiveLen == 0;
}
UINT CSerialPort::GetReceivedLenght()
{
	return (UINT)g_qReceive.size();
}
BOOL CSerialPort::Receive(BYTE* pData,UINT& uLen)
{	
	UINT	uRec(0);
	DWORD	dwResult = TRUE;

	while (!g_qReceive.empty() && uLen > uRec)
	{
		*pData++ = g_qReceive.front();
		g_qReceive.pop();
		uRec++;
	}
	dwResult	= (uLen == uRec);
	uLen		= uRec;
	return dwResult;
}

// thread of watch input port
DWORD WINAPI CSerialPort::WatchThreadProc(PVOID pParam)
{
	CSerialPort* pOwner = (CSerialPort*)pParam;
	BYTE*	pBuffer = new BYTE[1024];
	UINT	uLen = 1024;
	DWORD	dwEvtMask = EV_RXCHAR | EV_BREAK;

	SetCommMask(pOwner->m_hComm,dwEvtMask);
	while(TRUE == pOwner->IsOpen())
	{
//		SetCommMask(pOwner->m_hComm,dwEvtMask);
		WaitCommEvent(pOwner->m_hComm,&dwEvtMask,NULL);
		uLen = 1024;
		if (TRUE == pOwner->PortInput(pBuffer,uLen))
		{
			for (UINT i=0; i<uLen; i++)
			{
				g_qReceive.push(*(pBuffer+i));
			}
		}
	}
	pOwner->m_fOpen = FALSE;

	delete []pBuffer;
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美久久免费观看| 99re视频这里只有精品| 69p69国产精品| 免费在线欧美视频| 日韩欧美的一区二区| 精品亚洲国内自在自线福利| 欧美xfplay| 国产999精品久久| 专区另类欧美日韩| www欧美成人18+| 国产成+人+日韩+欧美+亚洲 | 色老综合老女人久久久| 亚洲欧美日韩电影| 欧美日韩dvd在线观看| 免费成人美女在线观看.| 久久伊99综合婷婷久久伊| 成人av网站在线| 亚洲成人综合网站| 精品美女在线观看| 99re视频精品| 蜜桃视频一区二区三区| 国产精品卡一卡二| 欧美日韩免费电影| 国产成人一区在线| 亚洲成人在线免费| 国产欧美日韩激情| 欧美三级蜜桃2在线观看| 国内不卡的二区三区中文字幕| 国产精品每日更新| 丁香婷婷综合激情五月色| 97se亚洲国产综合自在线不卡| 精品剧情v国产在线观看在线| 亚洲成人一二三| 国产欧美日韩精品a在线观看| 欧美专区在线观看一区| 国产一区二区在线看| 一区二区三区不卡视频在线观看| 日韩三级中文字幕| 99久久伊人网影院| 九九视频精品免费| 亚洲另类在线视频| 久久蜜桃香蕉精品一区二区三区| 欧美亚洲综合一区| 国产suv精品一区二区三区| 亚洲一区二区三区小说| 国产三区在线成人av| 91麻豆精品国产无毒不卡在线观看 | 欧美视频中文字幕| 成人性生交大合| 麻豆一区二区三| 亚洲国产aⅴ成人精品无吗| 久久精品免费在线观看| 日韩亚洲欧美一区| 欧美日本国产一区| 成人动漫视频在线| 国产精品私房写真福利视频| 成人爽a毛片一区二区免费| 国产欧美日韩在线看| 日本在线播放一区二区三区| 欧美精品日韩综合在线| 麻豆精品视频在线观看视频| 精品久久久久久久久久久久久久久 | 成人免费毛片片v| 麻豆久久一区二区| 亚洲成人综合视频| 一区二区三区免费在线观看| 国产精品国产三级国产有无不卡 | 久久久精品欧美丰满| 7777精品伊人久久久大香线蕉完整版| 在线亚洲一区观看| 97se亚洲国产综合在线| caoporn国产精品| 成人国产精品免费观看| 成人午夜激情视频| 成人午夜看片网址| eeuss影院一区二区三区| 99精品桃花视频在线观看| aaa亚洲精品| 91年精品国产| 91麻豆福利精品推荐| 91黄色激情网站| 91久久精品一区二区三| 91福利在线观看| 91色porny在线视频| heyzo一本久久综合| 91网站最新网址| 在线观看精品一区| 欧美天天综合网| 欧美精品vⅰdeose4hd| 777精品伊人久久久久大香线蕉| 欧美精品亚洲一区二区在线播放| 欧美无砖专区一中文字| 欧美片在线播放| 精品日韩在线观看| 欧美国产成人在线| 亚洲精品中文字幕乱码三区| 日韩av不卡一区二区| 久久99久久99小草精品免视看| 国产在线看一区| av电影天堂一区二区在线| 色老头久久综合| 日韩一级成人av| 国产香蕉久久精品综合网| 亚洲天堂成人在线观看| 亚洲bt欧美bt精品| 国产在线一区二区综合免费视频| 成人爱爱电影网址| 欧美三级一区二区| 2欧美一区二区三区在线观看视频| 欧美激情一区二区三区全黄| 亚洲精品亚洲人成人网在线播放| 视频一区二区三区中文字幕| 精品一区二区三区的国产在线播放| 成人黄色片在线观看| 欧美日韩在线播放三区| 久久亚洲捆绑美女| 亚洲永久精品国产| 九色|91porny| 色狠狠一区二区三区香蕉| 精品久久久久香蕉网| 一区二区三区在线观看视频| 麻豆一区二区99久久久久| 91色视频在线| 久久久精品欧美丰满| 亚洲福利一区二区三区| 国产suv精品一区二区三区| 欧美日韩精品一区二区在线播放 | 精品一区二区影视| 成人精品国产免费网站| 欧美精品在线观看播放| 欧美国产一区二区| 日韩电影免费在线| 色综合久久久久综合体桃花网| 欧美大肚乱孕交hd孕妇| 亚洲欧美日韩在线| 国产成人在线视频网址| 欧美一区二区三区婷婷月色| 亚洲欧美影音先锋| 国产精品一区二区久激情瑜伽| 欧美日韩一区精品| 综合激情网...| 国产激情精品久久久第一区二区 | 91网页版在线| 久久精品无码一区二区三区| 天天综合网 天天综合色| 91网站视频在线观看| 国产片一区二区| 美女看a上一区| 欧美精品在欧美一区二区少妇| 亚洲视频一区二区在线观看| 国产电影一区二区三区| 欧美成人女星排行榜| 亚洲aⅴ怡春院| 欧美三级中文字| 亚洲一区电影777| 在线免费亚洲电影| 国产精品高清亚洲| 欧美色中文字幕| 一区二区三区精品视频在线| 97se亚洲国产综合在线| 亚洲婷婷综合色高清在线| av不卡在线观看| 最新中文字幕一区二区三区| 本田岬高潮一区二区三区| 日本一区二区三级电影在线观看 | 韩国三级中文字幕hd久久精品| 欧美人动与zoxxxx乱| 天涯成人国产亚洲精品一区av| 欧美日韩视频专区在线播放| 亚洲在线观看免费视频| 欧美色图免费看| 天堂精品中文字幕在线| 日韩亚洲欧美中文三级| 久久97超碰国产精品超碰| 26uuu另类欧美亚洲曰本| 国产一区二区三区日韩| 国产亚洲综合在线| 成人精品亚洲人成在线| 日韩久久一区二区| 在线欧美一区二区| 三级亚洲高清视频| 精品国产一二三| 国产suv精品一区二区6| 国产精品国产自产拍高清av王其| 97久久精品人人做人人爽| 在线观看亚洲a| 日韩欧美中文一区| 久久99精品国产.久久久久久| 99久久99久久精品国产片果冻| 91网站最新网址| 自拍偷拍亚洲综合| 91蜜桃婷婷狠狠久久综合9色| 久久久久久久久久久久电影| 丁香网亚洲国际| 亚洲黄色免费电影| 日韩欧美综合在线| 国产成人午夜视频| 亚洲国产另类av| 26uuu亚洲| 日本电影欧美片|