Now statuses have different colors. Various minor fixes
This commit is contained in:
@@ -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();
|
||||
// }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user