From c4874a48aa5dc6a0285d26bef6c037bbe89a7b1a Mon Sep 17 00:00:00 2001 From: Bryan Godbolt Date: Wed, 6 Oct 2010 11:21:34 -0600 Subject: [PATCH] ready to test load save and transmit for rc calibration --- settings/RadioCalibration.xml | 9 ++- src/comm/OpalLink.cc | 5 ++ src/ui/RadioCalibration/CurveCalibrator.cc | 7 -- .../RadioCalibration/RadioCalibrationData.cc | 10 +++ .../RadioCalibration/RadioCalibrationData.h | 5 ++ .../RadioCalibrationWindow.cc | 76 ++++++++++++++++++- .../RadioCalibration/RadioCalibrationWindow.h | 1 + 7 files changed, 102 insertions(+), 11 deletions(-) diff --git a/settings/RadioCalibration.xml b/settings/RadioCalibration.xml index 81e7d2e88..e200b0219 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 bda6b35b9..ab56524ea 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 7338c80de..8cf261f9c 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 1eb78e8a2..4d4822ea2 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 c958e627b..0c0733d35 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 a1bcfc59e..effb3b52e 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 dcf36aa8e..476b4dce1 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" -- 2.22.0