QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
APMSensorsComponent.cc
Go to the documentation of this file.
2#include "ParameterManager.h"
3#include "Vehicle.h"
4
6 : VehicleComponent(vehicle, autopilot, AutoPilotPlugin::KnownSensorsVehicleComponent, parent)
7{
8
9}
10
12{
13 static const QStringList triggers = {
14 QStringLiteral("COMPASS_DEV_ID"), QStringLiteral("COMPASS_DEV_ID2"), QStringLiteral("COMPASS_DEV_ID3"),
15 QStringLiteral("COMPASS_USE"), QStringLiteral("COMPASS_USE2"), QStringLiteral("COMPASS_USE3"),
16 QStringLiteral("COMPASS_OFS_X"), QStringLiteral("COMPASS_OFS_Y"), QStringLiteral("COMPASS_OFS_Z"),
17 QStringLiteral("COMPASS_OFS2_X"), QStringLiteral("COMPASS_OFS2_Y"), QStringLiteral("COMPASS_OFS2_Z"),
18 QStringLiteral("COMPASS_OFS3_X"), QStringLiteral("COMPASS_OFS3_Y"), QStringLiteral("COMPASS_OFS3_Z"),
19 QStringLiteral("INS_ACCOFFS_X"), QStringLiteral("INS_ACCOFFS_Y"), QStringLiteral("INS_ACCOFFS_Z")
20 };
21
22 return triggers;
23}
24
26{
27 static const QStringList rgDevicesIds = {
28 QStringLiteral("COMPASS_DEV_ID"),
29 QStringLiteral("COMPASS_DEV_ID2"),
30 QStringLiteral("COMPASS_DEV_ID3")
31 };
32
33 static const QStringList rgCompassUse = {
34 QStringLiteral("COMPASS_USE"),
35 QStringLiteral("COMPASS_USE2"),
36 QStringLiteral("COMPASS_USE3")
37 };
38
39 static const QList<QStringList> rgOffsets = {
40 { QStringLiteral("COMPASS_OFS_X"), QStringLiteral("COMPASS_OFS_Y"), QStringLiteral("COMPASS_OFS_Z") },
41 { QStringLiteral("COMPASS_OFS2_X"), QStringLiteral("COMPASS_OFS2_Y"), QStringLiteral("COMPASS_OFS2_Z") },
42 { QStringLiteral("COMPASS_OFS3_X"), QStringLiteral("COMPASS_OFS3_Y"), QStringLiteral("COMPASS_OFS3_Z") }
43 };
44
45 for (qsizetype i = 0; i < rgDevicesIds.length(); i++) {
46 if (_vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, rgDevicesIds[i])->rawValue().toInt() == 0) {
47 continue;
48 }
49 if (_vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, rgCompassUse[i])->rawValue().toInt() == 0) {
50 continue;
51 }
52
53 const QStringList &offsets = rgOffsets[i];
54 for (const QString &offset : offsets) {
55 if (_vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, offset)->rawValue().toFloat() == 0.0f) {
56 return true;
57 }
58 }
59 }
60
61 return false;
62}
63
65{
66 // The best we can do is test the first accel which will always be there. We don't have enough information to know
67 // whether any of the other accels are available.
68 static const QStringList rgOffsets = {
69 QStringLiteral("INS_ACCOFFS_X"),
70 QStringLiteral("INS_ACCOFFS_Y"),
71 QStringLiteral("INS_ACCOFFS_Z")
72 };
73
74 int zeroCount = 0;
75 for (const QString &offset: rgOffsets) {
76 if (_vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, offset)->rawValue().toFloat() == 0.0f) {
77 zeroCount++;
78 }
79 }
80
81 return (zeroCount == rgOffsets.count());
82}
APMSensorsComponent(Vehicle *vehicle, AutoPilotPlugin *autopilot, QObject *parent=nullptr)
QStringList setupCompleteChangedTriggerList() const final
Fact * getParameter(int componentId, const QString &paramName)
static constexpr int defaultComponentId
ParameterManager * parameterManager()
Definition Vehicle.h:578