Now statuses have different colors. Various minor fixes

This commit is contained in:
Yury Shuvakin
2025-08-15 18:53:38 +09:00
parent 978f6ee04d
commit b861ce003c
11 changed files with 124 additions and 109 deletions

View File

@@ -2,13 +2,14 @@
#include <QDateTime>
#include <QDebug>
#include <QTimer>
#include <bitset>
BatteryController::BatteryController(
QObject *parent)
BatteryController::BatteryController(QObject *parent)
: QObject{parent}
{}
{
}
BatteryController::~BatteryController()
{
@@ -182,105 +183,71 @@ void BatteryController::setStatuses(const QVariantList& statuses)
emit statusesChanged();
}
void BatteryController::addStatus(const quint16 status)
void BatteryController::addStatus(const quint32 status)
{
// QString description;
// auto appendDescription = [&description](const QString& subStatus)
// {
// if (!description.isEmpty())
// {
// description += ", ";
// }
// description += subStatus;
// };
QStringList descriptionList;
auto appendDescription = [&descriptionList](const QString& subStatus)
QVariantList statusList;
auto appendStatus = [&statusList](const QVariant& subStatus)
{
descriptionList.append(subStatus);
statusList.append(subStatus);
};
std::bitset<16> descriptionBitset(status);
if (descriptionBitset.test(0))
QMap<qsizetype, QVariantList> statusBitDescriptions =
{
appendDescription("Ошибка Т датчика КП");
}
if (descriptionBitset.test(1))
{0, {"Ошибка Т датчика КП", StatusSeverity::Error}},
{1, {"Глубокий разряд АКБ", StatusSeverity::Error}},
{2, {"Заряд выполнен", StatusSeverity::Info}},
{3, {"Ошибка Т датчика УКПБ", StatusSeverity::Info}},
{4, {"Ток долго не снижается", StatusSeverity::Error}},
{5, {"Ошибка БПС3000", StatusSeverity::Error}},
{6, {"U менее 61.25 В", StatusSeverity::Error}},
{7, {"U выше нормы по КП", StatusSeverity::Error}},
{8, {"Останов первого заряда", StatusSeverity::Info}},
{9, {"Останов разряда", StatusSeverity::Info}},
{10, {"Останов повторного заряда", StatusSeverity::Info}},
{11, {"Более 45 градусов", StatusSeverity::Warning}},
{12, {"Разночтение в токах", StatusSeverity::Error}},
{13, {"Разночтение в напряжениях", StatusSeverity::Error}},
{14, {"Разночтение в температурах", StatusSeverity::Error}},
{15, {"Разночтение в емкости АКБ", StatusSeverity::Info}},
{16, {"Низкий разряд АКБ", StatusSeverity::Info}},
{17, {"Ошибка контрольного заряда", StatusSeverity::Error}},
};
for (auto it = statusBitDescriptions.constBegin(); it != statusBitDescriptions.constEnd(); ++it)
{
appendDescription("Низкий разряд АКБ");
}
if (descriptionBitset.test(2))
{
appendDescription("Заряд завершен");
}
if (descriptionBitset.test(3))
{
appendDescription("Ошибка Т датчика УКПБ");
if (status & (1 << it.key()))
{
appendStatus(it.value());
}
}
if (descriptionBitset.test(4))
if (statusList.isEmpty())
{
appendDescription("Ток долго не снижается");
}
if (descriptionBitset.test(5))
{
appendDescription("Ошибка БПС3000");
}
if (descriptionBitset.test(6))
{
appendDescription("U менее 61.25 В");
}
if (descriptionBitset.test(7))
{
appendDescription("U выше нормы по КП");
}
if (descriptionBitset.test(8))
{
appendDescription("Останов первого заряда");
}
if (descriptionBitset.test(9))
{
appendDescription("Останов разряда");
}
if (descriptionBitset.test(10))
{
appendDescription("Останов второго заряда");
}
if (descriptionBitset.test(11))
{
appendDescription("Более 45 гр. С");
}
if (descriptionBitset.test(12))
{
appendDescription("Разночтение в токах");
}
if (descriptionList.isEmpty())
{
appendDescription("Штатный режим");
appendStatus(QVariantList{"Штатный режим", StatusSeverity::Info});
}
statuses_.clear();
for (const auto& description: descriptionList)
for (const auto& statusVariant: statusList)
{
const auto statusDescription = statusVariant.toList();
if (statusDescription.size() < 2)
{
continue;
}
QVariantMap statusMap;
statusMap.insert("time", QDateTime::currentDateTime().toString("hh:mm:ss dd-MM-yyyy"));
statusMap.insert("status", "0x" + QString::number(status, 16).toUpper().rightJustified(2, '0'));
statusMap.insert("description", description);
statusMap.insert("description", statusDescription.at(0));
statusMap.insert("severity", statusDescription.at(1));
statuses_.append(statusMap);
}
emit statusesChanged();
// if (statuses_.isEmpty() || statuses_.first().toMap()["status"] != statusMap["status"])
// {
// qDebug() << "Status:" << statusMap["status"].toString() << statusMap["description"].toString();
// statuses_.prepend(statusMap);
// emit statusesChanged();
// }
}