9 changed files with 509 additions and 228 deletions
@ -0,0 +1,133 @@
@@ -0,0 +1,133 @@
|
||||
/*=====================================================================
|
||||
|
||||
QGroundControl Open Source Ground Control Station |
||||
|
||||
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
|
||||
This file is part of the QGROUNDCONTROL project |
||||
|
||||
QGROUNDCONTROL is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
QGROUNDCONTROL is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
======================================================================*/ |
||||
|
||||
/// @file
|
||||
/// @author Don Gagne <don@thegagnes.com>
|
||||
|
||||
#include "PowerComponentController.h" |
||||
#include "QGCMAVLink.h" |
||||
#include "UASManager.h" |
||||
#include "QGCMessageBox.h" |
||||
|
||||
#include <QVariant> |
||||
#include <QQmlProperty> |
||||
|
||||
PowerComponentController::PowerComponentController(void) |
||||
{ |
||||
|
||||
} |
||||
|
||||
PowerComponentController::~PowerComponentController() |
||||
{ |
||||
_stopCalibration(); |
||||
} |
||||
|
||||
void PowerComponentController::calibrateEsc(void) |
||||
{ |
||||
_warningMessages.clear(); |
||||
connect(_uas, &UASInterface::textMessageReceived, this, &PowerComponentController::_handleUASTextMessage); |
||||
_uas->startCalibration(UASInterface::StartCalibrationEsc); |
||||
} |
||||
|
||||
void PowerComponentController::_stopCalibration(void) |
||||
{ |
||||
disconnect(_uas, &UASInterface::textMessageReceived, this, &PowerComponentController::_handleUASTextMessage); |
||||
} |
||||
|
||||
void PowerComponentController::_handleUASTextMessage(int uasId, int compId, int severity, QString text) |
||||
{ |
||||
Q_UNUSED(compId); |
||||
Q_UNUSED(severity); |
||||
|
||||
UASInterface* uas = _autopilot->uas(); |
||||
Q_ASSERT(uas); |
||||
if (uasId != uas->getUASID()) { |
||||
return; |
||||
} |
||||
|
||||
// All calibration messages start with [cal]
|
||||
QString calPrefix("[cal] "); |
||||
if (!text.startsWith(calPrefix)) { |
||||
return; |
||||
} |
||||
text = text.right(text.length() - calPrefix.length()); |
||||
|
||||
// Make sure we can understand this firmware rev
|
||||
QString calStartPrefix("calibration started: "); |
||||
if (text.startsWith(calStartPrefix)) { |
||||
text = text.right(text.length() - calStartPrefix.length()); |
||||
|
||||
// Split version number and cal type
|
||||
QStringList parts = text.split(" "); |
||||
if (parts.count() != 2) { |
||||
emit incorrectFirmwareRevReporting(); |
||||
return; |
||||
} |
||||
|
||||
int firmwareRev = parts[0].toInt(); |
||||
if (firmwareRev < _neededFirmwareRev) { |
||||
emit oldFirmware(); |
||||
return; |
||||
} |
||||
if (firmwareRev > _neededFirmwareRev) { |
||||
emit newerFirmware(); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
if (text == "Connect battery now") { |
||||
emit connectBattery(); |
||||
return; |
||||
} |
||||
|
||||
if (text == "Battery connected") { |
||||
emit batteryConnected(); |
||||
return; |
||||
} |
||||
|
||||
|
||||
QString failedPrefix("calibration failed: "); |
||||
if (text.startsWith(failedPrefix)) { |
||||
QString failureText = text.right(text.length() - failedPrefix.length()); |
||||
if (failureText.startsWith("Disconnect battery")) { |
||||
emit disconnectBattery(); |
||||
return; |
||||
} |
||||
|
||||
_stopCalibration(); |
||||
emit calibrationFailed(text.right(text.length() - failedPrefix.length())); |
||||
return; |
||||
} |
||||
|
||||
QString calCompletePrefix("calibration done:"); |
||||
if (text.startsWith(calCompletePrefix)) { |
||||
_stopCalibration(); |
||||
emit calibrationSuccess(_warningMessages); |
||||
return; |
||||
} |
||||
|
||||
QString warningPrefix("calibration warning: "); |
||||
if (text.startsWith(warningPrefix)) { |
||||
_warningMessages << text.right(text.length() - warningPrefix.length()); |
||||
} |
||||
} |
@ -0,0 +1,67 @@
@@ -0,0 +1,67 @@
|
||||
/*=====================================================================
|
||||
|
||||
QGroundControl Open Source Ground Control Station |
||||
|
||||
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
|
||||
This file is part of the QGROUNDCONTROL project |
||||
|
||||
QGROUNDCONTROL is free software: you can redistribute it and/or modify |
||||
it under the terms of the GNU General Public License as published by |
||||
the Free Software Foundation, either version 3 of the License, or |
||||
(at your option) any later version. |
||||
|
||||
QGROUNDCONTROL is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
GNU General Public License for more details. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
======================================================================*/ |
||||
|
||||
/// @file
|
||||
/// @author Don Gagne <don@thegagnes.com>
|
||||
|
||||
#ifndef PowerComponentController_H |
||||
#define PowerComponentController_H |
||||
|
||||
#include <QObject> |
||||
#include <QQuickItem> |
||||
|
||||
#include "UASInterface.h" |
||||
#include "FactPanelController.h" |
||||
|
||||
/// Power Component MVC Controller for PowerComponent.qml.
|
||||
class PowerComponentController : public FactPanelController |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
PowerComponentController(void); |
||||
~PowerComponentController(); |
||||
|
||||
Q_INVOKABLE void calibrateEsc(void); |
||||
|
||||
signals: |
||||
void oldFirmware(void); |
||||
void newerFirmware(void); |
||||
void incorrectFirmwareRevReporting(void); |
||||
void connectBattery(void); |
||||
void disconnectBattery(void); |
||||
void batteryConnected(void); |
||||
void calibrationFailed(const QString& errorMessage); |
||||
void calibrationSuccess(const QStringList& warningMessages); |
||||
|
||||
private slots: |
||||
void _handleUASTextMessage(int uasId, int compId, int severity, QString text); |
||||
|
||||
private: |
||||
void _stopCalibration(void); |
||||
|
||||
QStringList _warningMessages; |
||||
static const int _neededFirmwareRev = 1; |
||||
}; |
||||
|
||||
#endif |
Loading…
Reference in new issue