From 74ce084c30d9a84bf66db084e25532ec34d5f517 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Fri, 26 Apr 2019 13:55:04 -0700 Subject: [PATCH] Check for CubeBlack service bulletin --- .../APM/APMAutoPilotPlugin.cc | 34 +++++++++++++++++++ src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h | 3 ++ src/comm/SerialLink.h | 3 ++ 3 files changed, 40 insertions(+) diff --git a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc index 225433194..476d0eb03 100644 --- a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc +++ b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.cc @@ -29,6 +29,9 @@ #include "APMSubFrameComponent.h" #include "ESP8266Component.h" #include "APMHeliComponent.h" +#include "QGCApplication.h" + +#include /// This is the AutoPilotPlugin implementatin for the MAV_AUTOPILOT_ARDUPILOT type. APMAutoPilotPlugin::APMAutoPilotPlugin(Vehicle* vehicle, QObject* parent) @@ -50,6 +53,8 @@ APMAutoPilotPlugin::APMAutoPilotPlugin(Vehicle* vehicle, QObject* parent) , _heliComponent (NULL) { APMAirframeLoader::loadAirframeFactMetaData(); + + connect(vehicle->parameterManager(), &ParameterManager::parametersReadyChanged, this, &APMAutoPilotPlugin::_checkForBadCubeBlack); } APMAutoPilotPlugin::~APMAutoPilotPlugin() @@ -170,3 +175,32 @@ QString APMAutoPilotPlugin::prerequisiteSetup(VehicleComponent* component) const return QString(); } + +/// 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")); + + } +} diff --git a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h index 09bb7c24f..83785af9d 100644 --- a/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h +++ b/src/AutoPilotPlugins/APM/APMAutoPilotPlugin.h @@ -59,6 +59,9 @@ protected: ESP8266Component* _esp8266Component; APMHeliComponent* _heliComponent; +private slots: + void _checkForBadCubeBlack(void); + private: QVariantList _components; }; diff --git a/src/comm/SerialLink.h b/src/comm/SerialLink.h index 3d02197c9..5dd0074a1 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. -- 2.22.0