feat: AiAnalysis - 16通道AI数据UDP实时采集与分析
功能: - UDP端口监听,实时接收数据 - 解析16通道逗号分隔的ADC数据 - 实时波形绘制(支持滚轮缩放、右键拖拽、双击恢复) - 数据自动保存到 data_端口号/ 目录 - 支持打开历史CSV文件回放查看 - 16通道独立颜色,可切换显示/隐藏 - 深色主题界面
This commit is contained in:
52
udpreceiver.cpp
Normal file
52
udpreceiver.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
#include "udpreceiver.h"
|
||||
#include <QNetworkInterface>
|
||||
|
||||
UdpReceiver::UdpReceiver(QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_socket(new QUdpSocket(this))
|
||||
, m_port(0)
|
||||
{
|
||||
connect(m_socket, &QUdpSocket::readyRead, this, &UdpReceiver::onReadyRead);
|
||||
}
|
||||
|
||||
UdpReceiver::~UdpReceiver()
|
||||
{
|
||||
stop();
|
||||
}
|
||||
|
||||
bool UdpReceiver::start(quint16 port)
|
||||
{
|
||||
stop();
|
||||
m_port = port;
|
||||
|
||||
if (!m_socket->bind(QHostAddress::AnyIPv4, port, QUdpSocket::ShareAddress)) {
|
||||
emit errorOccurred(QString("无法绑定端口 %1: %2").arg(port).arg(m_socket->errorString()));
|
||||
return false;
|
||||
}
|
||||
|
||||
// 设置足够大的缓冲区
|
||||
m_socket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, 8 * 1024 * 1024);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void UdpReceiver::stop()
|
||||
{
|
||||
m_socket->close();
|
||||
m_port = 0;
|
||||
}
|
||||
|
||||
bool UdpReceiver::isRunning() const
|
||||
{
|
||||
return m_socket->state() == QAbstractSocket::BoundState;
|
||||
}
|
||||
|
||||
void UdpReceiver::onReadyRead()
|
||||
{
|
||||
while (m_socket->hasPendingDatagrams()) {
|
||||
QByteArray datagram;
|
||||
datagram.resize(m_socket->pendingDatagramSize());
|
||||
m_socket->readDatagram(datagram.data(), datagram.size());
|
||||
emit dataReceived(datagram);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user