/*------------------------------------------------------------------------------------ * 版权声明: 在保证功能完整性的前提下,任何人都可以对源码进行修改和传播, 但务必包含此 * 文件说明及原作者信息! * * 类名: (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
EasyComm - 一个完全的串口读写类, 简单易用, 支持同步和异步.
EasyComm是一个简洁易用的串口读写类库,它涵盖了串口通信的基础功能,包括同步和异步两种操作模式,适用于WinAPI环境。通过使用该库,开发者可以方便地实现串口的数据收发。
摘要由CSDN通过智能技术生成