Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Proxies/TrainingAreaBase/Plugins/UAS/from_tab.cpp
T
torstenandCopilot 7a6be7474e Qt6 migration: Fix BUILD_RTI=OFF build errors in TrainingAreaBase
- training_area_telegrams.cpp: Fixed QJsonObject initializer syntax (Qt6 requires {{}} not ({}))
- training_area_telegrams.cpp: Fixed fromJson() methods to access m_* members directly
- training_area_telegrams.cpp: Fixed brace mismatches in multiple toJson() methods
- training_area_telegrams.h: Changed Header struct to public members for consistency
- tx_mixin.cpp: Fixed getEquipmentNumber() template for direct member access
- lts_coordinate.cpp: Added missing #include <iomanip>
- MIGRATION_STATUS.md: Added migration progress tracking document

C++17 constraint enforced due to RTI Connext DDS 7.7.0 incompatibility with C++20+

Build status: BUILD_RTI=OFF successful (0 errors, warnings only)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-23 20:49:23 +02:00

243 lines
6.0 KiB
C++
Executable File

#include "from_tab.h"
#include "uav_ia_manager.h"
#include <NGLLogger/NGLLoggerBootstrap.h>
#include <ProjectDataManagement/pdm_dtc.h>
#include <TrainingAreaBase/recv_from_tab.h>
#include <QtCore/QJsonDocument>
#include <QtCore/QJsonObject>
namespace UAS
{
FromTab::FromTab(const std::shared_ptr<TrainingAreaBase::DdsHandler> &ddsHandler,
const std::shared_ptr<TrainingAreaBase::RecvFromTab> &sendToDds,
UAVInterfaceAdapterManager *uavIAManager, int exerciseId)
: m_isConnected(false)
, m_dtcPdm(ProjectDataManagement::Interface::Dtc::create(ddsHandler->ddsConnector()))
, m_dtcPpm(ParticipantManagement::Interface::Dtc::create(ddsHandler->ddsConnector()))
, m_sendToDds(sendToDds)
, m_uavIAManager(uavIAManager)
, m_exerciseId(exerciseId)
.getNGLLogger("FromTab"))
{
m_dtcPpm->enableUAS();
m_dtcPpm->enableParticipant();
}
TrainingAreaBase::SendToTab::HandleState FromTab::canHandleTelegram(int equipmentNumber, int telegramId) const
{
bool found = false;
const auto &uasList = m_dtcPpm->uASs();
for (const auto &uas : uasList)
{
if (uas.exerciseId() != m_exerciseId)
{
continue;
}
const auto &part = m_dtcPpm->participant(uas.participantId());
if (!part.equipmentNumber().is_set())
{
continue;
}
if (part.equipmentNumber().get() == equipmentNumber)
{
found = true;
break;
}
}
using namespace TrainingAreaBase::TetraIcd;
if (!found)
{
return HandleState::No;
}
if (telegramId == Constraints<UAVPerformMission>::id())
{
return HandleState::YesConsume;
}
if (telegramId == Constraints<UAVChangeState>::id())
{
return HandleState::YesConsume;
}
if (telegramId == Constraints<CesHitRequest>::id())
{
return HandleState::YesShare;
}
if (telegramId == Constraints<DemandVulnerabilityStateChange>::id())
{
return HandleState::YesConsume;
}
if (telegramId == Constraints<Init>::id())
{
return HandleState::YesConsume;
}
return HandleState::No;
}
bool FromTab::txData(const TrainingAreaBase::TetraIcd::Init &data)
{
if (!data.resetVulnerabilityState)
{
return false;
}
TrainingAreaBase::TetraIcd::StateChange msg;
msg.header.equipmentNumber = data.header.equipmentNumber;
msg.header.timeStamp = QDateTime::currentMSecsSinceEpoch();
msg.originatorId = data.workstationId;
msg.originatorType = TrainingAreaBase::TetraIcd::OriginatorType::ExerciseControl;
msg.tasVitality = 100;
msg.vulnerabilityBits = 0;
msg.vulnerabilityState = TrainingAreaBase::TetraIcd::VulnerabilityState::CombatReady;
m_sendToDds->rxData(msg);
return true;
}
bool FromTab::txData(const TrainingAreaBase::TetraIcd::UAVPerformMission &data)
{
const int eqId = data.header.equipmentNumber;
DEBUG_LOG(m_logger) << "eqId: " << eqId;
const ParticipantManagement::Participant p = m_dtcPpm->participant(m_dtcPpm->participantIdByEquipmentNumber(eqId));
if (p.id() <= 0)
{
WARNING_LOG(m_logger) << "participant not found - stop";
return false;
}
const auto &action = data.actions.front();
if (!m_uavIAManager->waypoint(p.id(), action.absPosition, QStringLiteral("%1_%2").arg(data.missionId).arg(data.missionName)))
{
WARNING_LOG(m_logger) << "sending waypoint failed!";
return false;
}
return true;
}
bool FromTab::txData(const TrainingAreaBase::TetraIcd::UAVChangeState &data)
{
const int eqId = data.header.equipmentNumber;
const ParticipantManagement::Participant p = m_dtcPpm->participant(m_dtcPpm->participantIdByEquipmentNumber(eqId));
if (p.id() <= 0)
{
WARNING_LOG(m_logger) << "participant not found - stop";
return false;
}
switch (data.requestedState)
{
case TrainingAreaBase::TetraIcd::UAVState::Auto:
return m_uavIAManager->tryChangeModeToAuto(p.id());
default:
return true;
}
return true;
}
bool FromTab::txData(const TrainingAreaBase::TetraIcd::CesHitRequest &data)
{
DEBUG_LOG(m_logger) << "data.chargeTasCodeDirect = " << data.chargeTasCodeDirect;
if (!m_dtcPdm->isJamming(data.chargeTasCodeDirect,0,0))
{
WARNING_LOG(m_logger) << "not jamming";
return false;
}
DEBUG_LOG(m_logger) << "participantEventChanged: JAMMING! chargetasCodeDirect = " << data.chargeTasCodeDirect;
const int eqId = data.header.equipmentNumber;
const ParticipantManagement::Participant p = m_dtcPpm->participant(m_dtcPpm->participantIdByEquipmentNumber(eqId));
if (p.id() <= 0)
{
WARNING_LOG(m_logger) << "participant not found - stop";
return false;
}
m_uavIAManager->kill(p.id());
TrainingAreaBase::TetraIcd::StateChangeDirect msg;
msg.chargeTypeId = data.chargeTasCodeDirect;
msg.header.equipmentNumber = eqId;
msg.header.timeStamp = data.header.timeStamp;
msg.vulnerabilityState = TrainingAreaBase::TetraIcd::VulnerabilityState::CatastrophicKill;
msg.originatorId = data.originatorEquipmentNumber;
DEBUG_LOG(m_logger) << "sending state change direct (kill) with jamming for eqId " << msg.header.equipmentNumber;
m_sendToDds->rxData(msg);
return true;
}
bool FromTab::txData(const TrainingAreaBase::TetraIcd::DemandVulnerabilityStateChange &data)
{
const auto p = m_dtcPpm->participantIdByEquipmentNumber(data.header.equipmentNumber);
const auto &pData = m_dtcPpm->dynamicParticipantData(p);
for (const auto &dyn : pData.stateHistory())
{
if (dyn.vulnerabilityState() == ProjectDataManagement::VulnerabilityState::CatastrophicKill)
{
return false;
}
}
TrainingAreaBase::TetraIcd::StateChange msg;
msg.header.equipmentNumber = data.header.equipmentNumber;
msg.header.timeStamp = QDateTime::currentMSecsSinceEpoch();
msg.originatorId = data.workstationId;
msg.originatorType = TrainingAreaBase::TetraIcd::OriginatorType::ExerciseControl;
msg.tasVitality = 0;
msg.vulnerabilityBits = 0;
msg.vulnerabilityState = data.reqestedState;
m_sendToDds->rxData(msg);
return true;
}
bool FromTab::txData(const TrainingAreaBase::TetraIcd::OcCommand &data)
{
Q_UNUSED(data)
return false;
}
}