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