Browse Source

Change to vehicle location when home position shows up

QGC4.4
DonLakeFlyer 6 years ago
parent
commit
e91b6d6a65
  1. 26
      src/PositionManager/SimulatedPosition.cc
  2. 7
      src/PositionManager/SimulatedPosition.h

26
src/PositionManager/SimulatedPosition.cc

@ -12,6 +12,8 @@ @@ -12,6 +12,8 @@
#include <QDate>
#include "SimulatedPosition.h"
#include "QGCApplication.h"
#include "MultiVehicleManager.h"
SimulatedPosition::SimulatedPosition()
: QGeoPositionInfoSource(nullptr)
@ -25,7 +27,10 @@ SimulatedPosition::SimulatedPosition() @@ -25,7 +27,10 @@ SimulatedPosition::SimulatedPosition()
_lastPosition.setAttribute(QGeoPositionInfo::Attribute::GroundSpeed, _horizontalVelocityMetersPerSec);
_lastPosition.setAttribute(QGeoPositionInfo::Attribute::VerticalSpeed, _verticalVelocityMetersPerSec);
connect(&_updateTimer, &QTimer::timeout, this, &SimulatedPosition::updatePosition);
// When a vehicle shows up we switch location to the vehicle home position
connect(qgcApp()->toolbox()->multiVehicleManager(), &MultiVehicleManager::vehicleAdded, this, &SimulatedPosition::_vehicleAdded);
connect(&_updateTimer, &QTimer::timeout, this, &SimulatedPosition::_updatePosition);
}
QGeoPositionInfo SimulatedPosition::lastKnownPosition(bool /*fromSatellitePositioningMethodsOnly*/) const
@ -53,7 +58,7 @@ void SimulatedPosition::requestUpdate(int /*timeout*/) @@ -53,7 +58,7 @@ void SimulatedPosition::requestUpdate(int /*timeout*/)
emit updateTimeout();
}
void SimulatedPosition::updatePosition(void)
void SimulatedPosition::_updatePosition(void)
{
int intervalMsecs = _updateTimer.interval();
@ -71,4 +76,21 @@ QGeoPositionInfoSource::Error SimulatedPosition::error() const @@ -71,4 +76,21 @@ QGeoPositionInfoSource::Error SimulatedPosition::error() const
return QGeoPositionInfoSource::NoError;
}
void SimulatedPosition::_vehicleAdded(Vehicle* vehicle)
{
if (vehicle->homePosition().isValid()) {
_lastPosition.setCoordinate(vehicle->homePosition());
} else {
connect(vehicle, &Vehicle::homePositionChanged, this, &SimulatedPosition::_vehicleHomePositionChanged);
}
}
void SimulatedPosition::_vehicleHomePositionChanged(QGeoCoordinate homePosition)
{
Vehicle* vehicle = qobject_cast<Vehicle*>(sender());
if (homePosition.isValid()) {
_lastPosition.setCoordinate(homePosition);
disconnect(vehicle, &Vehicle::homePositionChanged, this, &SimulatedPosition::_vehicleHomePositionChanged);
}
}

7
src/PositionManager/SimulatedPosition.h

@ -7,13 +7,14 @@ @@ -7,13 +7,14 @@
*
****************************************************************************/
#pragma once
#include <QtPositioning/qgeopositioninfosource.h>
#include "QGCToolbox.h"
#include <QTimer>
class Vehicle;
class SimulatedPosition : public QGeoPositionInfoSource
{
Q_OBJECT
@ -33,7 +34,9 @@ public slots: @@ -33,7 +34,9 @@ public slots:
void requestUpdate (int timeout = 5000) override;
private slots:
void updatePosition();
void _updatePosition (void);
void _vehicleAdded (Vehicle* vehicle);
void _vehicleHomePositionChanged (QGeoCoordinate homePosition);
private:
QTimer _updateTimer;

Loading…
Cancel
Save