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

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

?? serialport.cpp

?? 串口的基本通訊
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
      AfxThrowSerialException();
    }
  }
}

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

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

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

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

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

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

  if (_SerialPortData.m_lpfnCancelIo == NULL)
  {
    TRACE(_T("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"));
    AfxThrowSerialException(ERROR_CALL_NOT_IMPLEMENTED);  
  }

  if (!::_SerialPortData.m_lpfnCancelIo(m_hComm))
  {
    TRACE(_T("Failed in call to CancelIO\n"));
    AfxThrowSerialException();
  }
}

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 = (HANDLE) this;
  if (!WriteFileEx(m_hComm, lpBuf, dwCount, pOverlapped, _OnCompletion))
  {
    delete pOverlapped;
    TRACE(_T("Failed in call to WriteFileEx\n"));
    AfxThrowSerialException();
  }
}

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

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

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

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

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"));
    AfxThrowSerialException();
  }
}

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"));
    AfxThrowSerialException();
  }
}

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

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

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

  if (!ClearCommBreak(m_hComm))
  {
    TRACE(_T("Failed in call to SetCommBreak\n"));
    AfxThrowSerialException();
  }
}

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

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

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("Failed in call to GetDefaultCommConfig\n"));
    AfxThrowSerialException();
  }
}

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("Failed in call to GetDefaultCommConfig\n"));
    AfxThrowSerialException();
  }
}

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

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

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

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

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

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

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

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

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("Failed in call to GetCommProperties\n"));
    AfxThrowSerialException();
  }
}

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

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

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

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

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

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

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

  if (!FlushFileBuffers(m_hComm))
  {
    TRACE(_T("Failed in call to FlushFileBuffers\n"));
    AfxThrowSerialException();
  }
}

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

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

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("Failed in call to SetupComm\n"));
    AfxThrowSerialException();
  }
}

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

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

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

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

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());
  ASSERT(!m_bOverlapped);

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

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

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

  return bSuccess;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合久久综合久久| 国产情人综合久久777777| 亚洲日本成人在线观看| 成人午夜激情片| 亚洲日韩欧美一区二区在线| 91网站在线播放| 亚洲成va人在线观看| 在线综合亚洲欧美在线视频| 精品亚洲成av人在线观看| 久久精品人人爽人人爽| 成人国产一区二区三区精品| 亚洲精品菠萝久久久久久久| 欧美久久久一区| 国产综合久久久久影院| 中文字幕亚洲区| 欧美日产在线观看| 极品美女销魂一区二区三区| 中文一区二区完整视频在线观看| 91麻豆国产自产在线观看| 日韩不卡一二三区| 久久精品欧美一区二区三区不卡| jizz一区二区| 午夜精品久久久久久久久| 久久亚洲综合色| 日本韩国欧美一区二区三区| 日韩电影在线免费看| 国产欧美日本一区二区三区| 欧洲国产伦久久久久久久| 精品一区二区免费视频| 亚洲欧美区自拍先锋| 日韩三级中文字幕| 91丨porny丨首页| 美国毛片一区二区| 亚洲美女免费在线| 2017欧美狠狠色| 欧美亚日韩国产aⅴ精品中极品| 麻豆一区二区三| 亚洲精品免费在线观看| 精品国产乱码久久久久久免费 | 欧美日本一区二区在线观看| 国产一区视频导航| 亚洲一区在线视频| 亚洲狼人国产精品| 日韩美一区二区三区| 91在线国产福利| 国产精品资源在线观看| 亚洲成人动漫精品| 亚洲视频一二三| 国产午夜精品一区二区三区视频 | 国产成人av影院| 日韩av一二三| 一区二区成人在线| 国产精品动漫网站| 久久伊人中文字幕| 欧美一区二区三区在线看| 色偷偷一区二区三区| 国产成人免费xxxxxxxx| 麻豆精品在线播放| 日韩高清在线一区| 亚洲与欧洲av电影| 亚洲天堂精品在线观看| 国产拍揄自揄精品视频麻豆| 欧美v日韩v国产v| 91精品国产色综合久久不卡蜜臀 | 亚洲国产成人在线| 久久这里只有精品6| 日韩精品在线一区二区| 88在线观看91蜜桃国自产| 欧美日韩一本到| 色婷婷av一区二区三区软件| 色综合久久久久综合体| 色狠狠av一区二区三区| 94-欧美-setu| 91在线视频免费91| 91在线播放网址| 色婷婷久久久亚洲一区二区三区| 不卡一区在线观看| www.欧美日韩国产在线| 成人精品免费视频| 99久久综合国产精品| 成人免费精品视频| eeuss鲁片一区二区三区| 成人av资源在线| 色综合久久66| 欧美午夜片在线看| 9191久久久久久久久久久| 日韩午夜激情免费电影| 亚洲精品一区二区三区福利| 2021国产精品久久精品| 欧美激情资源网| 日韩久久一区二区| 亚洲国产人成综合网站| 日本免费在线视频不卡一不卡二| 另类小说欧美激情| 岛国精品在线观看| 91蝌蚪国产九色| 欧美二区三区91| 精品国产91乱码一区二区三区| 久久亚洲影视婷婷| 亚洲色图20p| 秋霞电影一区二区| 丁香一区二区三区| 在线视频国内自拍亚洲视频| 91麻豆精品国产| 久久精品一区八戒影视| 曰韩精品一区二区| 毛片av一区二区三区| 成人av中文字幕| 欧美精品乱码久久久久久 | 国产人伦精品一区二区| 亚洲精品久久7777| 免费观看在线综合色| 成人精品在线视频观看| 欧美综合一区二区三区| 亚洲精品一区二区三区香蕉| 日韩理论片网站| 蜜桃视频一区二区三区在线观看| 国产成人超碰人人澡人人澡| 欧美日韩三级视频| 国产亚洲一区二区在线观看| 一区二区三区四区不卡在线| 韩国午夜理伦三级不卡影院| 色综合久久久久综合体| 久久亚洲欧美国产精品乐播 | 亚洲成人一区在线| 国产美女在线精品| 欧美日韩视频第一区| 国产精品三级在线观看| 男女男精品网站| 一本一本大道香蕉久在线精品 | av在线综合网| 日韩免费视频一区| 亚洲精品五月天| 国产精品性做久久久久久| 欧美另类videos死尸| 亚洲三级视频在线观看| 国产在线播精品第三| 欧美日韩国产精品自在自线| 亚洲色图欧美偷拍| 国产二区国产一区在线观看| 91精品福利在线一区二区三区 | 日韩色视频在线观看| 亚洲精品美腿丝袜| 成人性生交大片免费看中文网站| 制服.丝袜.亚洲.另类.中文| 艳妇臀荡乳欲伦亚洲一区| 成人国产精品视频| 国产日韩欧美亚洲| 精品一区二区日韩| 日韩欧美国产综合| 日本免费在线视频不卡一不卡二| 91极品视觉盛宴| 亚洲日本一区二区| 成人国产免费视频| 中文成人av在线| 成人免费视频一区二区| 国产亚洲成av人在线观看导航| 久草这里只有精品视频| 欧美一级日韩一级| 日韩激情av在线| 欧美一区二区三区不卡| 日本特黄久久久高潮 | 欧美精品久久99| 亚洲成人av福利| 欧美性大战久久久久久久蜜臀| 亚洲欧美经典视频| 91一区二区三区在线观看| 中文字幕亚洲一区二区va在线| 丁香婷婷深情五月亚洲| 日本一区二区成人| aaa欧美色吧激情视频| 亚洲欧洲av一区二区三区久久| 99视频超级精品| 亚洲免费av高清| 欧美日韩视频专区在线播放| 亚洲成人免费在线| 欧美一区二区在线看| 乱中年女人伦av一区二区| 日韩一级黄色大片| 国产一区二区三区四| 国产精品素人视频| 91网站最新地址| 午夜精品在线视频一区| 日韩一区二区高清| 国产精品亚洲综合一区在线观看| 国产精品乱码久久久久久| 91天堂素人约啪| 婷婷成人综合网| 欧美精品一区二区三区蜜臀| 国产成人久久精品77777最新版本| 国产精品久久久久久亚洲毛片 | 成人精品国产福利| 亚洲免费观看高清完整| 欧美日韩高清一区二区三区| 久久国产欧美日韩精品| 国产视频一区二区在线| 在线观看区一区二| 久久激五月天综合精品| 国产精品久久三| 欧美日产在线观看|