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

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

?? cserial.cpp

?? WinCE 上串口通訊應用
?? CPP
字號:
// Serial.cpp: implementation of the CSerial class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "resource.h"
#include "CSerial.h"
#include "Embest_SCOMMDlg.h"

const CM_THREADCOMMWRITE = WM_USER+110;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//*******************************************//
CSerial::CSerial()
{
	m_hComm = INVALID_HANDLE_VALUE;
//	m_bOpened = FALSE;
}
//******************************************//

CSerial::~CSerial()
{
	ClosePort();
}

//*******************************************//
BOOL CSerial::WritetoPort(HANDLE hComm,const BYTE *buf,DWORD bufLen)
{
	DWORD dwNumBytesWritten;
	DWORD dwHaveNumWritten = 0;
	ASSERT(hComm != INVALID_HANDLE_VALUE);
	do
	{
		if(WriteFile(hComm,
					 buf+dwHaveNumWritten,
					 bufLen - dwHaveNumWritten,
					 &dwNumBytesWritten,
					 NULL))
		{
			dwHaveNumWritten = dwHaveNumWritten + dwNumBytesWritten;
			if (dwHaveNumWritten == bufLen)
			{
				break;
			}
			Sleep(10);
		}
		else
		{
			return FALSE;
		}
	}while(TRUE);
	return TRUE;
}

//***********************************************//
//串口讀線程函數
DWORD CSerial::ReadThreadFunc(LPVOID lparam)
{
	CSerial *ceSeries = (CSerial *)lparam;
	DWORD evtMask;
	BYTE* readBuf = NULL;
	DWORD actualReadLen = 0;
	DWORD willReadLen;
	DWORD dwReadErrors;
	COMSTAT cmState;
	//清空緩沖
	ASSERT(ceSeries->m_hComm != INVALID_HANDLE_VALUE);
	//清空串口
	PurgeComm(ceSeries->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR);
	SetCommMask(ceSeries->m_hComm, EV_RXCHAR | EV_CTS | EV_DSR );
	while(TRUE)
	{
		if(WaitCommEvent(ceSeries->m_hComm,&evtMask,0))
		{
			SetCommMask(ceSeries->m_hComm, EV_RXCHAR | EV_CTS | EV_DSR );
			if(evtMask & EV_RXCHAR)
			{
				ClearCommError(ceSeries->m_hComm, &dwReadErrors, &cmState);
				willReadLen = cmState.cbInQue;
				if(willReadLen <= 0)
				{
					continue;
				}
				readBuf = new BYTE[willReadLen];
				ReadFile(ceSeries->m_hComm, readBuf, willReadLen, &actualReadLen ,0);
				if(actualReadLen>0)
				{
					((CEmbest_SCOMMDlg *)(ceSeries->m_pPortOwner))->response(readBuf,actualReadLen);

				}
				delete[] readBuf;
			}
		}
		if(WaitForSingleObject(ceSeries->m_hReadCloseEvent,500) == WAIT_OBJECT_0)
		{
			break;
		}
	}
	return 0;
}
//************************************************//
//串口寫線程函數
DWORD CSerial::WriteThreadFunc(LPVOID lparam)
{
	CSerial *ceSeries = (CSerial *)lparam;
	MSG msg;
	DWORD dwWriteLen = 0;
	BYTE* buf = NULL;
	while(TRUE)
	{
		if(PeekMessage(&msg,0,0,0,PM_REMOVE))
		{
			if(msg.hwnd != 0)
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
				continue;
			}
			if(msg.message == CM_THREADCOMMWRITE)
			{
				buf = (BYTE*)msg.lParam;
				dwWriteLen = msg.wParam;
				WritetoPort(ceSeries->m_hComm,buf,dwWriteLen);
				delete[] buf;
			}
		}
		if(WaitForSingleObject(ceSeries->m_hWriteCloseEvent ,500) == WAIT_OBJECT_0)
		{
			break;
		}
		ceSeries->m_hWriteThread = NULL;
	}
	return 0;
}
//***********************************************//
//關閉讀線程
void CSerial::CloseReadThread()
{
	SetEvent(m_hReadCloseEvent);
	SetCommMask(m_hComm,0);
	PurgeComm(m_hComm,PURGE_RXCLEAR);
	if(WaitForSingleObject(m_hReadThread,10000) == WAIT_TIMEOUT)
	{
		TerminateThread(m_hReadThread,0);
	}
	m_hReadThread = NULL;
}
//***********************************************//
//關閉寫線程
void CSerial::CloseWriteThread()
{
	SetEvent(m_hWriteCloseEvent);
	SetCommMask(m_hComm,0);
	PurgeComm(m_hComm,PURGE_TXCLEAR);
	if(WaitForSingleObject(m_hWriteThread,10000) == WAIT_TIMEOUT)
	{
		TerminateThread(m_hWriteThread,0);
	}
	m_hWriteThread = NULL;
}
//***********************************************//
//打開串口
BOOL CSerial::OpenPort(CWnd* pPortOwner,
				       UINT portNo,
				       DWORD baud,
				       BYTE parity,
				       BYTE databits,
				       BYTE stopbits)
{
	DCB commParam;
	TCHAR szPort[15];
	if(m_hComm != INVALID_HANDLE_VALUE)
	{
		return TRUE;
	}
	ASSERT(pPortOwner != NULL);
	ASSERT(portNo > 0 && portNo <5);
	//設置串口名
	wsprintf(szPort ,_T("COM%d:"), portNo);
	m_hComm = CreateFile(
		szPort,
		GENERIC_READ | GENERIC_WRITE,
		0,
		NULL,
		OPEN_EXISTING,
		0,
		NULL 
		);
	if(m_hComm == INVALID_HANDLE_VALUE)
	{
		TRACE(_T("CreateFile return invalid handle"));
		return FALSE;
	}
	if(!GetCommState(m_hComm,&commParam))
	{
		return FALSE;
	}
	commParam.BaudRate = baud;
	commParam.ByteSize = databits;
	commParam.Parity = parity;  // 0-4=no,odd,even,mark,space 
	commParam.StopBits = stopbits;
	if(!SetCommState(m_hComm, &commParam))
	{
		TRACE(_T("SetCommState error"));
		return FALSE;
	}
	//設置串口讀寫時間
	COMMTIMEOUTS CommTimeOuts;
	GetCommTimeouts (m_hComm, &CommTimeOuts);
    CommTimeOuts.ReadIntervalTimeout = MAXDWORD;  
    CommTimeOuts.ReadTotalTimeoutMultiplier = 0;  
    CommTimeOuts.ReadTotalTimeoutConstant = 0;    
    CommTimeOuts.WriteTotalTimeoutMultiplier = 10;  
    CommTimeOuts.WriteTotalTimeoutConstant = 1000;
	if(!SetCommTimeouts(m_hComm,&CommTimeOuts))
	{
		TRACE(_T("SetCommTimeouts wrong!"));
	}
	m_pPortOwner = pPortOwner;
	SetCommMask(m_hComm,EV_RXCHAR);
	SetupComm(m_hComm,512,512);
	PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
	m_hReadCloseEvent = CreateEvent(NULL ,TRUE ,FALSE ,NULL);
	m_hWriteCloseEvent = CreateEvent(NULL ,TRUE ,FALSE ,NULL);
	//創建讀串口線程
	m_hReadThread = CreateThread(NULL,0,ReadThreadFunc,this,0,&m_dwReadThreadID);
    //創建寫串口線程
	m_hWriteThread = CreateThread(NULL,0,WriteThreadFunc, this,0,&m_dwWriteThreadID);
	TRACE(_T("Serial Port Open Successful!"));
	return TRUE;
}
//**************************************************//
//關閉串口
void CSerial::ClosePort()
{
	if(m_hComm == INVALID_HANDLE_VALUE)
	{
		return;
	}
	CloseReadThread();
	CloseWriteThread();
	if(!CloseHandle(m_hComm))
	{
		m_hComm = INVALID_HANDLE_VALUE;
		return;
	}
}
//*****************************************************//
//公用寫串口
BOOL CSerial::WritePort(const BYTE *buf , DWORD bufLen)
{
	if(PostThreadMessage(m_dwWriteThreadID,CM_THREADCOMMWRITE,WPARAM(bufLen),LPARAM(buf)))
	{
		return TRUE;
	}
	return FALSE;
}
//*******************************************************//
//設置串口超時
BOOL CSerial::SetSeriesTimeOuts(COMMTIMEOUTS CommTimeOuts)
{
	ASSERT(m_hComm != INVALID_HANDLE_VALUE);
	return SetCommTimeouts(m_hComm,&CommTimeOuts);
}


	



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久裸模 | 制服视频三区第一页精品| 欧美日韩精品久久久| 欧美一区二区三区系列电影| 中文字幕第一区二区| 免费成人结看片| 99精品在线免费| 国产亚洲精品中文字幕| 亚洲线精品一区二区三区| 韩国av一区二区三区| 欧美色图天堂网| 日本一区二区在线不卡| 久久精品免费观看| 日本高清不卡一区| 国产精品久久久久久久久免费桃花| 三级欧美韩日大片在线看| 成人免费视频caoporn| 精品嫩草影院久久| 污片在线观看一区二区| 在线观看亚洲专区| 国产精品护士白丝一区av| 国产精品一区在线| 欧美成人bangbros| 另类中文字幕网| 777午夜精品视频在线播放| 亚洲一区二区三区在线播放| av资源网一区| 亚洲天堂av老司机| 色综合久久中文字幕| 国产精品成人免费在线| 成人免费av网站| 中文字幕乱码一区二区免费| 国产精品一区二区三区99| 精品国产91洋老外米糕| 美女脱光内衣内裤视频久久网站| 欧美午夜电影一区| 亚州成人在线电影| 欧美老人xxxx18| 日韩精品午夜视频| 日韩一区二区三区四区五区六区| 日产国产高清一区二区三区| 欧美一区二区三区视频在线观看 | 欧美情侣在线播放| 五月天网站亚洲| 欧美一级欧美一级在线播放| 蜜桃在线一区二区三区| 欧美xfplay| 成人免费毛片高清视频| 国产精品国产馆在线真实露脸| 成人黄色小视频| 亚洲综合成人网| 欧美精品乱码久久久久久| 日本不卡视频一二三区| 精品少妇一区二区三区在线播放| 国产一区二区久久| 亚洲欧洲www| 7799精品视频| 成人性生交大片免费看在线播放| 国产精品嫩草99a| 在线视频国内自拍亚洲视频| 日韩av一区二区在线影视| 精品免费国产二区三区| 成熟亚洲日本毛茸茸凸凹| 一区二区三区波多野结衣在线观看| 欧美精品少妇一区二区三区| 久久国产精品99久久久久久老狼| 亚洲国产高清不卡| 欧美二区三区91| a级精品国产片在线观看| 亚洲图片欧美色图| 国产日韩欧美a| 欧美绝品在线观看成人午夜影视| 开心九九激情九九欧美日韩精美视频电影| 国产日韩av一区二区| 欧美性猛交一区二区三区精品| 日韩av在线播放中文字幕| 国产精品久久久久久久久免费樱桃| 欧美乱妇15p| 99久久国产综合精品女不卡| 人人超碰91尤物精品国产| 亚洲欧美一区二区在线观看| 日韩限制级电影在线观看| 99久久久无码国产精品| 日本不卡123| 亚洲男人的天堂av| 久久综合狠狠综合久久综合88 | 亚洲男人的天堂在线aⅴ视频| 911精品产国品一二三产区| 成人激情av网| 国产剧情在线观看一区二区| 亚洲高清免费视频| 国产精品超碰97尤物18| 精品国产一区二区三区忘忧草 | 国产成人夜色高潮福利影视| 亚洲国产精品欧美一二99| 中文字幕一区不卡| 久久久美女毛片| 日韩一区二区麻豆国产| 91福利视频网站| 99精品久久99久久久久| 粉嫩嫩av羞羞动漫久久久| 久久精品国产**网站演员| 亚洲图片欧美综合| 亚洲三级在线免费观看| 日本一区二区电影| 久久毛片高清国产| 欧美不卡激情三级在线观看| 欧美一区二区三区视频免费播放| 欧美日韩激情一区| 91小宝寻花一区二区三区| 国产精品一区二区免费不卡| 久久99国产精品免费网站| 免费观看一级欧美片| 日韩精品电影一区亚洲| 日韩精品一二三区| 日韩av中文字幕一区二区| 蜜桃免费网站一区二区三区| 人人爽香蕉精品| 另类小说欧美激情| 久久精品国产精品亚洲精品| 久久国产精品区| 国产精品主播直播| 国产电影精品久久禁18| 成人精品免费网站| 91丝袜国产在线播放| 色菇凉天天综合网| 538prom精品视频线放| 欧美成人精品3d动漫h| 精品国产123| 久久精品网站免费观看| 国产精品久久久久久久裸模 | 欧美高清在线视频| 18涩涩午夜精品.www| 亚洲综合成人在线| 麻豆免费精品视频| 国产一区二区精品久久99| 99久久夜色精品国产网站| 91国偷自产一区二区使用方法| 欧美日韩一级黄| 精品福利视频一区二区三区| 亚洲国产高清在线观看视频| 一区二区不卡在线播放 | 精品国产一区二区三区久久久蜜月| 精品日本一线二线三线不卡| 国产精品情趣视频| 亚洲一二三四在线观看| 毛片av中文字幕一区二区| 国产成人精品免费| 欧美色综合网站| 国产午夜一区二区三区| 亚洲乱码一区二区三区在线观看| 视频一区国产视频| 成人av在线影院| 欧美高清激情brazzers| 国产精品每日更新在线播放网址| 亚洲国产综合91精品麻豆| 经典三级视频一区| 欧美手机在线视频| 久久久久一区二区三区四区| 一区二区三区在线视频免费| 美女视频网站黄色亚洲| 91久久精品国产91性色tv| 欧美成人vps| 亚洲免费资源在线播放| 国产久卡久卡久卡久卡视频精品| 欧美优质美女网站| 亚洲国产精品黑人久久久| 奇米色一区二区| 色综合天天综合| 久久精品视频在线看| 青青草国产成人av片免费| 色88888久久久久久影院野外 | 国产成人综合网站| 欧美一区二区三区视频免费| 亚洲黄色在线视频| 成人小视频在线| 久久久美女艺术照精彩视频福利播放| 亚洲一区成人在线| 色哟哟一区二区三区| 亚洲国产成人午夜在线一区| 久久er99精品| 日韩欧美一级二级三级久久久| 一区二区在线免费观看| 99视频精品在线| 久久只精品国产| 麻豆传媒一区二区三区| 欧美最猛性xxxxx直播| 日韩毛片在线免费观看| 国产不卡视频一区| 国产婷婷一区二区| 国产美女在线观看一区| 精品女同一区二区| 狠狠网亚洲精品| 精品国产污网站| 秋霞午夜鲁丝一区二区老狼| 欧美日韩一级片在线观看| 亚洲综合色在线| 欧美性大战久久| 亚洲码国产岛国毛片在线| 91在线免费视频观看|