QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
HealthAndArmingCheckReport.cc
Go to the documentation of this file.
2#include "EventHandler.h"
4#include "LibEvents.h"
5#include "MAVLinkEnums.h"
7
8QGC_LOGGING_CATEGORY(HealthAndArmingCheckReportLog, "MAVLink.LibEvents.HealthAndArmingCheckReport")
9
10HealthAndArmingCheckProblem::HealthAndArmingCheckProblem(const QString& message, const QString& description, const QString& severity, QObject *parent)
11 : QObject(parent)
12 , _message(message)
13 , _description(description)
14 , _severity(severity)
15{
16 qCDebug(HealthAndArmingCheckReportLog) << this;
17}
18
19/*===========================================================================*/
20
22 : QObject(parent)
23 , _problemsForCurrentMode(new QmlObjectListModel(this))
24{
25 qCDebug(HealthAndArmingCheckReportLog) << this;
26}
27
32
33void HealthAndArmingCheckReport::update(uint8_t compid, const EventHandler &eventHandler, int flightModeGroup)
34{
35 if (compid != MAV_COMP_ID_AUTOPILOT1) {
36 return;
37 }
38 if (flightModeGroup == -1) {
39 qCWarning(HealthAndArmingCheckReportLog) << "Flight mode group not set";
40 return;
41 }
42 _supported = true;
43
44 const events::HealthAndArmingChecks::Results &results = eventHandler.healthAndArmingChecks()->results();
45
46 _problemsForCurrentMode->clearAndDeleteContents();
47 _hasWarningsOrErrors = false;
48 for (const auto& check : results.checks(flightModeGroup)) {
49 QString severity = "";
50 if (events::externalLogLevel(check.log_levels) <= events::Log::Error) {
51 severity = "error";
52 _hasWarningsOrErrors = true;
53 } else if (events::externalLogLevel(check.log_levels) <= events::Log::Warning) {
54 severity = "warning";
55 _hasWarningsOrErrors = true;
56 }
57
58 QString description = QString::fromStdString(check.description);
59 _problemsForCurrentMode->append(new HealthAndArmingCheckProblem(
60 QString::fromStdString(check.message),
61 description.replace("\n", "<br/>"),
62 severity,
63 this));
64 }
65
66 _canArm = results.canArm(flightModeGroup);
67 if (_missionModeGroup != -1) {
68 // TODO: use results.canRun(_missionModeGroup) while armed
69 _canStartMission = results.canArm(_missionModeGroup);
70 }
71 if (_takeoffModeGroup != -1) {
72 _canTakeoff = results.canArm(_takeoffModeGroup);
73 }
74
75 const auto& healthComponents = results.healthComponents().health_components;
76
77 // GPS state
78 const auto gpsStateIter = healthComponents.find("gps");
79 if (gpsStateIter != healthComponents.end()) {
80 const events::HealthAndArmingChecks::HealthComponent& gpsState = gpsStateIter->second;
81 if (gpsState.health.error || gpsState.arming_check.error) {
82 _gpsState = "red";
83 } else if (gpsState.health.warning || gpsState.arming_check.warning) {
84 _gpsState = "yellow";
85 } else {
86 _gpsState = "green";
87 }
88 }
89
90 emit updated();
91}
92
93void HealthAndArmingCheckReport::setModeGroups(int takeoffModeGroup, int missionModeGroup)
94{
95 _takeoffModeGroup = takeoffModeGroup;
96 _missionModeGroup = missionModeGroup;
97}
#define QGC_LOGGING_CATEGORY(name, categoryStr)
Drives the MAVLink events protocol for a single component.
const events::HealthAndArmingChecks * healthAndArmingChecks() const
HealthAndArmingCheckReport(QObject *parent=nullptr)
void update(uint8_t compid, const EventHandler &eventHandler, int flightModeGroup)
void setModeGroups(int takeoffModeGroup, int missionModeGroup)
void append(QObject *object)
Caller maintains responsibility for object ownership and deletion.
void clearAndDeleteContents() override final
Clears the list and calls deleteLater on each entry.