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)) , port_(new QSerialPort(this))
{ {
connect(this, &DmxWidget::serialDataRead, this, &DmxWidget::parseMessageBuffer); 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)) if (!port_->open(QIODeviceBase::ReadWrite))
return; return;
ENTTEC::Widget::open(); 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()); emit connectedChanged(isConnected());
} }
@ -53,6 +76,7 @@ void DmxWidget::open()
void DmxWidget::close() void DmxWidget::close()
{ {
port_->close(); port_->close();
disconnect(port_, &QSerialPort::readyRead, nullptr, nullptr);
ENTTEC::Widget::close(); ENTTEC::Widget::close();
emit connectedChanged(isConnected()); emit connectedChanged(isConnected());
} }