diff --git a/platform/qt/dmxwidget/dmxwidget.cpp b/platform/qt/dmxwidget/dmxwidget.cpp index a3f5a69..23a8bc8 100644 --- a/platform/qt/dmxwidget/dmxwidget.cpp +++ b/platform/qt/dmxwidget/dmxwidget.cpp @@ -28,10 +28,6 @@ DmxWidget::DmxWidget(QObject *parent) , port_(new QSerialPort(this)) { connect(this, &DmxWidget::serialDataRead, this, &DmxWidget::parseMessageBuffer); - connect(port_, &QSerialPort::readyRead, this, [this]() { - message_rx_buffer_.append(port_->readAll()); - emit serialDataRead(); - }); } @@ -46,6 +42,33 @@ void DmxWidget::open() if (!port_->open(QIODeviceBase::ReadWrite)) return; ENTTEC::Widget::open(); + + getSerialNumber(); + getParameters(0); + if (port_->waitForReadyRead(500) && port_->bytesAvailable() >= 19) + { + char snhead[] = {ENTTEC::Pro::START_DELIMITER, + ENTTEC::Pro::OpGetWidgetSerial, + 0x04, 0x00}; // expect 4 bytes of message data + message_rx_buffer_.append(port_->readAll()); + if (!message_rx_buffer_.startsWith(snhead)) + { + message_rx_buffer_.clear(); + close(); + return; + } + parseMessageBuffer(); + } + else + { + close(); + return; + } + + connect(port_, &QSerialPort::readyRead, this, [this]() { + message_rx_buffer_.append(port_->readAll()); + emit serialDataRead(); + }); emit connectedChanged(isConnected()); } @@ -53,6 +76,7 @@ void DmxWidget::open() void DmxWidget::close() { port_->close(); + disconnect(port_, &QSerialPort::readyRead, nullptr, nullptr); ENTTEC::Widget::close(); emit connectedChanged(isConnected()); }