libdrmconf 0.15.1
A library to program DMR radios.
Loading...
Searching...
No Matches
gnsssettings.hh
1#ifndef GNSSSETTINGS_HH
2#define GNSSSETTINGS_HH
3
4#include "configobject.hh"
5#include <QGeoCoordinate>
6
8class GNSSSettings : public ConfigExtension
9{
10 Q_OBJECT
11
12 Q_CLASSINFO("description", "Some common global GNSS settings.");
13
14 Q_CLASSINFO("fixedPositionEnabledDescription", "If enabled, the fixed position is used instead of the GNSS position.")
15 Q_PROPERTY(bool fixedPositionEnabled READ fixedPositionEnabled WRITE enableFixedPosition FINAL)
16
17 Q_CLASSINFO("fixedPositionDescription", "Some fixed position (locator).")
18 Q_PROPERTY(QString fixedPosition READ fixedPositionLocator WRITE setFixedPositionLocator FINAL)
19
20 Q_CLASSINFO("systemsDescription", "Enabled GNSSs.")
21 Q_PROPERTY(Systems systems READ systems WRITE setSystems FINAL)
22
23 Q_CLASSINFO("unitsDescrption", "Specifies unit system.")
24 Q_PROPERTY(Units units READ units WRITE setUnits FINAL)
25
26public:
27 enum class Units {
28 Metric, Archaic
29 };
30 Q_ENUM(Units)
31
32 enum class System {
33 Fixed = 0, GPS = 1, Glonass = 2, Galileo = 4, Beidou = 8
34 };
35 Q_DECLARE_FLAGS(Systems, System)
36 Q_FLAGS(Systems)
37
38
39public:
40 explicit GNSSSettings(QObject *parent = nullptr);
41
42 ConfigItem *clone() const override;
43
46 bool fixedPositionEnabled() const;
47 void enableFixedPosition(bool use);
48
49 const QGeoCoordinate &fixedPosition() const;
50 void setFixedPosition(const QGeoCoordinate &pos);
51 QString fixedPositionLocator() const;
52 void setFixedPositionLocator(const QString &locator);
53
54 Systems systems() const;
55 void setSystems(Systems systems);
56
57 Units units() const;
58 void setUnits(Units units);
59
60protected:
61 bool _fixedPositionEnabled;
62 QGeoCoordinate _fixedPosition;
63 Systems _systems;
64 Units _units;
65};
66
67Q_DECLARE_OPERATORS_FOR_FLAGS(GNSSSettings::Systems)
68
69namespace YAML
70{
72 template<>
73 struct convert<QGeoCoordinate>
74 {
76 static Node encode(const QGeoCoordinate& rhs) {
77 if (! rhs.isValid())
78 return Node(YAML::Null);
79
80 Node list;
81 list["longitude"] = rhs.longitude();
82 list["latitude"] = rhs.latitude();
83 if (std::isfinite(rhs.altitude()))
84 list["altitude"] = rhs.altitude();
85 return list;
86 }
87
89 static bool decode(const Node& node, QGeoCoordinate& rhs) {
90 if (node.IsNull()) {
91 rhs = QGeoCoordinate();
92 return true;
93 }
94 if (! node.IsMap())
95 return false;
96 if ((!node["longitude"]) || (!node["longitude"].IsScalar()))
97 return false;
98 if ((!node["latitude"]) || (!node["latitude"].IsScalar()))
99 return false;
100 rhs.setLongitude(node["longitude"].as<double>(std::numeric_limits<double>::quiet_NaN()));
101 rhs.setLatitude(node["latitude"].as<double>(std::numeric_limits<double>::quiet_NaN()));
102 if (node["altitude"] && node["altitude"].IsScalar())
103 rhs.setAltitude(node["altitude"].as<double>(std::numeric_limits<double>::quiet_NaN()));
104 return true;
105 }
106 };
107}
108
109#endif // GNSSSETTINGS_HH
ConfigExtension(QObject *parent=nullptr)
Hidden constructor.
Definition configobject.cc:1244
ConfigItem(QObject *parent=nullptr)
Hidden constructor.
Definition configobject.cc:158
ConfigItem * clone() const override
Clones this item.
Definition gnsssettings.cc:14
bool fixedPositionEnabled() const
Returns true, if the fixed position is valid and either explicitly enabled or the GNSSs flags are set...
Definition gnsssettings.cc:25
static bool decode(const Node &node, QGeoCoordinate &rhs)
Parses the frequency.
Definition gnsssettings.hh:89
static Node encode(const QGeoCoordinate &rhs)
Serializes the frequency.
Definition gnsssettings.hh:76