QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
RadioStatusFactGroup.cc
Go to the documentation of this file.
2
3#include <QtCore/QtMath>
4
5#include "MAVLinkLib.h"
6#include "Vehicle.h"
7
9 : FactGroup(1000, QStringLiteral(":/json/Vehicle/RadioStatusFact.json"), parent)
10{
11 _addFact(&_lrssiFact);
12 _addFact(&_rrssiFact);
13 _addFact(&_rxErrorsFact);
14 _addFact(&_fixedFact);
15 _addFact(&_txBufferFact);
16 _addFact(&_lNoiseFact);
17 _addFact(&_rNoiseFact);
18}
19
21{
22 Q_UNUSED(vehicle);
23
24 if (message.msgid == MAVLINK_MSG_ID_RADIO_STATUS) {
25 _handleRadioStatus(message);
26 }
27}
28
29void RadioStatusFactGroup::_handleRadioStatus(const mavlink_message_t &message)
30{
31 mavlink_radio_status_t rstatus{};
32 mavlink_msg_radio_status_decode(&message, &rstatus);
33
34 int rssi = rstatus.rssi;
35 int remrssi = rstatus.remrssi;
36 const int lnoise = static_cast<int>(static_cast<int8_t>(rstatus.noise));
37 const int rnoise = static_cast<int>(static_cast<int8_t>(rstatus.remnoise));
38
39 // 3DR Si1k radio reports raw register values; convert to dBm per the
40 // Si1K datasheet figure 23.25 and SI AN474:
41 // inputPower = rssi * (10/19) - 127
42 // Limit to the realistic range [-120, 0] dBm. Non-Si1k radios are assumed
43 // to already be signed-8-bit dBm.
44 if (message.sysid == '3' && message.compid == 'D') {
45 rssi = qBound(-120, qRound(static_cast<qreal>(rssi) / 1.9 - 127.0), 0);
46 remrssi = qBound(-120, qRound(static_cast<qreal>(remrssi) / 1.9 - 127.0), 0);
47 } else {
48 rssi = static_cast<int>(static_cast<int8_t>(rstatus.rssi));
49 remrssi = static_cast<int>(static_cast<int8_t>(rstatus.remrssi));
50 }
51
52 lrssi()->setRawValue(rssi);
53 rrssi()->setRawValue(remrssi);
54 rxErrors()->setRawValue(rstatus.rxerrors);
55 fixed()->setRawValue(rstatus.fixed);
56 txBuffer()->setRawValue(rstatus.txbuf);
57 lNoise()->setRawValue(lnoise);
58 rNoise()->setRawValue(rnoise);
59
61}
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 setRawValue(const QVariant &value)
Definition Fact.cc:135
void handleMessage(Vehicle *vehicle, const mavlink_message_t &message) final
Allows a FactGroup to parse incoming messages and fill in values.
RadioStatusFactGroup(QObject *parent=nullptr)