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

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

?? 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個參數為是否在打開串口時啟動監視線程, 第2個參數為IO方式 阻塞方式(0)/ 異步重疊方式(默認)
 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;
 }
 //獲得串口參數 DCB
 DCB *GetState()
 {
  return IsOpen() && ::GetCommState(_hCommHandle, &_DCB) == TRUE ?
  &_DCB: NULL;
 }
 //設置串口參數 DCB
 bool SetState(DCB *pdcb = NULL)
 {
  return IsOpen() ? ::SetCommState(_hCommHandle, pdcb == NULL ? &_DCB:pdcb) == TRUE: false;
 }
 //設置串口參數:波特率,停止位,等 支持設置字符串 "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;
 }
 //設置串口參數:波特率,停止位,等
 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;
 }
 //獲得超時結構
 LPCOMMTIMEOUTS GetTimeouts(void)
 {
  return IsOpen() && ::GetCommTimeouts(_hCommHandle, &_CO) == TRUE ?
&_CO: NULL;
 }
 //設置超時
 bool SetTimeouts(LPCOMMTIMEOUTS lpCO)
 {
  return IsOpen() ? ::SetCommTimeouts(_hCommHandle, lpCO) == TRUE:false;
 }
 //設置串口的I/O緩沖區大小
 bool SetBufferSize(DWORD dwInputSize, DWORD dwOutputSize)
 {
  return IsOpen() ? ::SetupComm(_hCommHandle, dwInputSize, dwOutputSize)== TRUE: false;
 }
 //關聯消息的窗口句柄
 inline void SetWnd(HWND hWnd)
 {
  assert(::IsWindow(hWnd));
  _hNotifyWnd = hWnd;
 }
 //設定發送通知, 接受字符最小值
 inline void SetNotifyNum(DWORD dwNum)
 {
  _dwNotifyNum = dwNum;
 }
 //線程是否運行
 inline bool IsThreadRunning()
 {
  return _hThreadHandle != NULL;
 }
 //獲得線程句柄
 inline HANDLE GetThread()
 {
  return _hThreadHandle;
 }
 //設置要監視的事件, 打開前設置有效
 void SetMaskEvent(DWORD dwEvent = DEFAULT_COM_MASK_EVENT)
 {
  _dwMaskEvent = dwEvent;
 }
 //獲得讀緩沖區的字符數
 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"的設置字符串設置串口
 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 返回實際讀到的字符數 可讀任意數據
 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)
   // 緩沖區無數據
   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);
    // 結束異步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;
 }
 //寫串口 可寫任意數據 "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));
  }
  //讀串口 同步應用
  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;
  }
  //寫串口 同步應用
  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 可以輸出格式字符串 包含緩沖區長度
  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 可以輸出格式字符串 不檢查緩沖區長度 小心溢出
  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);
  }
  //關閉串口 同時也關閉關聯線程
  virtual void Close()
  {
   if (IsOpen())

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线视频精品一区| 麻豆一区二区在线| 亚洲欧洲一区二区在线播放| 精品电影一区二区| 欧美不卡在线视频| 久久综合狠狠综合久久激情| 2022国产精品视频| 久久尤物电影视频在线观看| 国产女人aaa级久久久级| 国产日韩欧美精品一区| 国产精品久久久久影院亚瑟| 国产欧美精品在线观看| 国产精品视频第一区| 国产精品美女一区二区| 亚洲精品一二三四区| 亚洲一区二区三区在线播放| 亚洲成人午夜电影| 久久机这里只有精品| 国产精品自拍一区| 成人av免费在线观看| 色噜噜夜夜夜综合网| 欧美日韩电影一区| 日韩欧美电影一二三| 国产三级精品三级| 亚洲天堂久久久久久久| 亚洲.国产.中文慕字在线| 欧美96一区二区免费视频| 精品一区二区三区在线观看 | 婷婷成人综合网| 日韩极品在线观看| 午夜日韩在线电影| 亚洲成av人**亚洲成av**| 亚洲国产你懂的| 日韩av在线发布| 天天亚洲美女在线视频| 亚洲靠逼com| 亚洲一卡二卡三卡四卡无卡久久 | 《视频一区视频二区| 日本一二三不卡| 一区二区三区精品在线观看| 五月综合激情婷婷六月色窝| 国产制服丝袜一区| 色综合久久中文字幕| 日韩视频一区二区三区| 国产区在线观看成人精品| 亚洲一区欧美一区| 国产乱子轮精品视频| 在线免费不卡视频| 久久婷婷国产综合精品青草| 一区二区三区精品| 国产一区二区中文字幕| 欧美午夜在线一二页| 国产日韩精品一区二区三区在线| 亚洲综合激情网| 国产精品一二三在| 精品视频色一区| 国产精品亲子伦对白| 欧美日韩国产经典色站一区二区三区 | 舔着乳尖日韩一区| 香蕉加勒比综合久久| 91片在线免费观看| 日韩三级.com| 久久九九全国免费| 91影视在线播放| 成人在线综合网站| 欧美美女一区二区三区| 国产日韩成人精品| 日韩av一区二区三区| 99精品视频中文字幕| 精品盗摄一区二区三区| 日韩久久精品一区| 日本欧美肥老太交大片| 色女孩综合影院| 欧美国产乱子伦| 国内久久精品视频| 91精品国产全国免费观看| 18欧美乱大交hd1984| 成人午夜碰碰视频| 久久久精品tv| 久99久精品视频免费观看| 2021国产精品久久精品| 日韩欧美国产电影| 亚洲成人综合视频| 色伊人久久综合中文字幕| 久久精品在这里| 久久99久久久欧美国产| 在线播放国产精品二区一二区四区| 亚洲欧洲av色图| 成人黄色一级视频| 国产欧美日产一区| 国产在线不卡一卡二卡三卡四卡| 宅男噜噜噜66一区二区66| 亚洲国产精品久久人人爱| 91美女精品福利| 亚洲色图制服诱惑 | 国产精品久久久久毛片软件| 老色鬼精品视频在线观看播放| 欧美日韩国产中文| 亚洲国产欧美在线| 欧美三级电影一区| 亚洲一级在线观看| 精品视频999| 亚洲福中文字幕伊人影院| 欧美综合亚洲图片综合区| 一区二区三区日韩| 在线精品视频免费播放| 亚洲国产美国国产综合一区二区| 欧美在线色视频| 亚洲在线免费播放| 欧美人体做爰大胆视频| 亚洲午夜在线视频| 欧美视频一区二区三区四区| 五月激情综合色| 91精品国产欧美一区二区成人| 日韩和欧美一区二区| 日韩欧美久久久| 狠狠网亚洲精品| 国产精品网站导航| 91小视频免费观看| 亚洲韩国一区二区三区| 5858s免费视频成人| 免费看欧美女人艹b| 欧美精品一区二区三区很污很色的| 日韩一区二区三区av| 成人自拍视频在线| 91成人在线精品| 99久久99久久精品国产片果冻| 日韩av一级片| 午夜精彩视频在线观看不卡| 欧美国产精品中文字幕| 日韩午夜激情视频| 欧美精品丝袜中出| 欧美性大战久久| 日本韩国欧美国产| 欧美午夜宅男影院| 中文欧美字幕免费| 成人ar影院免费观看视频| 亚洲欧美电影一区二区| 欧美亚洲综合久久| 麻豆免费精品视频| 国产99久久久精品| 成人激情开心网| 欧美揉bbbbb揉bbbbb| 国产91露脸合集magnet| 91麻豆福利精品推荐| 亚洲一区二区中文在线| 亚洲免费观看高清完整版在线观看熊| 一区二区欧美在线观看| 亚洲精选视频在线| 一区二区三区在线免费| 亚洲一级不卡视频| 久草中文综合在线| 制服丝袜av成人在线看| 韩国女主播一区| 18欧美乱大交hd1984| 欧美电视剧免费观看| 99久久免费精品| 久久精品国产澳门| 亚洲精品中文字幕乱码三区 | 精品国产成人在线影院| 成人av动漫网站| 日韩国产精品久久久久久亚洲| 亚洲国产精品t66y| 欧美疯狂做受xxxx富婆| www.日本不卡| 看电影不卡的网站| 亚洲一区av在线| 中文字幕+乱码+中文字幕一区| 色综合久久综合| 国产成人精品亚洲午夜麻豆| 亚洲成人免费视| 国产精品国产a| 久久久久久**毛片大全| 欧美日本视频在线| jvid福利写真一区二区三区| 国内精品免费在线观看| 天天操天天综合网| 亚洲欧美日韩国产成人精品影院 | 国产**成人网毛片九色| 欧美日韩一区二区三区四区| 精品三级在线看| 午夜精品成人在线| 99久久精品费精品国产一区二区| 91久久一区二区| 国产精品久久久久久久久免费樱桃 | 国内精品国产成人| 一卡二卡欧美日韩| 国产精品网站导航| 日韩一区二区电影网| 欧美日韩高清影院| 成人一二三区视频| 久久久国产精华| 欧美日韩夫妻久久| 在线这里只有精品| 色94色欧美sute亚洲线路一久| 国产成人啪午夜精品网站男同| 免费在线观看精品| 日本视频中文字幕一区二区三区| 亚洲一二三四久久| 亚洲最大成人网4388xx|