#include "CoPrtCnvHexDumpHelper.hpp" #include "CoPrtCnvRadioTelegram.hpp" #include #include static std::string dumpSammeldeaktivierung(const N_CoPrtCnv::CoPrtCnvRadioTelegram* sammelTelegram) { const int ANZAHL_POS = 5; const int SIZE_POS = sammelTelegram->getTelID() == GEF_WF_SAMMELDEAKTIVIERUNG_DUS_MINEN ? 2 : 1; std::stringstream sstream; unsigned int cnt = sammelTelegram->getPayloadDataUInt32(ANZAHL_POS, SIZE_POS); for (unsigned int i = 0; i < cnt; ++i) { uint16_t telId = sammelTelegram->getPayloadDataUInt32(ANZAHL_POS + SIZE_POS + 2 * i, 2); sstream << telId << " "; } return sstream.str(); } QByteArray telegramId2String(gef_telegramm_id_et telId) { const char *str = nullptr; switch (telId) { case GEF_BESTAETIGUNG: str = "GEF_BESTAETIGUNG"; break; case GEF_INIT: str = "GEF_INIT"; break; case GEF_MANIPULATIONSMELDUNG: str = "GEF_MANIPULATIONSMELDUNG"; break; case GEF_UMGEBUNGS_MELDUNG2: str = "GEF_UMGEBUNGS_MELDUNG2"; break; case GEF_AUFFORDERUNG_BITE_MELDUNG: str = "GEF_AUFFORDERUNG_BITE_MELDUNG"; break; case GEF_BITE_MELDUNG2: str = "GEF_BITE_MELDUNG2"; break; case GEF_LIZENSIERUNG_TNE: str = "GEF_LIZENSIERUNG_TNE"; break; case GEF_BETRIEBSZUSTAND_AUSSTATTUNG: str = "GEF_BETRIEBSZUSTAND_AUSSTATTUNG"; break; case GEF_KONFIGURATION_WIRKMODELL: str = "GEF_KONFIGURATION_WIRKMODELL"; break; case GEF_ANFORDERUNG_KONFIGURATIONSDATEN: str = "GEF_ANFORDERUNG_KONFIGURATIONSDATEN"; break; case GEF_KONFIGURATIONSMELDUNG: str = "GEF_KONFIGURATIONSMELDUNG"; break; case GEF_FEHLERMELDUNG_GFD: str = "GEF_FEHLERMELDUNG_GFD"; break; case GEF_WIEDERHERSTELLUNG_FUNKBEREITSCHAFT: str = "GEF_WIEDERHERSTELLUNG_FUNKBEREITSCHAFT"; break; case GEF_POSITIONS_MELDUNG: str = "GEF_POSITIONS_MELDUNG"; break; case GEF_POSITIONS_MELDUNG_MIT_TEILNEHMER: str = "GEF_POSITIONS_MELDUNG_MIT_TEILNEHMER"; break; case GEF_POSITIONS_MELDUNG_LFZ: str = "GEF_POSITIONS_MELDUNG_LFZ"; break; case GEF_IPS_POSITIONSDATEN: str = "GEF_IPS_POSITIONSDATEN"; break; case GEF_SCHIEDSRICHTERKOMMANDO: str = "GEF_SCHIEDSRICHTERKOMMANDO"; break; case GEF_WIRKFELD_EINZELGESCHOSS: str = "GEF_WIRKFELD_EINZELGESCHOSS"; break; case GEF_WIRKFELD_FLAECHENDECKENDES_FEUER: str = "GEF_WIRKFELD_FLAECHENDECKENDES_FEUER"; break; case GEF_WIRKFELD_FLAECHENDECKENDES_FEUER_STOP: str = "GEF_WIRKFELD_FLAECHENDECKENDES_FEUER_STOP"; break; case GEF_WIRKFELD_FLAECHENDECKENDES_FEUER_FORTSETZEN: str = "GEF_WIRKFELD_FLAECHENDECKENDES_FEUER_FORTSETZEN"; break; case GEF_WIRKFELD_MINENSPERRE: str = "GEF_WIRKFELD_MINENSPERRE"; break; case GEF_WIRKFELD_STATUS_MINENSPERRE: str = "GEF_WIRKFELD_STATUS_MINENSPERRE"; break; case GEF_WIRKFELD_A_KAMPFMITTEL: str = "GEF_WIRKFELD_A_KAMPFMITTEL"; break; case GEF_WIRKFELD_C_KAMPFMITTEL: str = "GEF_WIRKFELD_C_KAMPFMITTEL"; break; case GEF_DEAKTIVIERUNG_WIRKFELD: str = "GEF_DEAKTIVIERUNG_WIRKFELD"; break; case GEF_WIRKFELD_AENDERUNG_BEZEICHNER: str = "GEF_WIRKFELD_AENDERUNG_BEZEICHNER"; break; case GEF_DEAKTIVIERUNG_EINZELMINE: str = "GEF_DEAKTIVIERUNG_EINZELMINE"; break; case GEF_REAKTIVIERUNG_DUS_MINE: str = "GEF_REAKTIVIERUNG_DUS_MINE"; break; case GEF_DEFINITION_IED: str = "GEF_DEFINITION_IED"; break; case GEF_ZUSTAND_IED: str = "GEF_ZUSTAND_IED"; break; case GEF_STATUS_EINZELMINENSIMULATOR: str = "GEF_STATUS_EINZELMINENSIMULATOR"; break; case GEF_WIRKFELD_EINZELMINENSIMULATOR: str = "GEF_WIRKFELD_EINZELMINENSIMULATOR"; break; case GEF_TREFFER_EREIGNIS_DUS: str = "GEF_TREFFER_EREIGNIS_DUS"; break; case GEF_TREFFER_EREIGNIS_WIRKSIMULATION: str = "GEF_TREFFER_EREIGNIS_WIRKSIMULATION"; break; case GEF_TREFFER_AUSLOESUNG: str = "GEF_TREFFER_AUSLOESUNG"; break; case GEF_SCHIEDSRICHTEREINGRIFF: str = "GEF_SCHIEDSRICHTEREINGRIFF"; break; case GEF_SELEKTIVE_AUFMUNITIONIERUNG: str = "GEF_SELEKTIVE_AUFMUNITIONIERUNG"; break; case GEF_TREFFER_EREIGNIS_SEKUNDAERWIRKUNG: str = "GEF_TREFFER_EREIGNIS_SEKUNDAERWIRKUNG"; break; case GEF_TREFFER_EREIGNIS_DUS_IPS: str = "GEF_TREFFER_EREIGNIS_DUS_IPS"; break; case GEF_TREFFER_EREIGNIS_WIRKSIMULATION_IPS: str = "GEF_TREFFER_EREIGNIS_WIRKSIMULATION_IPS"; break; case GEF_TAKTISCHER_STATUS: str = "GEF_TAKTISCHER_STATUS"; break; case GEF_FUNKTIONSRAUM: str = "GEF_FUNKTIONSRAUM"; break; case GEF_EINTRETEN_FUNKTIONSRAUM: str = "GEF_EINTRETEN_FUNKTIONSRAUM"; break; case GEF_DEAKTIVIEREN_FUNKTIONSRAUM: str = "GEF_DEAKTIVIEREN_FUNKTIONSRAUM"; break; case GEF_DATENVERKEHR_SRT_TDS: str = "GEF_DATENVERKEHR_SRT_TDS"; break; case GEF_DATENVERKEHR_TDS_SRT: str = "GEF_DATENVERKEHR_TDS_SRT"; break; case GEF_DATENVERKEHR_DMF_TDS: str = "GEF_DATENVERKEHR_DMF_TDS"; break; case GEF_DATENVERKEHR_TDS_DMF: str = "GEF_DATENVERKEHR_TDS_DMF"; break; case GEF_NACHFORDERUNG_BROADCAST_TELEGRAMME: str = "GEF_NACHFORDERUNG_BROADCAST_TELEGRAMME"; break; case GEF_NOP: str = "GEF_NOP"; break; case GEF_SONDERSENSORIK_BETRIEBSZUSTAND: str = "GEF_SONDERSENSORIK_BETRIEBSZUSTAND"; break; case GEF_SONDERSENSORIK_FAHRSPUR: str = "GEF_SONDERSENSORIK_FAHRSPUR"; break; case GEF_SONDERSENSORIK_DATEN: str = "GEF_SONDERSENSORIK_DATEN"; break; case GEF_SONDERSENSORIK_MIVANH_VERLEGEDATEN: str = "GEF_SONDERSENSORIK_MIVANH_VERLEGEDATEN"; break; case GEF_SONDERSENSORIK_WMIV_VERLEGEDATEN: str = "GEF_SONDERSENSORIK_WMIV_VERLEGEDATEN"; break; case GEF_SONDERSENSORIK_MIVANH_VERLEGEPOSITION: str = "GEF_SONDERSENSORIK_MIVANH_VERLEGEPOSITION"; break; case GEF_SPRACHAUSWAHL: str = "GEF_SPRACHAUSWAHL"; break; case GEF_ALLGEMEINE_NACHRICHT: str = "GEF_ALLGEMEINE_NACHRICHT"; break; case GEF_ECHO_ON_OFF: str = "GEF_ECHO_ON_OFF"; break; case GEF_ESW_MELDUNG: str = "GEF_ESW_MELDUNG"; break; case GEF_WF_SAMMELDEAKTIVIERUNG: str = "GEF_WF_SAMMELDEAKTIVIERUNG"; break; case GEF_WF_SAMMELDEAKTIVIERUNG_DUS_MINEN: str = "GEF_WF_SAMMELDEAKTIVIERUNG_DUS_MINEN"; break; case GEF_WF_SAMMELDEAKTIVIERUNG_FUNKTIONSRAUM: str = "GEF_WF_SAMMELDEAKTIVIERUNG_FUNKTIONSRAUM"; break; case GEF_DATENVERKEHR_GEOP_TDS: str = "GEF_DATENVERKEHR_GEOP_TDS"; break; case GEF_DATENVERKEHR_TDS_GEOP: str = "GEF_DATENVERKEHR_TDS_GEOP"; break; case GEF_DATENVERKEHR_TGTC_TDS: str = "GEF_DATENVERKEHR_TGTC_TDS"; break; case GEF_DATENVERKEHR_TDS_TGTC: str = "GEF_DATENVERKEHR_TDS_TGTC"; break; case GEF_GERAETEEREIGNIS: str = "GEF_GERAETEEREIGNIS"; break; case GEF_WAFFENZUORDNUNG: str = "GEF_WAFFENZUORDNUNG"; break; case GEF_MUNITIONSVORRAT_EINER_ZUGEORDNETEN_WAFFE: str = "GEF_MUNITIONSVORRAT_EINER_ZUGEORDNETEN_WAFFE"; break; case GEF_FEUEREREIGNIS_MIT_WAFFENZUORDNUNG: str = "GEF_FEUEREREIGNIS_MIT_WAFFENZUORDNUNG"; break; case GEF_AUSLOESUNG_DUS_TREFFER: str = "GEF_AUSLOESUNG_DUS_TREFFER"; break; case GEF_ANFORDERUNG_SW_VERSION: str = "GEF_ANFORDERUNG_SW_VERSION"; break; case GEF_SW_VERSIONSMELDUNG: str = "GEF_SW_VERSIONSMELDUNG"; break; case GEF_TECHNIK_FUNKTIONSRAUM: str = "GEF_TECHNIK_FUNKTIONSRAUM"; break; case GEF_TEILNEHMERMODE_SETZEN: str = "GEF_TEILNEHMERMODE_SETZEN"; break; case GEF_TEILNEHMERMODE_MELDUNG: str = "GEF_TEILNEHMERMODE_MELDUNG"; break; case GEF_TEILNEHMERMODE_ANFORDERN: str = "GEF_TEILNEHMERMODE_ANFORDERN"; break; case GEF_TEILNEHMER_KONFIG_ANTWORT: str = "GEF_TEILNEHMER_KONFIG_ANTWORT"; break; case GEF_TEILNEHMER_KONFIG_SETZEN: str = "GEF_TEILNEHMER_KONFIG_SETZEN"; break; case GEF_TEILNEHMER_KONFIG_ANFORDERN: str = "GEF_TEILNEHMER_KONFIG_ANFORDERN"; break; case GEF_SANITAETSDIENST_INSTANDSETZUNG: str = "GEF_SANITAETSDIENST_INSTANDSETZUNG"; break; case GEF_SANITAETSDIENST_INSTANDSETZUNG_PVSAN: str = "GEF_SANITAETSDIENST_INSTANDSETZUNG_PVSAN"; break; case GEF_BESTANDSMELDUNG_SANITAETSMATERIAL: str = "GEF_BESTANDSMELDUNG_SANITAETSMATERIAL"; break; case GEF_GEFECHTSFELDTELEGRAMM: str = "GEF_GEFECHTSFELDTELEGRAMM"; break; } Q_ASSERT(str); if (!str) str = "Unknown"; return str + QByteArray(" (") + QByteArray::number(int(telId)) + ")"; } QString wirkfeldTyp2Str(TrainingAreaBase::TetraIcd::AreaEffectSimulationType wirkfeldTyp) { switch(wirkfeldTyp) { case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::MineArea: return QLatin1String("MINENSPERRE"); case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::ExplosionArea: return QLatin1String("FLAECHENFEUER"); case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::ExplosionSingle: return QLatin1String("EINZELFEUER"); case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::NContamination: return QLatin1String("A_KAMPF"); case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::CContamination: return QLatin1String("C_KAMPF"); case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::FunctionalArea: return QLatin1String("FUNKTIONS_RAUM"); case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::TechnicalArea: return QLatin1String("FUNKTIONS_RAUM_TECHNIK"); case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::GasPipeDetonation: return QLatin1String("GAS_PIPE_DETONATION"); case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::SpecialArea: return QLatin1String("SPECIAL_AREA"); case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::Unknown: return QLatin1String("DUS"); case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::DusSingleMineSimulator: return QLatin1String("DUS_SINGLE_MINE_SIMULATOR"); case TrainingAreaBase::TetraIcd::AreaEffectSimulationType::BeStillWarning: return QLatin1String("BE_STILL_WARNING"); } return QStringLiteral("Unknown Wirkfeldtyp <%1>").arg(static_cast(wirkfeldTyp)); } static inline QString wirkfeldTyp2Str(int typ) { return wirkfeldTyp2Str(static_cast(typ)); } void dumpTelegram(NGL::INGLLogger &m_logger, int id, N_CoPrtCnv::CoPrtCnvRadioTelegram *a_radioTelegram, const char *prefix) { if(!m_logger.isDebugEnabled()) return; if (!prefix) prefix = ""; const QByteArray commonLog(prefix + QByteArray("BC: ") + QByteArray::number(id) + ", " + telegramId2String(a_radioTelegram->getTelID())); switch (a_radioTelegram->getTelID()) { case GEF_DEAKTIVIERUNG_WIRKFELD: case GEF_WIRKFELD_AENDERUNG_BEZEICHNER: { uint8_t wirkfeldTyp = a_radioTelegram->getPayloadDataUInt32(5, 1); uint16_t wirkfeldKennung = a_radioTelegram->getPayloadDataUInt32(6, 2); DEBUG_LOG(m_logger) << commonLog << ", type: " << wirkfeldTyp2Str(wirkfeldTyp) << ", kennung: " << wirkfeldKennung; break; } case GEF_DEAKTIVIERUNG_EINZELMINE: { uint32_t wirkfeldKennung = a_radioTelegram->getPayloadDataUInt32(9, 2); uint32_t minenKennung = a_radioTelegram->getPayloadDataUInt32(11, 2); DEBUG_LOG(m_logger) << commonLog << ", kennung: " << wirkfeldKennung << ", mineId: " << minenKennung; break; } case GEF_WIRKFELD_STATUS_MINENSPERRE: case GEF_WIRKFELD_A_KAMPFMITTEL: case GEF_WIRKFELD_MINENSPERRE: case GEF_WIRKFELD_FLAECHENDECKENDES_FEUER: case GEF_WIRKFELD_FLAECHENDECKENDES_FEUER_STOP: case GEF_WIRKFELD_FLAECHENDECKENDES_FEUER_FORTSETZEN: case GEF_FUNKTIONSRAUM: case GEF_DEAKTIVIEREN_FUNKTIONSRAUM: { uint16_t wirkfeldKennung = a_radioTelegram->getPayloadDataUInt32(5, 2); DEBUG_LOG(m_logger) << commonLog << ", kennung: " << wirkfeldKennung; break; } case GEF_TECHNIK_FUNKTIONSRAUM: { uint16_t funktionsraumkennung = a_radioTelegram->getPayloadDataUInt32(5, 2); uint8_t funktionsraumtyp = a_radioTelegram->getPayloadDataUInt32(7, 1); DEBUG_LOG(m_logger) << commonLog << ", kennung: " << funktionsraumkennung << " type: " << int(funktionsraumtyp); break; } case GEF_WF_SAMMELDEAKTIVIERUNG: case GEF_WF_SAMMELDEAKTIVIERUNG_DUS_MINEN: case GEF_WF_SAMMELDEAKTIVIERUNG_FUNKTIONSRAUM: DEBUG_LOG(m_logger) << commonLog << ", Ids: " << dumpSammeldeaktivierung(a_radioTelegram); break; case GEF_NOP: { uint16_t bcFrom = a_radioTelegram->getPayloadDataUInt32(3, 2); uint16_t bcTo = a_radioTelegram->getPayloadDataUInt32(5, 2); DEBUG_LOG(m_logger) << prefix << commonLog << ", from BC " << bcFrom << " to " << bcTo; break; } default: DEBUG_LOG(m_logger) << commonLog; break; } }