1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-18 08:54:15 +01:00

OP-1174 OP-1131 moved firmware version check from uploader gadget to uploader plugin.

This ensures that the check is always done even if the uploader gadget is not displayed.
This commit is contained in:
Philippe Renon 2014-05-02 23:36:05 +02:00
parent 4b379a1816
commit 40dcd94b5c
4 changed files with 92 additions and 83 deletions

View File

@ -25,12 +25,20 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "uploadergadgetwidget.h"
#include "version_info/version_info.h"
#include "flightstatus.h"
#include "flightstatus.h"
//#include "delay.h"
#include "devicewidget.h"
#include "runningdevicewidget.h"
#include <extensionsystem/pluginmanager.h>
#include <coreplugin/icore.h>
#include <coreplugin/coreconstants.h>
#include <coreplugin/connectionmanager.h>
#include <uavtalk/telemetrymanager.h>
#include <QDesktopServices>
#include <QMessageBox>
#include <QProgressBar>
#include <QDebug>
@ -125,14 +133,11 @@ UploaderGadgetWidget::UploaderGadgetWidget(QWidget *parent) : QWidget(parent)
currentStep = IAP_STATE_READY;
resetOnly = false;
dfu = NULL;
msg = new QErrorMessage(this);
// Listen to autopilot connection events
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
TelemetryManager *telMngr = pm->getObject<TelemetryManager>();
connect(telMngr, SIGNAL(connected()), this, SLOT(onAutopilotConnect()));
connect(telMngr, SIGNAL(connected()), this, SLOT(versionMatchCheck()));
connect(telMngr, SIGNAL(disconnected()), this, SLOT(onAutopilotDisconnect()));
connect(m_config->haltButton, SIGNAL(clicked()), this, SLOT(systemHalt()));
@ -162,7 +167,6 @@ UploaderGadgetWidget::UploaderGadgetWidget(QWidget *parent) : QWidget(parent)
// And check whether by any chance we are not already connected
if (telMngr->isConnected()) {
onAutopilotConnect();
versionMatchCheck();
}
}
@ -459,10 +463,9 @@ void UploaderGadgetWidget::goToBootloader(UAVObject *callerObj, bool success)
void UploaderGadgetWidget::systemHalt()
{
FlightStatus *status = getFlightStatus();
// The board can not be halted when in armed state.
// If board is armed, or arming. Show message with notice.
FlightStatus *status = getFlightStatus();
if (status->getArmed() == FlightStatus::ARMED_DISARMED) {
goToBootloader();
} else {
@ -1024,48 +1027,6 @@ void UploaderGadgetWidget::info(QString infoString, int infoNumber)
m_config->boardStatus->setText(infoString);
}
void UploaderGadgetWidget::versionMatchCheck()
{
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
UAVObjectUtilManager *utilMngr = pm->getObject<UAVObjectUtilManager>();
deviceDescriptorStruct boardDescription = utilMngr->getBoardDescriptionStruct();
QByteArray uavoHashArray;
QString uavoHash = VersionInfo::uavoHashArray();
uavoHash.chop(2);
uavoHash.remove(0, 2);
uavoHash = uavoHash.trimmed();
bool ok;
foreach(QString str, uavoHash.split(",")) {
uavoHashArray.append(str.toInt(&ok, 16));
}
QByteArray fwVersion = boardDescription.uavoHash;
if (fwVersion != uavoHashArray) {
QString gcsDescription = VersionInfo::revision();
QString gcsGitHash = gcsDescription.mid(gcsDescription.indexOf(":") + 1, 8);
gcsGitHash.remove(QRegExp("^[0]*"));
QString gcsGitDate = gcsDescription.mid(gcsDescription.indexOf(" ") + 1, 14);
QString gcsUavoHashStr;
QString fwUavoHashStr;
foreach(char i, fwVersion) {
fwUavoHashStr.append(QString::number(i, 16).right(2));
}
foreach(char i, uavoHashArray) {
gcsUavoHashStr.append(QString::number(i, 16).right(2));
}
QString gcsVersion = gcsGitDate + " (" + gcsGitHash + "-" + gcsUavoHashStr.left(8) + ")";
QString fwVersion = boardDescription.gitDate + " (" + boardDescription.gitHash + "-" + fwUavoHashStr.left(8) + ")";
QString warning = QString(tr(
"GCS and firmware versions of the UAV objects set do not match which can cause configuration problems. "
"GCS version: %1 Firmware version: %2.")).arg(gcsVersion).arg(fwVersion);
msg->showMessage(warning);
}
}
void UploaderGadgetWidget::openHelp()
{
QDesktopServices::openUrl(QUrl("http://wiki.openpilot.org/x/AoBZ", QUrl::StrictMode));

View File

@ -29,38 +29,18 @@
#define UPLOADERGADGETWIDGET_H
#include "ui_uploader.h"
#include "delay.h"
#include "devicewidget.h"
#include "runningdevicewidget.h"
#include "op_dfu.h"
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include "extensionsystem/pluginmanager.h"
#include "uavobjectmanager.h"
#include "uavobject.h"
#include "coreplugin/icore.h"
#include "coreplugin/connectionmanager.h"
#include "ophid/inc/ophid_plugin.h"
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QThread>
#include <QMessageBox>
#include <QTimer>
#include "devicedescriptorstruct.h"
#include <QProgressDialog>
#include <QErrorMessage>
#include <QDesktopServices>
#include "uploader_global.h"
#include "enums.h"
#include "op_dfu.h"
#include <QProgressDialog>
using namespace OP_DFU;
using namespace uploader;
class FlightStatus;
class UAVObject;
class TimedDialog: public QProgressDialog {
Q_OBJECT
@ -119,6 +99,7 @@ public:
~UploaderGadgetWidget();
static const int BOARD_EVENT_TIMEOUT;
static const int AUTOUPDATE_CLOSE_TIMEOUT;
void log(QString str);
bool autoUpdateCapable();
@ -144,15 +125,12 @@ private:
void clearLog();
QString getPortDevice(const QString &friendName);
QLineEdit *openFileNameLE;
QErrorMessage *msg;
void connectSignalSlot(QWidget *widget);
FlightStatus *getFlightStatus();
void bootButtonsSetEnable(bool enabled);
static const int AUTOUPDATE_CLOSE_TIMEOUT;
private slots:
void onPhysicalHWConnect();
void versionMatchCheck();
void error(QString errorString, int errorNumber);
void info(QString infoString, int infoNumber);
void goToBootloader(UAVObject * = NULL, bool = false);

View File

@ -26,11 +26,21 @@
*/
#include "uploaderplugin.h"
#include "uploadergadgetfactory.h"
#include <QtPlugin>
#include <QStringList>
#include <extensionsystem/pluginmanager.h>
UploaderPlugin::UploaderPlugin()
#include "version_info/version_info.h"
#include "devicedescriptorstruct.h"
#include "uavobjectutilmanager.h"
#include <extensionsystem/pluginmanager.h>
#include <coreplugin/icore.h>
#include <uavtalk/telemetrymanager.h>
#include <QStringList>
#include <QErrorMessage>
#include <QWidget>
#include <QMainWindow>
UploaderPlugin::UploaderPlugin() : errorMsg(0)
{
// Do nothing
}
@ -44,8 +54,15 @@ bool UploaderPlugin::initialize(const QStringList & args, QString *errMsg)
{
Q_UNUSED(args);
Q_UNUSED(errMsg);
mf = new UploaderGadgetFactory(this);
addAutoReleasedObject(mf);
// Listen to autopilot connection events
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
TelemetryManager *telMngr = pm->getObject<TelemetryManager>();
connect(telMngr, SIGNAL(connected()), this, SLOT(versionMatchCheck()));
return true;
}
@ -56,5 +73,52 @@ void UploaderPlugin::extensionsInitialized()
void UploaderPlugin::shutdown()
{
// Do nothing
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
TelemetryManager *telMngr = pm->getObject<TelemetryManager>();
disconnect(telMngr, SIGNAL(connected()), this, SLOT(versionMatchCheck()));
}
void UploaderPlugin::versionMatchCheck()
{
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
UAVObjectUtilManager *utilMngr = pm->getObject<UAVObjectUtilManager>();
deviceDescriptorStruct boardDescription = utilMngr->getBoardDescriptionStruct();
QString uavoHash = VersionInfo::uavoHashArray();
uavoHash.chop(2);
uavoHash.remove(0, 2);
uavoHash = uavoHash.trimmed();
QByteArray uavoHashArray;
bool ok;
foreach(QString str, uavoHash.split(",")) {
uavoHashArray.append(str.toInt(&ok, 16));
}
QByteArray fwVersion = 0;//boardDescription.uavoHash;
if (fwVersion != uavoHashArray) {
QString gcsDescription = VersionInfo::revision();
QString gcsGitHash = gcsDescription.mid(gcsDescription.indexOf(":") + 1, 8);
gcsGitHash.remove(QRegExp("^[0]*"));
QString gcsGitDate = gcsDescription.mid(gcsDescription.indexOf(" ") + 1, 14);
QString gcsUavoHashStr;
QString fwUavoHashStr;
foreach(char i, fwVersion) {
fwUavoHashStr.append(QString::number(i, 16).right(2));
}
foreach(char i, uavoHashArray) {
gcsUavoHashStr.append(QString::number(i, 16).right(2));
}
QString gcsVersion = gcsGitDate + " (" + gcsGitHash + "-" + gcsUavoHashStr.left(8) + ")";
QString fwVersion = boardDescription.gitDate + " (" + boardDescription.gitHash + "-" + fwUavoHashStr.left(8) + ")";
QString warning = QString(tr(
"GCS and firmware versions of the UAV objects set do not match which can cause configuration problems. "
"GCS version: %1 Firmware version: %2.")).arg(gcsVersion).arg(fwVersion);
if (!errorMsg) {
errorMsg = new QErrorMessage(Core::ICore::instance()->mainWindow());
}
errorMsg->showMessage(warning);
}
}

View File

@ -32,6 +32,7 @@
#include "uploader_global.h"
class UploaderGadgetFactory;
class QErrorMessage;
class UPLOADER_EXPORT UploaderPlugin : public ExtensionSystem::IPlugin {
Q_OBJECT
@ -44,8 +45,13 @@ public:
void extensionsInitialized();
bool initialize(const QStringList & arguments, QString *errorString);
void shutdown();
private slots:
void versionMatchCheck();
private:
UploaderGadgetFactory *mf;
QErrorMessage *errorMsg;
};
#endif // UPLOADERPLUGIN_H