diff --git a/src/MPDeviceBleImpl.cpp b/src/MPDeviceBleImpl.cpp index 437c4048..ba493e7f 100644 --- a/src/MPDeviceBleImpl.cpp +++ b/src/MPDeviceBleImpl.cpp @@ -1229,11 +1229,15 @@ void MPDeviceBleImpl::getBattery() } } -void MPDeviceBleImpl::nihmReconditioning(bool enableRestart) +void MPDeviceBleImpl::nihmReconditioning(bool enableRestart, int ratedCapacity) { auto *jobs = new AsyncJobs("NiMH Reconditioning", mpDev); m_nimhResultSec = 0; + /* This is just proporional calculation */ + m_nimhRestartUnderSec = RECONDITION_RESTART_UNDER_SECS_STOCK * 300 / ratedCapacity; + auto restartUnder = m_nimhRestartUnderSec; + jobs->append(new MPCommandJob(mpDev, MPCmd::NIMH_RECONDITION, [this](const QByteArray &data, bool &) { const auto payload = bleProt->getFullPayload(data); @@ -1255,12 +1259,12 @@ void MPDeviceBleImpl::nihmReconditioning(bool enableRestart) return true; })); - connect(jobs, &AsyncJobs::finished, [this, enableRestart](const QByteArray &data) + connect(jobs, &AsyncJobs::finished, [this, enableRestart, restartUnder, ratedCapacity](const QByteArray &data) { Q_UNUSED(data) qDebug() << "NiMH Reconditioning finished"; bool restarted = false; - if (enableRestart && m_nimhResultSec < RECONDITION_RESTART_UNDER_SECS) + if (enableRestart && m_nimhResultSec < restartUnder) { restarted = true; } @@ -1268,7 +1272,7 @@ void MPDeviceBleImpl::nihmReconditioning(bool enableRestart) [this, restarted, result = m_nimhResultSec](){emit nimhReconditionFinished(true, QString::number(result), restarted);}); if (restarted) { - nihmReconditioning(true); + nihmReconditioning(true, ratedCapacity); } }); diff --git a/src/MPDeviceBleImpl.h b/src/MPDeviceBleImpl.h index 58104215..a903716b 100644 --- a/src/MPDeviceBleImpl.h +++ b/src/MPDeviceBleImpl.h @@ -123,7 +123,7 @@ class MPDeviceBleImpl: public QObject void readBatteryPercent(const QByteArray& statusData); void getBattery(); - void nihmReconditioning(bool enableRestart); + void nihmReconditioning(bool enableRestart, int ratedCapacity); void getSecurityChallenge(const QString& key, const MessageHandlerCb &cb); void processDebugMsg(const QByteArray& data, bool& isDebugMsg); @@ -252,6 +252,7 @@ public slots: bool m_enforceLayout = false; quint32 m_nimhResultSec = 0; + quint32 m_nimhRestartUnderSec = RECONDITION_RESTART_UNDER_SECS_STOCK; int m_miniFilePartCounter = 0; @@ -290,8 +291,9 @@ public slots: static constexpr int SET_BLE_NAME_BUNDLE_VERSION = 9; static constexpr int WAKEUP_DEVICE_BUNDLE_VERSION = 10; static constexpr int POINTED_TO_ADDR_SIZE = 2; - static constexpr int PLATFORM_SERIAL_NUM_FIRST_BYTE = 16; - static constexpr int RECONDITION_RESTART_UNDER_SECS = 2500; + static constexpr int PLATFORM_SERIAL_NUM_FIRST_BYTE = 16; + static constexpr int STOCK_BATTERY_CAPACITY_MAH = 300; + static constexpr int RECONDITION_RESTART_UNDER_SECS_STOCK = 2500; const QByteArray DEFAULT_BUNDLE_PASSWORD = "\x63\x44\x31\x91\x3a\xfd\x23\xff\xb3\xac\x93\x69\x22\x5b\xf3\xc0"; const QString DEFAULT_BLE_NAME = "Mooltipass Mini BLE"; }; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 7fdd8496..2c3082eb 100755 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -2030,7 +2030,14 @@ bool MainWindow::validateSerialString(const QString &serialStr, uint &serialNum) void MainWindow::displayReconditionWaitScreen(double lastElapsedTime) { - QString lastElapsedText = lastElapsedTime > 0 ? QString("
Recondition restarted. Last elapsed time: %1 seconds
").arg(lastElapsedTime) : ""; + /* FixMe: This should come from MPDeviceBLEImpl.cpp */ + //RECONDITION_RESTART_UNDER_SECS_STOCK * 300 / ratedCapacity + auto ratedCapacityTime = 2500 * 300 / ui->exp_capacity->value(); + auto currentCapacity = 2500 * lastElapsedTime / 300; + + QString lastElapsedText = lastElapsedTime > 0 ? + QString("Recondition restarted. Last elapsed time: %1 seconds (~ %2 mAh)
Need at least %3 seconds for rated %4 mAh capacity
") + .arg(lastElapsedTime).arg(currentCapacity).arg(ratedCapacityTime).arg(ui->exp_capacity->value()) : ""; ui->labelWait->show(); ui->labelWait->setText(tr("NiMH Recondition is in progress.
%1Please wait.
").arg(lastElapsedText)); ui->stackedWidget->setCurrentWidget(ui->pageWaiting); @@ -2356,7 +2363,7 @@ void MainWindow::on_pushButtonNiMHRecondition_clicked() if (btn == QMessageBox::Ok) { - wsClient->sendNiMHReconditioning(ui->checkBoxContinueRecondition->isChecked()); + wsClient->sendNiMHReconditioning(ui->checkBoxContinueRecondition->isChecked(), ui->exp_capacity->value()); displayReconditionWaitScreen(); } } diff --git a/src/MainWindow.ui b/src/MainWindow.ui index 4e823c23..8481891d 100644 --- a/src/MainWindow.ui +++ b/src/MainWindow.ui @@ -7,7 +7,7 @@