diff --git a/src/widgets/atcoreinstancewidget.h b/src/widgets/atcoreinstancewidget.h --- a/src/widgets/atcoreinstancewidget.h +++ b/src/widgets/atcoreinstancewidget.h @@ -81,6 +81,7 @@ QWidget *m_advancedTab = nullptr; QWidget *m_connectWidget = nullptr; QSize m_bedSize; + QTimer *m_connectionTimer = nullptr; void buildConnectionToolbar(); void buildToolbar(); void checkTemperature(uint sensorType, uint number, float temp); diff --git a/src/widgets/atcoreinstancewidget.cpp b/src/widgets/atcoreinstancewidget.cpp --- a/src/widgets/atcoreinstancewidget.cpp +++ b/src/widgets/atcoreinstancewidget.cpp @@ -186,6 +186,14 @@ m_connectButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(this, &AtCoreInstanceWidget::disableDisconnect, m_connectButton, &QPushButton::setDisabled); connect(m_connectButton, &QPushButton::clicked, this, &AtCoreInstanceWidget::connectButtonClicked); + + m_connectionTimer = new QTimer(this); + m_connectionTimer->setInterval(20000); + m_connectionTimer->setSingleShot(true); + connect(m_connectionTimer, &QTimer::timeout, this, [this] { + m_connectButton->clicked(); + QMessageBox::critical(this, tr("Connection Error"), tr("Your machine did not respond after 20 seconds.\n\nBefore connecting again check that your printer is on and your are connecting using the correct BAUD Rate for your device.")); + }); } void AtCoreInstanceWidget::connectButtonClicked() @@ -374,6 +382,7 @@ static QString stateString; switch (newState) { case AtCore::CONNECTING: { + m_connectionTimer->start(); m_core.setSerialTimerInterval(0); m_connectButton->setText(i18n("Disconnect")); m_connectButton->setIcon(QIcon::fromTheme("network-disconnect", QIcon(QString(":/%1/disconnect").arg(m_theme)))); @@ -385,6 +394,9 @@ connect(&m_core, &AtCore::pushedCommand, m_logWidget, &LogWidget::appendSLog); } break; case AtCore::IDLE: { + if (m_connectionTimer->isActive()) { + m_connectionTimer->stop(); + } stateString = i18n("Connected to %1", m_core.connectedPort()); emit extruderCountChanged(m_core.extruderCount()); m_logWidget->appendLog(stateString); @@ -396,6 +408,9 @@ } } break; case AtCore::DISCONNECTED: { + if (m_connectionTimer->isActive()) { + m_connectionTimer->stop(); + } stateString = i18n("Not Connected"); disconnect(&m_core, &AtCore::receivedMessage, m_logWidget, &LogWidget::appendRLog); disconnect(&m_core, &AtCore::pushedCommand, m_logWidget, &LogWidget::appendSLog);