206 lines
5.5 KiB
C++
Executable File
206 lines
5.5 KiB
C++
Executable File
/**
|
|
* @RDE_HEADER@
|
|
* HMI Plugin for Observer Controller - SelfTest Dialog
|
|
* $Id$
|
|
* $HeadURL$
|
|
* $Author$
|
|
* Created by Patric Karwat, SLSE, 2018-01-17
|
|
*/
|
|
|
|
#include "osc_selftest.h"
|
|
#include "ui_osc_selftest.h"
|
|
|
|
#include <QTimer>
|
|
#include <QStorageInfo>
|
|
|
|
#include <LtsUtilsSettings/settings.h>
|
|
|
|
namespace OcSituationClient
|
|
{
|
|
|
|
SelfTest::SelfTest(LtsSession::LtsSession *session, QWidget *parent)
|
|
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly)
|
|
, m_timer(nullptr)
|
|
, m_lastStatesTime(0)
|
|
, m_session(session)
|
|
, m_tabocDtc(nullptr)
|
|
, m_escDtc(nullptr)
|
|
, m_ui(new Ui::SelfTest)
|
|
, m_logger(getLogger("SelfTestDialog"))
|
|
{
|
|
m_ui->setupUi(this);
|
|
|
|
if ( m_session->getDtc<TrainingAreaBaseOC::DataInterface>(m_tabocDtc))
|
|
{
|
|
WARNING_LOG(m_logger) << "load tab settings";
|
|
connect(m_tabocDtc.get(), &TrainingAreaBaseOC::Interface::Dtc::technicalStateSfmChanged,
|
|
this, &SelfTest::onSfmStatusChanged);
|
|
|
|
onSfmStatusChanged(m_tabocDtc->technicalStateSfm(1), DataModification());
|
|
}
|
|
|
|
LtsUtils::ProjectSettings *ps = LtsUtils::ProjectSettings::getInstance();
|
|
const bool enableEffectShowManagement = ps->value(QStringLiteral("esm"), QStringLiteral("enableEffectShowManagement")).toBool();
|
|
if (!enableEffectShowManagement)
|
|
{
|
|
m_ui->lblEsc->hide();
|
|
m_ui->leEsc->hide();
|
|
}
|
|
else
|
|
{
|
|
m_timer = new QTimer(this);
|
|
if ( m_escDtc.get() != nullptr) {
|
|
connect(m_escDtc.get(), &EffectShowClient::Interface::Dtc::operatingConditionEntityChanged, this, &SelfTest::onEscOperationConditionChanged);
|
|
onEscOperationConditionChanged(m_escDtc->operatingConditionEntity(), DataModification());
|
|
connect(m_timer, &QTimer::timeout, this, &SelfTest::onCheckLastCondition);
|
|
m_timer->start(3000);
|
|
}
|
|
}
|
|
|
|
setOnlineHelpFilename(QStringLiteral("OC-Self_Test"));
|
|
|
|
} // end of ctor()
|
|
|
|
void SelfTest::onCheckLastCondition()
|
|
{
|
|
if ((m_session->partitionTime() - 10*1000) > m_lastStatesTime )
|
|
{
|
|
m_ui->leEsc->setText(tr("No Effect Show Connected"));
|
|
}
|
|
}
|
|
|
|
SelfTest::~SelfTest()
|
|
{
|
|
delete m_ui;
|
|
}
|
|
|
|
void SelfTest::retranslate()
|
|
{
|
|
translate(m_ui, tr("Self Test") );
|
|
}
|
|
|
|
QString SelfTest::getTechStatError(u_char errorID) const
|
|
{
|
|
switch (errorID)
|
|
{
|
|
case 1:
|
|
return tr("Error ROM");
|
|
case 2:
|
|
return tr("Error RAM");
|
|
case 3:
|
|
return tr("Error SCC1");
|
|
case 4:
|
|
return tr("Error SCC2");
|
|
case 5:
|
|
return tr("Error SCP");
|
|
case 10:
|
|
return tr("Error EEPROM");
|
|
case 11:
|
|
return tr("Error A/D-Converter");
|
|
case 12:
|
|
return tr("Error CAN");
|
|
case 13:
|
|
return tr("Error DUART A");
|
|
case 14:
|
|
return tr("Error DUART B");
|
|
case 20:
|
|
return tr("Error GPS");
|
|
case 21:
|
|
return tr("Error PUMA/T");
|
|
case 30:
|
|
return tr("Error Equipment Configuration");
|
|
case 31:
|
|
return tr("Error Exercise Configuration");
|
|
case 40:
|
|
return tr("Error Login");
|
|
case 41:
|
|
return tr("Error TETRA Registration");
|
|
case 42:
|
|
return tr("Error Transparent Channel O/C");
|
|
case 43:
|
|
return tr("Error Transparent Channel DMF");
|
|
default:
|
|
break;
|
|
}
|
|
return tr("Unknown Error (%1)").arg(errorID);
|
|
}
|
|
|
|
void SelfTest::onStatusHDD()
|
|
{
|
|
QStorageInfo storage(QCoreApplication::applicationFilePath());
|
|
if (storage.isValid() && storage.isReady())
|
|
{
|
|
quint64 freeBytesAvailable = storage.bytesAvailable();
|
|
quint64 bytesAvailable = storage.bytesTotal();
|
|
|
|
double percent = bytesAvailable ? 100.0 * freeBytesAvailable / bytesAvailable : 0;
|
|
|
|
m_ui->leDisk->setText(tr("%1% available (%2)").arg(QString::number(percent, 'f', 2), readableSize(freeBytesAvailable)));
|
|
}
|
|
else
|
|
{
|
|
m_ui->leDisk->setText(tr("Error reading available disk space"));
|
|
}
|
|
}
|
|
|
|
void SelfTest::onSfmStatusChanged(const TrainingAreaBaseOC::TechnicalStateSfm &data, DataModification modType)
|
|
{
|
|
|
|
Q_UNUSED(modType)
|
|
m_ui->leRadio->setText(data.radioAvailable() ? tr("Available") : tr("Not Available"));
|
|
m_ui->leLicense->setText(data.licensed() ? tr("Yes") : tr("No"));
|
|
m_ui->leSfm->setText(data.sfmConnected() ? tr("Connected") : tr("Not Connected"));
|
|
m_ui->leSfmMani->setText(data.manipulationSfm() ? tr("Yes") : tr("No"));
|
|
m_ui->leEquipmentMani->setText(data.manipulationEquipment() ? tr("Yes") : tr("No"));
|
|
m_ui->lblErrorCodes->setText(data.errorCode() > 0 ? getTechStatError(data.errorCode()) : QLatin1String(""));
|
|
onStatusHDD();
|
|
|
|
}
|
|
|
|
void SelfTest::onEscOperationConditionChanged(const EffectShowClient::OperatingConditionEntity &data, DataModification modType)
|
|
{
|
|
Q_UNUSED(modType)
|
|
|
|
QString feature = tr("Effect Show Connected: ");
|
|
switch (data.vehicleFeature().underlying())
|
|
{
|
|
case EffectShowManagement::Feature_e::Smoke:
|
|
feature += tr("Smoke");
|
|
break;
|
|
case EffectShowManagement::Feature_e::Explosion24:
|
|
feature += tr("Explosion (24)");
|
|
break;
|
|
case EffectShowManagement::Feature_e::Explosion48:
|
|
feature += tr("Explosion (48)");
|
|
break;
|
|
case EffectShowManagement::Feature_e::NotSpecified:
|
|
feature.clear();
|
|
break;
|
|
}
|
|
|
|
if (feature.isEmpty())
|
|
m_ui->leEsc->setText(tr("No Effect Show Connected"));
|
|
else
|
|
m_ui->leEsc->setText(feature);
|
|
|
|
m_lastStatesTime = m_session->partitionTime();
|
|
}
|
|
|
|
|
|
QString SelfTest::readableSize(quint64 bytes) const
|
|
{
|
|
if (bytes > TB)
|
|
return tr("%1 TB").arg((double) bytes / TB, 0, 'f', 2);
|
|
else if (bytes > GB)
|
|
return tr("%1 GB").arg((double) bytes / GB, 0, 'f', 2);
|
|
else if (bytes > MB)
|
|
return tr("%1 MB").arg((double) bytes / MB, 0, 'f', 2);
|
|
else if (bytes > KB)
|
|
return tr("%1 KB").arg((double) bytes / KB, 0, 'f', 2);
|
|
else
|
|
return tr("%1 Bytes").arg(bytes);
|
|
}
|
|
|
|
|
|
} // namespace OcSituationClient
|