Commit 1c03185a authored by Don Gagne's avatar Don Gagne

Merge pull request #1595 from DonLakeFlyer/CalESC

ESC Calibration
parents b47ca636 588dc6a0
......@@ -565,6 +565,7 @@ HEADERS+= \
src/AutoPilotPlugins/PX4/FlightModesComponent.h \
src/AutoPilotPlugins/PX4/FlightModesComponentController.h \
src/AutoPilotPlugins/PX4/PowerComponent.h \
src/AutoPilotPlugins/PX4/PowerComponentController.h \
src/AutoPilotPlugins/PX4/PX4AutoPilotPlugin.h \
src/AutoPilotPlugins/PX4/PX4Component.h \
src/AutoPilotPlugins/PX4/PX4ParameterLoader.h \
......@@ -593,6 +594,7 @@ SOURCES += \
src/AutoPilotPlugins/PX4/FlightModesComponent.cc \
src/AutoPilotPlugins/PX4/FlightModesComponentController.cc \
src/AutoPilotPlugins/PX4/PowerComponent.cc \
src/AutoPilotPlugins/PX4/PowerComponentController.cc \
src/AutoPilotPlugins/PX4/PX4AutoPilotPlugin.cc \
src/AutoPilotPlugins/PX4/PX4Component.cc \
src/AutoPilotPlugins/PX4/PX4ParameterLoader.cc \
......
This diff is collapsed.
/*=====================================================================
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());
}
}
/*=====================================================================
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
......@@ -65,6 +65,7 @@
#include "FlightModesComponentController.h"
#include "AirframeComponentController.h"
#include "SensorsComponentController.h"
#include "PowerComponentController.h"
#include "ScreenTools.h"
#include "MavManager.h"
......@@ -322,6 +323,7 @@ void QGCApplication::_initCommon(void)
qmlRegisterType<FlightModesComponentController>("QGroundControl.Controllers", 1, 0, "FlightModesComponentController");
qmlRegisterType<AirframeComponentController>("QGroundControl.Controllers", 1, 0, "AirframeComponentController");
qmlRegisterType<SensorsComponentController>("QGroundControl.Controllers", 1, 0, "SensorsComponentController");
qmlRegisterType<PowerComponentController>("QGroundControl.Controllers", 1, 0, "PowerComponentController");
//-- Create QML Singleton Interfaces
qmlRegisterSingletonType<ScreenTools>("QGroundControl.ScreenTools", 1, 0, "ScreenTools", screenToolsSingletonFactory);
......
......@@ -31,6 +31,8 @@
#include <QFontMetrics>
const double ScreenTools::_defaultFontPointSize = 13;
const double ScreenTools::_mediumFontPointSize = 16;
const double ScreenTools::_largeFontPointSize = 20;
ScreenTools::ScreenTools()
{
......@@ -92,7 +94,7 @@ void ScreenTools::_updatePixelSize()
void ScreenTools::_updateFontSize()
{
emit fontPointFactorChanged();
emit defaultFontPointSizeChanged();
emit fontSizesChanged();
}
double ScreenTools::fontPointFactor()
......@@ -109,3 +111,13 @@ double ScreenTools::defaultFontPointSize(void)
{
return _defaultFontPointSize * MainWindow::fontPointFactor();
}
double ScreenTools::mediumFontPointSize(void)
{
return _mediumFontPointSize * MainWindow::fontPointFactor();
}
double ScreenTools::largeFontPointSize(void)
{
return _largeFontPointSize * MainWindow::fontPointFactor();
}
......@@ -85,8 +85,13 @@ public:
Q_PROPERTY(double fontPointFactor READ fontPointFactor NOTIFY fontPointFactorChanged)
//! Returns the pixel size factor
Q_PROPERTY(double pixelSizeFactor READ pixelSizeFactor NOTIFY pixelSizeFactorChanged)
//! Returns the system wide default font point size (properly scaled)
Q_PROPERTY(double defaultFontPointSize READ defaultFontPointSize NOTIFY defaultFontPointSizeChanged)
Q_PROPERTY(double defaultFontPointSize READ defaultFontPointSize NOTIFY fontSizesChanged)
//! Returns the system wide default font point size (properly scaled)
Q_PROPERTY(double mediumFontPointSize READ mediumFontPointSize NOTIFY fontSizesChanged)
//! Returns the system wide default font point size (properly scaled)
Q_PROPERTY(double largeFontPointSize READ largeFontPointSize NOTIFY fontSizesChanged)
//! Utility for adjusting font point size. Not dynamic (no signals)
Q_INVOKABLE qreal adjustFontPointSize(qreal pointSize);
......@@ -113,6 +118,8 @@ public:
double fontPointFactor ();
double pixelSizeFactor ();
double defaultFontPointSize(void);
double mediumFontPointSize(void);
double largeFontPointSize(void);
#if defined (__android__)
bool isAndroid () { return true; }
......@@ -128,7 +135,7 @@ signals:
void repaintRequestedChanged();
void pixelSizeFactorChanged();
void fontPointFactorChanged();
void defaultFontPointSizeChanged();
void fontSizesChanged();
private slots:
void _updateCanvas();
......@@ -137,7 +144,8 @@ private slots:
private:
static const double _defaultFontPointSize;
static const double _mediumFontPointSize;
static const double _largeFontPointSize;
};
#endif
......@@ -1455,6 +1455,7 @@ void UAS::startCalibration(UASInterface::StartCalibrationType calType)
int airspeedCal = 0;
int radioCal = 0;
int accelCal = 0;
int escCal = 0;
switch (calType) {
case StartCalibrationGyro:
......@@ -1475,6 +1476,9 @@ void UAS::startCalibration(UASInterface::StartCalibrationType calType)
case StartCalibrationLevel:
accelCal = 2;
break;
case StartCalibrationEsc:
escCal = 1;
break;
}
mavlink_message_t msg;
......@@ -1491,7 +1495,7 @@ void UAS::startCalibration(UASInterface::StartCalibrationType calType)
radioCal, // radio cal
accelCal, // accel cal
airspeedCal, // airspeed cal
0); // unused
escCal); // esc cal
sendMessage(msg);
}
......
......@@ -244,7 +244,8 @@ public:
StartCalibrationMag,
StartCalibrationAirspeed,
StartCalibrationAccel,
StartCalibrationLevel
StartCalibrationLevel,
StartCalibrationEsc
};
/// Starts the specified calibration
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment