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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? winceserialdlg.cpp

?? WINCE6下寫的一個(gè)串口通訊程序
?? CPP
字號(hào):
// WinCESerialDlg.cpp : implementation file
//

#include "stdafx.h"
#include "WinCESerial.h"
#include "WinCESerialDlg.h"
#include <atlstr.h>
using namespace ATL;


#ifdef _DEBUG
#define new DEBUG_NEW
#endif

HANDLE hPort = INVALID_HANDLE_VALUE;
CString strInChar;

// CWinCESerialDlg dialog

CWinCESerialDlg::CWinCESerialDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CWinCESerialDlg::IDD, pParent)
	, m_iport(0)
	, m_com1state(_T(""))
	, m_com2state(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CWinCESerialDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_EDIT_READ, m_ceReadSerial);
	DDX_Control(pDX, IDC_EDIT_SEND, m_ceSendserial);
	DDX_CBIndex(pDX, IDC_COMBO_SERIAL_NAME, m_iport);
	DDX_Text(pDX, IDC_STATIC_COM1_STATE, m_com1state);
	DDX_Text(pDX, IDC_STATIC_COM2_STATE, m_com2state);
}

BEGIN_MESSAGE_MAP(CWinCESerialDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
	ON_WM_SIZE()
#endif
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_BUTTON_SERIAL_OPEN, &CWinCESerialDlg::OnBnClickedButtonSerialOpen)
	ON_BN_CLICKED(IDC_BUTTON_SERIAL_WRITE, &CWinCESerialDlg::OnBnClickedButtonSerialWrite)
	ON_BN_CLICKED(IDC_BUTTON_SERIAL_CLOSE, &CWinCESerialDlg::OnBnClickedButtonSerialClose)
	ON_BN_CLICKED(IDC_BUTTON_CLEAN_DATA, &CWinCESerialDlg::OnBnClickedButtonCleanData)
END_MESSAGE_MAP()


// CWinCESerialDlg message handlers

BOOL CWinCESerialDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CWinCESerialDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
	if (AfxIsDRAEnabled())
	{
		DRA::RelayoutDialog(
			AfxGetResourceHandle(), 
			this->m_hWnd, 
			DRA::GetDisplayMode() != DRA::Portrait ? 
			MAKEINTRESOURCE(IDD_WINCESERIAL_DIALOG_WIDE) : 
			MAKEINTRESOURCE(IDD_WINCESERIAL_DIALOG));
	}
}
#endif

BOOL CWinCESerialDlg::InitCommTimeouts()
{
	COMMTIMEOUTS CommTimeouts;
	DWORD dwError;

	// 得到超時(shí)參數(shù)
	GetCommTimeouts(hPort, &CommTimeouts);

	// 改變COMMTIMEOUTS結(jié)構(gòu)設(shè)置
	CommTimeouts.ReadIntervalTimeout = MAXDWORD; 
	CommTimeouts.ReadTotalTimeoutMultiplier = 0; 
	CommTimeouts.ReadTotalTimeoutConstant = 0; 
	CommTimeouts.WriteTotalTimeoutMultiplier = 10; 
	CommTimeouts.WriteTotalTimeoutConstant = 1000; 

	// 設(shè)置端口超時(shí)值 
	if (!SetCommTimeouts(hPort, &CommTimeouts))
	{
		// 不能設(shè)置超時(shí)值
		//MessageBox(NULL, TEXT("Unable to set the time-out parameters"), 
		//	TEXT("Error"), MB_OK);
		AfxMessageBox(TEXT("Unable to set the time-out parameters"), 
			MB_OK, MB_ICONERROR);
		dwError = GetLastError();
		return FALSE;
	}

	return TRUE;
} 

BOOL CWinCESerialDlg::InitDCB()
{
	DCB PortDCB;
	DWORD dwError;

	PortDCB.DCBlength = sizeof(DCB); 

	// 得到端口的默認(rèn)設(shè)置信息
	GetCommState(hPort, &PortDCB);

	// 改變DCB結(jié)構(gòu)設(shè)置
	PortDCB.BaudRate = 9600;                   // 波特率 
	PortDCB.fBinary = TRUE;                     // Win32不支持非二進(jìn)制串行傳輸模式,必須為TRUE 
	PortDCB.fParity = TRUE;                     // 啟用奇偶校驗(yàn) 
	PortDCB.fOutxCtsFlow = TRUE;                // 串行端口的輸出由CTS線控制
	PortDCB.fOutxDsrFlow = FALSE;               // 關(guān)閉串行端口的DSR流控制 
	PortDCB.fDtrControl = DTR_CONTROL_ENABLE;   // 啟用DTR線
	PortDCB.fDsrSensitivity = FALSE;            // 如果設(shè)為TRUE將忽略任何輸入的字節(jié),除非DSR線被啟用 
	//PortDCB.fTXContinueOnXoff = TRUE;         // 當(dāng)為TRUE時(shí),如果接收緩沖區(qū)已滿且驅(qū)動(dòng)程序已
	// 傳送XOFF字符,將使驅(qū)動(dòng)程序停止傳輸字符

	PortDCB.fTXContinueOnXoff = FALSE;
	PortDCB.fOutX = FALSE;                      // 設(shè)為TRUE指定XON/XOFF控制被用于控制串行輸出 
	PortDCB.fInX = FALSE;                       // 設(shè)為TRUE指定XON/XOFF控制被用于控制串行輸入 
	PortDCB.fErrorChar = FALSE;                 // WINCE串行驅(qū)動(dòng)程序的默認(rèn)執(zhí)行將忽略這個(gè)字段 
	PortDCB.fNull = FALSE;                      // 設(shè)為TRUE將使串行驅(qū)動(dòng)程序忽略收到的空字節(jié) 
	PortDCB.fRtsControl = RTS_CONTROL_ENABLE;   // 啟用RTS線 
	PortDCB.fAbortOnError = FALSE;              // WINCE串行驅(qū)動(dòng)程序的默認(rèn)執(zhí)行將忽略這個(gè)字段
	PortDCB.ByteSize = 8;                       // 每字節(jié)的位數(shù) 
	PortDCB.Parity = NOPARITY;                  // 無(wú)奇偶校驗(yàn) 
	PortDCB.StopBits = ONESTOPBIT;              // 每字節(jié)一位停止位 

	// 根據(jù)DCB結(jié)構(gòu)配置端口 
	if (!SetCommState(hPort, &PortDCB))
	{
		// 不能配置串行端口
		//MessageBox(NULL, TEXT("Unable to configure the serial port"), 
		//	TEXT("Error"), MB_OK);
		AfxMessageBox(TEXT("Unable to configure the serial port"), 
			MB_OK, MB_ICONERROR);
		dwError = GetLastError();
		return FALSE;
	}
	return TRUE;
}

BOOL CWinCESerialDlg::ClosePort(HANDLE hCommPort)
{
	if (hCommPort != INVALID_HANDLE_VALUE)
	{
		// 設(shè)置連接屬性為FALSE
		m_bConnected = FALSE;

		// 結(jié)束線程中WaitCommEvent的等待
		SetCommMask(hPort, 0);

		// 阻塞至線程停止
		if (hReadThread)
		{
			TerminateThread(hReadThread, 0);
			CloseHandle(hReadThread);
		}

		// 清除端口上指定信號(hào)的狀態(tài)
		EscapeCommFunction(hPort, CLRDTR);
		EscapeCommFunction(hPort, CLRRTS);

		// 清除驅(qū)動(dòng)程序內(nèi)部的發(fā)送和接收隊(duì)列
		PurgeComm(hPort, PURGE_TXCLEAR | PURGE_RXCLEAR);

		// 關(guān)閉串口
		CloseHandle(hCommPort);
		hCommPort = INVALID_HANDLE_VALUE;
		hPort = INVALID_HANDLE_VALUE;

		return TRUE;
	}
	else
	{
		return TRUE;
	}
}

DWORD CWinCESerialDlg::WritePort(TCHAR *buf, DWORD dwCharToWrite)
{
	BOOL fWriteState;
	DWORD dwBytesWritten;

	// 寫入數(shù)據(jù)
	fWriteState = WriteFile(hPort, buf, dwCharToWrite * sizeof(TCHAR), 
		&dwBytesWritten, NULL);
	if (!fWriteState)
	{
		// 不能寫數(shù)據(jù)
		//MessageBox(NULL, TEXT("Can't Write String to Comm"), 
		//	TEXT("Error"), MB_OK);
		AfxMessageBox(TEXT("Can't Write String to Comm"), 
			MB_OK, MB_ICONERROR);
		dwBytesWritten = 0;
	}

	return dwBytesWritten;
}

DWORD WINAPI ReadPortThread(LPVOID lpvoid)
{
	BOOL fReadState;
	DWORD dwCommModemStatus;
	DWORD dwLength;
	COMSTAT ComStat;
	DWORD dwErrorFlags;

	while (hPort != INVALID_HANDLE_VALUE) 
	{
		// 等待串口的事件發(fā)生
		WaitCommEvent(hPort, &dwCommModemStatus, 0);
		if (dwCommModemStatus & EV_RXCHAR) 
		{
			ClearCommError(hPort, &dwErrorFlags, &ComStat);
			// cbInQue返回在串行驅(qū)動(dòng)程序輸入隊(duì)列中的字符數(shù)
			dwLength = ComStat.cbInQue;

			if (dwLength > 0)
			{
				// 從串口讀取數(shù)據(jù)
				TCHAR *buf = new TCHAR[256];
				fReadState = ReadFile(hPort, buf, dwLength, &dwLength, NULL);
				if (!fReadState)
				{
					// 不能從串口讀取數(shù)據(jù)
					MessageBox(NULL, TEXT("Error in read from serial port"), 
						TEXT("Read Error"), MB_OK);
				}
				else
				{
					// 把數(shù)據(jù)賦值給全局變量
					strInChar = buf;
					((CEdit *)lpvoid)->SetSel(-1, -1);      	// 自動(dòng)滾屏
					((CEdit *)lpvoid)->ReplaceSel(strInChar);	// 自動(dòng)換行

					TRACE(_T("read serial data = %s\n"), strInChar);
				}
				delete[] buf;
			} 
		}
		GetCommModemStatus(hPort, &dwCommModemStatus);
	}
	return 0;
}

BOOL CWinCESerialDlg::OpenPort(LPTSTR lpszPortName)
{
	DWORD dwError, dwThreadID;

	if (hPort != INVALID_HANDLE_VALUE)
	{
		return FALSE;
	}

	// 打開(kāi)串口
	if (m_iport=0)
	{
		lpszPortName ==_T("COM1");
	}
	else lpszPortName ==_T("COM2");
	
	hPort = CreateFile(lpszPortName, GENERIC_READ | GENERIC_WRITE, 
		0, NULL, OPEN_EXISTING, 0, NULL);
	if (hPort == INVALID_HANDLE_VALUE) // 如果打開(kāi)端口出錯(cuò), 返回FALSE
	{
		// 不能打開(kāi)端口
		CString strError;
		strError.Format(_T("Unable to open %s, Error No.=%d"), 
			lpszPortName, GetLastError());
		//MessageBox(NULL, strError, TEXT("Error"), MB_OK);
		AfxMessageBox(strError, MB_OK, MB_ICONERROR);
		return FALSE;
	}

	// 指定端口監(jiān)測(cè)的事件集
	SetCommMask(hPort, EV_RXCHAR);

	// 分配設(shè)備緩沖區(qū)
	SetupComm(hPort, 512, 512);

	// 初始化緩沖區(qū)中的信息
	PurgeComm(hPort, PURGE_TXCLEAR | PURGE_RXCLEAR);

	// 配置串行端口
	if (!InitDCB())
		return FALSE;

	// 設(shè)置端口超時(shí)值
	if (!InitCommTimeouts())
		return FALSE;

	// 設(shè)置端口上指定信號(hào)的狀態(tài)
	// SETDTR: 發(fā)送DTR (data-terminal-ready)信號(hào)
	// SETRTS: 發(fā)送RTS (request-to-send)信號(hào)
	EscapeCommFunction(hPort, SETDTR);
	EscapeCommFunction(hPort, SETRTS);

	// 創(chuàng)建一個(gè)從串口讀取數(shù)據(jù)的線程
	if (hReadThread = CreateThread(NULL, 0, ReadPortThread, m_ceReadSerial, 0, &dwThreadID))
	{
	}
	else
	{
		// 不能創(chuàng)建線程
		//MessageBox(NULL, TEXT("Unable to create the read thread"), 
		//	TEXT("Error"), MB_OK);
		AfxMessageBox(TEXT("Unable to create the read thread"), 
			MB_OK, MB_ICONERROR);
		dwError = GetLastError();
		return FALSE;
	}
	m_bConnected = TRUE;
	return TRUE;

//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
	if (m_iport = 0 && hPort != INVALID_HANDLE_VALUE)
	{
		m_com1state == _T("ON");
		m_com2state == _T("OFF");

		if (m_iport == 1 && hPort != INVALID_HANDLE_VALUE)
		{
			m_com1state == _T("OFF");
			m_com2state == _T("ON");
		}
	else 
		m_com1state == _T("OFF");
		m_com2state == _T("OFF");
	}
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

}


void CWinCESerialDlg::OnBnClickedButtonSerialOpen()
{
	// TODO: Add your control notification handler code here
	OpenPort(_T("COM1:"));
}

void CWinCESerialDlg::OnBnClickedButtonSerialWrite()
{
	// TODO: Add your control notification handler code here
		/*
		TCHAR tcBuf[64];
				int len = 0;
				
				wsprintf(tcBuf, _T("Test serial"));
				len = _tcslen(tcBuf);
				TRACE(_T("len = %d.\n"), len);
				
				WritePort(tcBuf, len);*/
	 
		CString strSend = _T(""); 
		m_ceSendserial.GetWindowText(strSend);  //m_SendDataEdit:Edit控件的CEdit對(duì)象 
		WritePort((LPTSTR)(LPCTSTR)strSend,strSend.GetLength());
}

void CWinCESerialDlg::OnBnClickedButtonSerialClose()
{
	// TODO: Add your control notification handler code here
	if (hPort != INVALID_HANDLE_VALUE)
		ClosePort(hPort);
}


void CWinCESerialDlg::OnBnClickedButtonCleanData()
{
	// TODO: Add your control notification handler code here
	//m_ceSendserial = _T("");
	//m_ceReadSerial = _T("");
	//UpdateData(false);

	m_ceSendserial.SetWindowText(_T("")); 
	m_ceReadSerial.SetWindowText(_T(""));
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品456| 亚洲国产人成综合网站| 国产毛片精品一区| 久久色.com| 国产成人精品免费网站| 中文字幕欧美一区| 91九色最新地址| 丝袜亚洲另类欧美综合| 欧美不卡一区二区| 丰满岳乱妇一区二区三区| 亚洲视频你懂的| 欧美日韩一区二区三区不卡| 日韩经典中文字幕一区| 欧美videofree性高清杂交| 国产精品一区二区三区四区| 国产精品私房写真福利视频| 91视频在线观看| 亚洲电影欧美电影有声小说| 日韩精品一区二区三区视频播放| 精品系列免费在线观看| 中文字幕一区二区在线观看| 欧美亚一区二区| 美女精品一区二区| 国产精品国产三级国产a| 在线看日本不卡| 精品一区二区久久久| 中文字幕一区二区三区色视频| 欧美视频完全免费看| 国产一区福利在线| 亚洲图片欧美视频| 国产午夜精品在线观看| 欧美性大战xxxxx久久久| 蜜桃久久久久久| 亚洲美女区一区| 久久久久国产精品麻豆| 精品视频1区2区3区| 国产精品一区在线| 婷婷夜色潮精品综合在线| 国产亚洲欧美一区在线观看| 欧美精品在线视频| 99re亚洲国产精品| 国产一区二区三区久久悠悠色av| 亚洲精品水蜜桃| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲免费在线看| 欧美大肚乱孕交hd孕妇| 91老司机福利 在线| 黑人巨大精品欧美黑白配亚洲| 亚洲欧美激情小说另类| 国产免费成人在线视频| 欧美一区二区美女| 欧美亚洲综合久久| eeuss影院一区二区三区 | 综合久久一区二区三区| 精品电影一区二区三区| 欧美精品一二三| 在线精品视频一区二区三四| 成人aa视频在线观看| 国产精品正在播放| 国产真实乱偷精品视频免| 日本人妖一区二区| 无码av中文一区二区三区桃花岛| 亚洲欧美国产77777| 国产精品嫩草99a| 国产三级三级三级精品8ⅰ区| 这里只有精品电影| 欧美日韩国产bt| 欧美性猛交xxxx黑人交| 色婷婷av一区二区三区大白胸 | 91在线一区二区| 成人h版在线观看| 成人午夜视频福利| 国产福利一区二区三区| 国产在线精品不卡| 国产一区二区精品久久99| 久草中文综合在线| 久久国产视频网| 狠狠狠色丁香婷婷综合激情 | 丁香天五香天堂综合| 国内成人免费视频| 国产一区二区三区免费播放| 国产永久精品大片wwwapp| 国产精品99久| 国产不卡在线视频| 99久久国产综合色|国产精品| 99久久精品国产一区| 色狠狠色噜噜噜综合网| 欧美日韩aaaaa| 欧美一区二区在线播放| 精品少妇一区二区三区日产乱码 | 国产欧美精品国产国产专区 | 亚洲精品一区二区三区福利 | 欧美亚洲丝袜传媒另类| 欧美影院一区二区| 91精品蜜臀在线一区尤物| 欧美精品一区二区三区蜜桃视频| 久久久www成人免费无遮挡大片| 国产精品视频免费看| 亚洲人午夜精品天堂一二香蕉| 亚洲女人****多毛耸耸8| 亚洲国产日日夜夜| 久久国产免费看| 成人av网站在线观看| 日本精品裸体写真集在线观看| 欧美日韩成人在线| ww久久中文字幕| 中文字幕日韩av资源站| 性久久久久久久| 国产成人av在线影院| 在线观看视频91| 26uuu久久综合| 亚洲色图第一区| 卡一卡二国产精品| 成人精品视频.| 欧美日韩不卡一区二区| 欧美国产综合一区二区| 亚洲成人在线观看视频| 国产精品99久久久久| 欧美在线免费观看亚洲| 精品99一区二区三区| 亚洲综合久久久久| 国产一区二区三区高清播放| 欧美影视一区在线| 久久久精品国产免大香伊| 亚洲成人av在线电影| 成人激情电影免费在线观看| 欧美一区二区久久久| 亚洲狼人国产精品| 国产电影精品久久禁18| 91精品国产全国免费观看| 亚洲日本成人在线观看| 国产在线观看免费一区| 欧美肥妇毛茸茸| 一区在线观看免费| 国产一区二区三区综合| 4438x亚洲最大成人网| 国产精品久久久久久久蜜臀| 激情伊人五月天久久综合| 欧美日韩午夜在线视频| 亚洲婷婷在线视频| 韩国女主播成人在线| 欧美夫妻性生活| 一区二区三区.www| av一区二区三区| 国产亚洲成av人在线观看导航| 91麻豆精品国产91久久久资源速度 | 日日夜夜精品视频免费 | 欧美主播一区二区三区美女| 国产日韩精品久久久| 蜜臀av性久久久久蜜臀aⅴ| 欧美中文字幕不卡| 国产精品第13页| 国产传媒一区在线| 精品盗摄一区二区三区| 喷水一区二区三区| 欧美日韩一区二区电影| 一区二区三区日韩精品| 本田岬高潮一区二区三区| 国产午夜精品一区二区三区视频 | 国产精品亚洲第一| www精品美女久久久tv| 蜜臀久久99精品久久久久久9 | 自拍偷拍欧美激情| 成人性生交大片免费看在线播放| 26uuuu精品一区二区| 九九精品视频在线看| 精品国产免费视频| 韩国视频一区二区| 久久久亚洲精品石原莉奈| 国产精品一二三四五| 久久久久久久久久电影| 国产91精品久久久久久久网曝门| 精品成人佐山爱一区二区| 韩国av一区二区| 久久精品视频一区二区三区| 国产精品一区二区三区四区| 日本一区二区成人| 99久久99久久综合| 亚洲最大成人综合| 日韩一区二区在线观看视频 | 国产成人在线电影| 国产精品久久久久久妇女6080 | 亚洲日本va午夜在线影院| 日本伦理一区二区| 五月婷婷激情综合| 日韩午夜精品视频| 丁香六月综合激情| 亚洲精品欧美激情| 5858s免费视频成人| 久久狠狠亚洲综合| 中文字幕中文字幕一区二区 | 免费观看在线综合| 国产欧美日韩久久| 在线一区二区三区做爰视频网站| 亚洲成av人片一区二区| 精品区一区二区| 北岛玲一区二区三区四区| 亚洲国产精品久久一线不卡| 精品国产一区二区在线观看| 成人综合婷婷国产精品久久|