CSerialPort.h 测试某些工具

// CSerialPort.h
#pragma once
#include <windows.h>

class CSerialPort {
public:
    CSerialPort();
    ~CSerialPort();

    BOOL Open(LPCTSTR lpszPortName, DWORD dwBaudRate, BYTE byDataBits, BYTE byParity, BYTE byStopBits);
    void Close();
    BOOL Write(const BYTE* pBuffer, DWORD dwBytesToWrite, DWORD* pdwBytesWritten);
    BOOL Read(BYTE* pBuffer, DWORD dwBytesToRead, DWORD* pdwBytesRead);

private:
    HANDLE m_hComm;
};

// CSerialPort.cpp
#include "stdafx.h"
#include "CSerialPort.h"

CSerialPort::CSerialPort() : m_hComm(INVALID_HANDLE_VALUE) {}

CSerialPort::~CSerialPort() {
    Close();
}

BOOL CSerialPort::Open(LPCTSTR lpszPortName, DWORD dwBaudRate, BYTE byDataBits, BYTE byParity, BYTE byStopBits) {
    m_hComm = CreateFile(lpszPortName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    if (m_hComm == INVALID_HANDLE_VALUE) {
        return FALSE;
    }

    DCB dcbSerialParams = { 0 };
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    if (!GetCommState(m_hComm, &dcbSerialParams)) {
        CloseHandle(m_hComm);
        return FALSE;
    }

    dcbSerialParams.BaudRate = dwBaudRate;
    dcbSerialParams.ByteSize = byDataBits;
    dcbSerialParams.Parity = byParity;
    dcbSerialParams.StopBits = byStopBits;

    if (!SetCommState(m_hComm, &dcbSerialParams)) {
        CloseHandle(m_hComm);
        return FALSE;
    }

    COMMTIMEOUTS timeouts = { 0 };
    timeouts.ReadIntervalTimeout = 50;
    timeouts.ReadTotalTimeoutConstant = 50;
    timeouts.ReadTotalTimeoutMultiplier = 10;
    timeouts.WriteTotalTimeoutConstant = 50;
    timeouts.WriteTotalTimeoutMultiplier = 10;

    if (!SetCommTimeouts(m_hComm, &timeouts)) {
        CloseHandle(m_hComm);
        return FALSE;
    }

    return TRUE;
}

void CSerialPort::Close() {
    if (m_hComm != INVALID_HANDLE_VALUE) {
        CloseHandle(m_hComm);
        m_hComm = INVALID_HANDLE_VALUE;
    }
}

BOOL CSerialPort::Write(const BYTE* pBuffer, DWORD dwBytesToWrite, DWORD* pdwBytesWritten) {
    return WriteFile(m_hComm, pBuffer, dwBytesToWrite, pdwBytesWritten, NULL);
}

BOOL CSerialPort::Read(BYTE* pBuffer, DWORD dwBytesToRead, DWORD* pdwBytesRead) {
    return ReadFile(m_hComm, pBuffer, dwBytesToRead, pdwBytesRead, NULL);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值