diff --git a/src/uas/UAS.cc b/src/uas/UAS.cc index f989e709cbff71839118ea5b89ef73a80f8a20c6..c6d4f8283314f7be23b0bcf74eb8dac17c5185ed 100644 --- a/src/uas/UAS.cc +++ b/src/uas/UAS.cc @@ -958,12 +958,12 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message) case MAVLINK_MSG_ID_RADIO_CALIBRATION: { mavlink_radio_calibration_t radioMsg; mavlink_msg_radio_calibration_decode(&message, &radioMsg); - QVector aileron; - QVector elevator; - QVector rudder; - QVector gyro; - QVector pitch; - QVector throttle; + QVector aileron; + QVector elevator; + QVector rudder; + QVector gyro; + QVector pitch; + QVector throttle; for (int i=0; i()) + log(new QVector()) { } diff --git a/src/ui/RadioCalibration/AbstractCalibrator.h b/src/ui/RadioCalibration/AbstractCalibrator.h index e4db8688b7bbdc36b8dc052a02575729d102802b..70ff632915fa45a8ff0f6e3cd95a35830fe9864a 100644 --- a/src/ui/RadioCalibration/AbstractCalibrator.h +++ b/src/ui/RadioCalibration/AbstractCalibrator.h @@ -36,6 +36,7 @@ This file is part of the QGROUNDCONTROL project #include #include +#include /** @brief Holds the code which is common to all the radio calibration widgets. diff --git a/src/ui/RadioCalibration/AirfoilServoCalibrator.cc b/src/ui/RadioCalibration/AirfoilServoCalibrator.cc index ddb4a2a32799b10aa06ad9abe27202ad5afdd953..dc7faf28ce3dd4914dcb16cf53ec8b1d9e78d191 100644 --- a/src/ui/RadioCalibration/AirfoilServoCalibrator.cc +++ b/src/ui/RadioCalibration/AirfoilServoCalibrator.cc @@ -78,19 +78,19 @@ AirfoilServoCalibrator::AirfoilServoCalibrator(AirfoilType type, QWidget *parent void AirfoilServoCalibrator::setHigh() { - highPulseWidth->setText(QString::number(static_cast(logExtrema()))); + highPulseWidth->setText(QString::number(logExtrema())); emit setpointChanged(2, logExtrema()); } void AirfoilServoCalibrator::setCenter() { - centerPulseWidth->setText(QString::number(static_cast(logAverage()))); + centerPulseWidth->setText(QString::number(logAverage())); emit setpointChanged(1, logAverage()); } void AirfoilServoCalibrator::setLow() { - lowPulseWidth->setText(QString::number(static_cast(logExtrema()))); + lowPulseWidth->setText(QString::number(logExtrema())); emit setpointChanged(0, logExtrema()); } diff --git a/src/ui/RadioCalibration/CurveCalibrator.cc b/src/ui/RadioCalibration/CurveCalibrator.cc index 235c2e48755dbaea100984095e68e354222e0812..9ef8ec58b420bd60f6c0785a5288a8673634f678 100644 --- a/src/ui/RadioCalibration/CurveCalibrator.cc +++ b/src/ui/RadioCalibration/CurveCalibrator.cc @@ -2,8 +2,8 @@ CurveCalibrator::CurveCalibrator(QString titleString, QWidget *parent) : AbstractCalibrator(parent), - setpoints(new QVector(5)), - positions(new QVector()) + setpoints(new QVector(5)), + positions(new QVector()) { QGridLayout *grid = new QGridLayout(this); QLabel *title = new QLabel(titleString); @@ -32,7 +32,17 @@ CurveCalibrator::CurveCalibrator(QString titleString, QWidget *parent) : curve = new QwtPlotCurve(); curve->setPen(QPen(QColor(QString("lime")))); - curve->setData(*positions, *setpoints); + + QVector pos(positions->size()); + QVector set(setpoints->size()); + + for (int i=0; isize()&&isize(); i++) + { + pos[i] = static_cast((*positions)[i]); + set[i] = static_cast((*setpoints)[i]); + } + + curve->setData(pos, set); curve->attach(plot); plot->replot(); @@ -79,18 +89,36 @@ void CurveCalibrator::setSetpoint(int setpoint) } else { setpoints->replace(setpoint, logAverage()); } - curve->setData(*positions, *setpoints); + + QVector pos(positions->size()); + QVector set(setpoints->size()); + + for (int i=0; isize()&&isize(); i++) + { + pos[i] = static_cast((*positions)[i]); + set[i] = static_cast((*setpoints)[i]); + } + + curve->setData(pos, set); plot->replot(); - emit setpointChanged(setpoint, static_cast(setpoints->value(setpoint))); + emit setpointChanged(setpoint, setpoints->value(setpoint)); } void CurveCalibrator::set(const QVector &data) { if (data.size() == 5) { for (int i=0; ireplace(i, static_cast(data[i])); - curve->setData(*positions, *setpoints); + setpoints->replace(i, data[i]); + QVector pos(positions->size()); + QVector set(setpoints->size()); + + for (int i=0; isize()&&isize(); i++) + { + pos[i] = static_cast((*positions)[i]); + set[i] = static_cast((*setpoints)[i]); + } + curve->setData(pos, set); plot->replot(); } else { qDebug() << __FILE__ << __LINE__ << ": wrong data vector size"; diff --git a/src/ui/RadioCalibration/RadioCalibrationData.cc b/src/ui/RadioCalibration/RadioCalibrationData.cc index 858284062a84ad1f2083a5e0c19ddf13a1233ecf..30933158a0662e7d62eff5e7a3f7a9e71f805852 100644 --- a/src/ui/RadioCalibration/RadioCalibrationData.cc +++ b/src/ui/RadioCalibration/RadioCalibrationData.cc @@ -2,23 +2,23 @@ RadioCalibrationData::RadioCalibrationData() { - data = new QVector >(6); - (*data).insert(AILERON, QVector(3)); - (*data).insert(ELEVATOR, QVector(3)); - (*data).insert(RUDDER, QVector(3)); - (*data).insert(GYRO, QVector(2)); - (*data).insert(PITCH, QVector(5)); - (*data).insert(THROTTLE, QVector(5)); + data = new QVector >(6); + (*data).insert(AILERON, QVector(3)); + (*data).insert(ELEVATOR, QVector(3)); + (*data).insert(RUDDER, QVector(3)); + (*data).insert(GYRO, QVector(2)); + (*data).insert(PITCH, QVector(5)); + (*data).insert(THROTTLE, QVector(5)); } -RadioCalibrationData::RadioCalibrationData(const QVector &aileron, - const QVector &elevator, - const QVector &rudder, - const QVector &gyro, - const QVector &pitch, - const QVector &throttle) +RadioCalibrationData::RadioCalibrationData(const QVector &aileron, + const QVector &elevator, + const QVector &rudder, + const QVector &gyro, + const QVector &pitch, + const QVector &throttle) { - data = new QVector >(); + data = new QVector >(); (*data) << aileron << elevator << rudder @@ -30,7 +30,7 @@ RadioCalibrationData::RadioCalibrationData(const QVector &aileron, RadioCalibrationData::RadioCalibrationData(const RadioCalibrationData &other) :QObject() { - data = new QVector >(*other.data); + data = new QVector >(*other.data); } RadioCalibrationData::~RadioCalibrationData() @@ -38,7 +38,7 @@ RadioCalibrationData::~RadioCalibrationData() delete data; } -const float* RadioCalibrationData::operator [](int i) const +const uint16_t* RadioCalibrationData::operator [](int i) const { if (i < data->size()) { return (*data)[i].constData(); @@ -47,7 +47,7 @@ const float* RadioCalibrationData::operator [](int i) const return NULL; } -const QVector& RadioCalibrationData::operator ()(const int i) const throw(std::out_of_range) +const QVector& RadioCalibrationData::operator ()(const int i) const throw(std::out_of_range) { if ((i < data->size()) && (i >=0)) { return (*data)[i]; diff --git a/src/ui/RadioCalibration/RadioCalibrationData.h b/src/ui/RadioCalibration/RadioCalibrationData.h index 574df307b6b4d84c4ba681ed9aa30c9a7d965fbd..89e1f3b05c4c11f6757280d8c593f4249597a6e1 100644 --- a/src/ui/RadioCalibration/RadioCalibrationData.h +++ b/src/ui/RadioCalibration/RadioCalibrationData.h @@ -36,6 +36,8 @@ This file is part of the QGROUNDCONTROL project #include #include +#include + /** @brief Class to hold the calibration data. @@ -48,12 +50,12 @@ class RadioCalibrationData : public QObject public: explicit RadioCalibrationData(); RadioCalibrationData(const RadioCalibrationData&); - RadioCalibrationData(const QVector& aileron, - const QVector& elevator, - const QVector& rudder, - const QVector& gyro, - const QVector& pitch, - const QVector& throttle); + RadioCalibrationData(const QVector& aileron, + const QVector& elevator, + const QVector& rudder, + const QVector& gyro, + const QVector& pitch, + const QVector& throttle); ~RadioCalibrationData(); enum RadioElement { @@ -65,33 +67,33 @@ public: THROTTLE }; - const float* operator[](int i) const; + const uint16_t* operator[](int i) const; #ifdef _MSC_VER - const QVector& operator()(int i) const; + const QVector& operator()(int i) const; #else - const QVector& operator()(int i) const throw(std::out_of_range); + const QVector& operator()(int i) const throw(std::out_of_range); #endif void set(int element, int index, float value) { (*data)[element][index] = value; } public slots: - void setAileron(int index, float value) { + void setAileron(int index, uint16_t value) { set(AILERON, index, value); } - void setElevator(int index, float value) { + void setElevator(int index, uint16_t value) { set(ELEVATOR, index, value); } - void setRudder(int index, float value) { + void setRudder(int index, uint16_t value) { set(RUDDER, index, value); } - void setGyro(int index, float value) { + void setGyro(int index, uint16_t value) { set(GYRO, index, value); } - void setPitch(int index, float value) { + void setPitch(int index, uint16_t value) { set(PITCH, index, value); } - void setThrottle(int index, float value) { + void setThrottle(int index, uint16_t value) { set(THROTTLE, index, value); } @@ -100,7 +102,7 @@ public: QString toString(const RadioElement element) const; protected: - QVector > *data; + QVector > *data; void init(const QVector& aileron, const QVector& elevator, diff --git a/src/ui/RadioCalibration/RadioCalibrationWindow.h b/src/ui/RadioCalibration/RadioCalibrationWindow.h index 40e97e4f8e1d06906b48cb65d1d974cfeb06b510..ebd6a94c9b64046a96c2737931a7d454afc890bc 100644 --- a/src/ui/RadioCalibration/RadioCalibrationWindow.h +++ b/src/ui/RadioCalibration/RadioCalibrationWindow.h @@ -44,6 +44,8 @@ This file is part of the QGROUNDCONTROL project #include #include +#include + #include "AirfoilServoCalibrator.h" #include "SwitchCalibrator.h" #include "CurveCalibrator.h" diff --git a/src/ui/RadioCalibration/SwitchCalibrator.cc b/src/ui/RadioCalibration/SwitchCalibrator.cc index 5a9b9a7c9e5cf2e6ecea2612f59eabb37e24eeaa..695dddfc3e518f12d88a8e2c275458649abecf18 100644 --- a/src/ui/RadioCalibration/SwitchCalibrator.cc +++ b/src/ui/RadioCalibration/SwitchCalibrator.cc @@ -38,17 +38,17 @@ SwitchCalibrator::SwitchCalibrator(QString titleString, QWidget *parent) : void SwitchCalibrator::setDefault() { - defaultPulseWidth->setText(QString::number(static_cast(logExtrema()))); + defaultPulseWidth->setText(QString::number(logExtrema())); emit setpointChanged(0, logExtrema()); } void SwitchCalibrator::setToggled() { - toggledPulseWidth->setText(QString::number(static_cast(logExtrema()))); + toggledPulseWidth->setText(QString::number(logExtrema())); emit setpointChanged(1, logExtrema()); } -void SwitchCalibrator::set(const QVector &data) +void SwitchCalibrator::set(const QVector &data) { if (data.size() == 2) { defaultPulseWidth->setText(QString::number(data[0])); diff --git a/src/ui/RadioCalibration/SwitchCalibrator.h b/src/ui/RadioCalibration/SwitchCalibrator.h index c62623b9a5021a73b9d0bb6681477cbb8077f429..c89978b55fbbaca8ff5b60ab800a1d51b5b44cc3 100644 --- a/src/ui/RadioCalibration/SwitchCalibrator.h +++ b/src/ui/RadioCalibration/SwitchCalibrator.h @@ -49,7 +49,7 @@ class SwitchCalibrator : public AbstractCalibrator public: explicit SwitchCalibrator(QString title=QString(), QWidget *parent = 0); - void set(const QVector &data); + void set(const QVector &data); protected slots: void setDefault();