Newer
Older
PhaseMeasure / common / utils / QSerialPortUtil.cpp
tanyue on 30 Jun 2023 2 KB 20230630 适配串口
#include "QSerialPortUtil.h"

#include <QDebug>
#include <QTimer>
#include <QDateTime>
#include "common/utils/QByteUtil.h"

QSerialPortUtil::QSerialPortUtil(QObject *parent) : QObject(parent)
{
    // 其他默认配置
    serial.setDataBits(QSerialPort::Data8);
    serial.setParity(QSerialPort::NoParity);
    serial.setStopBits(QSerialPort::OneStop);
    serial.setFlowControl(QSerialPort::NoFlowControl);
}

void QSerialPortUtil::openSerialPort(QString portName, int baudRate)
{
    serial.setPortName(portName); // 串口名
    serial.setBaudRate(baudRate); // 波特率

    open = serial.open(QIODevice::ReadWrite);
    qDebug() << portName << baudRate << open;

    if (open == true)
    {
        // 绑定信号与槽
        connect(&serial, &QSerialPort::readyRead, this, &QSerialPortUtil::readData);

//        // mock data received per second
//        QTimer * timer = new QTimer(this);
//        lastValue = new double[16] {0.0};
//        connect(timer, &QTimer::timeout, this, &QSerialPortUtil::mockReceivData);
//        timer->start(1000);
    }
}

void QSerialPortUtil::sendData(QByteArray data)
{
    if (this->open == true)
    {
        qDebug() << data;
        serial.write(data);
    }
}

void QSerialPortUtil::readData()
{
    QByteArray buffer = serial.readAll();

    emit dataRecieved(buffer);
}

bool QSerialPortUtil::isOpen()
{
    return this->open;
}

void QSerialPortUtil::mockReceivData()
{
    QDateTime now = QDateTime::currentDateTime();

    QString frameId = now.toString("HHmmsszzz");

    QByteArray buffer;
    buffer.append(QByteUtil::hexStringToBytes(frameId.mid(0, 8)));

    for (int i = 1; i <= 4; i++)
    {
        int value = qrand() % 100 - 30;
        buffer.append(QByteUtil::hexStringToBytes("00800000")).append(QByteUtil::ULongToBytes(value + lastValue[i], 4));
        lastValue[i] += value;
    }

    for (int i = 5; i <= 16; i++)
    {
        buffer.append(QByteUtil::hexStringToBytes("0080000000000000"));
    }

    buffer.append(QByteUtil::hexStringToBytes("EEEEEEEE"));

    emit dataRecieved(buffer);
}