Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

+205
View File
@@ -0,0 +1,205 @@
/**
* @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