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

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

?? serialport.cpp

?? 非常好用的VC++源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
    }
  }
  else
  {
    if (pBytesWritten)
      *pBytesWritten = dwBytesWritten;
  }

  return bSuccess;
}

bool CSerialPort::GetOverlappedResult(OVERLAPPED& overlapped, DWORD& dwBytesTransferred, BOOL bWait)
{
  ASSERT(IsOpen());
  ASSERT(m_bOverlapped);
  BOOL bSuccess = ::GetOverlappedResult(m_hComm, &overlapped, &dwBytesTransferred, bWait);
  if (!bSuccess)
  {
    if (GetLastError() != ERROR_IO_PENDING)
    {
      TRACE(_T("Failed in call to GetOverlappedResult\n"));
      AfxThrowSerialException();
    }
  }

  return bSuccess;
}

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());
  ASSERT(m_hEvent);
  //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);
}

bool CSerialPort::WaitEvent(DWORD& dwMask)
{
  ASSERT(IsOpen());
  ASSERT(!m_bOverlapped);

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

}

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;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品人人做人人爽人人添| 国产精品中文有码| 国产精品全国免费观看高清| 亚洲欧美日韩精品久久久久| 国产尤物一区二区在线| 精品av综合导航| 亚洲精品一区在线观看| 国产自产高清不卡| 久久九九久精品国产免费直播| 丁香婷婷综合五月| 亚洲欧洲韩国日本视频| 色呦呦国产精品| 爽好多水快深点欧美视频| 日韩视频123| 高清成人在线观看| 亚洲综合精品自拍| 欧美刺激午夜性久久久久久久| 国内精品国产成人国产三级粉色 | 国产91精品在线观看| 国产欧美视频一区二区三区| 成人国产亚洲欧美成人综合网| 亚洲综合视频在线观看| 日韩欧美国产一二三区| 国产成人精品www牛牛影视| 亚洲乱码国产乱码精品精小说| 91麻豆精品国产自产在线| 国产精品69久久久久水密桃| 一区二区三区四区av| 日韩亚洲欧美综合| 不卡的av中国片| 人人精品人人爱| 国产精品家庭影院| 日韩欧美黄色影院| av一区二区三区| 寂寞少妇一区二区三区| 午夜精品免费在线观看| 久久人人超碰精品| 欧美日韩一区二区三区视频| 国产乱码精品一区二区三区av | 日本精品一级二级| 美女视频黄 久久| 亚洲人一二三区| 久久久久久久久久久黄色| 在线观看亚洲一区| 粉嫩在线一区二区三区视频| 日本免费新一区视频| 亚洲免费看黄网站| 国产欧美综合在线观看第十页| 在线不卡一区二区| 91小视频在线| av在线综合网| 国产老肥熟一区二区三区| 秋霞成人午夜伦在线观看| 亚洲最大成人综合| 国产精品动漫网站| 2019国产精品| 欧美一区二区播放| 欧美日韩国产高清一区| 91在线码无精品| 国产寡妇亲子伦一区二区| 热久久免费视频| 亚洲国产va精品久久久不卡综合| 国产精品欧美久久久久一区二区| 精品久久人人做人人爽| 日韩午夜小视频| 555www色欧美视频| 欧美偷拍一区二区| 91高清视频在线| 91麻豆高清视频| av在线综合网| 一本久久综合亚洲鲁鲁五月天 | 国产精品麻豆网站| 欧美国产日韩一二三区| 久久久精品黄色| 国产香蕉久久精品综合网| 精品国产自在久精品国产| 日韩天堂在线观看| 日韩精品中文字幕在线不卡尤物| 欧美高清视频不卡网| 亚洲国产美女搞黄色| 欧美一区二区三区思思人| 国产精品羞羞答答xxdd| 亚洲国产日韩av| 中文字幕制服丝袜一区二区三区 | 精品在线亚洲视频| 国产人伦精品一区二区| 91精品国模一区二区三区| 91精品久久久久久久91蜜桃| 欧美极品美女视频| 91精品国产91久久久久久一区二区 | 亚洲国产高清aⅴ视频| 国产日韩欧美激情| 中文字幕精品在线不卡| 亚洲国产精品av| 亚洲精品日韩综合观看成人91| 亚洲精品免费在线| 五月天激情小说综合| 蜜桃视频第一区免费观看| 国产精品99久久久| 成人99免费视频| 欧美三级三级三级爽爽爽| 欧美一级搡bbbb搡bbbb| wwwwww.欧美系列| 中文字幕亚洲综合久久菠萝蜜| 亚洲精品日日夜夜| 青青青伊人色综合久久| 国产一区二区三区综合| 91在线精品一区二区| 欧美日产在线观看| 国产视频一区不卡| 亚洲精品亚洲人成人网| 亚洲国产精品一区二区久久 | 99国内精品久久| 欧美日韩性生活| 国产色婷婷亚洲99精品小说| 国产精品久久久久久久久果冻传媒| 亚洲国产cao| 精品一区二区三区视频在线观看 | 日本一区二区免费在线| 亚洲精品日韩综合观看成人91| 麻豆视频观看网址久久| 97se亚洲国产综合自在线不卡| 欧美日韩成人综合| 欧美韩国日本一区| 日韩综合小视频| 91香蕉国产在线观看软件| 精品日产卡一卡二卡麻豆| 一区二区理论电影在线观看| 国产精品一区二区三区网站| 欧美猛男男办公室激情| 自拍av一区二区三区| 精品一二线国产| 欧美日韩另类一区| 91视频观看视频| 久久久99久久| 国v精品久久久网| 精品免费一区二区三区| 老汉av免费一区二区三区| 成人激情文学综合网| 欧美丝袜丝交足nylons图片| 亚洲国产成人精品视频| 成人精品国产一区二区4080| 777午夜精品视频在线播放| 日韩理论在线观看| 欧美国产精品一区| 国产日韩欧美高清| 毛片基地黄久久久久久天堂| 在线观看日产精品| 国产精品护士白丝一区av| 韩国毛片一区二区三区| 91精品中文字幕一区二区三区| 自拍av一区二区三区| 成人动漫一区二区| 久久这里只有精品首页| 美女被吸乳得到大胸91| 在线播放日韩导航| 亚洲成人综合网站| 欧美视频第二页| 亚洲激情一二三区| 91天堂素人约啪| 1024国产精品| 99精品国产99久久久久久白柏| 中文字幕久久午夜不卡| 高清不卡一二三区| 国产精品久久久久久久久快鸭 | 7777精品伊人久久久大香线蕉 | 国内精品自线一区二区三区视频| 欧美日韩专区在线| 亚洲三级电影全部在线观看高清| 不卡av在线免费观看| 欧美韩国日本综合| 91一区在线观看| 有码一区二区三区| 精品视频1区2区| 日本亚洲电影天堂| 欧美电视剧免费观看| 国模娜娜一区二区三区| 国产调教视频一区| 欧美亚洲动漫精品| 99久久精品国产毛片| 日韩国产欧美一区二区三区| 国产精品黄色在线观看| 日韩欧美一卡二卡| 欧美三级中文字幕在线观看| 狠狠色丁香久久婷婷综合丁香| 亚洲人吸女人奶水| 国产精品污污网站在线观看| 精品国产乱码久久久久久闺蜜 | 男女男精品网站| 一区在线播放视频| 精品噜噜噜噜久久久久久久久试看| 波多野结衣视频一区| 久久国产精品色| 麻豆freexxxx性91精品| 亚洲狠狠爱一区二区三区| 亚洲欧美视频在线观看视频| 亚洲一区二区在线视频| 亚洲成人av福利| 波多野结衣在线一区| 精品国产制服丝袜高跟|