锘??xml version="1.0" encoding="utf-8" standalone="yes"?>青草久久久国产线免观,麻豆成人久久精品二区三区免费,日本高清无卡码一区二区久久http://www.shnenglu.com/Lee7/category/5412.html 褰撳崕緹庣殑鍙剁墖钀藉敖錛岀敓鍛界殑鑴夌粶鎵嶅巻鍘嗗彲瑙併?錛嶏紞 鑱傞瞾杈?
zh-cnTue, 20 May 2008 16:54:42 GMTTue, 20 May 2008 16:54:42 GMT60- 榪炴帴鏈嶅姟嫻佺▼浠g爜http://www.shnenglu.com/Lee7/archive/2008/05/02/48623.htmlisabcisabcFri, 02 May 2008 02:10:00 GMThttp://www.shnenglu.com/Lee7/archive/2008/05/02/48623.htmlhttp://www.shnenglu.com/Lee7/comments/48623.htmlhttp://www.shnenglu.com/Lee7/archive/2008/05/02/48623.html#Feedback0http://www.shnenglu.com/Lee7/comments/commentRss/48623.htmlhttp://www.shnenglu.com/Lee7/services/trackbacks/48623.html闃呰鍏ㄦ枃

]]> - GSM鐭俊鎭儴鍒嗕唬鐮侊紒http://www.shnenglu.com/Lee7/archive/2008/01/15/41186.htmlisabcisabcTue, 15 Jan 2008 07:37:00 GMThttp://www.shnenglu.com/Lee7/archive/2008/01/15/41186.htmlhttp://www.shnenglu.com/Lee7/comments/41186.htmlhttp://www.shnenglu.com/Lee7/archive/2008/01/15/41186.html#Feedback0http://www.shnenglu.com/Lee7/comments/commentRss/41186.htmlhttp://www.shnenglu.com/Lee7/services/trackbacks/41186.html闃呰鍏ㄦ枃

]]> - 綆鍗曞皝瑁呯殑涓插彛閫氫俊綾?/title>http://www.shnenglu.com/Lee7/archive/2008/01/07/40644.htmlisabcisabcMon, 07 Jan 2008 13:11:00 GMThttp://www.shnenglu.com/Lee7/archive/2008/01/07/40644.htmlhttp://www.shnenglu.com/Lee7/comments/40644.htmlhttp://www.shnenglu.com/Lee7/archive/2008/01/07/40644.html#Feedback3http://www.shnenglu.com/Lee7/comments/commentRss/40644.htmlhttp://www.shnenglu.com/Lee7/services/trackbacks/40644.html#include "stdafx.h"
#include "SerialPort.h"
#include "assert.h"
CSerialPort::CSerialPort()
{
memset(&m_OverlappedRead, 0, sizeof(m_OverlappedRead));
memset(&m_OverlappedWrite, 0, sizeof(m_OverlappedWrite));
m_bOpened = false;
m_ReadComThread = NULL;
m_hIDCom = NULL;
m_dwReadLen = 0;
}
CSerialPort::~CSerialPort()
{
}
BOOL CSerialPort::OpenPort(UINT nPort, UINT nBaud)
{
ASSERT(nPort > 0 && nPort < 5);
if(m_bOpened)
return true;
TCHAR szPort[15];
TCHAR szComParams[50];
DCB dcb;
wsprintf(szPort, _T("COM%d"), nPort);
m_hIDCom = ::CreateFile(szPort,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL);
if(m_hIDCom == NULL)
return false;
memset(&m_OverlappedRead, 0, sizeof(OVERLAPPED));
memset(&m_OverlappedWrite, 0, sizeof(OVERLAPPED));
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 5000;
::SetCommTimeouts(m_hIDCom, &CommTimeOuts);
wsprintf(szComParams, _T("COM%d:%d,N,8,1"), nPort, nBaud);
m_OverlappedRead.Offset = 0;
m_OverlappedRead.OffsetHigh = 0;
m_OverlappedRead.hEvent = ::CreateEvent(NULL, true, false, NULL);
m_OverlappedWrite.Offset = 0;
m_OverlappedWrite.OffsetHigh = 0;
m_OverlappedWrite.hEvent = ::CreateEvent(NULL, true, false, NULL);
dcb.DCBlength = sizeof(DCB);
::GetCommState(m_hIDCom, &dcb);
dcb.BaudRate = nBaud;
dcb.ByteSize = 8;
dcb.Parity = 0;
if(!SetCommState(m_hIDCom, &dcb) || !SetupComm(m_hIDCom, 4096, 4096) ||
m_OverlappedRead.hEvent == NULL || m_OverlappedWrite.hEvent == NULL)
{
DWORD dwError = ::GetLastError();
if(m_OverlappedRead.hEvent != NULL)
::CloseHandle(m_OverlappedRead.hEvent);
if(m_OverlappedWrite.hEvent != NULL)
::CloseHandle(m_OverlappedWrite.hEvent);
::CloseHandle(m_hIDCom);
return false;
}
::SetCommMask(m_hIDCom, EV_RXCHAR);
::PurgeComm(m_hIDCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
::EscapeCommFunction(m_hIDCom, SETDTR);
m_bOpened =true;
m_bExitThread =false;
StartMonitoring();
return m_bOpened;
}
BOOL CSerialPort::Close()
{
if(!m_bOpened || m_hIDCom == NULL)
return true;
m_bExitThread = true;
::SetCommMask(m_hIDCom, 0);
StopMonitoring();
if(m_OverlappedRead.hEvent != NULL)
::CloseHandle(m_OverlappedRead.hEvent);
if(m_OverlappedWrite.hEvent != NULL)
::CloseHandle(m_OverlappedWrite.hEvent);
::CloseHandle(m_hIDCom);
m_bOpened = false;
m_hIDCom = NULL;
return true;
}
//鍚戜覆鍙e啓鏁版嵁
void CSerialPort::WriteToPort(BYTE *Byte, int Len)
{
if(!m_bOpened || m_hIDCom == NULL)
return;
BOOL bWriteStat;
DWORD dwBytesWritten;
ClearReadBuf();
bWriteStat = ::WriteFile(m_hIDCom, Byte, Len, &dwBytesWritten, &m_OverlappedWrite);
if(!bWriteStat && (::GetLastError() == ERROR_IO_PENDING))
{
//WaitForSingleObject鍑芥暟鐢ㄦ潵媯(gè)嫻媓Handle浜嬩歡鐨勪俊鍙風(fēng)姸鎬侊紝褰撳嚱鏁扮殑鎵ц鏃墮棿瓚呰繃dwMilliseconds灝?br> //榪斿洖錛屼絾濡傛灉鍙傛暟dwMilliseconds涓篒NFINITE鏃跺嚱鏁板皢鐩村埌鐩稿簲鏃墮棿浜嬩歡鍙樻垚鏈変俊鍙風(fēng)姸鎬佹墠榪斿洖錛?br> //鍚﹀垯灝變竴鐩寸瓑寰呬笅鍘伙紝鐩村埌WaitForSingleObject鏈夎繑鍥炵洿鎵嶆墽琛屽悗闈㈢殑浠g爜銆?/span>
DWORD dw = ::WaitForSingleObject(m_OverlappedWrite.hEvent, INFINITE );
if(dw == WAIT_TIMEOUT)
{
dwBytesWritten = 0;
DCB dcb;
::GetCommState(m_hIDCom, &dcb);
::PurgeComm(m_hIDCom, PURGE_TXCLEAR);
return;
}
else
{
::GetOverlappedResult(m_hIDCom, &m_OverlappedWrite, &dwBytesWritten, false);//絳夊緟鏈嶅姟鍣ㄥ畬鎴怚O鎿嶄綔
m_OverlappedWrite.Offset += dwBytesWritten;
}
}
return ;
}
//浠庝覆鍙h鍙栨暟鎹?/span>
int CSerialPort::ReadFromPort(BYTE *lpszBlock, int nRLen)
{
if(!m_bOpened || m_hIDCom == NULL)
return 0;
BOOL bReadStat;
DWORD dwBytesRead, dwErrorFlags;
COMSTAT ComStat;
::ClearCommError(m_hIDCom, &dwErrorFlags, &ComStat);
if(!ComStat.cbInQue)
return 0;
dwBytesRead = (DWORD) ComStat.cbInQue;
if(nRLen < (int)dwBytesRead)
dwBytesRead = (DWORD) nRLen;
bReadStat = ::ReadFile(m_hIDCom, lpszBlock, dwBytesRead, &dwBytesRead, &m_OverlappedRead);
if(!bReadStat)
{
if(::GetLastError() == ERROR_IO_PENDING)
{
::WaitForSingleObject(m_OverlappedRead.hEvent, INFINITE);
return (int)dwBytesRead;
}
return 0;
}
return (int)dwBytesRead;
}
UINT CSerialPort::CommThread(LPVOID pParam)
{
CSerialPort* pSerialPort = (CSerialPort*)pParam;
BYTE Buffer[4096];
DWORD dwEvent, dwError;
COMSTAT ComStat;
int ReadLen = 0;
memset(pSerialPort->m_ReadBuf, '\0', sizeof(pSerialPort->m_ReadBuf));
::SetCommMask(pSerialPort->m_hIDCom, EV_RXCHAR);
while(!pSerialPort->m_bExitThread)
{
memset(Buffer, '\0', 4096);
::WaitCommEvent(pSerialPort->m_hIDCom, &dwEvent, NULL);
::ClearCommError(pSerialPort->m_hIDCom, &dwError, &ComStat);
if((dwEvent & EV_RXCHAR) && ComStat.cbInQue)
{
pSerialPort->m_dwReadLen = pSerialPort->ReadFromPort(Buffer,4096);
pSerialPort->m_dwReadLen = ReadLen >4096 ? 4096 : ReadLen;
if(pSerialPort->m_dwReadLen > 0)
{
memcpy(pSerialPort->m_ReadBuf, Buffer,pSerialPort->m_dwReadLen);
}
}
::PurgeComm(pSerialPort->m_hIDCom, PURGE_RXCLEAR);
}
return 0;
}
BOOL CSerialPort::StartMonitoring()
{
if(m_ReadComThread == NULL)
{
if(!(m_ReadComThread = ::AfxBeginThread(CommThread, this)))
return false;
}
return true;
}
BOOL CSerialPort::StopMonitoring()
{
if(m_ReadComThread != NULL)
{
::TerminateThread(m_ReadComThread->m_hThread, 0); //緇堢粨綰跨▼
m_ReadComThread = NULL;
}
return true;
}
void CSerialPort::ClearReadBuf()
{
memset(m_ReadBuf, '\0', sizeof(m_ReadBuf));
m_dwReadLen = 0;
}

]]>
久久亚洲国产成人精品性色|
99久久精品久久久久久清纯|
免费一级欧美大片久久网|
久久精品国产99久久香蕉|
久久九九久精品国产免费直播|
性做久久久久久久久|
久久久久av无码免费网|
精品午夜久久福利大片|
精品久久久中文字幕人妻|
国产高潮国产高潮久久久|
中文字幕无码久久人妻|
91久久精品91久久性色|
亚洲人成电影网站久久|
久久99免费视频|
亚洲日韩中文无码久久|
88久久精品无码一区二区毛片|
伊人久久大香线蕉综合热线|
青青青国产精品国产精品久久久久
|
伊人久久精品无码av一区|
国产精品一区二区久久|
亚洲色大成网站WWW久久九九|
97久久精品人人澡人人爽|
久久精品国产亚洲av麻豆小说
|
精品国产91久久久久久久|
国产成人无码精品久久久性色
|
久久久无码人妻精品无码|
亚洲欧美一级久久精品|
伊人久久综合热线大杳蕉下载|
亚洲中文字幕伊人久久无码|
草草久久久无码国产专区|
潮喷大喷水系列无码久久精品
|
亚洲精品美女久久777777|
久久青青草原精品国产软件|
伊人热人久久中文字幕|
久久成人影院精品777|
国产69精品久久久久777|
久久亚洲精品成人av无码网站|
久久婷婷五月综合国产尤物app|
久久人人爽人人人人片av|
亚洲日韩中文无码久久|
久久精品www人人爽人人|