From 9df46a1c497300b10bba931bc23484522e401e73 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Sat, 9 Sep 2023 14:53:36 +0200 Subject: [PATCH] Add some debug output to openSerial(). --- update.cpp | 74 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 60 insertions(+), 14 deletions(-) diff --git a/update.cpp b/update.cpp index 38e0d28..848cdfe 100644 --- a/update.cpp +++ b/update.cpp @@ -257,31 +257,77 @@ bool Update::startBootloader() const { // deprecated } qCritical() << "starting bootloader...FAILED" << QThread::currentThread(); return false; +#endif } bool Update::stopBootloader() const { - qDebug() << "stopping bootloader..."; - int nTry = 5; - while (--nTry >= 0) { - m_hw->bl_stopBL(); - QThread::msleep(500); - if (!m_hw->bl_isUp()) { - qInfo() << "stopping bootloader...OK"; - return true; + // stop bootloader: this MUST work -> otherwise the PSA has to be restarted + // manually + emit m_worker->showErrorMessage("dc update", "stopping bootloader..."); + + int nTryFinalize = 1; // could do this in an endless loop + + do { + // in principle, any value except BL_STOP will do, as we want to detect + // change to BL_STOP + m_worker->mainWindow()->setUpdateStep(UpdateDcEvent::UpdateStep::BL_CHECK); + + QApplication::postEvent( + m_worker->mainWindow(), + new UpdateDcEvent(m_worker, UpdateDcEvent::UpdateStep::BL_STOP, nTryFinalize)); + + QThread::sleep(1); + + int const cntLimit = 20; + int cnt = 0; + while (++cnt < cntLimit && + m_worker->mainWindow()->updateStep() != UpdateDcEvent::UpdateStep::BL_STOP) { + // wait until bl_stopBL() has been sent + QThread::msleep(500); } - } - qCritical() << "stopping bootloader...FAILED"; - return false; + + QApplication::postEvent( + m_worker->mainWindow(), + new UpdateDcEvent(m_worker, UpdateDcEvent::UpdateStep::BL_CHECK, nTryFinalize)); + QThread::sleep(1); + + QApplication::postEvent( + m_worker->mainWindow(), + new UpdateDcEvent(m_worker, UpdateDcEvent::UpdateStep::BL_IS_UP, nTryFinalize)); + QThread::sleep(1); + + cnt = 0; + while (++cnt < cntLimit && + m_worker->mainWindow()->updateStep() != UpdateDcEvent::UpdateStep::BL_IS_DOWN) { + // wait until done + QThread::msleep(200); + } + + } while (++nTryFinalize <= MainWindow::BL_STOP_COUNT && + m_worker->mainWindow()->updateStep() != UpdateDcEvent::UpdateStep::BL_IS_DOWN); + + return (m_worker->mainWindow()->updateStep() == UpdateDcEvent::UpdateStep::BL_IS_DOWN); } // br is a index into a table, used for historical reasons. bool Update::openSerial(int br, QString baudrate, QString comPort) const { qDebug() << "opening serial" << br << baudrate << comPort << "..."; - if (m_hw->dc_openSerial(br, baudrate, comPort, 1)) { // 1 for connect - qInfo() << "opening serial" << br << baudrate << comPort << "...OK"; + if (m_hw->dc_openSerial(br, baudrate, comPort, 1) == true) { // 1 for connect + Utils::printInfoMsg( + QString("OPENING SERIAL %1").arg(br) + + " " + baudrate + " " + comPort + "...OK"); + + // m_hw->dc_autoRequest(true); + m_hw->dc_autoRequest(false); + QThread::sleep(1); + + Utils::printInfoMsg(QString("IS PORT OPEN %1").arg(m_hw->dc_isPortOpen())); return true; } - qCritical() << "opening serial" << br << baudrate << comPort << "...FAILED"; + + Utils::printCriticalErrorMsg( + QString("OPENING SERIAL %1").arg(br) + + " " + baudrate + " " + comPort + "...FAILED"); return false; }