/** * Write XDR telegrams to a directory * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2016-04-14 */ #include "tetra_handler_tx.h" #include #include namespace WlsTetra { TetraHandlerTx::TetraHandlerTx() : QObject() , SendToTab() , m_logger(getLogger("TetraHandlerTx")) { resetSendCounter(); } TrainingAreaBase::SendToTab::HandleState TetraHandlerTx::canHandleTelegram(int equipmentNumber, int telegramId) const { if (!m_bConnected) return HandleState::No; using namespace TrainingAreaBase::TetraIcd; if (telegramId == Constraints::id() || telegramId == Constraints::id()) return HandleState::YesShare; Q_UNUSED(equipmentNumber) return HandleState::YesFallback; } void TetraHandlerTx::resetSendCounter() { m_sendCounter = 1; // start at 1 } bool TetraHandlerTx::sendTele(const QByteArray &ba) { const QJsonDocument doc(QJsonDocument::fromJson(ba)); QJsonObject obj = doc.object(); const QJsonValue typeId = obj[QStringLiteral("typeId")]; if (typeId.toInt() == TrainingAreaBase::TetraIcd::TelegramId::BESTAETIGUNG) { TRACE_LOG(m_logger) << "Outgoing ack"; emit outgoingMessage(ba); return true; } obj[QStringLiteral("counter")] = m_sendCounter++; const QByteArray baToSend = QJsonDocument(obj).toJson(QJsonDocument::Compact); DEBUG_LOG(m_logger) << "Outgoing message: " << typeId.toInt(); emit outgoingMessage(baToSend); return true; } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::Acknowledge &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::DemandBite &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::Init &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::SetVulnerabilityModel &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::DemandEquipmentConfigurationReport &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::DemandVulnerabilityStateChange &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::LanguageSelection &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::EquipmentMessage &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::EquipmentMessageOC &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::CreateSingleExplosion &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::CreateAreaExplosion &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::CreateMineArea &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::MineAreaSingleMineState &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::CreateNContamination &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::CreateCContamination &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::DeactivateEffectSimulation &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::ModifyAreaEffectSimulationName &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::PauseEffectSimulation &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::ResumeEffectSimulation &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::MineTriggered &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::DusMineReactivation &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::CreateFunctionalArea &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::CreateDusSingleMine &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::ExerciseEnvironmentData &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::ExerciseStateData &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::ParticipantSwVersionsRequest &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::OpaquePayloadDataOut &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::TechnicalArea &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::CesHitInformation &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::CesHitRequest &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::ParticipantMode &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::DemandParticipantMode &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::ParticipantConfiguration &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::DemandParticipantConfiguration &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::ExerciseEquipmentAssignmentComplete &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::Sanitation &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::SelectiveReammunition &data) { DEBUG_LOG(m_logger) << " TetraHandlerTx::txData: SelectiveReammunition"; return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::SetDevicePowerRequest &data) { return sendToTx(&data); } bool TetraHandlerTx::txData(const TrainingAreaBase::TetraIcd::UAVPerformMission &data) { Q_UNUSED(data); return false; } bool TetraHandlerTx::sendToTx(const TrainingAreaBase::TetraIcd::TrainingAreaTelegram *data) { if (!m_bConnected) return false; QJsonObject obj; obj[QStringLiteral("data")] = data->toJson(); obj[QStringLiteral("type")] = data->type(); obj[QStringLiteral("typeId")] = data->id(); if (data->id() != TrainingAreaBase::TetraIcd::TelegramId::BESTAETIGUNG) obj[QStringLiteral("counter")] = m_sendCounter++; const QByteArray ba = QJsonDocument(obj).toJson(QJsonDocument::Compact); if (data->id() != TrainingAreaBase::TetraIcd::TelegramId::BESTAETIGUNG) DEBUG_LOG(m_logger) << "Sending tele: " << ba; emit outgoingMessage(ba); return true; } } // namespace WlsTetra