/** * Write XDR telegrams to a directory * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2016-04-14 */ #include "convert_to_json.h" #include #include #include namespace TetraRadio { ConvertToJson::ConvertToJson(const char *loggerName) : QObject() , SendToTab() , m_bConnected(false) , m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger().getNGLLogger(loggerName)) { resetSendCounter(); } ConvertToJson::~ConvertToJson() {} TrainingAreaBase::SendToTab::HandleState ConvertToJson::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 ConvertToJson::resetSendCounter() { m_sendCounter = 1; // start at 1 } bool ConvertToJson::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) { NOTICE_LOG(m_logger) << "Outgoing ack"; emit outgoingMessage(ba); return true; } obj[QStringLiteral("counter")] = m_sendCounter++; const QByteArray baToSend = QJsonDocument(obj).toJson(QJsonDocument::Compact); NOTICE_LOG(m_logger) << "Outgoing message: " << typeId.toInt(); emit outgoingMessage(baToSend); return true; } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::Acknowledge &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::DemandBite &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::Init &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::SetVulnerabilityModel &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::DemandEquipmentConfigurationReport &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::DemandVulnerabilityStateChange &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::LanguageSelection &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::EquipmentMessage &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::EquipmentMessageOC &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::CreateSingleExplosion &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::CreateAreaExplosion &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::CreateMineArea &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::MineAreaSingleMineState &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::CreateNContamination &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::CreateCContamination &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::DeactivateEffectSimulation &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::ModifyAreaEffectSimulationName &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::PauseEffectSimulation &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::ResumeEffectSimulation &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::MineTriggered &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::DusMineReactivation &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::CreateFunctionalArea &data) { return sendToTx(&data); } bool TetraRadio::ConvertToJson::txData(const TrainingAreaBase::TetraIcd::CreateDusSingleMine &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::ExerciseEnvironmentData &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::ExerciseStateData &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::ParticipantSwVersionsRequest &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::OpaquePayloadDataOut &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::TechnicalArea &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::CesHitInformation &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::CesHitRequest &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::ParticipantMode &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::DemandParticipantMode &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::ParticipantConfiguration &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::DemandParticipantConfiguration &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::ExerciseEquipmentAssignmentComplete &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::Sanitation &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::SelectiveReammunition &data) { DEBUG_LOG(m_logger) << "ConvertToJson::txData SelectiveReammunition"; return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::SetDevicePowerRequest &data) { return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::OcCommand &data) { DEBUG_LOG(m_logger) << "ConvertToJson::txData OcCommand"; return sendToTx(&data); } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::UAVPerformMission &data) { Q_UNUSED(data); return false; } bool ConvertToJson::txData(const TrainingAreaBase::TetraIcd::UAVChangeState &data) { Q_UNUSED(data); return false; } bool ConvertToJson::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 TetraRadio