QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
VehicleGeneratorFactGroup.cc
Go to the documentation of this file.
2
3#include "MAVLinkLib.h"
4#include "Vehicle.h"
5
7 : FactGroup(1000, QStringLiteral(":/json/Vehicle/GeneratorFact.json"), parent)
8{
9 _addFact(&_statusFact);
10 _addFact(&_genSpeedFact);
11 _addFact(&_batteryCurrentFact);
12 _addFact(&_loadCurrentFact);
13 _addFact(&_powerGeneratedFact);
14 _addFact(&_busVoltageFact);
15 _addFact(&_batCurrentSetpointFact);
16 _addFact(&_rectifierTempFact);
17 _addFact(&_genTempFact);
18 _addFact(&_runtimeFact);
19 _addFact(&_timeMaintenanceFact);
20
21 _statusFact.setRawValue(qQNaN());
22 _genSpeedFact.setRawValue(qQNaN());
23 _batteryCurrentFact.setRawValue(qQNaN());
24 _loadCurrentFact.setRawValue(qQNaN());
25 _powerGeneratedFact.setRawValue(qQNaN());
26 _busVoltageFact.setRawValue(qQNaN());
27 _batCurrentSetpointFact.setRawValue(qQNaN());
28 _rectifierTempFact.setRawValue(qQNaN());
29 _genTempFact.setRawValue(qQNaN());
30 _runtimeFact.setRawValue(qQNaN());
31 _timeMaintenanceFact.setRawValue(qQNaN());
32
33 (void) connect(status(), &Fact::rawValueChanged, this,& VehicleGeneratorFactGroup::_updateGeneratorFlags);
34}
35
37{
38 Q_UNUSED(vehicle);
39
40 switch (message.msgid) {
41 case MAVLINK_MSG_ID_GENERATOR_STATUS:
42 _handleGeneratorStatus(message);
43 break;
44 default:
45 break;
46 }
47}
48
49void VehicleGeneratorFactGroup::_handleGeneratorStatus(const mavlink_message_t &message)
50{
51 mavlink_generator_status_t generator{};
52 mavlink_msg_generator_status_decode(&message, &generator);
53
54 status()->setRawValue((generator.status == UINT16_MAX) ? qQNaN() : generator.status);
55 genSpeed()->setRawValue((generator.generator_speed == UINT16_MAX) ? qQNaN() : generator.generator_speed);
56 batteryCurrent()->setRawValue(generator.battery_current);
57 loadCurrent()->setRawValue(generator.load_current);
58 powerGenerated()->setRawValue(generator.power_generated);
59 busVoltage()->setRawValue(generator.bus_voltage);
60 rectifierTemp()->setRawValue((generator.rectifier_temperature == INT16_MAX) ? qQNaN() : generator.rectifier_temperature);
61 batCurrentSetpoint()->setRawValue(generator.bat_current_setpoint);
62 genTemp()->setRawValue((generator.generator_temperature == INT16_MAX) ? qQNaN() : generator.generator_temperature);
63 runtime()->setRawValue((generator.runtime == UINT32_MAX) ? qQNaN() : generator.runtime);
64 timeMaintenance()->setRawValue((generator.time_until_maintenance == INT32_MAX) ? qQNaN() : generator.time_until_maintenance);
65
67}
68
69void VehicleGeneratorFactGroup::_updateGeneratorFlags(const QVariant &value)
70{
71 const int statusFlag = value.toInt();
72 if (statusFlag == _prevFlag) {
73 return;
74 }
75
76 _prevFlag = statusFlag;
77 _flagsListGenerator.clear();
78
79 const QBitArray bitsetFlags(23);
80 for (qsizetype i = 0; i < bitsetFlags.size(); i++) {
81 if (bitsetFlags[i]) {
82 _flagsListGenerator.append(1);
83 } else {
84 _flagsListGenerator.append(0);
85 }
86 }
87
89}
struct __mavlink_message mavlink_message_t
Used to group Facts together into an object hierarachy.
Definition FactGroup.h:16
void _setTelemetryAvailable(bool telemetryAvailable)
Definition FactGroup.cc:175
void _addFact(Fact *fact, const QString &name)
Definition FactGroup.cc:116
void rawValueChanged(const QVariant &value)
void setRawValue(const QVariant &value)
Definition Fact.cc:135
VehicleGeneratorFactGroup(QObject *parent=nullptr)
void handleMessage(Vehicle *vehicle, const mavlink_message_t &message) final
Allows a FactGroup to parse incoming messages and fill in values.