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

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

?? serialcomm.cpp

?? 研華ADAN4050 檢測程序(自做) 壓縮文件中 無密碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		if (FALSE == ::GetCommConfig(m_hCOM, NULL, &dwCCSize))
			return BOOL(FALSE);
		LPCOMMCONFIG pCC = LPCOMMCONFIG(new BYTE[dwCCSize]);
		if (NULL == pCC)
			return BOOL(FALSE);
		pCC->dwSize = dwCCSize;
		pCC->wVersion = 0x200;
		pCC->dcb.DCBlength = sizeof(DCB);

		if (FALSE == ::GetCommConfig(m_hCOM, pCC, &dwCCSize))
		{
			delete[] LPBYTE(pCC);
			return BOOL(FALSE);
		}

		//檢查CommConfigDialog顯示標志,防止重復啟動CommConfigDialog
		if (FALSE == m_bShowCommConfigDialog)
		{
			BOOL bRet = FALSE;
			m_bShowCommConfigDialog = TRUE;

			if (FALSE != ::CommConfigDialog(m_atcCurCOM, NULL, pCC))
			{
				if (NULL != IsOpened())
				{
					::PurgeComm(m_hCOM, PURGE_RXABORT | PURGE_TXABORT);
					bRet=::SetCommConfig(m_hCOM, pCC, dwCCSize);
					bRet = SetCommState(&pCC->dcb);
					delete[] LPBYTE(pCC);
					::PurgeComm(m_hCOM, PURGE_TXCLEAR | PURGE_RXCLEAR);
				}
			}
			m_bShowCommConfigDialog = FALSE;

			return BOOL(bRet);
		}
	}

	return BOOL(FALSE);

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//設置當前的異步寫屬性
//<參數>
//	bAsyncOutput: 異步寫屬性設置值
//<返回值> 無
void CSerialComm::SetAsyncOutput(BOOL bAsyncOutput)
{
#if !defined(SC_MSCOMOBJECT)

	m_bAsyncOutput = bAsyncOutput;

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//獲取當前的異步寫屬性
//<參數> 無
//<返回值>
//	返回當前的異步寫屬性。
BOOL CSerialComm::GetAsyncOutput()
{
#if !defined(SC_MSCOMOBJECT)

	return BOOL(m_bAsyncOutput);

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//以單片機多機通訊模式向指定地址發送數據
//<參數>
//	ucAddr: 指定地址
//	pData: 指定待發數據
//	lWriteSize: 指定待發數據長度
//<返回值>
//	返回正確寫出的字節數。出錯時返回值小于0。
long CSerialComm::WriteTo(BYTE ucAddr, LPVOID pData, long lWriteSize)
{
#if !defined(SC_MSCOMOBJECT)

	if (INVALID_HANDLE_VALUE == m_hCOM || NULL == m_hCOM)
		return long(-6);

	COMSTAT stCOMStat;
	DWORD dwErr = 0;

	//如果入口參數無效則試圖返回輸入緩沖區中的數據長度
	if (NULL == pData || 0 > lWriteSize)
	{
		if (FALSE == ::ClearCommError(m_hCOM, &dwErr, &stCOMStat))
			return long(-7);
		return long(stCOMStat.cbOutQue);
	}

	m_stDCB.Parity = MARKPARITY;
	m_stDCB.fParity = TRUE;
	::SetCommState(m_hCOM, &m_stDCB);
	BOOL bAsyncOutput = m_bAsyncOutput;
	m_bAsyncOutput = FALSE;
	long lWrited = Write(&ucAddr, sizeof(BYTE));
	if (sizeof(BYTE) != lWrited)
	{
		m_bAsyncOutput = bAsyncOutput;
		m_stDCB.Parity = SPACEPARITY;
		::SetCommState(m_hCOM, &m_stDCB);
		if (lWrited < 0)
			return long(lWrited);
		return long(-8);
	}
	m_bAsyncOutput = bAsyncOutput;
	m_stDCB.Parity = SPACEPARITY;
	::SetCommState(m_hCOM, &m_stDCB);

	return long(Write(pData, lWriteSize));

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//在當前串行通訊端口等待接收第九位為'1'的地址數據
//<參數>
//	pucAddr: 指定用于接收地址數據的緩沖區
//<返回值>
//	如果成功返回TRUE,否則返回FALSE。
//	注: 該方法一般用于與單片機進行通訊,數據第九位為'0',地址第九位為'1'。通訊
//時,校驗方式設置為空校驗方式以保證發送的數據數據第九位為'0'。
BOOL CSerialComm::ScanAddr(LPBYTE pucAddr)
{
#if !defined(SC_MSCOMOBJECT)

	if (INVALID_HANDLE_VALUE == m_hCOM || NULL == m_hCOM || NULL == pucAddr)
		return BOOL(FALSE);

	if (sizeof(BYTE) != Read(pucAddr, sizeof(BYTE)))
		return BOOL(FALSE);

	DWORD dwError = 0;
	COMSTAT stCOMStat;
	if (FALSE == ::ClearCommError(m_hCOM, &dwError, &stCOMStat))
		return BOOL(FALSE);

	//由于處于空校驗方式,如果出現接收校驗錯誤即表示收到了第九位為'1'的數據。
	if (FALSE == BOOL(dwError & CE_RXPARITY))
	{
		if (0 < stCOMStat.cbInQue)
		{
			LPBYTE pBuff = new BYTE[stCOMStat.cbInQue];
			Read(pBuff, stCOMStat.cbInQue);
			delete[] pBuff;
		}
		return BOOL(FALSE);
	}

	return BOOL(TRUE);

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//設置當前串行通訊端口的DCB參數
//<參數>
//	pDCB: 指定DCB數據
//<返回值>
//	如果成功則返回TRUE,否則返回FALSE。
BOOL CSerialComm::SetCommState(DCB *pDCB)
{
#if !defined(SC_MSCOMOBJECT)

	if (INVALID_HANDLE_VALUE == m_hCOM || NULL == m_hCOM || NULL == pDCB)
		return BOOL(FALSE);

	::PurgeComm(m_hCOM, PURGE_RXABORT | PURGE_TXABORT);
	if (FALSE == ::SetCommState(m_hCOM, pDCB))
		return BOOL(FALSE);
	::memcpy(&m_stDCB, pDCB, sizeof(DCB));

	::PurgeComm(m_hCOM, PURGE_TXCLEAR | PURGE_RXCLEAR);
	if (FALSE != ::GetCommTimeouts(m_hCOM, &m_stCTO))
	{
		int iBits = 1 + m_stDCB.ByteSize + ((m_stDCB.StopBits == ONESTOPBIT) ? 1 : 2);
		m_stCTO.ReadIntervalTimeout = 10; //10ms的區間超時
		m_stCTO.ReadTotalTimeoutMultiplier = (iBits * 1000) / m_stDCB.BaudRate; //傳輸一個字節所需的時間
		if (0 == m_stCTO.ReadTotalTimeoutMultiplier)
			m_stCTO.ReadTotalTimeoutMultiplier = 1;
		m_stCTO.ReadTotalTimeoutConstant = m_stCTO.ReadTotalTimeoutMultiplier * 10;
		m_stCTO.WriteTotalTimeoutMultiplier = ((iBits + 2) * 1000) / m_stDCB.BaudRate; //傳輸一個字節所需的時間
		if (0 == m_stCTO.WriteTotalTimeoutMultiplier)
			m_stCTO.WriteTotalTimeoutMultiplier = 1;
		m_stCTO.WriteTotalTimeoutConstant = m_stCTO.WriteTotalTimeoutMultiplier * 10;
		::SetCommTimeouts(m_hCOM, &m_stCTO);
	}

	return BOOL(TRUE);

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//獲取當前的DCB鏡像
//<參數>
//	pDCB: 指向一個用于接收DCB數據的緩沖區
//<返回值>
//	如果成功返回TRUE,否則返回FALSE。
BOOL CSerialComm::GetCommState(DCB *pDCB)
{
#if !defined(SC_MSCOMOBJECT)

	if (INVALID_HANDLE_VALUE == m_hCOM || NULL == m_hCOM || NULL == pDCB)
		return BOOL(FALSE);

	if (FALSE == ::GetCommState(m_hCOM, pDCB))
		return BOOL(FALSE);

	::memcpy(&m_stDCB, pDCB, sizeof(DCB));
	return BOOL(TRUE);

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//設置當前的波特率屬性
//<參數>
//	dwBaudrate: 波特率屬性設置值
//<返回值> 無
void CSerialComm::SetBaudrate(DWORD dwBaudrate)
{
#if !defined(SC_MSCOMOBJECT)

	m_stDCB.BaudRate = FormatBaudrate(dwBaudrate);
	SetCommState(&m_stDCB);
	if (FALSE != ::GetCommTimeouts(m_hCOM, &m_stCTO))
	{
		int iBits = 1 + m_stDCB.ByteSize + ((m_stDCB.StopBits == ONESTOPBIT) ? 1 : 2);
		m_stCTO.ReadIntervalTimeout = 10; //10ms的區間超時
		m_stCTO.ReadTotalTimeoutMultiplier = (iBits * 1000) / m_stDCB.BaudRate; //傳輸一個字節所需的時間
		if (0 == m_stCTO.ReadTotalTimeoutMultiplier)
			m_stCTO.ReadTotalTimeoutMultiplier = 1;
		m_stCTO.ReadTotalTimeoutConstant = m_stCTO.ReadTotalTimeoutMultiplier * 10;
		m_stCTO.WriteTotalTimeoutMultiplier = ((iBits + 2) * 1000) / m_stDCB.BaudRate; //傳輸一個字節所需的時間
		if (0 == m_stCTO.WriteTotalTimeoutMultiplier)
			m_stCTO.WriteTotalTimeoutMultiplier = 1;
		m_stCTO.WriteTotalTimeoutConstant = m_stCTO.WriteTotalTimeoutMultiplier * 10;
		::SetCommTimeouts(m_hCOM, &m_stCTO);
	}

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//獲取當前的波特率屬性
//<參數> 無
//<返回值>
//	返回當前的波特率屬性。
DWORD CSerialComm::GetBaudrate()
{
#if !defined(SC_MSCOMOBJECT)

	return DWORD(m_stDCB.BaudRate);

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//設置當前的數據位數屬性
//<參數>
//	ucSize: 數據位數屬性設置值
//<返回值> 無
void CSerialComm::SetByteSize(BYTE ucSize)
{
#if !defined(SC_MSCOMOBJECT)

	BYTE ucOldSet = m_stDCB.ByteSize;
	m_stDCB.ByteSize = ucSize;
	if (FALSE == SetCommState(&m_stDCB))
	{
		m_stDCB.ByteSize = ucOldSet;
	}

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//獲取當前的數據位數屬性
//<參數> 無
//<返回值>
//	返回當前的數據位數屬性。
BYTE CSerialComm::GetByteSize()
{
#if !defined(SC_MSCOMOBJECT)

	return BYTE(m_stDCB.ByteSize);

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//設置當前的校驗方式屬性
//<參數>
//	ucParity: 校驗方式屬性設置值
//<返回值> 無
void CSerialComm::SetParity(BYTE ucParity)
{
#if !defined(SC_MSCOMOBJECT)

	m_stDCB.Parity = FormatParity(ucParity);
	SetCommState(&m_stDCB);

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//獲取當前的校驗方式屬性
//<參數> 無
//<返回值>
//	返回當前的校驗方式屬性。
BYTE CSerialComm::GetParity()
{
#if !defined(SC_MSCOMOBJECT)

	return BYTE(m_stDCB.Parity);

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//設置當前的停止位數屬性
//<參數>
//	ucStopBits: 停止位數屬性設置值
//<返回值> 無
void CSerialComm::SetStopBits(BYTE ucStopBits)
{
#if !defined(SC_MSCOMOBJECT)

	BYTE ucOldSet = m_stDCB.StopBits;

	m_stDCB.StopBits = ucStopBits;
	if (FALSE == SetCommState(&m_stDCB))
	{
		m_stDCB.StopBits = ucOldSet;
	}

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

//獲取當前的停止位數屬性
//<參數> 無
//<返回值>
//	返回當前的停止位數屬性。
BYTE CSerialComm::GetStopBits()
{
#if !defined(SC_MSCOMOBJECT)

	return BYTE(m_stDCB.StopBits);

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

void CSerialComm::ClearReadBuffer()
{
#if !defined(SC_MSCOMOBJECT)

	if (INVALID_HANDLE_VALUE != m_hCOM || NULL != m_hCOM)
	{
		::PurgeComm(m_hCOM, PURGE_RXCLEAR);
	}

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

void CSerialComm::ClearWriteBuffer()
{
#if !defined(SC_MSCOMOBJECT)

	if (INVALID_HANDLE_VALUE != m_hCOM || NULL != m_hCOM)
	{
		::PurgeComm(m_hCOM, PURGE_TXCLEAR);
	}

#else //if !defined(SC_MSCOMOBJECT)
#endif
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色国产综合视频| av中文字幕一区| 久久久久国产精品厨房| 成人在线视频一区| 成人小视频免费观看| 91在线你懂得| 欧美三级午夜理伦三级中视频| 在线观看av一区二区| 欧美人狂配大交3d怪物一区| 欧美日韩不卡视频| 欧美成人福利视频| 久久免费电影网| 亚洲欧美日本韩国| 偷窥少妇高潮呻吟av久久免费| 免费人成黄页网站在线一区二区| 裸体一区二区三区| 91丨porny丨首页| 日韩精品在线网站| 成人欧美一区二区三区小说| 午夜精品在线看| 99国产一区二区三精品乱码| 在线播放91灌醉迷j高跟美女| 久久久久久久一区| 亚洲色图色小说| 激情综合五月婷婷| 色偷偷一区二区三区| 2014亚洲片线观看视频免费| 亚洲国产一区视频| 99久久精品国产一区| 2020国产精品久久精品美国| 亚洲午夜精品网| 日本道在线观看一区二区| 久久久亚洲高清| 精品一区二区综合| 欧美一区二区成人6969| 婷婷夜色潮精品综合在线| 91麻豆123| 亚洲国产你懂的| 97国产精品videossex| 亚洲国产精品成人综合色在线婷婷| 26uuu久久天堂性欧美| 精品国产乱码久久久久久图片| 亚洲精品乱码久久久久久久久 | 色激情天天射综合网| 国产午夜亚洲精品理论片色戒| 蜜芽一区二区三区| 欧美电影一区二区| 久久国产精品色婷婷| 久久久精品天堂| 成人免费三级在线| 一区二区在线免费| 欧美久久久久久蜜桃| 免费不卡在线观看| 国产欧美精品区一区二区三区| 国产成人午夜视频| 一区二区三区精品久久久| 色一区在线观看| 极品少妇xxxx精品少妇偷拍| 国产色产综合产在线视频| 色激情天天射综合网| 麻豆成人91精品二区三区| 中文字幕精品在线不卡| 欧美日韩在线精品一区二区三区激情| 日韩福利电影在线| 国产精品日韩成人| 欧美一区二区三区日韩| 成人一级视频在线观看| 亚洲一区影音先锋| 国产精品久久久久久亚洲伦| 91精品国产一区二区| 91香蕉国产在线观看软件| 狠狠色2019综合网| 亚洲午夜精品网| 亚洲三级电影网站| 亚洲国产精品高清| 国产亚洲美州欧州综合国| 日韩视频一区在线观看| 欧美日韩国产一区二区三区地区| 国产欧美精品一区二区三区四区| 精品亚洲porn| 日韩成人免费电影| 免费人成黄页网站在线一区二区| 亚洲午夜免费福利视频| 一区二区在线观看免费| 樱桃国产成人精品视频| 亚洲天堂精品在线观看| 亚洲视频小说图片| 国产欧美一区二区精品久导航 | 久久久不卡网国产精品二区| 日韩欧美在线网站| 欧美一区二区三区四区五区| 欧美视频一区二区三区在线观看| 99这里只有精品| 一本久久a久久免费精品不卡| 一本色道久久综合狠狠躁的推荐| 91丨九色丨蝌蚪丨老版| 欧美性大战久久久久久久| 欧美人狂配大交3d怪物一区| 欧美一区二区二区| 国产精品免费视频观看| 亚洲欧美日韩小说| 日韩极品在线观看| 国内精品第一页| 欧洲一区在线观看| 欧美一卡二卡三卡四卡| 国产精品久久久久影院老司| 亚洲美女免费在线| 美女在线视频一区| 91激情五月电影| 久久综合色8888| 午夜天堂影视香蕉久久| 国产在线不卡一区| 欧美人动与zoxxxx乱| 欧美激情一区二区在线| 蜜臀a∨国产成人精品| 色哟哟日韩精品| 亚洲欧美怡红院| 国产一区二区三区四区在线观看| 在线免费精品视频| 国产欧美日韩另类一区| 奇米精品一区二区三区四区| av亚洲精华国产精华精华| 欧美日韩国产首页| 在线不卡a资源高清| 亚洲区小说区图片区qvod| 国产乱子伦一区二区三区国色天香| 国产成人综合在线| 久久日韩粉嫩一区二区三区| 日本不卡在线视频| 在线成人小视频| 性欧美疯狂xxxxbbbb| 欧美日韩一区二区三区免费看 | 国产不卡视频一区| 国产精品色哟哟网站| 91视频观看视频| 有坂深雪av一区二区精品| 一本色道综合亚洲| 亚洲国产精品天堂| 欧美日韩成人高清| 国内精品不卡在线| 亚洲天天做日日做天天谢日日欢| 色婷婷久久久久swag精品 | 91女神在线视频| 亚洲夂夂婷婷色拍ww47| 日韩一区二区三区三四区视频在线观看| 天天色天天操综合| 精品理论电影在线观看 | 国产精品网站在线播放| 91蝌蚪porny成人天涯| 日本欧美在线观看| 中文字幕第一区二区| 欧美久久久久久久久中文字幕| 蜜臂av日日欢夜夜爽一区| 久久久久久久网| 在线观看日产精品| 国产精品一二三| 日韩精品一级二级| 亚洲人成影院在线观看| 精品久久久久久久人人人人传媒 | 免费成人美女在线观看.| 中文字幕一区av| 91蝌蚪porny| 图片区小说区区亚洲影院| 久久久国际精品| 日韩午夜激情av| 欧美色倩网站大全免费| 99r国产精品| av不卡免费在线观看| 国产成人夜色高潮福利影视| 青青草成人在线观看| 亚洲国产精品欧美一二99| 亚洲欧美综合另类在线卡通| 久久这里只有精品视频网| 欧美电视剧在线观看完整版| 91精品国产美女浴室洗澡无遮挡| av亚洲精华国产精华精| www.日韩av| 91香蕉国产在线观看软件| 色综合天天综合网天天看片| 91网站最新网址| 99久久精品国产导航| 成人av片在线观看| 色噜噜久久综合| 欧美福利视频一区| 精品福利在线导航| 国产午夜精品福利| 亚洲裸体xxx| 日韩精彩视频在线观看| 蜜臀av一区二区三区| 久久精品二区亚洲w码| 激情综合五月天| 色综合久久天天| 日韩你懂的电影在线观看| ww亚洲ww在线观看国产| 亚洲精品免费电影| 青青草原综合久久大伊人精品优势| 麻豆一区二区三| 欧美日韩美少妇| 久久精品视频在线免费观看| 亚洲精品成a人|