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

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

?? serialport.cpp

?? 串口通信mfc源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

  DWORD dwBytesWritten = 0;
  BOOL bSuccess = WriteFile(m_hComm, lpBuf, dwCount, &dwBytesWritten, &overlapped);
  if (!bSuccess)
  {
    if (GetLastError() != ERROR_IO_PENDING)
    {
      TRACE(_T("CSerialPort::Write, Failed in call to WriteFile\n"));
      ThrowSerialException();
    }
  }
  else
  {
    if (pBytesWritten)
      *pBytesWritten = dwBytesWritten;
  }

  return bSuccess;
}

void CSerialPort::GetOverlappedResult(OVERLAPPED& overlapped, DWORD& dwBytesTransferred, BOOL bWait)
{
  ASSERT(IsOpen());

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

void CSerialPort::_OnCompletion(DWORD dwErrorCode, DWORD dwCount, LPOVERLAPPED lpOverlapped)
{
  //Validate our parameters
  ASSERT(lpOverlapped);

  //Convert back to the C++ world
  CSerialPort* pSerialPort = static_cast<CSerialPort*>(lpOverlapped->hEvent);
  ASSERT(pSerialPort);

  //Call the C++ function
  pSerialPort->OnCompletion(dwErrorCode, dwCount, lpOverlapped);
}

void CSerialPort::OnCompletion(DWORD /*dwErrorCode*/, DWORD /*dwCount*/, LPOVERLAPPED lpOverlapped)
{
  //Just free the memory which was previously allocated for the OVERLAPPED structure
	try
	{
		delete lpOverlapped;
	}
	catch (...)
	{
		
	}
  

  //Your derived classes can do something useful in OnCompletion, but don't forget to
  //call CSerialPort::OnCompletion to ensure the memory is freed
}

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

  if (m_lpfnCancelIo == NULL)
  {
    TRACE(_T("CSerialPort::CancelIo, CancelIo function is not supported on this OS. You need to be running at least NT 4 or Win 98 to use this function\n"));
    ThrowSerialException(ERROR_CALL_NOT_IMPLEMENTED);  
  }

  if (!m_lpfnCancelIo(m_hComm))
  {
    TRACE(_T("Failed in call to CancelIO\n"));
    ThrowSerialException();
  }
}

DWORD CSerialPort::BytesWaiting()
{
  ASSERT(IsOpen());

  //Check to see how many characters are unread
  COMSTAT stat;
  GetStatus(stat);
  return stat.cbInQue;
}

BOOL CSerialPort::DataWaiting(DWORD dwTimeout)
{
  ASSERT(IsOpen());

  //Setup to wait for incoming data
  DWORD dwOldMask;
  GetMask(dwOldMask);
  SetMask(EV_RXCHAR);

  //Setup the overlapped structure
  OVERLAPPED o;
  o.hEvent = m_hEvent;

  //Assume the worst;
  BOOL bSuccess = FALSE;

  DWORD dwEvent;
  bSuccess = WaitEvent(dwEvent, o);
  if (!bSuccess)
  {
    if (WaitForSingleObject(o.hEvent, dwTimeout) == WAIT_OBJECT_0)
    {
      DWORD dwBytesTransferred;
      GetOverlappedResult(o, dwBytesTransferred, FALSE);
      bSuccess = TRUE;
    }
  }

  //Reset the event mask
  SetMask(dwOldMask);

  return bSuccess;
}

void CSerialPort::WriteEx(const void* lpBuf, DWORD dwCount)
{
  ASSERT(IsOpen());

  OVERLAPPED* pOverlapped = new OVERLAPPED;
  ZeroMemory(pOverlapped, sizeof(OVERLAPPED));
  pOverlapped->hEvent = static_cast<HANDLE>(this);
  if (!WriteFileEx(m_hComm, lpBuf, dwCount, pOverlapped, _OnCompletion))
  {
    delete pOverlapped;
    TRACE(_T("CSerialPort::WriteEx, Failed in call to WriteFileEx\n"));
    ThrowSerialException();
  }
}


void CSerialPort::ReadEx(void* lpBuf, DWORD dwCount)
{
  ASSERT(IsOpen());

  OVERLAPPED* pOverlapped = new OVERLAPPED;
  ZeroMemory(pOverlapped, sizeof(OVERLAPPED));
  pOverlapped->hEvent = static_cast<HANDLE>(this);
  if (!ReadFileEx(m_hComm, lpBuf, dwCount, pOverlapped, _OnCompletion))
  {
    delete pOverlapped;
    TRACE(_T("CSerialPort::ReadEx, Failed in call to ReadFileEx\n"));
    ThrowSerialException();
  }
}

void CSerialPort::TransmitChar(char cChar)
{
  ASSERT(IsOpen());

  if (!TransmitCommChar(m_hComm, cChar))
  {
    TRACE(_T("CSerialPort::TransmitChar, Failed in call to TransmitCommChar\n"));
    ThrowSerialException();
  }
}

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

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

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

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

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

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

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

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

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

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

void CSerialPort::GetDefaultConfig(int nPort, COMMCONFIG& config)
{
  //Validate our parameters
  ASSERT(nPort>0 && nPort<=255);

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

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

void CSerialPort::SetDefaultConfig(int nPort, COMMCONFIG& config)
{
  //Validate our parameters
  ASSERT(nPort>0 && nPort<=255);

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

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

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

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

void CSerialPort::GetState(DCB& dcb)
{
  ASSERT(IsOpen());

  if (!GetCommState(m_hComm, &dcb))
  {
    TRACE(_T("CSerialPort::GetState, Failed in call to GetCommState\n"));
    ThrowSerialException();
  }
}

void CSerialPort::SetState(DCB& dcb)
{
  ASSERT(IsOpen());

  if (!SetCommState(m_hComm, &dcb))
  {
    TRACE(_T("CSerialPort::SetState, Failed in call to SetCommState\n"));
    ThrowSerialException();
  }
}

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

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

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

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

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

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

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

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

void CSerialPort::GetProperties(COMMPROP& properties)
{
  ASSERT(IsOpen());

  if (!GetCommProperties(m_hComm, &properties))
  {
    TRACE(_T("CSerialPort::GetProperties, Failed in call to GetCommProperties\n"));
    ThrowSerialException();
  }
}

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

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

void CSerialPort::SetMask(DWORD dwMask)
{
  ASSERT(IsOpen());

  if (!SetCommMask(m_hComm, dwMask))
  {
    TRACE(_T("CSerialPort::SetMask, Failed in call to SetCommMask\n"));
    ThrowSerialException();
  }
}

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

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

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

  if (!FlushFileBuffers(m_hComm))
  {
    TRACE(_T("CSerialPort::Flush, Failed in call to FlushFileBuffers\n"));
    ThrowSerialException();
  }
}

void CSerialPort::Purge(DWORD dwFlags)
{
  ASSERT(IsOpen());

  if (!PurgeComm(m_hComm, dwFlags))
  {
    TRACE(_T("CSerialPort::Purge, Failed in call to PurgeComm\n"));
    ThrowSerialException();
  }
}

void CSerialPort::TerminateOutstandingWrites()
{
  Purge(PURGE_TXABORT);
}

void CSerialPort::TerminateOutstandingReads()
{
  Purge(PURGE_RXABORT);
}

void CSerialPort::ClearWriteBuffer()
{
  Purge(PURGE_TXCLEAR);
}

void CSerialPort::ClearReadBuffer()
{
  Purge(PURGE_RXCLEAR);
}

void CSerialPort::Setup(DWORD dwInQueue, DWORD dwOutQueue)
{
  ASSERT(IsOpen());

  if (!SetupComm(m_hComm, dwInQueue, dwOutQueue))
  {
    TRACE(_T("CSerialPort::Setup, Failed in call to SetupComm\n"));
    ThrowSerialException();
  }
}

void CSerialPort::SetTimeouts(COMMTIMEOUTS& timeouts)
{
  ASSERT(IsOpen());

  if (!SetCommTimeouts(m_hComm, &timeouts))
  {
    TRACE(_T("CSerialPort::SetTimeouts, Failed in call to SetCommTimeouts\n"));
    ThrowSerialException();
  }
}

void CSerialPort::GetTimeouts(COMMTIMEOUTS& timeouts)
{
  ASSERT(IsOpen());

  if (!GetCommTimeouts(m_hComm, &timeouts))
  {
    TRACE(_T("CSerialPort::GetTimeouts, Failed in call to GetCommTimeouts\n"));
    ThrowSerialException();
  }
}

void CSerialPort::Set0Timeout()
{
  COMMTIMEOUTS Timeouts;
  ZeroMemory(&Timeouts, sizeof(COMMTIMEOUTS));
  Timeouts.ReadIntervalTimeout = MAXDWORD;
  SetTimeouts(Timeouts);
}

void CSerialPort::Set0WriteTimeout()
{
  COMMTIMEOUTS Timeouts;
  GetTimeouts(Timeouts);
  Timeouts.WriteTotalTimeoutMultiplier = 0;
  Timeouts.WriteTotalTimeoutConstant = 0;
  SetTimeouts(Timeouts);
}

void CSerialPort::Set0ReadTimeout()
{
  COMMTIMEOUTS Timeouts;
  GetTimeouts(Timeouts);
  Timeouts.ReadIntervalTimeout = MAXDWORD;
  Timeouts.ReadTotalTimeoutMultiplier = 0;
  Timeouts.ReadTotalTimeoutConstant = 0;
  SetTimeouts(Timeouts);
}

void CSerialPort::WaitEvent(DWORD& dwMask)
{
  ASSERT(IsOpen());

  if (!WaitCommEvent(m_hComm, &dwMask, NULL))
  {
    TRACE(_T("CSerialPort::WaitEvent, Failed in call to WaitCommEvent\n"));
    ThrowSerialException();
  }
}

BOOL CSerialPort::WaitEvent(DWORD& dwMask, OVERLAPPED& overlapped)
{
  ASSERT(IsOpen());
  ASSERT(overlapped.hEvent);

  BOOL bSuccess = WaitCommEvent(m_hComm, &dwMask, &overlapped);
  if (!bSuccess)
  {
    if (GetLastError() != ERROR_IO_PENDING)
    {
      TRACE(_T("CSerialPort::WaitEvent, Failed in call to WaitCommEvent\n"));
      ThrowSerialException();
    }
  }

  return bSuccess;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产视频在线| 精品国偷自产国产一区| 亚洲色图都市小说| 91免费看片在线观看| 国产精品女主播在线观看| 国产不卡视频一区二区三区| 最新热久久免费视频| 在线亚洲欧美专区二区| 丝袜亚洲另类欧美| 精品国产乱码久久久久久蜜臀| 国产精品资源在线| 亚洲欧美日韩中文字幕一区二区三区| 欧美专区亚洲专区| 老司机精品视频线观看86 | 日本电影欧美片| 亚洲成人www| 久久伊人蜜桃av一区二区| 99国产精品99久久久久久| 亚瑟在线精品视频| 久久久久久影视| 色哟哟精品一区| 久久国产乱子精品免费女| 国产精品初高中害羞小美女文| 欧美日韩免费一区二区三区视频| 久久精品噜噜噜成人av农村| 日韩美女久久久| 日韩精品一区二区三区在线播放| 国产高清不卡一区二区| 香蕉影视欧美成人| 久久精品夜色噜噜亚洲aⅴ| 日本高清无吗v一区| 激情综合色综合久久| 亚洲综合在线电影| 久久品道一品道久久精品| 91福利在线观看| 国产精选一区二区三区| 亚洲欧美电影院| 国产亚洲综合av| 91超碰这里只有精品国产| 成人国产视频在线观看| 久久不见久久见免费视频7 | 国产中文字幕一区| 亚洲成人自拍网| 国产精品美女久久久久久2018| 91精品国产综合久久香蕉麻豆| 成人动漫一区二区在线| 黄网站免费久久| 亚洲成人激情社区| 亚洲精品视频在线| 国产精品无遮挡| 久久在线观看免费| 日韩精品一区二区三区蜜臀| 欧美日韩一区久久| 91麻豆免费看片| 成人app软件下载大全免费| 国产综合色在线视频区| 日韩av网站免费在线| 亚洲永久免费av| 亚洲日本护士毛茸茸| 国产精品乱码一区二区三区软件| 日韩美女主播在线视频一区二区三区| 欧美综合在线视频| 91在线观看污| 不卡av在线免费观看| 成人免费黄色大片| 粉嫩av一区二区三区粉嫩| 国产一区二区视频在线| 精品一区二区三区在线播放| 日本午夜精品视频在线观看| 亚洲r级在线视频| 亚洲国产视频一区二区| 亚洲午夜视频在线观看| 一区二区三区中文字幕在线观看| 国产精品久久国产精麻豆99网站| 欧美国产精品一区| 日本一区二区三区免费乱视频| 国产欧美一区二区精品性| 久久九九全国免费| 国产精品久久久久影视| 中文一区二区在线观看| 国产精品国产自产拍高清av | 亚洲欧美福利一区二区| 一区二区在线免费观看| 亚洲精品ww久久久久久p站| 一区二区三区四区视频精品免费 | 天天影视网天天综合色在线播放| 亚洲电影一区二区| 日韩精品免费视频人成| 日本网站在线观看一区二区三区 | 欧美视频一区在线| 欧美精品国产精品| 欧美精品一区二区三区高清aⅴ| 欧美不卡激情三级在线观看| 久久久一区二区三区捆绑**| 国产喂奶挤奶一区二区三区| 亚洲欧洲日韩av| 亚洲国产日韩综合久久精品| 美女一区二区三区| 国产不卡视频在线观看| 色88888久久久久久影院按摩| 欧美日韩国产免费一区二区| 欧美一区二区在线免费观看| 精品国产一区二区在线观看| 国产精品久久久久久久久搜平片 | 91免费版在线看| 91精品国产欧美日韩| 欧美精品一区视频| 亚洲免费在线播放| 日本伊人色综合网| 丁香激情综合国产| 欧美日韩国产中文| 国产亚洲欧美日韩俺去了| 亚洲精品欧美激情| 国内精品免费**视频| 91在线看国产| 欧美成人a∨高清免费观看| 中文字幕一区二区三区在线观看| 午夜亚洲国产au精品一区二区| 精品一区二区三区视频在线观看| 99久久久无码国产精品| 91精品国产综合久久精品性色| 国产亚洲视频系列| 亚洲午夜久久久久久久久电影网| 久久国产精品色| 91国偷自产一区二区使用方法| 欧美精品一区二区三区久久久| 亚洲黄色小说网站| 国产精品影视在线| 欧美一级理论片| 亚洲裸体在线观看| 国产精品一区二区男女羞羞无遮挡| 欧洲av在线精品| 国产精品伦理一区二区| 黑人巨大精品欧美一区| 欧美少妇一区二区| 亚洲视频电影在线| 国产精品亚洲一区二区三区在线| 欧美色成人综合| 最近日韩中文字幕| 国产成人鲁色资源国产91色综| 91精品国产91久久综合桃花| 玉米视频成人免费看| 成人涩涩免费视频| 精品国产三级电影在线观看| 亚洲第一主播视频| 欧美亚洲国产一区二区三区 | 一区二区三区四区蜜桃| 成人网页在线观看| 久久精品免视看| 国产一区二三区好的| 精品区一区二区| 久久 天天综合| 日韩欧美一区在线| 午夜精品久久久久久| 欧美亚州韩日在线看免费版国语版| 国产精品高潮呻吟久久| 国产成人综合在线观看| 久久久九九九九| 国产精品自在欧美一区| 久久色在线观看| 精品一区二区三区视频| 日韩免费视频一区| 免费成人av在线| 欧美成人vr18sexvr| 麻豆传媒一区二区三区| 日韩一区二区精品葵司在线 | 国产一区二区三区久久久 | 五月婷婷激情综合网| 91国产免费看| 亚洲无线码一区二区三区| 欧美日韩亚洲另类| 亚洲国产成人高清精品| 久久日一线二线三线suv| 全国精品久久少妇| 日韩欧美一区二区久久婷婷| 亚洲美女视频一区| 99久久精品免费| 亚洲精品国产成人久久av盗摄 | 亚洲国产成人午夜在线一区| 国产成人无遮挡在线视频| 中文字幕av免费专区久久| 不卡一二三区首页| 亚洲综合一区二区三区| 欧美日本在线看| 精品一区二区三区免费视频| 国产色一区二区| 97久久人人超碰| 天天爽夜夜爽夜夜爽精品视频| 日韩欧美一级片| 成人h动漫精品一区二| 亚洲老司机在线| 7878成人国产在线观看| 国产一区二区三区在线观看免费| 亚洲国产精品成人久久综合一区| 91麻豆视频网站| 美国三级日本三级久久99| 欧美国产亚洲另类动漫| 欧美性猛交xxxx乱大交退制版| 麻豆专区一区二区三区四区五区| 国产日韩欧美综合在线|