EasyComm - 一个完全的串口读写类, 简单易用, 支持同步和异步.

EasyComm是一个简洁易用的串口读写类库,它涵盖了串口通信的基础功能,包括同步和异步两种操作模式,适用于WinAPI环境。通过使用该库,开发者可以方便地实现串口的数据收发。
摘要由CSDN通过智能技术生成

推荐这篇文章 
 

/*------------------------------------------------------------------------------------
* 版权声明: 在保证功能完整性的前提下,任何人都可以对源码进行修改和传播, 但务必包含此
*            文件说明及原作者信息!
*
* 类名: (C)EasyComm 
* 作者: 魏孙鼎, weisunding(at)hotmail.com
* 日期: 2005-12-09
* 描述: 一个简单串口读写封装类, 支持同步和异步模式,默认为同步读写模式
*
*
* 接口:  	- Open(...) 	=> 打开串口
*        - Setup(...)    	=> 设置串口参数
*        - Read(...)       	=> 读串口
*        - Write(...)     	=> 写串口
*        - Close()         	=> 关闭串口
*
*        异步监视模式
*        - SetNotifyNum(...) => 设置通知字节数
*        - SetHWND(...)      => 设置要接收消息(EasyComm::WM_ONCOMM)的窗体句柄
*        - StartListen()     => 开始监视线程
*        - StopListen()      => 停止监视线程
*        - OnReceive(...)    => 数据到达时被调用, 虚函数,用于无窗体异步模式
*
* 示例 
*
* EasyComm serial;
* serial.Open(1);//打开COM1
* serial.Setup(9600, 8, NOPARITY, ONESTOPBIT);
* serial.Write("Hello World!");
*
* char buffer[1024];
* serial.Read(buffer, 1024, 50);//最长等待50ms
* 
*/

#ifndef __EASY_COMM__
#define __EASY_COMM__

#pragma warning(disable: 4800)    //disable waring of TRUE => true
#pragma warning(disable: 4267)    //disable waring of size_t => int

#include <windows.h>

class EasyComm
{
    
public:
    
    // 用于窗体模式的数据到达消息
    enum {
    WM_ONCOMM = WM_USER + 2005};

    EasyComm(void) : m_hComm(NULL), m_hThread(NULL), m_bListen(false), m_nNotifyNum(1), m_hWnd(NULL)
    {
    
        memset(&m_WaitOverlapped,  0, sizeof(OVERLAPPED));
        memset(&m_ReadOverlapped,  0, sizeof(OVERLAPPED));
        memset(&m_WriteOverlapped, 0, sizeof(OVERLAPPED));

        m_WaitOverlapped.hEvent  = CreateEvent(NULL, TRUE, FALSE, NULL);
        m_ReadOverlapped.hEvent  = CreateEvent(NULL, TRUE, FALSE, NULL);
        m_WriteOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
        m_hCommEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
    }

    //---------------------------------------
    // 功能: 打开串口
    // @port 串口号
    //---------------------------------------
    bool Open(int port)
    {
    
        if (m_hComm)
            return false;    //串口已打开
        
        char fileName[64] = {
    0};
        sprintf(fileName, ".//COM%d", port);
        m_nPort = port;

        m_hComm = CreateFile(fileName,                        
                             GENERIC_READ | GENERIC_WRITE,
                             0,
                             0,
                             OPEN_EXISTING,
                             FILE_FLAG_OVERLAPPED,
                             0
                     
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值