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

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

?? serialport.cpp

?? GSM通訊串口類,通過RS232串口與GSM MODEM連接,發送短信.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

	if(!::SetCommMask(m_hComm, dwEvtMask)) {
		TRACE(_T("Failed in call to SetCommMask"));
		CSerialException::ThrowSerialException();
	}
}

void CSerialPort::GetMask(DWORD& dwEvtMask)
{
	ASSERT(IsOpen());

	if(!::GetCommMask(m_hComm, &dwEvtMask)) {
		TRACE(_T("Failed in call to GetCommMask\n"));
		CSerialException::ThrowSerialException();
	}
}

BOOL CSerialPort::WaitEvent(DWORD& dwEvtmask, OVERLAPPED& overlapped)
{
	ASSERT(IsOpen());
	
	BOOL bResult = ::WaitCommEvent(m_hComm, &dwEvtmask, &overlapped);
	if (!bResult) {
		if (::GetLastError() != ERROR_IO_PENDING) {
			TRACE(_T("Failed in call to WaitCommEvent\n"));
			CSerialException::ThrowSerialException();
		}
	}
	return bResult;
}

void CSerialPort::GetOverlappedResult(OVERLAPPED& overlapped, DWORD& dwBytesTransfered, BOOL bWait)
{
	ASSERT(m_hComm);
	ASSERT(overlapped.hEvent != NULL);

	if (!::GetOverlappedResult(m_hComm, &overlapped, &dwBytesTransfered, bWait)) {
		if (::GetLastError() != ERROR_IO_PENDING) {
			TRACE(_T("Failed in call to GetOverlappedResult\n"));
			CSerialException::ThrowSerialException();
		}
	}
}

void CSerialPort::Escape(const DWORD& dwFunc)
{
	ASSERT(IsOpen());

	if (!::EscapeCommFunction(m_hComm, dwFunc)) {
		TRACE(_T("Failed in call to EscapeCommFunction\n"));
		CSerialException::ThrowSerialException();
	}
}

void CSerialPort::ClearDTR(void)
{
	Escape(CLRDTR);
}

void CSerialPort::ClearRTS(void)
{
	Escape(CLRRTS);
}

void CSerialPort::SetDTR(void)
{
	Escape(SETDTR);
}

void CSerialPort::SetRTS(void)
{
	Escape(SETRTS);
}

void CSerialPort::SetXOFF(void)
{
	Escape(SETXOFF);
}

void CSerialPort::SetXON(void)
{
	Escape(SETXON);
}

void CSerialPort::GetModemStatus(DWORD& dwModemStatus)
{
	ASSERT(IsOpen());

	if (!GetCommModemStatus(m_hComm, &dwModemStatus)) {
		TRACE(_T("Failed in call to GetCommModemStatus\n"));
		CSerialException::ThrowSerialException();
	}
}

void CSerialPort::SetBreak(void)
{
	ASSERT(IsOpen());

	if(!::SetCommBreak(m_hComm)) {
		TRACE(_T("Failed in call to SetCommBreak\n"));
		CSerialException::ThrowSerialException();
	}
}

void CSerialPort::ClearBreak(void)
{
	ASSERT(IsOpen());

	if(!::ClearCommBreak(m_hComm)) {
		TRACE(_T("Failed in call to ClearCommBreak"));
		CSerialException::ThrowSerialException();
	}
}

void CSerialPort::GetConfig(COMMCONFIG& config)
{
	ASSERT(IsOpen());

	DWORD dwSize = sizeof(COMMCONFIG);
	if (!::GetCommConfig(m_hComm, &config, &dwSize)) {
		TRACE(_T("Failed in call to GetCommConfig\n"));
		CSerialException::ThrowSerialException();
	}
}

void CSerialPort::SetConfig(COMMCONFIG& config)
{
	ASSERT(IsOpen());

	DWORD dwSize = sizeof(COMMCONFIG);
	if (!::SetCommConfig(m_hComm, &config, dwSize)) {
		TRACE(_T("Failed in call to SetCommConfig\n"));
		CSerialException::ThrowSerialException();
	}
}

void CSerialPort::GetDefaultConfig(UINT nPortNr, COMMCONFIG& config)
{
	//Validate our parameters
	ASSERT(nPortNr > 0 && nPortNr < 256);

	//Create the device name as a string
	CString strPort;
	strPort.Format(_T("COM%d"), nPortNr);

	DWORD dwSize = sizeof(COMMCONFIG);
	if (!::GetDefaultCommConfig(strPort, &config, &dwSize)) {
		TRACE(_T("Failed in call to GetDefaultCommConfig\n"));
		CSerialException::ThrowSerialException();
	}
}

void CSerialPort::SetDefaultConfig(UINT nPortNr, COMMCONFIG& config)
{
	//Validate our parameters
	ASSERT(nPortNr > 0 && nPortNr < 256);

	//Create the device name as a string
	CString strPort;
	strPort.Format(_T("COM%d"), nPortNr);

	DWORD dwSize = sizeof(COMMCONFIG);
	if (!::SetDefaultCommConfig(strPort, &config, dwSize)) {
		TRACE(_T("Failed in call to GetDefaultCommConfig\n"));
		CSerialException::ThrowSerialException();
	}
}

void CSerialPort::ClearError(DWORD& dwErrors)
{
	ASSERT(IsOpen());

	if(!::ClearCommError(m_hComm, &dwErrors, NULL)) {
		TRACE(_T("Failed in call to ClearCommError\n"));
		CSerialException::ThrowSerialException();
	}
}

void CSerialPort::GetStatus(COMSTAT& comstat)
{
	ASSERT(IsOpen());

	DWORD dwErrors;
	if (!::ClearCommError(m_hComm, &dwErrors, &comstat)) {
		TRACE(_T("Failed in call to ClearCommError\n"));
		CSerialException::ThrowSerialException();
	}
}

void CSerialPort::InitPort(CWnd*	pPortOwner,		// the owner (CWnd) of the port (receives message)
						   UINT		nPortNr,		// portnumber (1..255)
						   UINT		baud,			// baudrate
						   char		parity,			// parity 
						   UINT		databits,		// databits 
						   UINT		stopsbits ,		// stopbits 
						   DWORD	dwCommEvents,	// EV_CTS,EV_DSR etc
						   UINT		nBufferSize)	// number of input buffer
{
	ASSERT(pPortOwner != NULL);
	ASSERT(nPortNr > 0 && nPortNr < 256);

	if (m_bThreadAlive/*==TRUE*/) {
		do {
			::SetEvent(m_hShutdownEvent);
		} while (m_bThreadAlive);
		TRACE("Thread ended\n");
	}

	// create events
	if (m_ReadOverlapped.hEvent/*!=NULL*/)
		::ResetEvent(m_ReadOverlapped.hEvent);
	else
		m_ReadOverlapped.hEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);

	if (m_WriteOverlapped.hEvent/*!=NULL*/)
		::ResetEvent(m_WriteOverlapped.hEvent);
	else
		m_WriteOverlapped.hEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);

	if (m_BreakOverlapped.hEvent/*!= NULL*/)
		::ResetEvent(m_BreakOverlapped.hEvent);
	else
		m_BreakOverlapped.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);

	// initialize the event objects
	m_hEventArray[0] = m_hShutdownEvent;	// highest priority
	m_hEventArray[1] = m_ReadOverlapped.hEvent;
	m_hEventArray[2] = m_BreakOverlapped.hEvent;
	m_hEventArray[3] = m_hWriteEvent;

	// initialize critical section
	::InitializeCriticalSection(&m_csCommunicationSync);

	// set buffersize for writing and save the owner
	m_pOwner = pPortOwner;

	if (m_lpInputBuffer/*!=NULL*/) 
		delete[] m_lpInputBuffer;
	m_lpInputBuffer = new BYTE[nBufferSize];

	m_nPortNr = nPortNr;
	m_nBufferSize = nBufferSize;
	m_dwCommEvents = dwCommEvents;

	CString strPort;
	CString strDef;

	// now it critical!
	::EnterCriticalSection(&m_csCommunicationSync);
	
	if (IsOpen()){
		::CloseHandle(m_hComm);
		m_hComm = NULL;
	}

	strPort.Format(_T("\\\\.\\COM%d"), nPortNr);
	strDef.Format(_T("baud=%d parity=%c data=%d stop=%d"), baud, parity, databits, stopsbits);

	m_hComm = ::CreateFile((LPCTSTR)strPort,			// 串口號 (COMX)
					     GENERIC_READ | GENERIC_WRITE,	// 可以同時讀寫
					     0,								// 以獨占方式打開串口
					     NULL,							// 無安全屬性
					     OPEN_EXISTING,					// 串口設備必須用OPEN_EXISTING,因為它肯定存在
					     FILE_FLAG_OVERLAPPED,			// (重疊)異步I/O操作方式
					     0);							// 對串設備,模板文件句柄必須為0(NULL)
	
	if (m_hComm == INVALID_HANDLE_VALUE) {
		::LeaveCriticalSection(&m_csCommunicationSync);
		TRACE(_T("Failed to open up the comms port\n"));
		CSerialException::ThrowSerialException();
	}
							
	// set the timeout values
	m_CommTimeouts.ReadIntervalTimeout = 100;
	m_CommTimeouts.ReadTotalTimeoutMultiplier = 0;
	m_CommTimeouts.ReadTotalTimeoutConstant = 0;
	m_CommTimeouts.WriteTotalTimeoutMultiplier = 0;
	m_CommTimeouts.WriteTotalTimeoutConstant = 0;
	
	try {
		SetTimeouts(m_CommTimeouts);
		SetMask(dwCommEvents);
		GetState(m_dcb);
		m_dcb.fRtsControl = RTS_CONTROL_ENABLE;		// set RTS bit high!
		BuildDCB(strDef, m_dcb);
		SetState(m_dcb);
		Purge(PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
	} catch(CSerialException* pEx) {
		::MessageBox(m_pOwner->m_hWnd, (LPCTSTR)pEx->GetErrorMessage(), _T("應用程序錯誤"), MB_ICONSTOP);
		pEx->Delete();
	}

	::LeaveCriticalSection(&m_csCommunicationSync);

	TRACE("Initialisation for communicationport %d completed.\nUse Startmonitor to communicate.\n", nPortNr);
}

// 開始監視工作線程
BOOL CSerialPort::StartMonitoring(void)
{
	m_Thread = AfxBeginThread(CommThread, this);
	if (!m_Thread)
		return FALSE;
	TRACE(_T("Thread started\n"));
	return TRUE;
}

// 停止監視工作線程
BOOL CSerialPort::StopMonitoring(void)
{
	ASSERT(m_Thread);

	TRACE(_T("Thread suspended\n"));
	m_Thread->SuspendThread();
	return TRUE;
}

BOOL CSerialPort::RestartMonitoring(void)
{
	ASSERT(m_Thread);

	TRACE(_T("Thread Resume\n"));
	m_Thread->ResumeThread();
	return TRUE;
}

BOOL CSerialPort::SetBreakEvent(DWORD& dwCommEvents)
{
	ASSERT(m_BreakOverlapped.hEvent != NULL);

	try {
		for(;;) {
			if (WaitEvent(dwCommEvents, m_BreakOverlapped)) {
				if (!HandleBreakEvent(dwCommEvents))
					return FALSE;
			} else {
				break;
			}
		}
	} catch(CSerialException* pEx) {
		::MessageBox(m_pOwner->m_hWnd, (LPCTSTR)pEx->GetErrorMessage(), _T("應用程序錯誤"), MB_ICONSTOP);
		pEx->Delete();
		return FALSE;
	}

	return TRUE;
}

BOOL CSerialPort::SetReadEvent(void)
{
	ASSERT(m_lpInputBuffer != NULL);
	ASSERT(m_ReadOverlapped.hEvent != NULL);

	DWORD dwReadByte;
	try {
		for (;;) {
			::memset((void*)m_lpInputBuffer, 0, m_nBufferSize);
			if (Read((LPVOID*)m_lpInputBuffer, m_nBufferSize, m_ReadOverlapped, &dwReadByte)) {
				if (!HandleReadedEvent(m_lpInputBuffer, dwReadByte))
					return FALSE;
				::ResetEvent(m_ReadOverlapped.hEvent);
			} else {
				break;
			}
		}
	} catch(CSerialException* pEx) {
		::MessageBox(m_pOwner->m_hWnd, (LPCTSTR)pEx->GetErrorMessage(), _T("應用程序錯誤"), MB_ICONSTOP);
		pEx->Delete();
		return FALSE;
	}
	
	return TRUE;
}

BOOL CSerialPort::HandleReadedEvent(LPVOID pParam, const DWORD& dwReadCount)
{
	COMMDATA CommData;
	CommData.pParam = pParam;
	CommData.dwParamCount = dwReadCount;
	//發送輸入緩沖中的串口數據
	m_pOwner->SendMessage(WM_COMM_READED_DETECTED, (WPARAM)&CommData, (LPARAM)m_nPortNr);
	
	return SetReadEvent();
}

BOOL CSerialPort::HandleBreakEvent(DWORD& dwCommEvent)
{

	if (dwCommEvent & EV_CTS)
		m_pOwner->SendMessage(WM_COMM_CTS_DETECTED, (WPARAM)0, (LPARAM)m_nPortNr);
	if (dwCommEvent & EV_BREAK)
		m_pOwner->SendMessage(WM_COMM_BREAK_DETECTED, (WPARAM)0, (LPARAM)m_nPortNr);
	if (dwCommEvent & EV_ERR)
		m_pOwner->SendMessage(WM_COMM_ERR_DETECTED, (WPARAM)0, (LPARAM)m_nPortNr);
	if (dwCommEvent & EV_RING)
		m_pOwner->SendMessage(WM_COMM_RING_DETECTED, (WPARAM)0, (LPARAM)m_nPortNr);		
	if (dwCommEvent & EV_RXFLAG)
		m_pOwner->SendMessage(WM_COMM_RXFLAG_DETECTED, (WPARAM)0, (LPARAM)m_nPortNr);
	if (dwCommEvent & EV_TXEMPTY)
		m_pOwner->SendMessage(WM_COMM_TXEMPTY_DETECTED, (WPARAM)0, (LPARAM)m_nPortNr);

	return SetBreakEvent(dwCommEvent);
}

BOOL CSerialPort::HandleWriteEvent(void)
{
	return ::ResetEvent(m_hWriteEvent);
}

void CSerialPort::HandleWaitTimeouts(void)
{
	m_pOwner->SendMessage(WM_COMM_TIMEOUT_DETECTED, (WPARAM)0, (LPARAM)m_nPortNr);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美va亚洲va香蕉在线| 国产一区在线不卡| 偷拍与自拍一区| 免费国产亚洲视频| 成人黄色软件下载| 欧美日韩黄视频| 国产精品久久看| 蜜桃视频一区二区| av在线不卡电影| 欧美一区二区三区视频| 亚洲欧美一区二区视频| 国内精品国产三级国产a久久| 国产精品综合一区二区| 欧美高清精品3d| 亚洲女厕所小便bbb| 久久精品免费观看| 欧美二区乱c少妇| 亚洲品质自拍视频| 成熟亚洲日本毛茸茸凸凹| 欧美一区中文字幕| 日本欧美一区二区在线观看| 成人免费的视频| 国产精品伦理在线| 欧美探花视频资源| 亚洲成人动漫av| 欧美一级爆毛片| 久久99精品视频| 久久精品夜夜夜夜久久| 国产一区二区免费看| www久久精品| 国产成人免费视频网站高清观看视频| 欧美精品一区二区三区一线天视频| 日本vs亚洲vs韩国一区三区| 精品捆绑美女sm三区| 国产一区在线观看视频| 国产精品久久久久永久免费观看| 成人午夜视频福利| 亚洲一线二线三线久久久| 欧美日韩二区三区| 国产精品一区二区男女羞羞无遮挡| 欧美吻胸吃奶大尺度电影| 久久99日本精品| ...av二区三区久久精品| 欧美日韩一区精品| 岛国精品在线观看| 日韩精品欧美精品| 国产精品久久久久久久久久久免费看| 色av成人天堂桃色av| 另类小说色综合网站| **欧美大码日韩| 欧美大度的电影原声| 在线精品视频免费播放| 亚洲国产婷婷综合在线精品| 久久久不卡网国产精品二区| 欧美日韩国产精选| 在线观看免费视频综合| 成人国产精品免费观看动漫| 狠狠色丁香婷婷综合| 肉肉av福利一精品导航| 美女爽到高潮91| 自拍偷自拍亚洲精品播放| 久久久青草青青国产亚洲免观| 欧美日本视频在线| 在线亚洲+欧美+日本专区| 99免费精品在线| 色综合天天做天天爱| 99精品视频一区二区| 99久久国产综合精品麻豆| 成人夜色视频网站在线观看| 不卡的av电影| 欧美久久一二区| 日韩精品一区二区三区中文精品 | 欧美一区二区免费视频| 欧美精品一二三四| 精品久久久久久无| 国产日产亚洲精品系列| 中文字幕av免费专区久久| 国产精品嫩草99a| 亚洲尤物视频在线| 精品一区二区三区香蕉蜜桃 | 亚洲精品欧美激情| 免费高清不卡av| 色欧美日韩亚洲| 欧美成人国产一区二区| 中文字幕一区二区三| 午夜影院久久久| 国产精品香蕉一区二区三区| 一本一本久久a久久精品综合麻豆| 91精品久久久久久蜜臀| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲欧洲日韩在线| 国产精品一品二品| 正在播放亚洲一区| 亚洲欧美日韩国产成人精品影院| 美国十次了思思久久精品导航| 国产精品一区二区三区乱码| 欧美色成人综合| 日韩毛片精品高清免费| 激情综合五月天| 精品久久一区二区| 狠狠色丁香久久婷婷综| 欧美变态tickle挠乳网站| 久热成人在线视频| 欧美va天堂va视频va在线| 男女性色大片免费观看一区二区 | 亚洲国产精品影院| 欧美日韩一区二区三区四区五区 | 亚洲第一主播视频| 在线观看av一区| 天涯成人国产亚洲精品一区av| 欧美一区二区免费视频| 麻豆精品视频在线观看免费| 91超碰这里只有精品国产| 久久99热99| 综合久久久久久久| 欧美色精品天天在线观看视频| 日本91福利区| 综合久久综合久久| 日韩视频免费直播| 大尺度一区二区| 婷婷中文字幕综合| 国产精品日韩成人| 欧美性高清videossexo| 风流少妇一区二区| 韩国av一区二区| 三级欧美韩日大片在线看| 亚洲欧美一区二区视频| 欧美酷刑日本凌虐凌虐| 成人免费视频caoporn| 亚洲国产三级在线| 国产精品私人影院| 欧美精品一区二区三区四区| 91国产免费看| 成人免费视频一区| 国产精品1区2区| 青草av.久久免费一区| 亚洲第一在线综合网站| 国产精品久线观看视频| 欧美国产视频在线| 国产欧美日韩卡一| 久久午夜免费电影| 国产性色一区二区| 久久久久久久综合日本| 日韩免费视频一区| 精品久久久网站| 亚洲精品一线二线三线无人区| 欧美成人vps| 国产视频一区二区在线| 亚洲欧美一区二区在线观看| 国产欧美一区二区三区在线看蜜臀| 日韩视频在线永久播放| 中文字幕免费观看一区| 亚洲日本电影在线| 日日欢夜夜爽一区| 韩国精品在线观看| 欧美日韩和欧美的一区二区| 777色狠狠一区二区三区| 国产日韩欧美综合一区| 亚洲一区二区中文在线| 精品一区二区久久久| 成人午夜大片免费观看| 在线播放中文一区| 国产精品国产自产拍高清av王其 | 欧美久久久影院| 国产精品第五页| 狠狠色狠狠色综合| 日本电影亚洲天堂一区| 久久嫩草精品久久久精品一| 亚洲日本成人在线观看| 国产精品伊人色| 日韩三级精品电影久久久 | 欧美一区二区三区影视| 亚洲欧洲性图库| 成人的网站免费观看| 久久精品视频免费| 国产精品性做久久久久久| 在线成人午夜影院| 午夜av区久久| 91精品国产一区二区三区香蕉| 最新欧美精品一区二区三区| 国产一区999| 久久精品视频免费| 成人免费av在线| 亚洲国产成人自拍| 91小视频免费观看| 亚洲第一在线综合网站| 9191国产精品| 国产一区欧美日韩| 日本一区二区三区免费乱视频 | 日韩一区精品字幕| www国产亚洲精品久久麻豆| 国产一区二区三区在线观看免费| 欧美变态凌虐bdsm| av在线不卡网| 日韩精品午夜视频| 中文字幕巨乱亚洲| 欧美午夜精品免费| 久久99精品国产.久久久久久| 久久伊人蜜桃av一区二区| 色狠狠av一区二区三区|