diff --git a/src/reporting_thread.cpp b/src/reporting_thread.cpp index 200baa9..e27e44a 100644 --- a/src/reporting_thread.cpp +++ b/src/reporting_thread.cpp @@ -17,23 +17,23 @@ ReportingThread::~ReportingThread() { // each component which has connects for the corresponding signals. void ReportingThread::run() { - qCritical() << "START DOWNLOAD THREAD"; + qCritical() << QDateTime::currentDateTime() << "START DOWNLOAD THREAD"; - static QString status; + static QString report(""); -#if 0 int cnt = 5; - while (!m_hw->dcDownloadRunning()) { + while (!m_hw->dcDownloadGetRunning()) { if (--cnt > 0) { - status = QString("%1 waiting for download to start %2") + report = QString("%1 waiting for download to start %2") .arg(QDateTime::currentDateTime().toString(Qt::ISODate)) .arg(cnt); - qCritical() << __LINE__ << "STATUS" << status; - emit m_hw->hwapi_reportDCDownloadStatus(status); + qCritical() << __LINE__ << "STATUS" << report; + emit m_hw->hwapi_reportDCDownloadStatus(report); QThread::sleep(1); } else break; } +#if 0 if (cnt == 0) { m_hw->dcDownloadResetRequest(); status = QString("%1 reset download request") @@ -56,7 +56,6 @@ void ReportingThread::run() { return; } } -#endif uint16_t const tnr = 1750; uint16_t cnr = 0; @@ -66,11 +65,11 @@ void ReportingThread::run() { QString report(""); if (cnr > 0) { - double percent = (double)cnr / (double)tnr; - report = QString("total blocks %1, current block %2 [%3%]") + double percent = ((double)cnr / (double)tnr) * 100.0; + report = QString(": total blocks %1, current block %2 [%3]") .arg(tnr).arg(cnr).arg(percent, 0, 'f', 2); } else { - report = QString("total blocks %1, current block %2 [0]") + report = QString(": total blocks %1, current block %2 [0]") .arg(tnr).arg(cnr); } status = QDateTime::currentDateTime().toString(Qt::ISODate) + report; @@ -90,38 +89,67 @@ void ReportingThread::run() { .arg(m_fileToDownload).arg(tnr).arg(cnr)); } -#if 0 - - while (m_hw->dcDownloadRunning()) { - uint16_t const cnr = m_hw->dcDownloadGetCurrentBlockNumber(); - uint16_t const tnr = m_hw->dcDownloadGetTotalBlockNumber(); - - QString report(""); - - if (cnr > 0) { - report = QString("total blocks %1, current block %2 [%3]") - .arg(tnr).arg(cnr).arg((double)(tnr)/(double(cnr))); - } else { - report = QString("total blocks %1, current block %2 [0]") - .arg(tnr).arg(cnr); - } - - emit m_hw->hwapi_reportDCDownloadStatus(QString("XXXXX") + QDateTime::currentDateTime().toString(Qt::ISODate)); - emit m_hw->hwapi_reportDCDownloadStatus(report); - } - - uint16_t const cnr = m_hw->dcDownloadGetCurrentBlockNumber(); - uint16_t const tnr = m_hw->dcDownloadGetTotalBlockNumber(); - - if (tnr == cnr) { - m_hw->hwapi_reportDCDownloadSuccess( - QString("SUCCESS DOWNLOADING") + m_fileToDownload); - } else { - m_hw->hwapi_reportDCDownloadFailure( - QString("ERROR DOWNLOADING %1 (total blocks=%2, sent blocks=%3)") - .arg(m_fileToDownload).arg(tnr).arg(cnr)); - } #endif - qCritical() << "FINISH DOWNLOAD THREAD"; + uint16_t const totalBlocks = m_hw->dcDownloadGetTotalBlockNumber(); + + qCritical() << QDateTime::currentDateTime() << "TOTAL BLOCKS" << totalBlocks; + + if (totalBlocks) { + qint64 const start = QDateTime::currentMSecsSinceEpoch(); + double durationMillis = 0; + uint16_t currentBlockNumber = 0; + + while (m_hw->dcDownloadGetRunning()) { + currentBlockNumber = m_hw->dcDownloadGetCurrentBlockNumber(); + + durationMillis += QDateTime::currentMSecsSinceEpoch() - start; + + double const timeAveragePerBlock = (currentBlockNumber > 0) ? (durationMillis / currentBlockNumber) : durationMillis; + double const estimatedSecondsLeft = (timeAveragePerBlock * (totalBlocks - currentBlockNumber)) / 1000.0; + + double percent = ((double)currentBlockNumber / (double)totalBlocks) * 100.0; + report = QString(": total blocks %1, current block %2 [%3] (est. time left: %4s)") + .arg(totalBlocks) + .arg(currentBlockNumber) + .arg(percent, 0, 'f', 2) + .arg(estimatedSecondsLeft, 0, 'f', 2); + + qCritical() << "RT report" << report; + + emit m_hw->hwapi_reportDCDownloadStatus(report); + QThread::msleep(100); + } + + QThread::msleep(100); + + if (totalBlocks == currentBlockNumber) { + m_hw->hwapi_reportDCDownloadSuccess( + QString("SUCCESS DOWNLOADING") + m_fileToDownload); + } else { + m_hw->hwapi_reportDCDownloadFailure( + QString("ERROR DOWNLOADING %1 (total blocks=%2, sent blocks=%3)") + .arg(m_fileToDownload).arg(totalBlocks).arg(currentBlockNumber)); + } + } + + qCritical() << QDateTime::currentDateTime() << __PRETTY_FUNCTION__ + << QString("line=%1 REPORT THREAD ABOUT TO FINISH").arg(__LINE__); + + cnt = 10; + + bool running = m_hw->dcDownloadGetRunning(); + bool finished = m_hw->dcDownloadGetFinished(); + + while (--cnt > 0 && (running && !finished)) { + qCritical() << QDateTime::currentDateTime() << __PRETTY_FUNCTION__ + << QString("line=%1 REPORT THREAD: WAIT FOR END OF DOWNLOAD THREAD %2 %3 (%4)") + .arg(__LINE__).arg(running).arg(finished).arg(cnt); + QThread::sleep(1); + running = m_hw->dcDownloadGetRunning(); + finished = m_hw->dcDownloadGetFinished(); + } + + qCritical() << QDateTime::currentDateTime() << __PRETTY_FUNCTION__ + << QString("line=%1 FINISH REPORT THREAD").arg(__LINE__); }