20QGCAmbientTemperature::QGCAmbientTemperature(QObject* parent)
22 , _ambientTemperature(new QAmbientTemperatureSensor(this))
25 connect(_ambientTemperature, &QAmbientTemperatureSensor::sensorError,
this, [](
int error) {
26 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"QAmbientTemperature error:" <<
error;
30 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"Error Initializing Ambient Temperature Sensor";
33 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
this;
43 _ambientTemperature->addFilter(_ambientTemperatureFilter.get());
45 const bool connected = _ambientTemperature->connectToBackend();
47 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"Failed to connect to ambient temperature backend";
50 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Connected to ambient temperature backend:" << _ambientTemperature->identifier();
53 if (_ambientTemperature->isFeatureSupported(QSensor::SkipDuplicates)) {
54 _ambientTemperature->setSkipDuplicates(
true);
57 const qrangelist dataRates = _ambientTemperature->availableDataRates();
58 if (!dataRates.isEmpty()) {
59 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Available Data Rates:" << dataRates;
61 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Selected Data Rate:" << _ambientTemperature->dataRate();
64 const qoutputrangelist outputRanges = _ambientTemperature->outputRanges();
65 if (!outputRanges.isEmpty()) {
68 const int outputRangeIndex = _ambientTemperature->outputRange();
69 if (outputRangeIndex < outputRanges.size()) {
70 const qoutputrange outputRange = outputRanges.at(_ambientTemperature->outputRange());
71 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Selected Output Range:" << outputRange.minimum << outputRange.maximum << outputRange.accuracy;
75 _readingChangedConnection = connect(_ambientTemperature, &QAmbientTemperatureSensor::readingChanged,
this, [
this]() {
76 QAmbientTemperatureReading* reading = _ambientTemperature->reading();
81 _temperatureC = reading->temperature();
87 const bool started = _ambientTemperature->start();
89 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"Failed to start ambient temperature";
135 , _pressure(new QPressureSensor(this))
138 connect(_pressure, &QPressureSensor::sensorError,
this, [](
int error) {
139 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"QPressure error:" <<
error;
143 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"Error Initializing Pressure Sensor";
146 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
this;
156 _pressure->addFilter(_pressureFilter.get());
158 const bool connected = _pressure->connectToBackend();
160 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"Failed to connect to pressure backend";
163 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Connected to pressure backend:" << _pressure->identifier();
166 if (_pressure->isFeatureSupported(QSensor::SkipDuplicates)) {
167 _pressure->setSkipDuplicates(
true);
170 const qrangelist dataRates = _pressure->availableDataRates();
171 if (!dataRates.isEmpty()) {
172 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Available Data Rates:" << dataRates;
174 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Selected Data Rate:" << _pressure->dataRate();
177 const qoutputrangelist outputRanges = _pressure->outputRanges();
178 if (!outputRanges.isEmpty()) {
181 const int outputRangeIndex = _pressure->outputRange();
182 if (outputRangeIndex < outputRanges.size()) {
183 const qoutputrange outputRange = outputRanges.at(_pressure->outputRange());
184 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Selected Output Range:" << outputRange.minimum << outputRange.maximum << outputRange.accuracy;
188 _readingChangedConnection = connect(_pressure, &QPressureSensor::readingChanged,
this, [
this]() {
189 QPressureReading* reading = _pressure->reading();
194 _temperatureC = reading->temperature();
195 _pressurePa = reading->pressure();
200 const bool started = _pressure->start();
202 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"Failed to start pressure";
233 const qreal temperature = reading->temperature();
234 if ((temperature < s_minValidTemperatureC) || (temperature > s_maxValidTemperatureC)) {
238 const qreal pressure = reading->pressure();
239 if ((pressure < s_minValidPressurePa) || (pressure > s_maxValidPressurePa)) {
257 , _compass(new QCompass(this))
262 (void) connect(_compass, &QCompass::sensorError,
this, [](
int error) {
263 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"Compass error:" <<
error;
267 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"Error Initializing Compass Sensor";
278 _compass->addFilter(_compassFilter.get());
280 const bool connected = _compass->connectToBackend();
282 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"Failed to connect to compass backend";
285 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Connected to compass backend:" << _compass->identifier();
288 if (_compass->isFeatureSupported(QSensor::SkipDuplicates)) {
289 _compass->setSkipDuplicates(
true);
292 const qrangelist dataRates = _compass->availableDataRates();
293 if (!dataRates.isEmpty()) {
294 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Available Data Rates:" << dataRates;
296 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Selected Data Rate:" << _compass->dataRate();
299 const qoutputrangelist outputRanges = _compass->outputRanges();
300 if (!outputRanges.isEmpty()) {
303 const int outputRangeIndex = _compass->outputRange();
304 if (outputRangeIndex < outputRanges.size()) {
305 const qoutputrange outputRange = outputRanges.at(_compass->outputRange());
306 qCDebug(QGCSensorsLog) << Q_FUNC_INFO <<
"Selected Output Range:" << outputRange.minimum << outputRange.maximum << outputRange.accuracy;
310 _readingChangedConnection = connect(_compass, &QCompass::readingChanged,
this, [
this]() {
311 QCompassReading*
const reading = _compass->reading();
316 _calibrationLevel = reading->calibrationLevel();
317 _azimuth = reading->azimuth();
321 QGeoPositionInfo update;
322 update.setAttribute(QGeoPositionInfo::Attribute::Direction, _azimuth);
323 update.setAttribute(QGeoPositionInfo::Attribute::DirectionAccuracy, _calibrationLevel);
324 update.setTimestamp(QDateTime::currentDateTimeUtc());
329 const bool started = _compass->start();
331 qCWarning(QGCSensorsLog) << Q_FUNC_INFO <<
"Failed to start compass";