clumsy synchronous read for opening

This commit is contained in:
Kevin Matz 2023-04-14 10:16:27 -04:00
parent 66410fdf22
commit 379ae89cb6

View File

@ -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());
}