QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
PowerComponentController.cc
Go to the documentation of this file.
2#include "Vehicle.h"
3
8
10{
11 _warningMessages.clear();
12 connect(_vehicle, &Vehicle::textMessageReceived, this, &PowerComponentController::_handleVehicleTextMessage);
14}
15
17{
18 _warningMessages.clear();
19 connect(_vehicle, &Vehicle::textMessageReceived, this, &PowerComponentController::_handleVehicleTextMessage);
21}
22
24{
25 disconnect(_vehicle, &Vehicle::textMessageReceived, this, &PowerComponentController::_handleVehicleTextMessage);
27}
28
29void PowerComponentController::_stopCalibration(void)
30{
31 disconnect(_vehicle, &Vehicle::textMessageReceived, this, &PowerComponentController::_handleVehicleTextMessage);
32}
33
34void PowerComponentController::_stopBusConfig(void)
35{
36 _stopCalibration();
37}
38
39void PowerComponentController::_handleVehicleTextMessage(int vehicleId, int /* compId */, int /* severity */, QString text, const QString &description)
40{
41 Q_UNUSED(description);
42
43 if (vehicleId != _vehicle->id()) {
44 return;
45 }
46
47 // All calibration messages start with [cal]
48 QString calPrefix("[cal] ");
49 if (!text.startsWith(calPrefix)) {
50 return;
51 }
52 text = text.right(text.length() - calPrefix.length());
53
54 // Make sure we can understand this firmware rev
55 QString calStartPrefix("calibration started: ");
56 if (text.startsWith(calStartPrefix)) {
57 text = text.right(text.length() - calStartPrefix.length());
58
59 // Split version number and cal type
60 QStringList parts = text.split(" ");
61 if (parts.count() != 2) {
63 return;
64 }
65
66#if 0
67 // FIXME: Cal version check is not working. Needs to be able to cancel, calibration
68
69 int firmwareRev = parts[0].toInt();
70 if (firmwareRev < _neededFirmwareRev) {
71 emit oldFirmware();
72 return;
73 }
74 if (firmwareRev > _neededFirmwareRev) {
75 emit newerFirmware();
76 return;
77 }
78#endif
79 }
80
81 if (text == "Connect battery now") {
82 emit connectBattery();
83 return;
84 }
85
86 if (text == "Battery connected") {
87 emit batteryConnected();
88 return;
89 }
90
91
92 QString failedPrefix("calibration failed: ");
93 if (text.startsWith(failedPrefix)) {
94 QString failureText = text.right(text.length() - failedPrefix.length());
95 _stopCalibration();
96 if (failureText.startsWith("Disconnect battery")) {
97 emit disconnectBattery();
98 return;
99 }
100
101 emit calibrationFailed(text.right(text.length() - failedPrefix.length()));
102 return;
103 }
104
105 QString calCompletePrefix("calibration done:");
106 if (text.startsWith(calCompletePrefix)) {
107 _stopCalibration();
108 emit calibrationSuccess(_warningMessages);
109 return;
110 }
111
112 QString warningPrefix("config warning: ");
113 if (text.startsWith(warningPrefix)) {
114 _warningMessages << text.right(text.length() - warningPrefix.length());
115 }
116
117 QString busFailedPrefix("bus conf fail:");
118 if (text.startsWith(busFailedPrefix)) {
119
120 _stopBusConfig();
121 emit calibrationFailed(text.right(text.length() - failedPrefix.length()));
122 return;
123 }
124
125 if (text.startsWith(calCompletePrefix)) {
126 _stopBusConfig();
127 emit calibrationSuccess(_warningMessages);
128 return;
129 }
130
131 QString busWarningPrefix("bus conf warn: ");
132 if (text.startsWith(busWarningPrefix)) {
133 _warningMessages << text.right(text.length() - warningPrefix.length());
134 }
135}
void calibrationSuccess(const QStringList &warningMessages)
void calibrationFailed(const QString &errorMessage)
void incorrectFirmwareRevReporting(void)
void textMessageReceived(int sysid, int componentid, int severity, QString text, QString description)
int id() const
Definition Vehicle.h:425
void stopUAVCANBusConfig(void)
Definition Vehicle.cc:3320
void startCalibration(QGCMAVLink::CalibrationType calType)
Definition Vehicle.cc:3218
void startUAVCANBusConfig(void)
Definition Vehicle.cc:3312