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

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

?? cncomm.h

?? VC++下的多串口通信程序
?? H
?? 第 1 頁 / 共 2 頁
字號:
/*
Comm Base Library(WIN98/NT/2000) ver 1.1
Compile by: BC++ 5; C++ BUILDER 4, 5, 6, X; VC++ 5, 6; VC.NET; GCC;
copyright(c) 2004.5 - 2005.8 llbird wushaojian@21cn.com
*/ 
#ifndef _CN_COMM_H_
#define _CN_COMM_H_

#pragma warning(disable: 4530)
#pragma warning(disable: 4786)
#pragma warning(disable: 4800)

#include <assert.h>
#include <stdio.h>
#include <windows.h>

//送到窗口的消息 WPARAM 端口號
#define ON_COM_RECEIVE WM_USER + 618
#define ON_COM_CTS WM_USER + 619 //LPARAM 1 valid
#define ON_COM_DSR WM_USER + 621 //LPARAM 1 valid
#define ON_COM_RING WM_USER + 623
#define ON_COM_RLSD WM_USER + 624
#define ON_COM_BREAK WM_USER + 625
#define ON_COM_TXEMPTY WM_USER + 626
#define ON_COM_ERROR WM_USER + 627 //LPARAM save Error ID
#define DEFAULT_COM_MASK_EVENT EV_RXCHAR | EV_ERR | EV_CTS | EV_DSR | EV_BREAK | EV_TXEMPTY | EV_RING | EV_RLSD

class cnComm
{
 public:

 //------------------------------Construction-----------------------------------
 //第1個參數(shù)為是否在打開串口時啟動監(jiān)視線程, 第2個參數(shù)為IO方式 阻塞方式(0)/ 異步重疊方式(默認(rèn))
 cnComm(bool fAutoBeginThread = true, DWORD dwIOMode =
FILE_FLAG_OVERLAPPED): _dwIOMode(dwIOMode), _fAutoBeginThread(fAutoBeginThread)
 {
  Init();
 }

 virtual ~cnComm()
 {
  Close();
  UnInit();
 }

 //----------------------------------Attributes----------------------------------
 //判斷串口是否打開
 inline bool IsOpen()
 {
  return _hCommHandle != INVALID_HANDLE_VALUE;
 }
 //判斷串口是否打開
 operator bool()
 {
  return _hCommHandle != INVALID_HANDLE_VALUE;
 }
 //獲得串口句炳
 inline HANDLE GetHandle()
 {
  return _hCommHandle;
 }
 //獲得串口句炳
 operator HANDLE()
 {
  return _hCommHandle;
 }
 //獲得串口參數(shù) DCB
 DCB *GetState()
 {
  return IsOpen() && ::GetCommState(_hCommHandle, &_DCB) == TRUE ?
  &_DCB: NULL;
 }
 //設(shè)置串口參數(shù) DCB
 bool SetState(DCB *pdcb = NULL)
 {
  return IsOpen() ? ::SetCommState(_hCommHandle, pdcb == NULL ? &_DCB:pdcb) == TRUE: false;
 }
 //設(shè)置串口參數(shù):波特率,停止位,等 支持設(shè)置字符串 "9600, 8, n, 1"
 bool SetState(char *szSetStr)
 {
  if (IsOpen())
  {
   if (::GetCommState(_hCommHandle, &_DCB) != TRUE)
    return false;
   if (::BuildCommDCB(szSetStr, &_DCB) != TRUE)
    return false;
   return ::SetCommState(_hCommHandle, &_DCB) == TRUE;
  }
  return false;
 }
 //設(shè)置串口參數(shù):波特率,停止位,等
 bool SetState(DWORD dwBaudRate, DWORD dwByteSize = 8, DWORD dwParity =
NOPARITY, DWORD dwStopBits = ONESTOPBIT)
 {
  if (IsOpen())
  {
   if (::GetCommState(_hCommHandle, &_DCB) != TRUE)
    return false;
   _DCB.BaudRate = dwBaudRate;
   _DCB.ByteSize = (unsigned char)dwByteSize;
   _DCB.Parity = (unsigned char)dwParity;
   _DCB.StopBits = (unsigned char)dwStopBits;
   return ::SetCommState(_hCommHandle, &_DCB) == TRUE;
  }
  return false;
 }
 //獲得超時結(jié)構(gòu)
 LPCOMMTIMEOUTS GetTimeouts(void)
 {
  return IsOpen() && ::GetCommTimeouts(_hCommHandle, &_CO) == TRUE ?
&_CO: NULL;
 }
 //設(shè)置超時
 bool SetTimeouts(LPCOMMTIMEOUTS lpCO)
 {
  return IsOpen() ? ::SetCommTimeouts(_hCommHandle, lpCO) == TRUE:false;
 }
 //設(shè)置串口的I/O緩沖區(qū)大小
 bool SetBufferSize(DWORD dwInputSize, DWORD dwOutputSize)
 {
  return IsOpen() ? ::SetupComm(_hCommHandle, dwInputSize, dwOutputSize)== TRUE: false;
 }
 //關(guān)聯(lián)消息的窗口句柄
 inline void SetWnd(HWND hWnd)
 {
  assert(::IsWindow(hWnd));
  _hNotifyWnd = hWnd;
 }
 //設(shè)定發(fā)送通知, 接受字符最小值
 inline void SetNotifyNum(DWORD dwNum)
 {
  _dwNotifyNum = dwNum;
 }
 //線程是否運行
 inline bool IsThreadRunning()
 {
  return _hThreadHandle != NULL;
 }
 //獲得線程句柄
 inline HANDLE GetThread()
 {
  return _hThreadHandle;
 }
 //設(shè)置要監(jiān)視的事件, 打開前設(shè)置有效
 void SetMaskEvent(DWORD dwEvent = DEFAULT_COM_MASK_EVENT)
 {
  _dwMaskEvent = dwEvent;
 }
 //獲得讀緩沖區(qū)的字符數(shù)
 int GetInputSize()
 {
  COMSTAT Stat;
  DWORD dwError;

  return ::ClearCommError(_hCommHandle, &dwError, &Stat) == TRUE ? Stat.cbInQue : (DWORD) - 1L;
 }

 //----------------------------------Operations----------------------------------
 //打開串口 缺省 9600, 8, n, 1
 bool Open(DWORD dwPort)
 {
  return Open(dwPort, 9600);
 }
 //打開串口 缺省 baud_rate, 8, n, 1
 bool Open(DWORD dwPort, DWORD dwBaudRate)
 {
  if (dwPort < 1 || dwPort > 1024)
   return false;
  BindCommPort(dwPort);

  if (!OpenCommPort())
   return false;

  if (!SetupPort())
   return false;

  return SetState(dwBaudRate);
 }
 //打開串口, 使用類似"9600, 8, n, 1"的設(shè)置字符串設(shè)置串口
 bool Open(DWORD dwPort, char *szSetStr)
 {
  if (dwPort < 1 || dwPort > 1024)
   return false;

  BindCommPort(dwPort);

  if (!OpenCommPort())
   return false;

  if (!SetupPort())
   return false;

  return SetState(szSetStr);
 }
 //讀取串口 dwBufferLength個字符到 Buffer 返回實際讀到的字符數(shù) 可讀任意數(shù)據(jù)
 DWORD Read(LPVOID Buffer, DWORD dwBufferLength, DWORD dwWaitTime = 10)
 {
  if (!IsOpen())
   return 0;

  COMSTAT Stat;
  DWORD dwError;

  if (::ClearCommError(_hCommHandle, &dwError, &Stat) && dwError > 0)
  {
   ::PurgeComm(_hCommHandle,PURGE_RXABORT | PURGE_RXCLEAR);
   return 0;
  } 
  if (!Stat.cbInQue)
   // 緩沖區(qū)無數(shù)據(jù)
   return 0;

  unsigned long uReadLength = 0;

  dwBufferLength = dwBufferLength > Stat.cbInQue ? Stat.cbInQue :dwBufferLength;

  if (!::ReadFile(_hCommHandle, Buffer, dwBufferLength, &uReadLength,&_ReadOverlapped))
  {
   if (::GetLastError() == ERROR_IO_PENDING)
   {
    WaitForSingleObject(_ReadOverlapped.hEvent, dwWaitTime);
    // 結(jié)束異步I/O
    if (!::GetOverlappedResult(_hCommHandle, &_ReadOverlapped,&uReadLength, false))
    {
     if (::GetLastError() != ERROR_IO_INCOMPLETE)
      uReadLength = 0;
    }
   }
   else
    uReadLength = 0;
  }

  return uReadLength;
 }
 //讀取串口 dwBufferLength - 1 個字符到 szBuffer 返回ANSI C 模式字符串指針 適合一般字符通訊

 char *ReadString(char *szBuffer, DWORD dwBufferLength, DWORD dwWaitTime =20)
 {
  unsigned long uReadLength = Read(szBuffer, dwBufferLength - 1,dwWaitTime);
  szBuffer[uReadLength] = '\0';
  return szBuffer;
 }
 //寫串口 可寫任意數(shù)據(jù) "abcd" or "\x0\x1\x2"
 DWORD Write(LPVOID Buffer, DWORD dwBufferLength)
 {
  if (!IsOpen())
   return 0;

  DWORD dwError;

  if (::ClearCommError(_hCommHandle, &dwError, NULL) && dwError > 0)
   ::PurgeComm(_hCommHandle, PURGE_TXABORT | PURGE_TXCLEAR);

  unsigned long uWriteLength = 0;

  if (!::WriteFile(_hCommHandle, Buffer, dwBufferLength, &uWriteLength,&_WriteOverlapped))
   if (::GetLastError() != ERROR_IO_PENDING)
    uWriteLength = 0;

   return uWriteLength;
  }
  //寫串口 寫ANSI C 模式字符串指針 
  DWORD Write(const char *szBuffer)
  {
   assert(szBuffer);

   return Write((void*)szBuffer, strlen(szBuffer));
  }
  //讀串口 同步應(yīng)用
  DWORD ReadSync(LPVOID Buffer, DWORD dwBufferLength)
  {
   if (!IsOpen())
    return 0;

   DWORD dwError;
   if (::ClearCommError(_hCommHandle, &dwError, NULL) && dwError > 0)
   {
    ::PurgeComm(_hCommHandle,PURGE_RXABORT | PURGE_RXCLEAR);
    return 0;
   }

   DWORD uReadLength = 0;
   ::ReadFile(_hCommHandle, Buffer, dwBufferLength, &uReadLength, NULL);
   return uReadLength;
  }
  //寫串口 同步應(yīng)用
  DWORD WriteSync(LPVOID Buffer, DWORD dwBufferLength)
  {
   if (!IsOpen())
    return 0;

   DWORD dwError;
   if (::ClearCommError(_hCommHandle, &dwError, NULL) && dwError > 0)
    ::PurgeComm(_hCommHandle, PURGE_TXABORT | PURGE_TXCLEAR);

   unsigned long uWriteLength = 0;
   ::WriteFile(_hCommHandle, Buffer, dwBufferLength, &uWriteLength, NULL);
   return uWriteLength;
  }
  //寫串口 szBuffer 可以輸出格式字符串 包含緩沖區(qū)長度
  DWORD Write(char *szBuffer, DWORD dwBufferLength, char *szFormat, ...)
  {
   if (!IsOpen())
    return 0;

   va_list va;
   va_start(va, szFormat);
   _vsnprintf(szBuffer, dwBufferLength, szFormat, va);
   va_end(va);

   return Write(szBuffer);
  }
  //寫串口 szBuffer 可以輸出格式字符串 不檢查緩沖區(qū)長度 小心溢出
  DWORD Write(char *szBuffer, char *szFormat, ...)
  {
   if (!IsOpen())
    return 0;

   va_list va;
   va_start(va, szFormat);
   vsprintf(szBuffer, szFormat, va);
   va_end(va);

   return Write(szBuffer);
  }
  //關(guān)閉串口 同時也關(guān)閉關(guān)聯(lián)線程
  virtual void Close()
  {
   if (IsOpen())

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品2024| 欧美系列亚洲系列| 亚洲综合999| www亚洲一区| 欧美日本一区二区| jlzzjlzz亚洲女人18| 久久99精品国产91久久来源| 一区二区三区四区精品在线视频| 精品国产1区二区| 欧美日韩在线三级| 成人黄色777网| 黄一区二区三区| 午夜精品一区二区三区三上悠亚 | 国产亚洲人成网站| 欧美三级三级三级| 91美女片黄在线| 福利一区福利二区| 国产伦精品一区二区三区视频青涩 | 亚洲欧美色一区| 国产欧美日韩在线视频| 日韩精品中文字幕在线不卡尤物| 欧美系列在线观看| 色婷婷久久99综合精品jk白丝 | 在线观看日韩高清av| 99久久久国产精品免费蜜臀| 丁香五精品蜜臀久久久久99网站| 久久不见久久见免费视频1| 五月婷婷欧美视频| 亚洲高清久久久| 亚洲一区二区三区中文字幕| 一区二区三区在线观看欧美| 国产精品国产三级国产专播品爱网| 精品国精品自拍自在线| 91精品国产91久久久久久一区二区| 久久久国产精华| 男人的j进女人的j一区| 久久精品一区二区三区不卡| 日韩欧美一区在线| 欧美一区二区三区四区五区 | 国产经典欧美精品| 中文字幕一区二区三区色视频| 国产欧美日韩卡一| 欧美一区二区日韩一区二区| 国产麻豆精品在线| 韩国v欧美v亚洲v日本v| 中文天堂在线一区| 中文字幕乱码日本亚洲一区二区| 在线观看一区日韩| 欧美性感一区二区三区| 欧美系列日韩一区| 91国偷自产一区二区三区观看| 精品制服美女丁香| 久久国产剧场电影| 精品亚洲国内自在自线福利| 亚洲成av人片在线观看| 亚洲一区二区3| 成人精品一区二区三区四区 | 亚洲精品成人悠悠色影视| 中文在线一区二区| 国产精品视频第一区| 国产精品美女久久久久久久久| 欧美激情在线看| 亚洲人精品一区| 天堂蜜桃91精品| 狠狠色丁香九九婷婷综合五月| 国产成人精品一区二区三区四区 | 日韩久久精品一区| 国产亚洲婷婷免费| 亚洲精品美腿丝袜| 日韩国产在线一| av亚洲精华国产精华精华 | 欧美成人精品1314www| 91麻豆精品国产无毒不卡在线观看 | 99久久精品99国产精品| 日韩电影在线观看一区| 美国毛片一区二区三区| 成人一二三区视频| 99精品热视频| 中文字幕一区不卡| 一区二区三区免费看视频| 日韩av网站免费在线| 国产大陆a不卡| 91福利精品第一导航| 欧美一区二区视频观看视频| 久久久久99精品国产片| 尤物在线观看一区| 日本成人在线看| 午夜成人免费视频| 国产美女精品在线| 欧美日韩高清在线播放| 精品精品国产高清一毛片一天堂| 国产精品白丝在线| 手机精品视频在线观看| 成人在线综合网| 丁香五精品蜜臀久久久久99网站 | 成人动漫中文字幕| 91成人看片片| 69精品人人人人| 亚洲欧洲一区二区三区| 视频一区二区中文字幕| 国产成人无遮挡在线视频| 欧日韩精品视频| 国产香蕉久久精品综合网| 亚洲综合在线第一页| 蜜臀av一区二区| 91在线观看一区二区| 日韩视频免费观看高清完整版| 国产欧美一区二区精品忘忧草 | 玖玖九九国产精品| 99热精品国产| 在线不卡免费av| 亚洲午夜久久久久久久久电影网| 精品亚洲porn| 欧美自拍偷拍午夜视频| 中文字幕精品一区二区三区精品| 亚洲成人激情综合网| 成人毛片老司机大片| 精品少妇一区二区三区 | 国产欧美日韩综合| 麻豆成人久久精品二区三区小说| 97久久超碰国产精品| 在线观看成人免费视频| 亚洲欧美日韩久久精品| 国产精品77777| 日韩免费性生活视频播放| 亚洲在线免费播放| 93久久精品日日躁夜夜躁欧美| 91精品国产91久久综合桃花| 午夜成人免费视频| 欧美怡红院视频| 中文字幕一区二区三| 国产suv一区二区三区88区| 日韩欧美中文一区| 午夜精品视频在线观看| 91免费版pro下载短视频| 国产精品女同一区二区三区| 国产一区二区视频在线| 91精品婷婷国产综合久久性色 | 午夜成人在线视频| 色88888久久久久久影院按摩| 国产精品少妇自拍| 国产一区激情在线| 精品毛片乱码1区2区3区| 另类的小说在线视频另类成人小视频在线| 日本电影亚洲天堂一区| 亚洲视频1区2区| a在线欧美一区| 亚洲国产成人自拍| 色综合天天在线| 亚洲精品日产精品乱码不卡| 91亚洲精品乱码久久久久久蜜桃| 国产精品传媒在线| www.亚洲在线| 亚洲一区免费视频| 欧美色综合久久| 亚洲第一主播视频| 欧美写真视频网站| 日本亚洲天堂网| 日韩精品一区二区三区老鸭窝| 国产综合色在线视频区| 国产人成一区二区三区影院| 国产99精品国产| 中文字幕亚洲不卡| 色菇凉天天综合网| 亚洲午夜激情av| 精品久久久久一区| 成人综合日日夜夜| 一区二区在线观看不卡| 欧美日韩亚洲高清一区二区| 日韩av一区二| 精品99一区二区三区| 成人国产精品视频| 一区二区三区在线高清| 欧美日韩三级一区二区| 日本最新不卡在线| 久久久久久亚洲综合影院红桃| 成人精品小蝌蚪| 亚洲高清免费观看高清完整版在线观看| 色偷偷一区二区三区| 亚洲电影激情视频网站| 欧美电视剧免费全集观看| 国产伦精品一区二区三区免费| 国产精品高潮呻吟| 欧美日韩一区二区在线观看视频| 日韩av一区二区三区四区| 国产精品白丝在线| 宅男在线国产精品| 成人av一区二区三区| 亚洲一区中文日韩| 欧美视频第二页| 成人av在线资源| 手机精品视频在线观看| 欧美精彩视频一区二区三区| 91精彩视频在线| 久久精品噜噜噜成人av农村| 亚洲视频一区在线观看| 精品奇米国产一区二区三区| 99vv1com这只有精品| 蜜臀av亚洲一区中文字幕| 国产欧美精品一区aⅴ影院|