diff --git a/ChangeLog.md b/ChangeLog.md index 156bbfb096b667c95cf065b75b77373cfe052e52..7834477ec3a246911b74c205909e020dbc512b15 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -9,6 +9,7 @@ Note: This file only contains high level features or important fixes. * Major rewrite and bug fix pass through Structure Scan. Previous version had such bad problems that it can no longer be supported. Plans with Structure Scan will need to be recreated. New QGC will not load old Structure Scan plans. ### 3.5.1 - Not yet released +* Add ArduPilot CubeBlack Service Bulletin check * Fix visibility of PX4/ArduPilot logo in toolbar * Fix tile set count but in OfflineMaps which would cause image and elevation tile set to have incorrect counts and be incorrectly marked as download incomplete. diff --git a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc index 22543319485a3391bfc5b5361c7b4a3df55181fb..abc156e12726412c5ccdcdf9ad2c8cb1a187b4d7 100644 --- a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc +++ b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc @@ -29,6 +29,11 @@ #include "APMSubFrameComponent.h" #include "ESP8266Component.h" #include "APMHeliComponent.h" +#include "QGCApplication.h" + +#if !defined(NO_SERIAL_LINK) && !defined(__android__) +#include +#endif /// This is the AutoPilotPlugin implementatin for the MAV_AUTOPILOT_ARDUPILOT type. APMAutoPilotPlugin::APMAutoPilotPlugin(Vehicle* vehicle, QObject* parent) @@ -50,6 +55,10 @@ APMAutoPilotPlugin::APMAutoPilotPlugin(Vehicle* vehicle, QObject* parent) , _heliComponent (NULL) { APMAirframeLoader::loadAirframeFactMetaData(); + +#if !defined(NO_SERIAL_LINK) && !defined(__android__) + connect(vehicle->parameterManager(), &ParameterManager::parametersReadyChanged, this, &APMAutoPilotPlugin::_checkForBadCubeBlack); +#endif } APMAutoPilotPlugin::~APMAutoPilotPlugin() @@ -170,3 +179,34 @@ QString APMAutoPilotPlugin::prerequisiteSetup(VehicleComponent* component) const return QString(); } + +#if !defined(NO_SERIAL_LINK) && !defined(__android__) +/// The following code is executed when the Vehicle is parameter ready. It checks for the service bulletin against Cube Blacks. +void APMAutoPilotPlugin::_checkForBadCubeBlack(void) +{ + bool cubeBlackFound = false; + for (const QVariant& varLink: _vehicle->links()) { + SerialLink* serialLink = varLink.value(); + if (serialLink && QSerialPortInfo(*serialLink->_hackAccessToPort()).description().contains(QStringLiteral("CubeBlack"))) { + cubeBlackFound = true; + } + + } + if (!cubeBlackFound) { + return; + } + + ParameterManager* paramMgr = _vehicle->parameterManager(); + + QString paramAcc3("INS_ACC3_ID"); + QString paramGyr3("INS_GYR3_ID"); + QString paramEnableMask("INS_ENABLE_MASK"); + + if (paramMgr->parameterExists(-1, paramAcc3) && paramMgr->getParameter(-1, paramAcc3)->rawValue().toInt() == 0 && + paramMgr->parameterExists(-1, paramGyr3) && paramMgr->getParameter(-1, paramGyr3)->rawValue().toInt() == 0 && + paramMgr->parameterExists(-1, paramEnableMask) && paramMgr->getParameter(-1, paramEnableMask)->rawValue().toInt() >= 7) { + qgcApp()->showMessage(tr("WARNING: The flight board you are using has a critical service bulletin against ti which advise against flying. https://discuss.cubepilot.org/t/sb-0000002-critical-service-bulletin-for-cubes-purchased-between-january-2019-to-present-do-not-fly/406")); + + } +} +#endif diff --git a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h index 09bb7c24f2480eafadae16c93fc134ef3a6b007a..5c6a5acc4cbaecfd23c19025dc6eb60d545d55d3 100644 --- a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h +++ b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h @@ -59,6 +59,11 @@ protected: ESP8266Component* _esp8266Component; APMHeliComponent* _heliComponent; +#if !defined(NO_SERIAL_LINK) && !defined(__android__) +private slots: + void _checkForBadCubeBlack(void); +#endif + private: QVariantList _components; }; diff --git a/src/comm/SerialLink.h b/src/comm/SerialLink.h index 3d02197c93c3776322c69932561a59043c0fa78d..5dd0074a1d6472a86bf50a41f7c0761d8f58f04d 100644 --- a/src/comm/SerialLink.h +++ b/src/comm/SerialLink.h @@ -145,6 +145,9 @@ public: bool connect(void); bool disconnect(void); + /// Don't even think of calling this method! + QSerialPort* _hackAccessToPort(void) { return _port; } + private slots: /** * @brief Write a number of bytes to the interface.