Commit 9481145a authored by Bryan Godbolt's avatar Bryan Godbolt

working on radio calibration window

parent ca13be59
......@@ -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<float> aileron;
QVector<float> elevator;
QVector<float> rudder;
QVector<float> gyro;
QVector<float> pitch;
QVector<float> throttle;
QVector<uint16_t> aileron;
QVector<uint16_t> elevator;
QVector<uint16_t> rudder;
QVector<uint16_t> gyro;
QVector<uint16_t> pitch;
QVector<uint16_t> throttle;
for (int i=0; i<MAVLINK_MSG_RADIO_CALIBRATION_FIELD_AILERON_LEN; ++i)
aileron << radioMsg.aileron[i];
......
......@@ -3,7 +3,7 @@
AbstractCalibrator::AbstractCalibrator(QWidget *parent) :
QWidget(parent),
pulseWidth(new QLabel()),
log(new QVector<float>())
log(new QVector<uint16_t>())
{
}
......
......@@ -36,6 +36,7 @@ This file is part of the QGROUNDCONTROL project
#include <QVector>
#include <math.h>
#include <stdint.h>
/**
@brief Holds the code which is common to all the radio calibration widgets.
......
......@@ -78,19 +78,19 @@ AirfoilServoCalibrator::AirfoilServoCalibrator(AirfoilType type, QWidget *parent
void AirfoilServoCalibrator::setHigh()
{
highPulseWidth->setText(QString::number(static_cast<double>(logExtrema())));
highPulseWidth->setText(QString::number(logExtrema()));
emit setpointChanged(2, logExtrema());
}
void AirfoilServoCalibrator::setCenter()
{
centerPulseWidth->setText(QString::number(static_cast<double>(logAverage())));
centerPulseWidth->setText(QString::number(logAverage()));
emit setpointChanged(1, logAverage());
}
void AirfoilServoCalibrator::setLow()
{
lowPulseWidth->setText(QString::number(static_cast<double>(logExtrema())));
lowPulseWidth->setText(QString::number(logExtrema()));
emit setpointChanged(0, logExtrema());
}
......
......@@ -2,8 +2,8 @@
CurveCalibrator::CurveCalibrator(QString titleString, QWidget *parent) :
AbstractCalibrator(parent),
setpoints(new QVector<double>(5)),
positions(new QVector<double>())
setpoints(new QVector<uint16_t>(5)),
positions(new QVector<uint16_t>())
{
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<double> pos(positions->size());
QVector<double> set(setpoints->size());
for (int i=0; i<positions->size()&&i<setpoints->size(); i++)
{
pos[i] = static_cast<double>((*positions)[i]);
set[i] = static_cast<double>((*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<double> pos(positions->size());
QVector<double> set(setpoints->size());
for (int i=0; i<positions->size()&&i<setpoints->size(); i++)
{
pos[i] = static_cast<double>((*positions)[i]);
set[i] = static_cast<double>((*setpoints)[i]);
}
curve->setData(pos, set);
plot->replot();
emit setpointChanged(setpoint, static_cast<float>(setpoints->value(setpoint)));
emit setpointChanged(setpoint, setpoints->value(setpoint));
}
void CurveCalibrator::set(const QVector<uint16_t> &data)
{
if (data.size() == 5) {
for (int i=0; i<data.size(); ++i)
setpoints->replace(i, static_cast<double>(data[i]));
curve->setData(*positions, *setpoints);
setpoints->replace(i, data[i]);
QVector<double> pos(positions->size());
QVector<double> set(setpoints->size());
for (int i=0; i<positions->size()&&i<setpoints->size(); i++)
{
pos[i] = static_cast<double>((*positions)[i]);
set[i] = static_cast<double>((*setpoints)[i]);
}
curve->setData(pos, set);
plot->replot();
} else {
qDebug() << __FILE__ << __LINE__ << ": wrong data vector size";
......
......@@ -2,23 +2,23 @@
RadioCalibrationData::RadioCalibrationData()
{
data = new QVector<QVector<float> >(6);
(*data).insert(AILERON, QVector<float>(3));
(*data).insert(ELEVATOR, QVector<float>(3));
(*data).insert(RUDDER, QVector<float>(3));
(*data).insert(GYRO, QVector<float>(2));
(*data).insert(PITCH, QVector<float>(5));
(*data).insert(THROTTLE, QVector<float>(5));
data = new QVector<QVector<uint16_t> >(6);
(*data).insert(AILERON, QVector<uint16_t>(3));
(*data).insert(ELEVATOR, QVector<uint16_t>(3));
(*data).insert(RUDDER, QVector<uint16_t>(3));
(*data).insert(GYRO, QVector<uint16_t>(2));
(*data).insert(PITCH, QVector<uint16_t>(5));
(*data).insert(THROTTLE, QVector<uint16_t>(5));
}
RadioCalibrationData::RadioCalibrationData(const QVector<float> &aileron,
const QVector<float> &elevator,
const QVector<float> &rudder,
const QVector<float> &gyro,
const QVector<float> &pitch,
const QVector<float> &throttle)
RadioCalibrationData::RadioCalibrationData(const QVector<uint16_t> &aileron,
const QVector<uint16_t> &elevator,
const QVector<uint16_t> &rudder,
const QVector<uint16_t> &gyro,
const QVector<uint16_t> &pitch,
const QVector<uint16_t> &throttle)
{
data = new QVector<QVector<float> >();
data = new QVector<QVector<uint16_t> >();
(*data) << aileron
<< elevator
<< rudder
......@@ -30,7 +30,7 @@ RadioCalibrationData::RadioCalibrationData(const QVector<float> &aileron,
RadioCalibrationData::RadioCalibrationData(const RadioCalibrationData &other)
:QObject()
{
data = new QVector<QVector<float> >(*other.data);
data = new QVector<QVector<uint16_t> >(*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<float>& RadioCalibrationData::operator ()(const int i) const throw(std::out_of_range)
const QVector<uint16_t>& RadioCalibrationData::operator ()(const int i) const throw(std::out_of_range)
{
if ((i < data->size()) && (i >=0)) {
return (*data)[i];
......
......@@ -36,6 +36,8 @@ This file is part of the QGROUNDCONTROL project
#include <QString>
#include <stdexcept>
#include <stdint.h>
/**
@brief Class to hold the calibration data.
......@@ -48,12 +50,12 @@ class RadioCalibrationData : public QObject
public:
explicit RadioCalibrationData();
RadioCalibrationData(const RadioCalibrationData&);
RadioCalibrationData(const QVector<float>& aileron,
const QVector<float>& elevator,
const QVector<float>& rudder,
const QVector<float>& gyro,
const QVector<float>& pitch,
const QVector<float>& throttle);
RadioCalibrationData(const QVector<uint16_t>& aileron,
const QVector<uint16_t>& elevator,
const QVector<uint16_t>& rudder,
const QVector<uint16_t>& gyro,
const QVector<uint16_t>& pitch,
const QVector<uint16_t>& 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<float>& operator()(int i) const;
const QVector<uint16_t>& operator()(int i) const;
#else
const QVector<float>& operator()(int i) const throw(std::out_of_range);
const QVector<uint16_t>& 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<QVector<float> > *data;
QVector<QVector<uint16_t> > *data;
void init(const QVector<float>& aileron,
const QVector<float>& elevator,
......
......@@ -44,6 +44,8 @@ This file is part of the QGROUNDCONTROL project
#include <QtXml>
#include <QTextStream>
#include <stdint.h>
#include "AirfoilServoCalibrator.h"
#include "SwitchCalibrator.h"
#include "CurveCalibrator.h"
......
......@@ -38,17 +38,17 @@ SwitchCalibrator::SwitchCalibrator(QString titleString, QWidget *parent) :
void SwitchCalibrator::setDefault()
{
defaultPulseWidth->setText(QString::number(static_cast<double>(logExtrema())));
defaultPulseWidth->setText(QString::number(logExtrema()));
emit setpointChanged(0, logExtrema());
}
void SwitchCalibrator::setToggled()
{
toggledPulseWidth->setText(QString::number(static_cast<double>(logExtrema())));
toggledPulseWidth->setText(QString::number(logExtrema()));
emit setpointChanged(1, logExtrema());
}
void SwitchCalibrator::set(const QVector<float> &data)
void SwitchCalibrator::set(const QVector<uint16_t> &data)
{
if (data.size() == 2) {
defaultPulseWidth->setText(QString::number(data[0]));
......
......@@ -49,7 +49,7 @@ class SwitchCalibrator : public AbstractCalibrator
public:
explicit SwitchCalibrator(QString title=QString(), QWidget *parent = 0);
void set(const QVector<float> &data);
void set(const QVector<uint16_t> &data);
protected slots:
void setDefault();
......
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