QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
FactPanelController.cc
Go to the documentation of this file.
2#include "AutoPilotPlugin.h"
4#include "ParameterManager.h"
5#include "QGCApplication.h"
7#include "Vehicle.h"
8
9#include <QtQml/QQmlEngine>
10
11QGC_LOGGING_CATEGORY(FactPanelControllerLog, "FactSystem.FactPanelController")
12
14 : QObject(parent)
15 , _vehicle(MultiVehicleManager::instance()->activeVehicle())
16{
17 // qCDebug(FactPanelControllerLog) << Q_FUNC_INFO << this;
18
19 if (!_vehicle) {
20 _vehicle = MultiVehicleManager::instance()->offlineEditingVehicle();
21 }
22
23 _missingParametersTimer.setInterval(500);
24 _missingParametersTimer.setSingleShot(true);
25 (void) connect(&_missingParametersTimer, &QTimer::timeout, this, &FactPanelController::_checkForMissingParameters);
26}
27
28FactPanelController::~FactPanelController()
29{
30 // qCDebug(FactPanelControllerLog) << Q_FUNC_INFO << this;
31}
32
33void FactPanelController::_reportMissingParameter(int componentId, const QString &name) const
34{
35 if (componentId == ParameterManager::defaultComponentId) {
36 componentId = _vehicle->defaultComponentId();
37 }
38
39 qgcApp()->reportMissingParameter(componentId, name);
40 qCWarning(FactPanelControllerLog) << "Missing parameter:" << componentId << name;
41}
42
43bool FactPanelController::_allParametersExists(int componentId, const QStringList &names) const
44{
45 bool noMissingFacts = true;
46
47 for (const QString &name : names) {
48 if (_vehicle && !_vehicle->parameterManager()->parameterExists(componentId, name)) {
49 _reportMissingParameter(componentId, name);
50 noMissingFacts = false;
51 }
52 }
53
54 return noMissingFacts;
55}
56
57Fact *FactPanelController::getParameterFact(int componentId, const QString &name, bool reportMissing) const
58{
59 if (_vehicle && _vehicle->parameterManager()->parameterExists(componentId, name)) {
60 Fact *const fact = _vehicle->parameterManager()->getParameter(componentId, name);
61 QQmlEngine::setObjectOwnership(fact, QQmlEngine::CppOwnership);
62 return fact;
63 }
64
65 if (reportMissing) {
66 _reportMissingParameter(componentId, name);
67 }
68
69 return nullptr;
70}
71
72bool FactPanelController::parameterExists(int componentId, const QString &name) const
73{
74 return (_vehicle ? _vehicle->parameterManager()->parameterExists(componentId, name) : false);
75}
76
77void FactPanelController::getMissingParameters(const QStringList &rgNames)
78{
79 for (const QString &name: rgNames) {
80 _missingParameterWaitList.append(name);
81 _vehicle->parameterManager()->refreshParameter(MAV_COMP_ID_AUTOPILOT1, name);
82 }
83
84 _missingParametersTimer.start();
85}
86
87void FactPanelController::_checkForMissingParameters()
88{
89 const QStringList waitList = _missingParameterWaitList;
90 for (const QString &name: waitList) {
91 if (_vehicle->parameterManager()->parameterExists(MAV_COMP_ID_AUTOPILOT1, name)) {
92 (void) _missingParameterWaitList.removeOne(name);
93 }
94 }
95
96 if (_missingParameterWaitList.isEmpty()) {
98 } else {
99 _missingParametersTimer.start();
100 }
101}
#define qgcApp()
#define QGC_LOGGING_CATEGORY(name, categoryStr)
Used for handling missing Facts from C++ code.
bool _allParametersExists(int componentId, const QStringList &names) const
void _reportMissingParameter(int componentId, const QString &name) const
Report a missing parameter.
void missingParametersAvailable()
A Fact is used to hold a single value within the system.
Definition Fact.h:19
bool parameterExists(int componentId, const QString &paramName) const
Fact * getParameter(int componentId, const QString &paramName)
static constexpr int defaultComponentId
void refreshParameter(int componentId, const QString &paramName)
Request a refresh on the specific parameter.
int defaultComponentId() const
Definition Vehicle.h:711
ParameterManager * parameterManager()
Definition Vehicle.h:578