libdrmconf 0.14.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
44 bool fixedPositionEnabled() const;
45 void enableFixedPosition(bool use);
46
47 const QGeoCoordinate &fixedPosition() const;
48 void setFixedPosition(const QGeoCoordinate &pos);
49 QString fixedPositionLocator() const;
50 void setFixedPositionLocator(const QString &locator);
51
52 Systems systems() const;
53 void setSystems(Systems systems);
54
55 Units units() const;
56 void setUnits(Units units);
57
58protected:
59 bool _fixedPositionEnabled;
60 QGeoCoordinate _fixedPosition;
61 Systems _systems;
62 Units _units;
63};
64
65Q_DECLARE_OPERATORS_FOR_FLAGS(GNSSSettings::Systems)
66
67namespace YAML
68{
70 template<>
71 struct convert<QGeoCoordinate>
72 {
74 static Node encode(const QGeoCoordinate& rhs) {
75 if (! rhs.isValid())
76 return Node(YAML::Null);
77
78 Node list;
79 list["longitude"] = rhs.longitude();
80 list["latitude"] = rhs.latitude();
81 if (std::isfinite(rhs.altitude()))
82 list["altitude"] = rhs.altitude();
83 return list;
84 }
85
87 static bool decode(const Node& node, QGeoCoordinate& rhs) {
88 if (node.IsNull()) {
89 rhs = QGeoCoordinate();
90 return true;
91 }
92 if (! node.IsMap())
93 return false;
94 if ((!node["longitude"]) || (!node["longitude"].IsScalar()))
95 return false;
96 if ((!node["latitude"]) || (!node["latitude"].IsScalar()))
97 return false;
98 rhs.setLongitude(node["longitude"].as<double>(std::numeric_limits<double>::quiet_NaN()));
99 rhs.setLatitude(node["latitude"].as<double>(std::numeric_limits<double>::quiet_NaN()));
100 if (node["altitude"] && node["altitude"].IsScalar())
101 rhs.setAltitude(node["altitude"].as<double>(std::numeric_limits<double>::quiet_NaN()));
102 return true;
103 }
104 };
105}
106
107#endif // GNSSSETTINGS_HH
ConfigExtension(QObject *parent=nullptr)
Hidden constructor.
Definition configobject.cc:1234
ConfigItem(QObject *parent=nullptr)
Hidden constructor.
Definition configobject.cc:158
ConfigItem * clone() const override
Clones this item.
Definition gnsssettings.cc:14
static bool decode(const Node &node, QGeoCoordinate &rhs)
Parses the frequency.
Definition gnsssettings.hh:87
static Node encode(const QGeoCoordinate &rhs)
Serializes the frequency.
Definition gnsssettings.hh:74