173 lines
4.8 KiB
C++
Executable File
173 lines
4.8 KiB
C++
Executable File
|
|
|
|
|
|
#include "send_to_dds.h"
|
|
|
|
#include <QtCore/QPointF>
|
|
|
|
#include <NGLLogger/NGLLoggerBootstrap.h>
|
|
|
|
#include "main_handler.h"
|
|
|
|
namespace TrainingAreaBaseOC
|
|
{
|
|
|
|
SendToDds::SendToDds(MainHandler *mainHandler) : m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger())
|
|
, m_dtsTaboc(mainHandler->dds()->dtsTaboc())
|
|
, m_dtsTab(mainHandler->dds()->dtsTab())
|
|
, m_utmCoord(LtsCoordTrans::UtmCoordinate())
|
|
, m_idToSend(1) {}
|
|
|
|
void SendToDds::rxData(const OcTelegrams::Display &inData)
|
|
{
|
|
if (0 == inData.multiplexer)
|
|
{
|
|
TrainingAreaBaseOC::ShortMessage outData;
|
|
outData.id = m_idToSend++;
|
|
|
|
outData.textType = static_cast<long>(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<ProjectDataManagement::LanguageConfiguration>(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<int>(inData.payloadType);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|