/** * @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 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(&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(&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(&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(&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(&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 &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(&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