#include "send_to_dds.h" #include #include #include "main_handler.h" namespace TrainingAreaBaseOC { SendToDds::SendToDds(MainHandler *mainHandler) : m_dtsTaboc(mainHandler->dds()->dtsTaboc()) , m_dtsTab(mainHandler->dds()->dtsTab()) , m_utmCoord(LtsCoordTrans::UtmCoordinate()) , m_idToSend(1), m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger()) {} void SendToDds::rxData(const OcTelegrams::Display &inData) { if (0 == inData.multiplexer) { TrainingAreaBaseOC::ShortMessage outData; outData.id = m_idToSend++; outData.textType = static_cast(inData.textType); outData.indexVbg = inData.indexVbg; outData.indexVba = inData.indexVba; outData.timeStamp = QDateTime::currentDateTimeUtc().toMSecsSinceEpoch(); m_dtsTaboc->publish(outData); } else { TrainingAreaBaseOC::FreeText outData; outData.id = m_idToSend++; outData.text = inData.text.data(); outData.timeStamp = QDateTime::currentDateTimeUtc().toMSecsSinceEpoch(); m_dtsTaboc->publish(outData); } } void SendToDds::rxData(const OcTelegrams::TimeSync &inData) { TrainingAreaBaseOC::TimeSync outData; outData.id = 1; outData.gpsTime = inData.gpsTimeMsec; outData.timezone = inData.timezone; m_dtsTaboc->publish(outData); } void SendToDds::rxData(const OcTelegrams::SpecificsExercise &inData) { m_utmCoord = LtsCoordTrans::UtmCoordinate::fromMgrs(QString::number(inData.zone) + QLatin1Char(inData.band) + QString::fromLatin1(inData.square) + QString::number(inData.northing).rightJustified(7, QLatin1Char('0')) + QString::number(inData.easting).rightJustified(7, QLatin1Char('0'))); TrainingAreaBaseOC::SpecificsExercise outData; outData.id = 1; outData.exerciseId = inData.exerciseId; outData.zone = inData.zone; outData.band = inData.band; outData.square = inData.square.data(); outData.easting = inData.easting; outData.northing = inData.northing; m_dtsTaboc->publish(outData); } void SendToDds::rxData(const OcTelegrams::SpecificsEquipment &inData) { TrainingAreaBaseOC::SpecificsEquipment outData; outData.id = 1; outData.equipmentNumber = inData.equipmentNumber; outData.playerType = inData.playerType; outData.language = static_cast(inData.language); outData.pyrotechnics = inData.pyrotechnics; outData.voiceOutput = inData.voiceOutput; outData.exerciseBreak = inData.exerciseBreak; m_dtsTaboc->publish(outData); } void SendToDds::rxData(const OcTelegrams::TechnicalStateSfm &inData) { TrainingAreaBaseOC::TechnicalStateSfm outData; outData.id = 1; outData.sfmConnected = inData.sfmConnected; outData.radioAvailable = inData.radioAvailable; outData.licensed = inData.licensed; outData.timeStamp = inData.gpsTimeMsec; outData.batteryTest = inData.batteryTest; outData.manipulationEquipment = inData.manipulationEquipment; outData.manipulationSfm = inData.manipulationSfm; outData.errorCode = inData.errorCode; m_dtsTaboc->publish(outData); } void SendToDds::rxData(const OcTelegrams::EnterLeaveAes &inData) { TrainingAreaBaseOC::EnterLeaveAes outData; outData.id = 1; outData.aesId = inData.aesId; outData.aesEntered = inData.aesEntered; outData.abcArea = inData.nbcArea; outData.chargeTypeId = inData.chargeTasCode; outData.cAreaType = inData.cAreaType; m_dtsTaboc->publish(outData); } void SendToDds::rxData(const OcTelegrams::OwnPosition &inData) { TrainingAreaBaseOC::OwnPosition outData; outData.id = 1; outData.valid = inData.valid; outData.timeStamp = inData.gpsTimeMsec; if (inData.valid) { const QPointF point(m_utmCoord.geographic(inData.easting, inData.northing)); outData.position = Core::GeoPosition(point.x(), point.y(), 0); } else outData.position = Core::GeoPosition(nan(""), nan(""), 0); m_dtsTaboc->publish(outData); } void SendToDds::rxData(const TrainingAreaBase::TetraIcd::OpaquePayloadDataBase &inData) { switch (inData.payloadType) { case TrainingAreaBase::TetraIcd::OpaquePayloadDataBase::Type::OC: { TrainingAreaBase::OcData outData; outData.equipmentNumber = 1; outData.payload = inData.payload; m_dtsTab->publish(outData); break; } case TrainingAreaBase::TetraIcd::OpaquePayloadDataBase::Type::FireSmokeMarker: { TrainingAreaBase::FireSmokeMarkerData outData; outData.equipmentNumber = 1; outData.payload = inData.payload; m_dtsTab->publish(outData); break; } default: { ERROR_LOG(m_logger) << "Received unhandled TrainingAreaBase::TetraIcd::OpaquePayloadDataBase::Type " << static_cast(inData.payloadType); break; } } } }