QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
ActuatorOutputs.h
Go to the documentation of this file.
1#pragma once
2
3#include "Common.h"
4#include "ActuatorActions.h"
6
7#include <QtCore/QObject>
8#include <QtCore/QString>
9
10#include <functional>
11
12namespace ActuatorOutputs {
13
17class ConfigParameter : public QObject
18{
19 Q_OBJECT
20public:
21 enum class Function {
22 Unspecified = 0,
23 Enable,
24 Primary,
25 };
26
27 ConfigParameter(QObject* parent, Fact* fact, const QString& label, Function function)
28 : QObject(parent), _fact(fact), _label(label), _function(function) {}
29
30 Q_PROPERTY(QString label READ label CONSTANT)
31 Q_PROPERTY(Fact* fact READ fact CONSTANT)
32
33 const QString& label() const { return _label; }
34 Fact* fact() { return _fact; }
35 Function function() const { return _function; }
36
37private:
38 Fact* _fact{nullptr};
39 const QString _label;
40 const Function _function;
41};
42
46class ChannelConfig : public QObject
47{
48 Q_OBJECT
49public:
50
52 enum class Function {
53 Unspecified = 0,
56 Minimum,
57 Maximum,
59 };
60
61 ChannelConfig(QObject* parent, const Parameter& param, Function function,
63 : QObject(parent), _parameter(param), _function(function), _visibilityCondition(visibilityCondition) {}
64
65 Q_PROPERTY(QString label READ label CONSTANT)
66 Q_PROPERTY(bool advanced READ advanced CONSTANT)
67 Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged)
68
69 const QString& label() const { return _parameter.label; }
70 const QString& parameter() const { return _parameter.name; }
71 Function function() const { return _function; }
72 const Condition& visibilityCondition() const { return _visibilityCondition; }
73 bool advanced() const { return _parameter.advanced; }
74 bool visible() const { return _visibilityCondition.evaluate(); }
75
77 int indexOffset() const { return _parameter.indexOffset; }
78
79 void reevaluate();
80
81signals:
83private:
84 const Parameter _parameter;
85 const Function _function;
86 const Condition _visibilityCondition;
87};
88
92class ChannelConfigInstance : public QObject
93{
94 Q_OBJECT
95public:
96 ChannelConfigInstance(QObject* parent, Fact* fact, ChannelConfig& config)
97 : QObject(parent), _fact(fact), _config(config) {}
98
99 Q_PROPERTY(ChannelConfig* config READ channelConfig CONSTANT)
100 Q_PROPERTY(Fact* fact READ fact CONSTANT)
101
102 Fact* fact() { return _fact; }
103
104 ChannelConfig* channelConfig() const { return &_config; }
105
106private:
107
108 Fact* _fact{nullptr};
109 ChannelConfig& _config;
110};
111
112class ActuatorOutputChannel : public QObject
113{
114 Q_OBJECT
115public:
116 ActuatorOutputChannel(QObject* parent, const QString& label, int paramIndex, QmlObjectListModel& channelConfigs,
117 ParameterManager* parameterManager, std::function<void(Fact*)> factAddedCb);
118
119 Q_PROPERTY(QString label READ label CONSTANT)
121
122 const QString& label() const { return _label; }
123
124 QmlObjectListModel* configInstances() { return _configInstances; }
125
126signals:
128
129private:
130 const QString _label;
131 const int _paramIndex{};
132
133 QmlObjectListModel* _configInstances = new QmlObjectListModel(this);
134};
135
136class ActuatorOutputSubgroup : public QObject
137{
138 Q_OBJECT
139public:
140 ActuatorOutputSubgroup(QObject* parent, const QString& label)
141 : QObject(parent), _label(label) {}
142
143 Q_PROPERTY(QString label READ label CONSTANT)
144 Q_PROPERTY(QmlObjectListModel* channels READ channels NOTIFY channelsChanged)
148
149 const QString& label() const { return _label; }
150
151 // per-channel-params
152 QmlObjectListModel* channelConfigs() { return _channelConfigs; }
153 void addChannelConfig(ChannelConfig* channelConfig);
154
155
156 QmlObjectListModel* channels() { return _channels; }
157 void addChannel(ActuatorOutputChannel* channel);
158
159 ConfigParameter* primaryParam() const { return _primaryParam; }
160 void addConfigParam(ConfigParameter* param);
161 QmlObjectListModel* configParams() { return _params; }
162
163 const QList<ActuatorActions::Config>& actions() const { return _actions; }
164 void addAction(const ActuatorActions::Config& action) { _actions.append(action); }
165
166signals:
169private:
170
171 const QString _label;
172 QmlObjectListModel* _channels = new QmlObjectListModel(this);
173 QmlObjectListModel* _channelConfigs = new QmlObjectListModel(this);
174
175 ConfigParameter* _primaryParam{nullptr};
176 QmlObjectListModel* _params = new QmlObjectListModel(this);
177
178 QList<ActuatorActions::Config> _actions;
179};
180
181class ActuatorOutput : public QObject
182{
183 Q_OBJECT
184public:
185 ActuatorOutput(QObject* parent, const QString& label, const Condition& groupVisibilityCondition);
186
187 Q_PROPERTY(QString label READ label CONSTANT)
188 Q_PROPERTY(bool groupsVisible READ groupsVisible NOTIFY groupsVisibleChanged)
192 Q_PROPERTY(QStringList notes READ notes NOTIFY notesChanged)
193
194 const QString& label() const { return _label; }
195
196 QmlObjectListModel* subgroups() { return _subgroups; }
197 bool groupsVisible() const { return _groupVisibilityCondition.evaluate(); }
198 ConfigParameter* enableParam() const { return _enableParam; }
199 QmlObjectListModel* configParams() { return _params; }
200
201 void addSubgroup(ActuatorOutputSubgroup* subgroup);
202
203 void addConfigParam(ConfigParameter* param);
204
205 void getAllChannelFunctions(QList<Fact*>& allFunctions) const;
206
208
209 void addNote(const QString& note) { _notes.append(note); emit notesChanged(); }
210 void clearNotes() { _notes.clear(); emit notesChanged(); }
211 const QStringList& notes() const { return _notes; }
212
213 void forEachOutputFunction(std::function<void(ActuatorOutputSubgroup*, ChannelConfigInstance*, Fact*)> callback) const;
214
215signals:
219
220private:
221 const QString _label;
222 const Condition _groupVisibilityCondition;
223 QmlObjectListModel* _subgroups = new QmlObjectListModel(this);
224
225 ConfigParameter* _enableParam{nullptr};
226 QmlObjectListModel* _params = new QmlObjectListModel(this);
227 QStringList _notes;
228};
229
230} // namespace ActuatorOutputs
QString label READ label CONSTANT(QmlObjectListModel *configInstances READ configInstances NOTIFY configInstancesChanged) const QString &label() const
ActuatorOutputSubgroup(QObject *parent, const QString &label)
void addConfigParam(ConfigParameter *param)
void addChannel(ActuatorOutputChannel *channel)
const QList< ActuatorActions::Config > & actions() const
QString label READ label CONSTANT(QmlObjectListModel *channels READ channels NOTIFY channelsChanged) 1(QmlObjectListModel *channelConfigs READ channelConfigs NOTIFY channelConfigsChanged) 1(ConfigParameter *primaryParam READ primaryParam CONSTANT) 1(QmlObjectListModel *configParams READ configParams CONSTANT) const QString &label() const
void addChannelConfig(ChannelConfig *channelConfig)
void addAction(const ActuatorActions::Config &action)
QString label READ label CONSTANT(bool groupsVisible READ groupsVisible NOTIFY groupsVisibleChanged) 1(QmlObjectListModel *subgroups READ subgroups NOTIFY subgroupsChanged) 1(ConfigParameter *enableParam READ enableParam CONSTANT) 1(QmlObjectListModel *configParams READ configParams CONSTANT) 1(QStringList notes READ notes NOTIFY notesChanged) const QString &label() const
QmlObjectListModel * configParams()
const QStringList & notes() const
QmlObjectListModel * subgroups()
ConfigParameter * enableParam() const
void forEachOutputFunction(std::function< void(ActuatorOutputSubgroup *, ChannelConfigInstance *, Fact *)> callback) const
void getAllChannelFunctions(QList< Fact * > &allFunctions) const
void addConfigParam(ConfigParameter *param)
void addNote(const QString &note)
void addSubgroup(ActuatorOutputSubgroup *subgroup)
ChannelConfigInstance(QObject *parent, Fact *fact, ChannelConfig &config)
ChannelConfig *config READ channelConfig CONSTANT(Fact *fact READ fact CONSTANT) Fact *fact()
Function
Describes the meaning of the parameter.
const QString & parameter() const
ChannelConfig(QObject *parent, const Parameter &param, Function function, const Condition &visibilityCondition)
const Condition & visibilityCondition() const
Parameter::DisplayOption displayOption() const
QString label READ label CONSTANT(bool advanced READ advanced CONSTANT) 1(bool visible READ visible NOTIFY visibleChanged) const QString &label() const
QString label READ label CONSTANT(Fact *fact READ fact CONSTANT) const QString &label() const
@ Primary
Primary parameter to configure the group of outputs.
@ Enable
Parameter to enable/disable the outputs.
ConfigParameter(QObject *parent, Fact *fact, const QString &label, Function function)
bool evaluate() const
Definition Common.cc:176
A Fact is used to hold a single value within the system.
Definition Fact.h:19
DisplayOption displayOption
Definition Common.h:28
int indexOffset
extra offset to the ${i} index, or bitset shift offset
Definition Common.h:27
DisplayOption
Definition Common.h:19
QString label
Definition Common.h:25
bool advanced
whether this should only be shown as advanced option
Definition Common.h:29
QString name
vehicle parameter name, this may have an index in the form '${i}'
Definition Common.h:26