Unverified Commit 48c896bb authored by Gus Grubba's avatar Gus Grubba Committed by GitHub

Merge pull request #5834 from mavlink/hobbsMeter

Adding access to the vehicle hobbs meter
parents af45d4ad cca928e5
...@@ -57,6 +57,7 @@ const char* Vehicle::_altitudeAMSLFactName = "altitudeAMSL"; ...@@ -57,6 +57,7 @@ const char* Vehicle::_altitudeAMSLFactName = "altitudeAMSL";
const char* Vehicle::_flightDistanceFactName = "flightDistance"; const char* Vehicle::_flightDistanceFactName = "flightDistance";
const char* Vehicle::_flightTimeFactName = "flightTime"; const char* Vehicle::_flightTimeFactName = "flightTime";
const char* Vehicle::_distanceToHomeFactName = "distanceToHome"; const char* Vehicle::_distanceToHomeFactName = "distanceToHome";
const char* Vehicle::_hobbsFactName = "hobbs";
const char* Vehicle::_gpsFactGroupName = "gps"; const char* Vehicle::_gpsFactGroupName = "gps";
const char* Vehicle::_batteryFactGroupName = "battery"; const char* Vehicle::_batteryFactGroupName = "battery";
...@@ -165,6 +166,7 @@ Vehicle::Vehicle(LinkInterface* link, ...@@ -165,6 +166,7 @@ Vehicle::Vehicle(LinkInterface* link,
, _flightDistanceFact (0, _flightDistanceFactName, FactMetaData::valueTypeDouble) , _flightDistanceFact (0, _flightDistanceFactName, FactMetaData::valueTypeDouble)
, _flightTimeFact (0, _flightTimeFactName, FactMetaData::valueTypeElapsedTimeInSeconds) , _flightTimeFact (0, _flightTimeFactName, FactMetaData::valueTypeElapsedTimeInSeconds)
, _distanceToHomeFact (0, _distanceToHomeFactName, FactMetaData::valueTypeDouble) , _distanceToHomeFact (0, _distanceToHomeFactName, FactMetaData::valueTypeDouble)
, _hobbsFact (0, _hobbsFactName, FactMetaData::valueTypeString)
, _gpsFactGroup(this) , _gpsFactGroup(this)
, _batteryFactGroup(this) , _batteryFactGroup(this)
, _windFactGroup(this) , _windFactGroup(this)
...@@ -183,6 +185,8 @@ Vehicle::Vehicle(LinkInterface* link, ...@@ -183,6 +185,8 @@ Vehicle::Vehicle(LinkInterface* link,
connect(this, &Vehicle::flightModeChanged, this, &Vehicle::_handleFlightModeChanged); connect(this, &Vehicle::flightModeChanged, this, &Vehicle::_handleFlightModeChanged);
connect(this, &Vehicle::armedChanged, this, &Vehicle::_announceArmedChanged); connect(this, &Vehicle::armedChanged, this, &Vehicle::_announceArmedChanged);
connect(_toolbox->multiVehicleManager(), &MultiVehicleManager::parameterReadyVehicleAvailableChanged, this, &Vehicle::_vehicleParamLoaded);
_uas = new UAS(_mavlink, this, _firmwarePluginManager); _uas = new UAS(_mavlink, this, _firmwarePluginManager);
connect(_uas, &UAS::imageReady, this, &Vehicle::_imageReady); connect(_uas, &UAS::imageReady, this, &Vehicle::_imageReady);
...@@ -337,6 +341,7 @@ Vehicle::Vehicle(MAV_AUTOPILOT firmwareType, ...@@ -337,6 +341,7 @@ Vehicle::Vehicle(MAV_AUTOPILOT firmwareType,
, _flightDistanceFact (0, _flightDistanceFactName, FactMetaData::valueTypeDouble) , _flightDistanceFact (0, _flightDistanceFactName, FactMetaData::valueTypeDouble)
, _flightTimeFact (0, _flightTimeFactName, FactMetaData::valueTypeElapsedTimeInSeconds) , _flightTimeFact (0, _flightTimeFactName, FactMetaData::valueTypeElapsedTimeInSeconds)
, _distanceToHomeFact (0, _distanceToHomeFactName, FactMetaData::valueTypeDouble) , _distanceToHomeFact (0, _distanceToHomeFactName, FactMetaData::valueTypeDouble)
, _hobbsFact (0, _hobbsFactName, FactMetaData::valueTypeString)
, _gpsFactGroup(this) , _gpsFactGroup(this)
, _batteryFactGroup(this) , _batteryFactGroup(this)
, _windFactGroup(this) , _windFactGroup(this)
...@@ -352,6 +357,7 @@ void Vehicle::_commonInit(void) ...@@ -352,6 +357,7 @@ void Vehicle::_commonInit(void)
connect(this, &Vehicle::coordinateChanged, this, &Vehicle::_updateDistanceToHome); connect(this, &Vehicle::coordinateChanged, this, &Vehicle::_updateDistanceToHome);
connect(this, &Vehicle::homePositionChanged, this, &Vehicle::_updateDistanceToHome); connect(this, &Vehicle::homePositionChanged, this, &Vehicle::_updateDistanceToHome);
connect(this, &Vehicle::hobbsMeterChanged, this, &Vehicle::_updateHobbsMeter);
_missionManager = new MissionManager(this); _missionManager = new MissionManager(this);
connect(_missionManager, &MissionManager::error, this, &Vehicle::_missionManagerError); connect(_missionManager, &MissionManager::error, this, &Vehicle::_missionManagerError);
...@@ -393,6 +399,9 @@ void Vehicle::_commonInit(void) ...@@ -393,6 +399,9 @@ void Vehicle::_commonInit(void)
_addFact(&_flightTimeFact, _flightTimeFactName); _addFact(&_flightTimeFact, _flightTimeFactName);
_addFact(&_distanceToHomeFact, _distanceToHomeFactName); _addFact(&_distanceToHomeFact, _distanceToHomeFactName);
_hobbsFact.setRawValue(QVariant(QString("0000:00:00")));
_addFact(&_hobbsFact, _hobbsFactName);
_addFactGroup(&_gpsFactGroup, _gpsFactGroupName); _addFactGroup(&_gpsFactGroup, _gpsFactGroupName);
_addFactGroup(&_batteryFactGroup, _batteryFactGroupName); _addFactGroup(&_batteryFactGroup, _batteryFactGroupName);
_addFactGroup(&_windFactGroup, _windFactGroupName); _addFactGroup(&_windFactGroup, _windFactGroupName);
...@@ -2862,6 +2871,11 @@ void Vehicle::_updateDistanceToHome(void) ...@@ -2862,6 +2871,11 @@ void Vehicle::_updateDistanceToHome(void)
} }
} }
void Vehicle::_updateHobbsMeter(void)
{
_hobbsFact.setRawValue(hobbsMeter());
}
void Vehicle::forceInitialPlanRequestComplete(void) void Vehicle::forceInitialPlanRequestComplete(void)
{ {
_initialPlanRequestComplete = true; _initialPlanRequestComplete = true;
...@@ -2873,6 +2887,35 @@ void Vehicle::sendPlan(QString planFile) ...@@ -2873,6 +2887,35 @@ void Vehicle::sendPlan(QString planFile)
PlanMasterController::sendPlanToVehicle(this, planFile); PlanMasterController::sendPlanToVehicle(this, planFile);
} }
QString Vehicle::hobbsMeter()
{
static const char* HOOBS_HI = "LND_FLIGHT_T_HI";
static const char* HOOBS_LO = "LND_FLIGHT_T_LO";
//-- TODO: Does this exist on non PX4?
if (_parameterManager->parameterExists(FactSystem::defaultComponentId, HOOBS_HI) &&
_parameterManager->parameterExists(FactSystem::defaultComponentId, HOOBS_LO)) {
Fact* factHi = _parameterManager->getParameter(FactSystem::defaultComponentId, HOOBS_HI);
Fact* factLo = _parameterManager->getParameter(FactSystem::defaultComponentId, HOOBS_LO);
uint64_t hobbsTimeSeconds = ((uint64_t)factHi->rawValue().toUInt() << 32 | (uint64_t)factLo->rawValue().toUInt()) / 1000000;
int hours = hobbsTimeSeconds / 3600;
int minutes = (hobbsTimeSeconds % 3600) / 60;
int seconds = hobbsTimeSeconds % 60;
QString timeStr;
timeStr.sprintf("%04d:%02d:%02d", hours, minutes, seconds);
qCDebug(VehicleLog) << "Hobbs Meter:" << timeStr << "(" << factHi->rawValue().toUInt() << factLo->rawValue().toUInt() << ")";
return timeStr;
}
return QString("0000:00:00");
}
void Vehicle::_vehicleParamLoaded(bool ready)
{
//-- TODO: This seems silly but can you think of a better
// way to update this?
if(ready) {
emit hobbsMeterChanged();
}
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
......
...@@ -319,6 +319,7 @@ public: ...@@ -319,6 +319,7 @@ public:
Q_PROPERTY(bool initialPlanRequestComplete READ initialPlanRequestComplete NOTIFY initialPlanRequestCompleteChanged) Q_PROPERTY(bool initialPlanRequestComplete READ initialPlanRequestComplete NOTIFY initialPlanRequestCompleteChanged)
Q_PROPERTY(QVariantList staticCameraList READ staticCameraList CONSTANT) Q_PROPERTY(QVariantList staticCameraList READ staticCameraList CONSTANT)
Q_PROPERTY(QGCCameraManager* dynamicCameras READ dynamicCameras NOTIFY dynamicCamerasChanged) Q_PROPERTY(QGCCameraManager* dynamicCameras READ dynamicCameras NOTIFY dynamicCamerasChanged)
Q_PROPERTY(QString hobbsMeter READ hobbsMeter NOTIFY hobbsMeterChanged)
// Vehicle state used for guided control // Vehicle state used for guided control
Q_PROPERTY(bool flying READ flying NOTIFY flyingChanged) ///< Vehicle is flying Q_PROPERTY(bool flying READ flying NOTIFY flyingChanged) ///< Vehicle is flying
...@@ -343,6 +344,7 @@ public: ...@@ -343,6 +344,7 @@ public:
Q_PROPERTY(Fact* altitudeAMSL READ altitudeAMSL CONSTANT) Q_PROPERTY(Fact* altitudeAMSL READ altitudeAMSL CONSTANT)
Q_PROPERTY(Fact* flightDistance READ flightDistance CONSTANT) Q_PROPERTY(Fact* flightDistance READ flightDistance CONSTANT)
Q_PROPERTY(Fact* distanceToHome READ distanceToHome CONSTANT) Q_PROPERTY(Fact* distanceToHome READ distanceToHome CONSTANT)
Q_PROPERTY(Fact* hobbs READ hobbs CONSTANT)
Q_PROPERTY(FactGroup* gps READ gpsFactGroup CONSTANT) Q_PROPERTY(FactGroup* gps READ gpsFactGroup CONSTANT)
Q_PROPERTY(FactGroup* battery READ batteryFactGroup CONSTANT) Q_PROPERTY(FactGroup* battery READ batteryFactGroup CONSTANT)
...@@ -613,6 +615,7 @@ public: ...@@ -613,6 +615,7 @@ public:
Fact* altitudeAMSL (void) { return &_altitudeAMSLFact; } Fact* altitudeAMSL (void) { return &_altitudeAMSLFact; }
Fact* flightDistance (void) { return &_flightDistanceFact; } Fact* flightDistance (void) { return &_flightDistanceFact; }
Fact* distanceToHome (void) { return &_distanceToHomeFact; } Fact* distanceToHome (void) { return &_distanceToHomeFact; }
Fact* hobbs (void) { return &_hobbsFact; }
FactGroup* gpsFactGroup (void) { return &_gpsFactGroup; } FactGroup* gpsFactGroup (void) { return &_gpsFactGroup; }
FactGroup* batteryFactGroup (void) { return &_batteryFactGroup; } FactGroup* batteryFactGroup (void) { return &_batteryFactGroup; }
...@@ -690,7 +693,9 @@ public: ...@@ -690,7 +693,9 @@ public:
bool capabilitiesKnown (void) const { return _vehicleCapabilitiesKnown; } bool capabilitiesKnown (void) const { return _vehicleCapabilitiesKnown; }
uint64_t capabilityBits (void) const { return _capabilityBits; } // Change signalled by capabilityBitsChanged uint64_t capabilityBits (void) const { return _capabilityBits; } // Change signalled by capabilityBitsChanged
QGCCameraManager* dynamicCameras () { return _cameras; } QGCCameraManager* dynamicCameras () { return _cameras; }
QString hobbsMeter ();
/// @true: When flying a mission the vehicle is always facing towards the next waypoint /// @true: When flying a mission the vehicle is always facing towards the next waypoint
bool vehicleYawsToNextWaypointInMission(void) const; bool vehicleYawsToNextWaypointInMission(void) const;
...@@ -736,6 +741,7 @@ signals: ...@@ -736,6 +741,7 @@ signals:
void firmwareTypeChanged(void); void firmwareTypeChanged(void);
void vehicleTypeChanged(void); void vehicleTypeChanged(void);
void dynamicCamerasChanged(); void dynamicCamerasChanged();
void hobbsMeterChanged();
void capabilitiesKnownChanged(bool capabilitiesKnown); void capabilitiesKnownChanged(bool capabilitiesKnown);
void initialPlanRequestCompleteChanged(bool initialPlanRequestComplete); void initialPlanRequestCompleteChanged(bool initialPlanRequestComplete);
void capabilityBitsChanged(uint64_t capabilityBits); void capabilityBitsChanged(uint64_t capabilityBits);
...@@ -834,6 +840,8 @@ private slots: ...@@ -834,6 +840,8 @@ private slots:
void _clearTrajectoryPoints(void); void _clearTrajectoryPoints(void);
void _clearCameraTriggerPoints(void); void _clearCameraTriggerPoints(void);
void _updateDistanceToHome(void); void _updateDistanceToHome(void);
void _updateHobbsMeter(void);
void _vehicleParamLoaded(bool ready);
private: private:
bool _containsLink(LinkInterface* link); bool _containsLink(LinkInterface* link);
...@@ -1055,6 +1063,7 @@ private: ...@@ -1055,6 +1063,7 @@ private:
Fact _flightDistanceFact; Fact _flightDistanceFact;
Fact _flightTimeFact; Fact _flightTimeFact;
Fact _distanceToHomeFact; Fact _distanceToHomeFact;
Fact _hobbsFact;
VehicleGPSFactGroup _gpsFactGroup; VehicleGPSFactGroup _gpsFactGroup;
VehicleBatteryFactGroup _batteryFactGroup; VehicleBatteryFactGroup _batteryFactGroup;
...@@ -1073,6 +1082,7 @@ private: ...@@ -1073,6 +1082,7 @@ private:
static const char* _flightDistanceFactName; static const char* _flightDistanceFactName;
static const char* _flightTimeFactName; static const char* _flightTimeFactName;
static const char* _distanceToHomeFactName; static const char* _distanceToHomeFactName;
static const char* _hobbsFactName;
static const char* _gpsFactGroupName; static const char* _gpsFactGroupName;
static const char* _batteryFactGroupName; static const char* _batteryFactGroupName;
......
...@@ -74,5 +74,10 @@ ...@@ -74,5 +74,10 @@
"shortDescription": "Flight Time", "shortDescription": "Flight Time",
"type": "elapsedSeconds", "type": "elapsedSeconds",
"decimalPlaces": 1 "decimalPlaces": 1
},
{
"name": "hobbs",
"shortDescription": "Hobbs Meter",
"type": "string"
} }
] ]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment