Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

+231
View File
@@ -0,0 +1,231 @@
/**
* @RDE_HEADER@
* MeteoDataManagement - Static Meteo Data Edit Dialog
* $Id$
* $HeadURL$
* $Author$
* Created by hjl, SLSE, 2016-10-17
*/
#include "esc_convert_from_tab.h"
#include <LtsUtilsCore/qbytearray_byteaccess.h>
namespace EffectShowClient
{
namespace ConvertFromTab
{
//=============================================================================
RxTelegram_e isTelegram(const TrainingAreaBase::FireSmokeMarkerData &data)
{
if (data.payload().size() == 0)
return RxTelegram_e::unknown;
switch (data.payload().at(0))
{
case 150: return RxTelegram_e::EffectShowOrder;
case 155: return RxTelegram_e::RelocationOrder;
case 152: return RxTelegram_e::EffectShowStop;
case 151: return RxTelegram_e::EffectShowContinue;
case 153: return RxTelegram_e::OrderRetract;
case 154: return RxTelegram_e::StatusRequest;
case 156: return RxTelegram_e::MeteoData;
}
return RxTelegram_e::unknown;
}
static inline Core::GeoPosition2D convertGeoPos(const QByteArray &tele, size_t &k)
{
double lon, lat;
LtsUtils::get8Byte(tele, k, lon);
LtsUtils::get8Byte(tele, k, lat);
return Core::GeoPosition2D(lon, lat);
}
//=============================================================================
EffectShowOrder_t convertEffectShowOrder(const TrainingAreaBase::FireSmokeMarkerData &data)
{
EffectShowOrder_t effectShowOrder;
if (data.payload().size() == 0)
return effectShowOrder;
Q_ASSERT(data.payload().size() != 48);
const QByteArray tele(QByteArray::fromRawData(
reinterpret_cast<const char *>(&data.payload().at(0)),
data.payload().size()));
size_t k = 1;
LtsUtils::get2Byte(tele, k, effectShowOrder.idEffectShow);
uint64_t tmp;
LtsUtils::get4Byte(tele, k, tmp); // interpret as unsigned
effectShowOrder.startTime = tmp;
effectShowOrder.centerPosition = convertGeoPos(tele, k);
LtsUtils::get1Byte(tele, k, tmp); effectShowOrder.areaWidth = tmp;
LtsUtils::get1Byte(tele, k, tmp); effectShowOrder.areaDepth = tmp;
// 50m squares
effectShowOrder.areaWidth *= 50;
effectShowOrder.areaDepth *= 50;
qint16 angle;
LtsUtils::get2Byte(tele, k, angle);
effectShowOrder.rotation = double(angle) * 0.01;
effectShowOrder.lowerLeftPosition = convertGeoPos(tele, k);
LtsUtils::get1Byte(tele, k, effectShowOrder.numOfVolley);
LtsUtils::get1Byte(tele, k, effectShowOrder.shotsInTotal);
LtsUtils::get1Byte(tele, k, effectShowOrder.typeOfAmmunition);
LtsUtils::get2Byte(tele, k, tmp); effectShowOrder.duration = tmp;
const size_t len = tele.size();
QByteArray ba;
while (k < len)
ba += tele.at(k++);
effectShowOrder.name = QString::fromUtf8(ba);
return effectShowOrder;
}
//=============================================================================
RelocationOrder_t convertRelocationOrder(const TrainingAreaBase::FireSmokeMarkerData &data)
{
RelocationOrder_t relocationOrder;
if (data.payload().size() == 0)
return relocationOrder;
Q_ASSERT(data.payload().size() >= 7);
const QByteArray tele(QByteArray::fromRawData(
reinterpret_cast<const char *>(&data.payload().at(0)),
data.payload().size()));
size_t k = 1;
LtsUtils::get2Byte(tele, k, relocationOrder.idRelocation);
uint64_t tmp;
LtsUtils::get4Byte(tele, k, tmp); // interpret as unsigned
relocationOrder.executionTime = tmp;
relocationOrder.centerPosition = convertGeoPos(tele, k);
const size_t len = tele.size();
QByteArray ba;
while (k < len)
ba += tele.at(k++);
relocationOrder.infoText = QString::fromUtf8(ba);
return relocationOrder;
}
//=============================================================================
int convertEffectShowStop(const TrainingAreaBase::FireSmokeMarkerData &data)
{
int idEffectShow = 0;
if (data.payload().size() == 0)
return idEffectShow;
Q_ASSERT(data.payload().size() != 3);
const QByteArray tele(QByteArray::fromRawData(
reinterpret_cast<const char *>(&data.payload().at(0)),
data.payload().size()));
size_t k = 1;
LtsUtils::get2Byte(tele, k, idEffectShow);
return idEffectShow;
}
//=============================================================================
EffectShowContinue_t convertEffectShowContinue(const TrainingAreaBase::FireSmokeMarkerData &data)
{
EffectShowContinue_t effectShowContinue;
if (data.payload().size() == 0)
return effectShowContinue;
Q_ASSERT(data.payload().size() != 7);
const QByteArray tele(QByteArray::fromRawData(
reinterpret_cast<const char *>(&data.payload().at(0)),
data.payload().size()));
size_t k = 1;
LtsUtils::get2Byte(tele, k, effectShowContinue.idEffectShow);
uint64_t tmp;
LtsUtils::get4Byte(tele, k, tmp); // interpret as unsigned
effectShowContinue.executionTime = tmp;
return effectShowContinue;
}
//=============================================================================
OrderRetract_t convertOrderRetract(const TrainingAreaBase::FireSmokeMarkerData &data)
{
OrderRetract_t orderRetract;
if (data.payload().size() == 0)
return orderRetract;
Q_ASSERT(data.payload().size() != 4);
const QByteArray tele(QByteArray::fromRawData(
reinterpret_cast<const char *>(&data.payload().at(0)),
data.payload().size()));
size_t k = 1;
LtsUtils::get1Byte(tele, k, orderRetract.orderType);
LtsUtils::get2Byte(tele, k, orderRetract.id);
return orderRetract;
}
//=============================================================================
bool convertStatusRequest(const TrainingAreaBase::FireSmokeMarkerData &data)
{
if (data.payload().size() <2)
return false;
Q_ASSERT(data.payload().size() != 2);
const std::vector<uint8_t> &tele = data.payload();
return (tele.at(1) == 154);
}
//=============================================================================
EffectShowClient::MeteoNearVehicle convertMeteoData(const TrainingAreaBase::FireSmokeMarkerData &data)
{
EffectShowClient::MeteoNearVehicle meteoData;
if (data.payload().size() == 0)
{
meteoData.isValid(false);
return meteoData;
}
Q_ASSERT(data.payload().size() != 11);
const QByteArray tele(QByteArray::fromRawData(
reinterpret_cast<const char *>(&data.payload().at(0)),
data.payload().size()));
qint16 word = 0;
size_t k = 1;
LtsUtils::get2Byte(tele, k, word);
meteoData.temperature(double(word) / 10.0);
LtsUtils::get2Byte(tele, k, word);
meteoData.humidity(double(word));
LtsUtils::get2Byte(tele, k, word);
meteoData.pressure(double(word));
LtsUtils::get2Byte(tele, k, word);
meteoData.windDirection(double(word) * 0.01);
LtsUtils::get2Byte(tele, k, word);
meteoData.windSpeed(double(word));
meteoData.isValid(true);
return meteoData;
}
} // namespace ConvertFromTab
} // namespace EffectShowClient