API串口操作封装类
来源:互联网 发布:C语言cost 编辑:程序博客网 时间:2024/06/05 06:24
Comm.h头文件:
- #ifndef __CCOMM_H__
- #define __CCOMM_H__
- class CComm //串口操作封装类
- {
- private:
- HANDLE m_hComm;
- public:
- CComm(); //构造函数
- ~CComm(); //析构函数
- BOOL OpenComm(int nComm); //打开串口函数
- void CloseComm(); //关闭串口函数
- BOOL SetComm(int nBaudRate/*波特率*/,int nParity/*奇偶校验位*/,int nByteSize/*字节位数*/,int nStopBits/*停止位*/); //设置串口函数
- BOOL SetTimeOuts(); //设置超时函数
- BOOL ReadComm(char * lpBuf,int nLen); //读串口函数
- BOOL WriteComm(char * lpBuf,int nLen); //写串口函数
- };
- #endif
Comm.cpp实现文件:
- #include "StdAfx.h"
- #include "Comm.h"
- //构造函数
- CComm::CComm()
- {
- }
- //析构函数
- CComm::~CComm()
- {
- CloseComm(); //关闭串口
- }
- //打开串口函数
- BOOL CComm::OpenComm(int nComm)
- {
- CString strCommName;
- CString strErrInfo;
- strCommName.Format("COM%d",nComm);
- m_hComm = ::CreateFile(strCommName, /*要打开串口名称*/
- GENERIC_READ | GENERIC_WRITE, /*允许读和写*/
- 0, /*独占方式*/
- NULL, /*安全属性*/
- OPEN_EXISTING, /*打开而不是创建*/
- 0, /*同步方式*/
- NULL); /*模板句柄*/
- if(m_hComm == INVALID_HANDLE_VALUE)
- {
- strErrInfo.Format("打开%s失败!",strCommName);
- AfxMessageBox(strErrInfo);
- return FALSE;
- }
- else
- {
- return TRUE;
- }
- }
- //关闭串口函数
- void CComm::CloseComm()
- {
- if(m_hComm != INVALID_HANDLE_VALUE)
- {
- ::CloseHandle(m_hComm);
- m_hComm = INVALID_HANDLE_VALUE;
- }
- }
- //设置串口函数
- BOOL CComm::SetComm(int nBaudRate/*波特率*/,int nParity/*奇偶校验位*/,int nByteSize/*字节位数*/,int nStopBits/*停止位*/)
- {
- DCB stDCB;
- memset(&stDCB,0,sizeof(stDCB));
- if(!::GetCommState(m_hComm,&stDCB)) //获取串口当前状态属性
- return FALSE;
- stDCB.BaudRate = nBaudRate; //波特率
- stDCB.fParity = 0;
- stDCB.Parity = nParity; //奇偶校验位(NOPARITY等)
- stDCB.ByteSize = nByteSize; //每个字节有8位
- stDCB.StopBits = nStopBits; //停止位(ONESTOPBIT等)
- if(!::SetCommState(m_hComm,&stDCB)) //设置串口状态属性
- return FALSE;
- if(!::SetupComm(m_hComm,1024,1024)) //设置输入缓冲区和输出缓冲区的大小
- return FALSE;
- ::PurgeComm(m_hComm,PURGE_TXCLEAR | PURGE_RXCLEAR); //清空输入输出缓冲区
- return TRUE;
- }
- //设置超时函数
- BOOL CComm::SetTimeOuts()
- {
- COMMTIMEOUTS stTimeOuts;
- stTimeOuts.ReadIntervalTimeout = 0; //设定读超时
- stTimeOuts.ReadTotalTimeoutMultiplier = 100;
- stTimeOuts.ReadTotalTimeoutConstant = 500;
- stTimeOuts.WriteTotalTimeoutMultiplier = 100; //设定写超时
- stTimeOuts.WriteTotalTimeoutConstant = 500;
- ::SetCommTimeouts(m_hComm,&stTimeOuts); //设置超时
- ::PurgeComm(m_hComm,PURGE_TXCLEAR | PURGE_RXCLEAR); //清空输入输出缓冲区
- return TRUE;
- }
- //读串口函数
- BOOL CComm::ReadComm(char * lpBuf,int nLen)
- {
- if(::ReadFile(m_hComm,lpBuf,nLen,(DWORD *)&nLen,NULL) == FALSE)
- {
- return FALSE;
- }
- else
- {
- /*
- CString str;
- str.Format("%d",nLen);
- AfxMessageBox(str);
- */
- //::PurgeComm(m_hComm,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
- return TRUE;
- }
- }
- //写串口函数
- BOOL CComm::WriteComm(char * lpBuf,int nLen)
- {
- if(::WriteFile(m_hComm,lpBuf,nLen,(DWORD *)&nLen,NULL) == FALSE)
- {
- return FALSE;
- }
- else
- {
- /*
- CString str;
- str.Format("%d",nLen);
- AfxMessageBox(str);
- */
- return TRUE;
- }
- }
- API串口操作封装类
- API串口操作封装类(转)
- Win32串口操作封装
- api操作串口
- api操作串口
- 串口操作之API
- Chrome API操作串口
- linux串口设置操作封装
- 一个封装的不错的串口操作类
- MFC WIN32 API 操作串口
- C# 调用API 操作串口
- 串口封装类
- 一个vb用API对串口操作的类
- Java 封装 HDFS API 操作
- c#收发串口数据的源码(封装了windows api的类)
- c#收发串口数据的源码(封装了windows api的类)
- vc 串口通讯类封装
- C#调用API操作串口(ZT)
- LWIP_pbuf.c
- Head First C# 中文版 图文皆译 第二章 page46
- char[],*char, string, cstring有什么区别?
- ASP.NET快捷键
- POSIX无缓冲文件I/O及可变参数小玩
- API串口操作封装类
- 冒泡排序
- 升级ORACLE
- java正则表达式学习
- HDOJ1237
- 招聘应届毕业生的三阶段
- Domino服务器命令表
- 【10月22日】黑鹰红客基地每日软件更新
- ActiveSync 协议选项