Files
qt5-legatus-legacy/Lts/Proxies/CombatNetRadio/Helper/cnr_frequency_planning_helper.h
T
2026-08-13 18:33:10 +02:00

101 lines
3.5 KiB
C++
Executable File

#pragma once
#include <QJsonDocument>
#include <AudioVideoManagement/avm_enums.hpp>
#include <CombatNetRadio/svccnrhelper_export.h>
#include <CombatNetRadio/Helper/cnr_frequency_planning_helper.h>
namespace AudioVideoManagement {
struct SVCCNRHELPER_EXPORT RadioCircuit
{
RadioCircuit() = default;
virtual ~RadioCircuit() = default;
QString name;
FrequencyBand freqBand {FrequencyBand_def::VHF};
int radioStationId {0};
virtual bool isValid() const = 0;
virtual QJsonObject toJson() const = 0;
virtual QString toString() const = 0;
virtual int frequencySetDataId() const = 0;
};
struct SVCCNRHELPER_EXPORT RadioCircuitHF : public RadioCircuit
{
ModulationType modulationType {ModulationType::AM};
ChannelSpacingHF channelSpacing {ChannelSpacingHF::CS_100_Hz};
int frequency {0}; // Valid: 20.000-30.0000 [Hz]
int squelch {0}; // Valid: 0..9
static const int FREQ_MIN = 2000000;
static const int FREQ_MAX = 29975000;
static const int SQUELCH_MIN = 1;
static const int SQUELCH_MAX = 9;
RadioCircuitHF()
: RadioCircuit()
{}
bool isValid() const;
QJsonObject toJson() const;
static RadioCircuitHF* fromJson(const QJsonObject &obj);
QString toString() const;
int frequencySetDataId() const { return 0; }
};
struct SVCCNRHELPER_EXPORT RadioCircuitUHF: public RadioCircuit
{
ModulationType modulationType {ModulationType::AM};
ChannelSpacing channelSpacing {ChannelSpacing::CS_25_00_kHz};
int frequency {0}; // Valid: 225.000.000 - 399.975.000 [Hz]
int squelchDB {0}; // Valid: 0 (off), 6-20 [dB]
bool clipper {false};
bool agc {false};
static const int FREQ_MIN = 225000000;
static const int FREQ_MAX = 399975000;
static const int SQUELCH_MIN = 6;
static const int SQUELCH_MAX = 20;
RadioCircuitUHF()
: RadioCircuit()
{}
bool isValid() const;
QJsonObject toJson() const;
static RadioCircuitUHF* fromJson(const QJsonObject &obj);
QString toString() const;
int frequencySetDataId() const { return 0; }
};
struct SVCCNRHELPER_EXPORT RadioCircuitVHF: public RadioCircuit
{
RcOperatingMode operatingMode {RcOperatingMode_def::FixedFreqEncNone};
int freqSetDataId {0};
bool pilotTone {false};
RadioCircuitVHF(RcOperatingMode _operatingMode, int _frequencySetDataId, bool _pilotTone)
: RadioCircuit()
, operatingMode(_operatingMode)
, freqSetDataId(_frequencySetDataId)
, pilotTone(_pilotTone)
{}
RadioCircuitVHF() = default;
int frequencySetDataId() const { return freqSetDataId; }
bool isValid() const {return freqSetDataId > 0; }
QJsonObject toJson() const;
static RadioCircuitVHF* fromJson(const QJsonObject &obj);
QString toString() const;
};
bool SVCCNRHELPER_EXPORT isReadOnly(const std::string& json);
QVector<RadioCircuit*> SVCCNRHELPER_EXPORT fromJson(const std::string& json);
QSet<int> SVCCNRHELPER_EXPORT frequencySetDataIds(const std::string &frequencyPlanDataProperties);
QJsonObject SVCCNRHELPER_EXPORT frequencyPlanningJson(QJsonObject obj, const QString &name, FrequencyBand freqBand, int radioStationId);
bool SVCCNRHELPER_EXPORT isAkwMode(RcOperatingMode mode);
} // namespace AudioVideoManagement