QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
APMAirframeComponentController.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QLoggingCategory>
4#include <QtCore/QObject>
5#include <QtQmlIntegration/QtQmlIntegration>
6
8
9class APMAirframeModel;
10class APMAirframeType;
12
14
15
17{
19 QML_ELEMENT
20 Q_MOC_INCLUDE("QmlObjectListModel.h")
21 Q_PROPERTY(QmlObjectListModel *frameClassModel MEMBER _frameClassModel CONSTANT)
22#ifdef QGC_UNITTEST_BUILD
23 friend class APMAirframeComponentControllerTest; // Unit test
24#endif
25
26public:
27 explicit APMAirframeComponentController(QObject *parent = nullptr);
29
30
31 Q_INVOKABLE void loadParameters(const QString &paramFile);
32
33private slots:
34 void _githubJsonDownloadComplete(bool success, const QString &localFile, const QString &errorMsg);
35 void _paramFileDownloadComplete(bool success, const QString &localFile, const QString &errorMsg);
36
37private:
38 void _fillFrameClasses();
39 void _loadParametersFromDownloadFile(const QString &downloadedParamFile);
40
41 Fact *_frameClassFact = nullptr;
42 Fact *_frameTypeFact = nullptr;
43 QmlObjectListModel *_frameClassModel = nullptr;
44};
45
46/*===========================================================================*/
47
48class APMFrameClass : public QObject
49{
50 Q_OBJECT
51 Q_PROPERTY(QString name MEMBER _name CONSTANT)
52 Q_PROPERTY(int frameClass MEMBER _frameClass CONSTANT)
53 Q_PROPERTY(int frameType READ frameType NOTIFY frameTypeChanged)
54 Q_PROPERTY(QStringList frameTypeEnumStrings MEMBER _frameTypeEnumStrings CONSTANT)
55 Q_PROPERTY(QVariantList frameTypeEnumValues MEMBER _frameTypeEnumValues CONSTANT)
56 Q_PROPERTY(int defaultFrameType MEMBER _defaultFrameType CONSTANT)
57 Q_PROPERTY(QString imageResource READ imageResource NOTIFY imageResourceChanged)
58 Q_PROPERTY(QString imageResourceDefault MEMBER _imageResourceDefault CONSTANT)
59 Q_PROPERTY(bool frameTypeSupported MEMBER _frameTypeSupported CONSTANT)
60
61public:
62 explicit APMFrameClass(const QString &name, bool copter, int frameClass, Fact *frameTypeFact, QObject *parent = nullptr);
64
65 int frameType() const;
66 QString imageResource() const;
67
68 const QString _name;
69 const bool _copter;
70 QString _imageResource;
71 QString _imageResourceDefault;
72 const int _frameClass;
73 QStringList _frameTypeEnumStrings;
74 QVariantList _frameTypeEnumValues;
75 int _defaultFrameType = -1;
76 bool _frameTypeSupported = false;
77
78signals:
81
82private:
85 static QString _findImageResourceCopter(int frameClass, int &frameType);
86 static QString _findImageResourceRover(int frameClass, int frameType);
87
88 const Fact *_frameTypeFact = nullptr;
89
90 // These should match the ArduCopter FRAME_CLASS parameter enum meta data
91 #define FRAME_CLASS_UNDEFINED 0
92 #define FRAME_CLASS_QUAD 1
93 #define FRAME_CLASS_HEX 2
94 #define FRAME_CLASS_OCTA 3
95 #define FRAME_CLASS_OCTAQUAD 4
96 #define FRAME_CLASS_Y6 5
97 #define FRAME_CLASS_HELI 6
98 #define FRAME_CLASS_TRI 7
99 #define FRAME_CLASS_SINGLECOPTER 8
100 #define FRAME_CLASS_COAXCOPTER 9
101 #define FRAME_CLASS_BICOPTER 10
102 #define FRAME_CLASS_HELI_DUAL 11
103 #define FRAME_CLASS_DODECAHEXA 12
104 #define FRAME_CLASS_HELIQUAD 13
105
106 // These should match the ArduCopter FRAME_TYPE parameter enum meta data
107 #define FRAME_TYPE_PLUS 0
108 #define FRAME_TYPE_X 1
109 #define FRAME_TYPE_V 2
110 #define FRAME_TYPE_H 3
111 #define FRAME_TYPE_V_TAIL 4
112 #define FRAME_TYPE_A_TAIL 5
113 #define FRAME_TYPE_Y6B 10
114 #define FRAME_TYPE_Y6F 11
115 #define FRAME_TYPE_BETAFLIGHTX 12
116 #define FRAME_TYPE_DJIX 13
117 #define FRAME_TYPE_CLOCKWISEX 14
118
119 // These should match the Rover FRAME_CLASS parameter enum meta data
120 #define FRAME_CLASS_ROVER 1
121 #define FRAME_CLASS_BOAT 2
122 #define FRAME_CLASS_BALANCEBOT 3
123
124 // These should match the Rover FRAME_TYPE parameter enum meta data
125 #define FRAME_TYPE_UNDEFINED 0
126 #define FRAME_TYPE_OMNI3 1
127 #define FRAME_TYPE_OMNIX 2
128 #define FRAME_TYPE_OMNIPLUS 3
129
130 struct FrameToImageInfo {
131 const int frameClass;
132 const int frameType;
133 const char *imageResource;
134 };
135 static constexpr const FrameToImageInfo _rgFrameToImageCopter[] = {
136 { FRAME_CLASS_QUAD, FRAME_TYPE_X, "QuadRotorX" }, // Default
137 { FRAME_CLASS_QUAD, FRAME_TYPE_PLUS, "QuadRotorPlus" },
138 { FRAME_CLASS_QUAD, FRAME_TYPE_V, "QuadRotorWide" },
139 { FRAME_CLASS_QUAD, FRAME_TYPE_H, "QuadRotorH" },
140 { FRAME_CLASS_QUAD, FRAME_TYPE_V_TAIL, "QuadRotorVTail" },
141 { FRAME_CLASS_QUAD, FRAME_TYPE_A_TAIL, "QuadRotorATail" },
142
143 { FRAME_CLASS_HEX, FRAME_TYPE_X, "HexaRotorX" }, // Default
144 { FRAME_CLASS_HEX, FRAME_TYPE_PLUS, "HexaRotorPlus" },
145
146 { FRAME_CLASS_OCTA, FRAME_TYPE_X, "OctoRotorX" }, // Default
147 { FRAME_CLASS_OCTA, FRAME_TYPE_PLUS, "OctoRotorPlus" },
148 { FRAME_CLASS_OCTA, FRAME_TYPE_V, "AirframeUnknown" },
149 { FRAME_CLASS_OCTA, FRAME_TYPE_H, "AirframeUnknown" },
150
151 { FRAME_CLASS_OCTAQUAD, FRAME_TYPE_X, "OctoRotorXCoaxial" }, // Default
152 { FRAME_CLASS_OCTAQUAD, FRAME_TYPE_PLUS, "OctoRotorPlusCoaxial" },
153 { FRAME_CLASS_OCTAQUAD, FRAME_TYPE_V, "AirframeUnknown" },
154 { FRAME_CLASS_OCTAQUAD, FRAME_TYPE_H, "AirframeUnknown" },
155
156 { FRAME_CLASS_Y6, FRAME_TYPE_Y6B, "Y6B" }, // Default
157 { FRAME_CLASS_Y6, FRAME_TYPE_Y6F, "AirframeUnknown" },
158 { FRAME_CLASS_Y6, -1, "Y6A" },
159
160 { FRAME_CLASS_DODECAHEXA, FRAME_TYPE_X, "AirframeUnknown" }, // Default
161 { FRAME_CLASS_DODECAHEXA, FRAME_TYPE_PLUS, "AirframeUnknown" },
162
163 { FRAME_CLASS_HELI, -1, "Helicopter" },
164 { FRAME_CLASS_TRI, -1, "YPlus" },
165 };
166};
#define FRAME_CLASS_Y6
#define FRAME_TYPE_PLUS
#define FRAME_CLASS_HELI
#define FRAME_CLASS_HEX
#define FRAME_CLASS_TRI
#define FRAME_CLASS_QUAD
#define FRAME_CLASS_DODECAHEXA
#define FRAME_TYPE_A_TAIL
#define FRAME_CLASS_OCTA
#define FRAME_TYPE_V_TAIL
#define FRAME_CLASS_OCTAQUAD
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
MVC Controller for APMAirframeComponent.qml.
void frameTypeChanged()
void imageResourceChanged()
Used for handling missing Facts from C++ code.
A Fact is used to hold a single value within the system.
Definition Fact.h:19
QModelIndex index(int row, int column=0, const QModelIndex &parent=QModelIndex()) const override