From 0b5fb0dce5a4fd76451c2128e4dfa30416951391 Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Mon, 8 Oct 2018 14:01:47 -0300 Subject: [PATCH] FirmwarePlugin, Vehicle: implement helper to check version number --- src/FirmwarePlugin/FirmwarePlugin.cc | 32 ++++++++++++++++++++++++++++ src/FirmwarePlugin/FirmwarePlugin.h | 5 +++++ src/Vehicle/Vehicle.cc | 10 +++++++++ src/Vehicle/Vehicle.h | 5 +++++ 4 files changed, 52 insertions(+) diff --git a/src/FirmwarePlugin/FirmwarePlugin.cc b/src/FirmwarePlugin/FirmwarePlugin.cc index e798feb99..f74897bfd 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.cc +++ b/src/FirmwarePlugin/FirmwarePlugin.cc @@ -740,3 +740,35 @@ void FirmwarePlugin::_versionFileDownloadFinished(QString& remoteFile, QString& qgcApp()->showMessage(message.arg(vehicle->firmwareVersionTypeString(), currentVersion, version)); } } + +int FirmwarePlugin::versionCompare(Vehicle* vehicle, int major, int minor, int patch) +{ + int currMajor = vehicle->firmwareMajorVersion(); + int currMinor = vehicle->firmwareMinorVersion(); + int currPatch = vehicle->firmwarePatchVersion(); + + if (currMajor == major && currMinor == minor && currPatch == patch) { + return 0; + } + + if (currMajor > major + || (currMajor == major && currMinor > minor) + || (currMajor == major && currMinor == minor && currPatch > patch)) + { + return 1; + } + return -1; +} + +int FirmwarePlugin::versionCompare(Vehicle* vehicle, QString& compare) +{ + QStringList versionNumbers = compare.split("."); + if(versionNumbers.size() != 3) { + qCWarning(FirmwarePluginLog) << "Error parsing version number: wrong format"; + return -1; + } + int major = versionNumbers[0].toInt(); + int minor = versionNumbers[1].toInt(); + int patch = versionNumbers[2].toInt(); + return versionCompare(vehicle, major, minor, patch); +} diff --git a/src/FirmwarePlugin/FirmwarePlugin.h b/src/FirmwarePlugin/FirmwarePlugin.h index b13f145fa..d5c442b16 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.h +++ b/src/FirmwarePlugin/FirmwarePlugin.h @@ -309,6 +309,11 @@ public: /// Used to check if running firmware is latest stable version. virtual void checkIfIsLatestStable(Vehicle* vehicle); + /// Used to check if running current version is equal or higher than the one being compared. + /// returns 1 if current > compare, 0 if current == compare, -1 if current < compare + int versionCompare(Vehicle* vehicle, QString& compare); + int versionCompare(Vehicle* vehicle, int major, int minor, int patch); + // FIXME: Hack workaround for non pluginize FollowMe support static const QString px4FollowMeFlightMode; diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 81ae9ce03..fa52d4035 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -3770,6 +3770,16 @@ void Vehicle::_mavlinkMessageStatus(int uasId, uint64_t totalSent, uint64_t tota } } +int Vehicle::versionCompare(QString& compare) +{ + return _firmwarePlugin->versionCompare(this, compare); +} + +int Vehicle::versionCompare(int major, int minor, int patch) +{ + return _firmwarePlugin->versionCompare(this, major, minor, patch); +} + //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h index 1e27ed6cf..c3076d568 100644 --- a/src/Vehicle/Vehicle.h +++ b/src/Vehicle/Vehicle.h @@ -746,6 +746,11 @@ public: Q_INVOKABLE void triggerCamera(void); Q_INVOKABLE void sendPlan(QString planFile); + /// Used to check if running current version is equal or higher than the one being compared. + // returns 1 if current > compare, 0 if current == compare, -1 if current < compare + Q_INVOKABLE int versionCompare(QString& compare); + Q_INVOKABLE int versionCompare(int major, int minor, int patch); + /// Test motor /// @param motor Motor number, 1-based /// @param percent 0-no power, 100-full power -- 2.22.0