diff --git a/settings/RadioCalibration.xml b/settings/RadioCalibration.xml
index 81e7d2e..e200b02 100644
--- a/settings/RadioCalibration.xml
+++ b/settings/RadioCalibration.xml
@@ -1,6 +1,9 @@
- 1.0, 1.5, 2.0
- 2.0, 1.0
- 1.0, 1.25, 1.5, 1.75, 2.0
+ 1000.0, 1500.0, 2000.0
+ 1000.0, 1500.0, 2000.0
+ 1000.0, 1500.0, 2000.0
+ 2000.0, 1000.0
+ 1000.0, 1250.0, 1500.0, 1750.0, 2000.0
+ 1000.0, 1250.0, 1500.0, 1750.0, 2000.0
diff --git a/src/comm/OpalLink.cc b/src/comm/OpalLink.cc
index bda6b35..ab56524 100644
--- a/src/comm/OpalLink.cc
+++ b/src/comm/OpalLink.cc
@@ -149,6 +149,11 @@ void OpalLink::writeBytes(const char *bytes, qint64 length)
mavlink_msg_radio_calibration_decode(&msg, &radio);
qDebug() << "RADIO CALIBRATION RECEIVED";
qDebug() << "AILERON: " << radio.aileron[0] << " " << radio.aileron[1] << " " << radio.aileron[2];
+ qDebug() << "ELEVATOR: " << radio.elevator[0] << " " << radio.elevator[1] << " " << radio.elevator[2];
+ qDebug() << "RUDDER: " << radio.rudder[0] << " " << radio.rudder[1] << " " << radio.rudder[2];
+ qDebug() << "GYRO: " << radio.gyro[0] << " " << radio.gyro[1];
+ qDebug() << "PITCH: " << radio.pitch[0] << radio.pitch[1] << radio.pitch[2] << radio.pitch[3] << radio.pitch[4];
+ qDebug() << "THROTTLE: " << radio.throttle[0] << radio.throttle[1] << radio.throttle[2] << radio.throttle[3] << radio.throttle[4];
}
break;
#endif
diff --git a/src/ui/RadioCalibration/CurveCalibrator.cc b/src/ui/RadioCalibration/CurveCalibrator.cc
index 7338c80..8cf261f 100644
--- a/src/ui/RadioCalibration/CurveCalibrator.cc
+++ b/src/ui/RadioCalibration/CurveCalibrator.cc
@@ -92,16 +92,9 @@ void CurveCalibrator::set(const QVector &data)
{
if (data.size() == 5)
{
-// delete setpoints;
-// QVector dataDouble;
for (int i=0; ireplace(i, static_cast(data[i]));
-// setpoints = new QVector(dataDouble);
- curve->setPen(QPen(QColor(QString("lime"))));
curve->setData(*positions, *setpoints);
-
-
- curve->attach(plot);
plot->replot();
}
else
diff --git a/src/ui/RadioCalibration/RadioCalibrationData.cc b/src/ui/RadioCalibration/RadioCalibrationData.cc
index 1eb78e8..4d4822e 100644
--- a/src/ui/RadioCalibration/RadioCalibrationData.cc
+++ b/src/ui/RadioCalibration/RadioCalibrationData.cc
@@ -58,3 +58,13 @@ const QVector& RadioCalibrationData::operator ()(int i) const
// This is not good. If it is ever used after being returned it will cause a crash
// return QVector();
}
+
+QString RadioCalibrationData::toString(RadioElement element) const
+{
+ QString s;
+ foreach (float f, (*data)[element])
+ {
+ s += QString::number(f) + ", ";
+ }
+ return s.mid(0, s.length()-2);
+}
diff --git a/src/ui/RadioCalibration/RadioCalibrationData.h b/src/ui/RadioCalibration/RadioCalibrationData.h
index c958e62..0c0733d 100644
--- a/src/ui/RadioCalibration/RadioCalibrationData.h
+++ b/src/ui/RadioCalibration/RadioCalibrationData.h
@@ -4,6 +4,7 @@
#include
#include
#include
+#include
class RadioCalibrationData : public QObject
@@ -43,6 +44,10 @@ public slots:
void setPitch(int index, float value) {set(PITCH, index, value);}
void setThrottle(int index, float value) {set(THROTTLE, index, value);}
+public:
+ /// Creates a comman seperated list of the values for a particular element
+ QString toString(const RadioElement element) const;
+
protected:
QVector > *data;
diff --git a/src/ui/RadioCalibration/RadioCalibrationWindow.cc b/src/ui/RadioCalibration/RadioCalibrationWindow.cc
index a1bcfc5..effb3b5 100644
--- a/src/ui/RadioCalibration/RadioCalibrationWindow.cc
+++ b/src/ui/RadioCalibration/RadioCalibrationWindow.cc
@@ -84,7 +84,80 @@ void RadioCalibrationWindow::setChannel(int ch, float raw, float normalized)
void RadioCalibrationWindow::saveFile()
{
- qDebug() << __FILE__ << __LINE__ << "SAVE TO FILE";
+ QString fileName(QFileDialog::getSaveFileName(this,
+ tr("Save RC Calibration"),
+ "settings/",
+ tr("XML Files (*.xml)")));
+ if (fileName.isEmpty())
+ return;
+
+ QDomDocument *rcConfig = new QDomDocument();
+
+ QFile rcFile(fileName);
+ if (rcFile.exists())
+ {
+ rcFile.remove();
+ }
+ if (!rcFile.open(QFile::WriteOnly | QFile::Text))
+ {
+ qDebug() << __FILE__ << __LINE__ << "could not open" << rcFile.fileName() << "for writing";
+ return;
+ }
+
+ QDomElement root;
+ rcConfig->appendChild(root=rcConfig->createElement("channels"));
+ QDomElement e;
+ QDomText t;
+
+ // Aileron
+ e = rcConfig->createElement("threeSetpoint");
+ e.setAttribute("name", "Aileron");
+ e.setAttribute("number", "1");
+ t = rcConfig->createTextNode(radio->toString(RadioCalibrationData::AILERON));
+ e.appendChild(t);
+ root.appendChild(e);
+ // Elevator
+ e = rcConfig->createElement("threeSetpoint");
+ e.setAttribute("name", "Elevator");
+ e.setAttribute("number", "2");
+ t = rcConfig->createTextNode(radio->toString(RadioCalibrationData::ELEVATOR));
+ e.appendChild(t);
+ root.appendChild(e);
+ // Rudder
+ e = rcConfig->createElement("threeSetpoint");
+ e.setAttribute("name", "Rudder");
+ e.setAttribute("number", "4");
+ t = rcConfig->createTextNode(radio->toString(RadioCalibrationData::RUDDER));
+ e.appendChild(t);
+ root.appendChild(e);
+ // Gyro Mode/Gain
+ e = rcConfig->createElement("twoSetpoint");
+ e.setAttribute("name", "Gyro");
+ e.setAttribute("number", "5");
+ t = rcConfig->createTextNode(radio->toString(RadioCalibrationData::GYRO));
+ e.appendChild(t);
+ root.appendChild(e);
+ // Throttle
+ e = rcConfig->createElement("fiveSetpoint");
+ e.setAttribute("name", "Throttle");
+ e.setAttribute("number", "3");
+ t = rcConfig->createTextNode(radio->toString(RadioCalibrationData::THROTTLE));
+ e.appendChild(t);
+ root.appendChild(e);
+ // Pitch
+ e = rcConfig->createElement("fiveSetpoint");
+ e.setAttribute("name", "Pitch");
+ e.setAttribute("number", "6");
+ t = rcConfig->createTextNode(radio->toString(RadioCalibrationData::PITCH));
+ e.appendChild(t);
+ root.appendChild(e);
+
+
+ QTextStream out(&rcFile);
+ const int IndentSize = 4;
+ rcConfig->save(out, IndentSize);
+ rcFile.close();
+
}
void RadioCalibrationWindow::loadFile()
@@ -121,6 +194,7 @@ void RadioCalibrationWindow::loadFile()
return;
}
+ rcFile.close();
QDomElement root = rcConfig->documentElement();
if (root.tagName() != "channels") {
qDebug() << __FILE__ << __LINE__ << "This is not a Radio Calibration xml file";
diff --git a/src/ui/RadioCalibration/RadioCalibrationWindow.h b/src/ui/RadioCalibration/RadioCalibrationWindow.h
index dcf36aa..476b4dc 100644
--- a/src/ui/RadioCalibration/RadioCalibrationWindow.h
+++ b/src/ui/RadioCalibration/RadioCalibrationWindow.h
@@ -13,6 +13,7 @@
#include
#include
#include
+#include
#include "AirfoilServoCalibrator.h"
#include "SwitchCalibrator.h"