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

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

?? cn_com.txt

?? 上位機軟件 for 自制AT89C51/52編程器
?? TXT
?? 第 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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av网站免费在线| 天堂成人国产精品一区| 久久青草欧美一区二区三区| av在线一区二区| 国产激情一区二区三区| 久久这里只有精品6| 播五月开心婷婷综合| 亚洲影院在线观看| 欧美va亚洲va在线观看蝴蝶网| 国产一区二区三区美女| 婷婷久久综合九色综合绿巨人| 国产日韩成人精品| 欧美一区二区久久| 欧美顶级少妇做爰| 欧美性猛交xxxx乱大交退制版| 成人h动漫精品| 91在线视频在线| 成人激情av网| 成人国产精品免费观看| 激情欧美一区二区三区在线观看| 亚洲一区二区在线视频| 国产精品久久久久aaaa| 欧美tickling网站挠脚心| 欧美中文字幕一区| 在线视频国内一区二区| 欧美视频精品在线观看| 91福利国产成人精品照片| 亚洲国产美国国产综合一区二区| 亚洲日本青草视频在线怡红院| 一区二区三区精密机械公司| 久久噜噜亚洲综合| 欧美国产日韩精品免费观看| 久久久久久夜精品精品免费| 日本一区二区三区视频视频| 久久综合色综合88| 国产亚洲污的网站| 亚洲老司机在线| 亚洲国产一区二区三区青草影视| 日韩精品久久理论片| 久久99热99| 91蝌蚪porny九色| 欧美日韩一级黄| 日韩精品影音先锋| 国产精品电影一区二区三区| 亚洲一区二区三区自拍| 青青草原综合久久大伊人精品 | 国产一区二区不卡| 97se亚洲国产综合自在线不卡| 欧美亚洲禁片免费| 精品国产伦理网| 亚洲精品一二三四区| 久久精品国产澳门| 91国产免费看| 亚洲国产高清在线| 久久99久久久久久久久久久| 91在线播放网址| 久久久久久久久岛国免费| 亚洲成人激情av| 色综合一区二区| 6080国产精品一区二区| 午夜影视日本亚洲欧洲精品| 91精品国产免费| 国产麻豆视频一区| 亚洲色图一区二区三区| 91麻豆国产自产在线观看| 亚洲国产精品视频| 91精选在线观看| 国产精品系列在线播放| 中文欧美字幕免费| 欧美性色黄大片| 在线观看亚洲成人| 欧美一区二区福利在线| 亚洲sss视频在线视频| 色哟哟在线观看一区二区三区| 国产精品久久久久影院亚瑟 | 欧美成人vr18sexvr| 全国精品久久少妇| 久久久久久久久99精品| 国产.欧美.日韩| 日韩理论电影院| 色成人在线视频| 一区二区三区美女视频| 欧美精品一级二级| 国产乱色国产精品免费视频| 久久久久久久久一| 91久久香蕉国产日韩欧美9色| 夜夜精品视频一区二区| 欧美精品日日鲁夜夜添| 麻豆精品视频在线观看免费| 国产午夜精品在线观看| 99久久婷婷国产精品综合| 性久久久久久久| 国产亚洲一二三区| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲精品免费视频| 精品久久久久久无| 91精品国产综合久久精品图片 | 亚洲欧洲av在线| 国产一区二区三区四| 久久综合九色综合97婷婷女人| 久久精品国产成人一区二区三区| 国产91丝袜在线播放九色| 久久久综合九色合综国产精品| 国产69精品久久久久777| 一区二区三区免费观看| 精品国产一区二区精华| 在线观看91视频| 粉嫩一区二区三区性色av| 免费三级欧美电影| 亚洲精品一二三| 欧美国产精品中文字幕| 精品久久久久久久久久久久包黑料| 91一区二区三区在线播放| 精品一二线国产| 日韩成人午夜精品| 亚洲狠狠爱一区二区三区| 国产精品网曝门| 26uuu成人网一区二区三区| 91精品久久久久久蜜臀| 欧美性大战久久久| 欧美做爰猛烈大尺度电影无法无天| 成人网在线播放| 成人免费观看av| 成人高清视频在线| 成人高清视频在线观看| 99综合影院在线| 99久久99久久精品免费看蜜桃| 国产精品乡下勾搭老头1| 国产一区二区三区精品视频| 激情综合亚洲精品| 国产福利一区在线| 成人av高清在线| 一本色道久久综合亚洲aⅴ蜜桃 | 欧美群妇大交群的观看方式| 欧美日韩国产中文| 欧美一级久久久久久久大片| 69堂成人精品免费视频| 欧美一级艳片视频免费观看| 日韩欧美资源站| 国产精品久久一级| 亚洲成人7777| 国产精品综合一区二区| 99精品久久99久久久久| 欧美日韩一级二级| 日韩一区二区视频| 中文字幕一区二区日韩精品绯色| 一区二区欧美在线观看| 老司机精品视频一区二区三区| 国产99精品国产| 欧美性受极品xxxx喷水| 欧美一区二区三区四区五区 | 欧美日韩在线播放三区| 欧美成人伊人久久综合网| 久久久精品人体av艺术| 一区二区三区日韩欧美精品| 午夜精品久久久久影视| 国产精品原创巨作av| 91丨国产丨九色丨pron| 日韩精品在线网站| 亚洲精品日产精品乱码不卡| 日韩va亚洲va欧美va久久| 国产91丝袜在线播放| 欧美福利视频一区| 国产精品久久精品日日| 琪琪久久久久日韩精品| 91浏览器在线视频| 欧美日韩综合在线免费观看| 久久久久亚洲蜜桃| 视频一区中文字幕| 国产一区二区三区在线观看免费 | 欧美日韩亚洲综合一区| 亚洲国产精品精华液2区45| 日日摸夜夜添夜夜添国产精品| 成人网页在线观看| 欧美巨大另类极品videosbest | 亚洲精品视频在线观看网站| 久久97超碰色| 日韩视频永久免费| 午夜久久电影网| 欧美性猛交xxxxxx富婆| 亚洲人成网站影音先锋播放| 97精品电影院| 一区二区三区在线观看国产| 欧美性猛交xxxxxx富婆| 久久国内精品自在自线400部| 欧美日韩国产另类不卡| 麻豆成人av在线| 亚洲欧美一区二区在线观看| 欧美人妖巨大在线| 粉嫩aⅴ一区二区三区四区 | 91蝌蚪国产九色| 亚洲大片精品永久免费| 亚洲精品一区二区三区99| 国产999精品久久| 亚洲综合精品久久| 欧美日韩一级视频| 国产呦精品一区二区三区网站| 国产欧美一区二区在线观看| 色婷婷久久综合| 韩国在线一区二区|