la^*gdO-U&cVnl$H
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%0D0%J{-0i$4
z#Z1?NT+XYl7785`4~~{lw)DN?`M28*i&f9O-(|hN!P-pU&&jnAtLKxe%K8S1ahP(0
z5tTDb5u8(XN@}9y0b_)iGPAJ6*p5`v-Pdbqiz1Qs+cgy6Ov^Mm+X8OoF5zG>Sm~%T
zg3Zd8#%p%UI;<&(cq$ojo=|)CpLkyV;+ntxK^QLgd318b)yqO;fptr4sD#B6yl2FV
z#oGn0Go)OIzEA{WObo@TV_!NX3)bj)6~*YRCr(ZKxB23#@k-Sugj_(X1qYdHbtV|0
z7NyV_YY>Tdwj0`bV_Q&5h)h}MXmwwDa?Zp&Xt_tvkS`X3`iLXKJoBq
z#r>lL#&HW}%j1(hLg@JG(=#rwCahhOMaMU95;EyH5@vI%S0yLs32&9niNMTvI%AuP
zIKAn`IbF&)>suq4+wR~t-cfa(SW9z$YLlh+NR3JfC>3iH2KAB`qBfgGk0f%z_{znL
yz&{4ZTi>w!=@)ZK3heASiV=)VI9r&?1^)x571Qw}w8nk_0000
+#else
+#include
+#endif
logsDialog::logsDialog(QWidget *parent) :
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
@@ -33,6 +38,11 @@ logsDialog::logsDialog(QWidget *parent) :
ui->customPlot->legend->setSelectedFont(legendFont);
ui->customPlot->legend->setSelectable(QCPLegend::spItems); // legend box shall not be selectable, only legend items
ui->customPlot->legend->setVisible(false);
+ QSettings settings("companion9x", "companion9x");
+ QString Path=settings.value("gePath", "").toString();
+ if (Path.isEmpty() || !QFile(Path).exists()) {
+ ui->mapsButton->hide();
+ }
// connect slot that ties some axis selections together (especially opposite axes):
connect(ui->customPlot, SIGNAL(selectionChangedByUser()), this, SLOT(selectionChanged()));
@@ -165,6 +175,79 @@ void logsDialog::selectionChanged()
}
}
+void logsDialog::on_mapsButton_clicked() {
+ int n = csvlog.count(); // number of points in graph
+ if (n==0) return;
+ int latcol=0, longcol=0, altcol=0, coursecol=0, speedcol=0;
+ int itemSelected=0.;
+ bool rangeSelected=false;
+ QSettings settings("companion9x", "companion9x");
+ QString gePath=settings.value("gePath", "").toString();
+ if (gePath.isEmpty() || !QFile(gePath).exists()) {
+ return;
+ }
+ for (int i=1; ilogTable->item(i-1,1)->isSelected()) {
+ rangeSelected=true;
+ itemSelected++;
+ }
+ }
+ if (itemSelected==0) {
+ itemSelected=n-1;
+ }
+ QString geFilename = QDir::tempPath() + "/flight.kml";
+ if (QFile::exists(geFilename)) {
+ unlink(geFilename.toAscii());
+ }
+ QFile geFile(geFilename);
+ if (!geFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ QMessageBox::warning(this, tr("Error"),
+ tr("Cannot write file %1:\n%2.")
+ .arg(geFilename)
+ .arg(geFile.errorString()));
+ return;
+ }
+
+ QTextStream outputStream(&geFile);
+ outputStream << "\n\n";
+ outputStream << "\n\tflight.kml\n\tMy Flight\n\t\t\n";
+ outputStream << "\t\t\t1\n\t\t\trelativeToGround\n\t\t\t\n\t\t\t\t";
+ for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) {
+ outputStream << csvlog.at(i).at(longcol) << "," << csvlog.at(i).at(latcol) << "," << csvlog.at(i).at(altcol) << " " ;
+ }
+ }
+ outputStream << "\n\t\t\t\n\t\t\n\t\n\n\n";
+ geFile.close();
+
+ QStringList parameters;
+ parameters << geFilename;
+ QProcess *process = new QProcess(this);
+ process->startDetached(gePath, parameters);
+}
+
+
void logsDialog::mousePress()
{
// if an axis is selected, only allow the direction of that axis to be dragged
@@ -293,8 +376,7 @@ void logsDialog::plotValue(int index, int plot, int numplots)
}
}
}
- for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) {
double tmp;
QString tstamp=csvlog.at(i).at(0)+QString(" ")+csvlog.at(i).at(1);
diff --git a/companion/src/logsdialog.h b/companion/src/logsdialog.h
index 54142fdab..9901228a7 100644
--- a/companion/src/logsdialog.h
+++ b/companion/src/logsdialog.h
@@ -34,6 +34,7 @@ private slots:
// void graphClicked(QCPAbstractPlottable *plottable);
void on_fileOpen_BT_clicked();
void on_sessions_CB_currentIndexChanged(int index);
+ void on_mapsButton_clicked();
private:
QList csvlog;
diff --git a/companion/src/logsdialog.ui b/companion/src/logsdialog.ui
index c8e417d16..deee92d6b 100644
--- a/companion/src/logsdialog.ui
+++ b/companion/src/logsdialog.ui
@@ -20,7 +20,7 @@
true
-
+
-
-
@@ -46,43 +46,6 @@
- -
-
-
-
- 0
- 0
-
-
-
-
- 120
- 16777215
-
-
-
- 0
-
-
- QAbstractItemView::NoEditTriggers
-
-
- false
-
-
- false
-
-
- 0
-
-
- true
-
-
- false
-
-
-
-
@@ -195,7 +158,7 @@
- -
+
-
@@ -238,6 +201,78 @@
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 120
+ 16777215
+
+
+
+ 0
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ false
+
+
+ false
+
+
+ 0
+
+
+ true
+
+
+ false
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 120
+ 57
+
+
+
+
+
+
+
+ :/images/maps.png:/images/maps.png
+
+
+
+ 120
+ 57
+
+
+
+
diff --git a/companion/src/preferencesdialog.cpp b/companion/src/preferencesdialog.cpp
index 8ad749686..6afa8ee9a 100644
--- a/companion/src/preferencesdialog.cpp
+++ b/companion/src/preferencesdialog.cpp
@@ -76,6 +76,9 @@ void preferencesDialog::baseFirmwareChanged()
ui->voice_dnld->setEnabled(true);
ui->sdPathButton->setEnabled(true);
ui->sdPath->setEnabled(true);
+ ui->ge_label->show();
+ ui->ge_lineedit->show();
+ ui->ge_pathButton->show();
} else {
ui->voiceLabel->hide();
ui->voiceCombo->hide();
@@ -83,6 +86,9 @@ void preferencesDialog::baseFirmwareChanged()
ui->sdPathButton->hide();
ui->sdPath->hide();
ui->sdPathLabel->hide();
+ ui->ge_label->hide();
+ ui->ge_lineedit->hide();
+ ui->ge_pathButton->hide();
}
populateFirmwareOptions(firmware);
int width=firmware->eepromInterface->getCapability(LCDWidth);
@@ -268,6 +274,7 @@ void preferencesDialog::writeValues()
settings.setValue("backLight", ui->backLightColor->currentIndex());
settings.setValue("libraryPath", ui->libraryPath->text());
settings.setValue("sdPath", ui->sdPath->text());
+ settings.setValue("gePath", ui->ge_lineedit->text());
settings.setValue("embedded_splashes", ui->splashincludeCB->currentIndex());
if (!ui->SplashFileName->text().isEmpty()) {
QImage Image = ui->imageLabel->pixmap()->toImage();
@@ -342,6 +349,9 @@ void preferencesDialog::populateFirmwareOptions(const FirmwareInfo * firmware)
ui->sdPathButton->show();
ui->sdPath->show();
ui->sdPathLabel->show();
+ ui->ge_label->show();
+ ui->ge_lineedit->show();
+ ui->ge_pathButton->show();
if (current_firmware_variant.id.contains(opt.name) ||firmware->voice) {
ui->voiceLabel->setEnabled(true);
ui->voiceCombo->setEnabled(true);
@@ -408,6 +418,10 @@ void preferencesDialog::initSettings()
if (QDir(Path).exists()) {
ui->sdPath->setText(Path);
}
+ Path=settings.value("gePath", "").toString();
+ if (QFile(Path).exists()) {
+ ui->ge_lineedit->setText(Path);
+ }
Path=settings.value("backupPath", "").toString();
if (!Path.isEmpty()) {
if (QDir(Path).exists()) {
@@ -519,7 +533,7 @@ void preferencesDialog::on_fw_dnld_clicked()
void preferencesDialog::on_voice_dnld_clicked()
{
ui->ProfSave_PB->setEnabled(true);
- QString url="http://93.51.182.154/voices/";
+ QString url="http://fw.opentx.it/voices/";
FirmwareVariant variant = getFirmwareVariant();
url.append(QString("%1/%2/").arg(variant.firmware->id).arg(ui->voiceCombo->currentText()));
QDesktopServices::openUrl(url);
@@ -574,6 +588,15 @@ void preferencesDialog::on_backupPathButton_clicked()
ui->backupEnable->setEnabled(true);
}
+void preferencesDialog::on_ge_pathButton_clicked()
+{
+ QSettings settings("companion9x", "companion9x");
+ QString fileName = QFileDialog::getOpenFileName(this, tr("Select Google Earth executable"),ui->ge_lineedit->text());
+ if (!fileName.isEmpty()) {
+ ui->ge_lineedit->setText(fileName);
+ }
+}
+
void preferencesDialog::on_splashLibraryButton_clicked()
{
QString fileName;
@@ -655,6 +678,7 @@ void preferencesDialog::on_ProfSave_PB_clicked()
settings.setValue("rename_firmware_files", ui->renameFirmware->isChecked());
settings.setValue("sdPath", ui->sdPath->text());
settings.setValue("SplashFileName", ui->SplashFileName->text());
+ settings.setValue("gePath", ui->ge_lineedit->text());
if (ui->imageLabel->pixmap()) {
QImage Image = ui->imageLabel->pixmap()->toImage();
settings.setValue("SplashImage", image2qstring(Image));
diff --git a/companion/src/preferencesdialog.h b/companion/src/preferencesdialog.h
index 101b610ed..9a31ea8fd 100644
--- a/companion/src/preferencesdialog.h
+++ b/companion/src/preferencesdialog.h
@@ -48,6 +48,7 @@ private slots:
void on_snapshotPathButton_clicked();
void on_snapshotClipboardCKB_clicked();
void on_backupPathButton_clicked();
+ void on_ge_pathButton_clicked();
void on_sdPathButton_clicked();
void on_splashLibraryButton_clicked();
void on_checkFWUpdates_clicked();
diff --git a/companion/src/preferencesdialog.ui b/companion/src/preferencesdialog.ui
index f3e5bf005..b52060211 100644
--- a/companion/src/preferencesdialog.ui
+++ b/companion/src/preferencesdialog.ui
@@ -39,6 +39,19 @@
4
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Show Splash Screen
+
+
+
-
@@ -261,253 +274,7 @@
- -
-
-
-
- 0
- 0
-
-
-
- Show Splash Screen
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Custom TX splash screen
-
-
-
- -
-
-
-
-
-
- Enable
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- -
-
-
- Calibrate
-
-
-
-
-
- -
-
-
- 1
-
-
-
-
-
- Open Folder
-
-
-
- -
-
-
- true
-
-
- true
-
-
-
-
-
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
- FwInfo
-
-
-
- -
-
-
- Check for updates
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Personal splash library
-
-
-
- -
-
-
-
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
-
-
- true
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
-
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
- Ask for flashing after Download
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
- -
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- Export Profile
-
-
-
- -
-
-
- Save Profile
-
-
-
- -
-
-
- 1
-
-
- 10
-
-
-
- -
-
-
- Import Profile
-
-
-
- -
-
-
- -
-
-
- Profile Name
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Language (requires restart)
-
-
-
- -
+
-
@@ -651,7 +418,271 @@ This is used by the templated to determine which channel goes to what number out
- -
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Custom TX splash screen
+
+
+
+ -
+
+
-
+
+
+ Enable
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ -
+
+
+ Calibrate
+
+
+
+
+
+ -
+
+
+ 1
+
+
-
+
+
+ Open Folder
+
+
+
+ -
+
+
+ true
+
+
+ true
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ FwInfo
+
+
+
+ -
+
+
+ Check for updates
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Personal splash library
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Ask for flashing after Download
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
-
+
+
+ Export Profile
+
+
+
+ -
+
+
+ Save Profile
+
+
+
+ -
+
+
+ 1
+
+
+ 10
+
+
+
+ -
+
+
+ Import Profile
+
+
+
+ -
+
+
+ -
+
+
+ Profile Name
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Language (requires restart)
+
+
+
+ -
+
+
+ 1
+
+
-
+
+
+ Open Folder
+
+
+
+ -
+
+
+ true
+
+
+ true
+
+
+
+ -
+
+
+ Use clipboard only
+
+
+
+
+
+ -
@@ -664,7 +695,7 @@ This is used by the templated to determine which channel goes to what number out
- -
+
-
@@ -680,7 +711,7 @@ This is used by the templated to determine which channel goes to what number out
- -
+
-
Mode selection:
@@ -728,7 +759,7 @@ Mode 4:
- -
+
-
@@ -777,7 +808,7 @@ Mode 4:
- -
+
-
Profile slot
@@ -816,7 +847,7 @@ Mode 4:
- -
+
-
Qt::Vertical
@@ -832,7 +863,7 @@ Mode 4:
- -
+
-
-
@@ -859,7 +890,7 @@ Mode 4:
- -
+
-
QLayout::SetMaximumSize
@@ -950,7 +981,7 @@ May be different from firmware language
- -
+
-
-
@@ -997,37 +1028,6 @@ May be different from firmware language
- -
-
-
- 1
-
-
-
-
-
- Open Folder
-
-
-
- -
-
-
- true
-
-
- true
-
-
-
- -
-
-
- Use clipboard only
-
-
-
-
-
-
@@ -1048,7 +1048,7 @@ May be different from firmware language
- -
+
-
QLayout::SetMaximumSize
@@ -1601,6 +1601,31 @@ May be different from firmware language
+ -
+
+
-
+
+
+ true
+
+
+
+ -
+
+
+ Find Executable
+
+
+
+
+
+ -
+
+
+ Google Earth Executable
+
+
+
From f31e14153aba02edf2d57f268b8ad81f27ccd44d Mon Sep 17 00:00:00 2001
From: "romoloman@github.com" <>
Date: Sun, 29 Dec 2013 12:12:55 +0100
Subject: [PATCH 2/4] KML support for logs
---
companion/src/companion9x.qrc | 2 +
companion/src/images/track.png | Bin 0 -> 747 bytes
companion/src/images/track0.png | Bin 0 -> 2363 bytes
companion/src/logsdialog.cpp | 78 ++++++++++++++++++++++++++------
4 files changed, 66 insertions(+), 14 deletions(-)
create mode 100644 companion/src/images/track.png
create mode 100644 companion/src/images/track0.png
diff --git a/companion/src/companion9x.qrc b/companion/src/companion9x.qrc
index 2000e4e15..8a8409172 100644
--- a/companion/src/companion9x.qrc
+++ b/companion/src/companion9x.qrc
@@ -65,6 +65,8 @@
images/fuses.png
images/list.png
images/maps.png
+ images/track.png
+ images/track0.png
images/play.png
images/stop.png
images/read_eeprom_file.png
diff --git a/companion/src/images/track.png b/companion/src/images/track.png
new file mode 100644
index 0000000000000000000000000000000000000000..32414b49aa2b544b8f3469e13e36f342d4d8e738
GIT binary patch
literal 747
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
literal 0
HcmV?d00001
diff --git a/companion/src/logsdialog.cpp b/companion/src/logsdialog.cpp
index 5ad0327dd..12213536b 100644
--- a/companion/src/logsdialog.cpp
+++ b/companion/src/logsdialog.cpp
@@ -1,11 +1,6 @@
#include "logsdialog.h"
#include "ui_logsdialog.h"
#include "qcustomplot.h"
-#if defined WIN32 || !defined __GNUC__
-#include
-#else
-#include
-#endif
logsDialog::logsDialog(QWidget *parent) :
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
@@ -178,7 +173,7 @@ void logsDialog::selectionChanged()
void logsDialog::on_mapsButton_clicked() {
int n = csvlog.count(); // number of points in graph
if (n==0) return;
- int latcol=0, longcol=0, altcol=0, coursecol=0, speedcol=0;
+ int latcol=0, longcol=0, altcol=0, coursecol=0, speedcol=0, rssicol=0;
int itemSelected=0.;
bool rangeSelected=false;
QSettings settings("companion9x", "companion9x");
@@ -203,6 +198,9 @@ void logsDialog::on_mapsButton_clicked() {
if (csvlog.at(0).at(i).contains("Course")) {
coursecol=i;
}
+ if (csvlog.at(0).at(i).contains("RSSI")) {
+ rssicol=i;
+ }
}
if (longcol==0 || latcol==0 || altcol==0) {
return;
@@ -216,9 +214,16 @@ void logsDialog::on_mapsButton_clicked() {
if (itemSelected==0) {
itemSelected=n-1;
}
- QString geFilename = QDir::tempPath() + "/flight.kml";
+
+ QString geFilename = QDir::tempPath() + "/track0.png";
if (QFile::exists(geFilename)) {
- unlink(geFilename.toAscii());
+ QFile::remove(geFilename);
+ }
+ QFile::copy(":/images/track0.png", geFilename);
+
+ geFilename = QDir::tempPath() + "/flight.kml";
+ if (QFile::exists(geFilename)) {
+ QFile::remove(geFilename);
}
QFile geFile(geFilename);
if (!geFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
@@ -228,17 +233,62 @@ void logsDialog::on_mapsButton_clicked() {
.arg(geFile.errorString()));
return;
}
-
+ QString latitude,longitude;
+ double flatitude, flongitude,temp;
QTextStream outputStream(&geFile);
- outputStream << "\n\n";
- outputStream << "\n\tflight.kml\n\tMy Flight\n\t\t\n";
- outputStream << "\t\t\t1\n\t\t\trelativeToGround\n\t\t\t\n\t\t\t\t";
+ outputStream << "\n\n";
+ outputStream << "\t\n\t\tMy Flight\n";
+ outputStream << "\t\t\n";
+ outputStream << "\t\t\n";
+ outputStream << "\t\t\n\t\t\t\n\t\t\t\tnormal\n\t\t\t\t#multiTrack_n\n\t\t\t\n\t\t\t\n\t\t\t\thighlight\n\t\t\t\t#multiTrack_h\n\t\t\t\n\t\t\n";
+ outputStream << "\t\t\n";
+ outputStream << "\t\t\n";
+ outputStream << "\t\t\t\n\t\t\t\tGPS Speed\n\t\t\t\n";
+ outputStream << "\t\t\t\n\t\t\t\tRSSI\n\t\t\t\n";
+ outputStream << "\t\t\n";
+ outputStream << "\t\t\n\t\t\tFlight\n\t\t\t\n\t\t\t\tMy Flight\n\t\t\t\t#multiTrack\n\t\t\t\t\n";
for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) {
- outputStream << csvlog.at(i).at(longcol) << "," << csvlog.at(i).at(latcol) << "," << csvlog.at(i).at(altcol) << " " ;
+ QString tstamp=csvlog.at(i).at(0)+QString("T")+csvlog.at(i).at(1);
+ outputStream << "\t\t\t\t\t"<< tstamp <<"\n";
}
}
- outputStream << "\n\t\t\t\n\t\t\n\t\n\n\n";
+
+ for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) {
+ latitude=csvlog.at(i).at(latcol).trimmed();
+ longitude=csvlog.at(i).at(longcol).trimmed();
+ temp=int(latitude.left(latitude.length()-1).toDouble()/100);
+ flatitude=temp+(latitude.left(latitude.length()-1).toDouble()-temp*100)/60.0;
+ temp=int(longitude.left(longitude.length()-1).toDouble()/100);
+ flongitude=temp+(longitude.left(longitude.length()-1).toDouble()-temp*100)/60.0;
+ if (latitude.right(1)!="N") {
+ flatitude*=-1;
+ }
+ if (longitude.right(1)!="E") {
+ flongitude*=-1;
+ }
+ latitude.sprintf("%3.8f", flatitude);
+ longitude.sprintf("%3.8f", flongitude);
+ outputStream << "\t\t\t\t\t" << longitude << " " << latitude << " " << csvlog.at(i).at(altcol) << "\n" ;
+ }
+ }
+ outputStream << "\t\t\t\t\t\n\t\t\t\t\t\t\n";
+ outputStream << "\t\t\t\t\t\t\t\n";
+ for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) {
+ outputStream << "\t\t\t\t\t\t\t\t"<< csvlog.at(i).at(speedcol) <<"\n";
+ }
+ }
+ outputStream << "\t\t\t\t\t\t\t\n";
+ outputStream << "\t\t\t\t\t\t\t\n";
+ for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) {
+ outputStream << "\t\t\t\t\t\t\t\t"<< csvlog.at(i).at(rssicol) <<"\n";
+ }
+ }
+ outputStream << "\t\t\t\t\t\t\t\n";
+ outputStream << "\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n";
geFile.close();
QStringList parameters;
From 447ee71698ea593781a88b88ca242dbd603feafc Mon Sep 17 00:00:00 2001
From: "romoloman@github.com" <>
Date: Sun, 29 Dec 2013 13:15:13 +0100
Subject: [PATCH 3/4] FrSky S/PORT GPS support
---
radio/src/telemetry/frsky_sport.cpp | 167 ++++++++++++++++++++++------
radio/src/telemetry/frsky_sport.h | 12 +-
2 files changed, 139 insertions(+), 40 deletions(-)
diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp
index 8d299348d..a9552e150 100644
--- a/radio/src/telemetry/frsky_sport.cpp
+++ b/radio/src/telemetry/frsky_sport.cpp
@@ -78,37 +78,45 @@
#define FRSKY_LAST_ID 0x3F
// FrSky new DATA IDs (2 bytes)
-#define RSSI_ID 0xf101
-#define ADC1_ID 0xf102
-#define ADC2_ID 0xf103
-#define BATT_ID 0xf104
-#define SWR_ID 0xf105
-#define T1_FIRST_ID 0x0400
-#define T1_LAST_ID 0x040f
-#define T2_FIRST_ID 0x0410
-#define T2_LAST_ID 0x041f
-#define RPM_FIRST_ID 0x0500
-#define RPM_LAST_ID 0x050f
-#define FUEL_FIRST_ID 0x0600
-#define FUEL_LAST_ID 0x060f
-#define ALT_FIRST_ID 0x0100
-#define ALT_LAST_ID 0x010f
-#define VARIO_FIRST_ID 0x0110
-#define VARIO_LAST_ID 0x011f
-#define ACCX_FIRST_ID 0x0700
-#define ACCX_LAST_ID 0x070f
-#define ACCY_FIRST_ID 0x0710
-#define ACCY_LAST_ID 0x071f
-#define ACCZ_FIRST_ID 0x0720
-#define ACCZ_LAST_ID 0x072f
-#define CURR_FIRST_ID 0x0200
-#define CURR_LAST_ID 0x020f
-#define VFAS_FIRST_ID 0x0210
-#define VFAS_LAST_ID 0x021f
-#define GPS_SPEED_FIRST_ID 0x0830
-#define GPS_SPEED_LAST_ID 0x083f
-#define CELLS_FIRST_ID 0x0300
-#define CELLS_LAST_ID 0x030f
+#define RSSI_ID 0xf101
+#define ADC1_ID 0xf102
+#define ADC2_ID 0xf103
+#define BATT_ID 0xf104
+#define SWR_ID 0xf105
+#define T1_FIRST_ID 0x0400
+#define T1_LAST_ID 0x040f
+#define T2_FIRST_ID 0x0410
+#define T2_LAST_ID 0x041f
+#define RPM_FIRST_ID 0x0500
+#define RPM_LAST_ID 0x050f
+#define FUEL_FIRST_ID 0x0600
+#define FUEL_LAST_ID 0x060f
+#define ALT_FIRST_ID 0x0100
+#define ALT_LAST_ID 0x010f
+#define VARIO_FIRST_ID 0x0110
+#define VARIO_LAST_ID 0x011f
+#define ACCX_FIRST_ID 0x0700
+#define ACCX_LAST_ID 0x070f
+#define ACCY_FIRST_ID 0x0710
+#define ACCY_LAST_ID 0x071f
+#define ACCZ_FIRST_ID 0x0720
+#define ACCZ_LAST_ID 0x072f
+#define CURR_FIRST_ID 0x0200
+#define CURR_LAST_ID 0x020f
+#define VFAS_FIRST_ID 0x0210
+#define VFAS_LAST_ID 0x021f
+#define CELLS_FIRST_ID 0x0300
+#define CELLS_LAST_ID 0x030f
+#define GPS_LONG_LATI_FIRST_ID 0x0800
+#define GPS_LONG_LATI_LAST_ID 0x080f
+#define GPS_ALT_FIRST_ID 0x0820
+#define GPS_ALT_LAST_ID 0x082f
+#define GPS_SPEED_FIRST_ID 0x0830
+#define GPS_SPEED_LAST_ID 0x083f
+#define GPS_COURS_FIRST_ID 0x0840
+#define GPS_COURS_LAST_ID 0x084f
+#define GPS_TIME_DATE_FIRST_ID 0x0850
+#define GPS_TIME_DATE_LAST_ID 0x085f
// FrSky wrong IDs ?
#define BETA_VARIO_ID 0x8030
@@ -179,7 +187,8 @@ void processHubPacket(uint8_t id, uint16_t value)
if (frskyData.hub.rpm > frskyData.hub.maxRpm)
frskyData.hub.maxRpm = frskyData.hub.rpm;
break;
-
+//case GPS_COURS_BP_ID:
+ //frskyData.hub.gpsCourse_bp = value;
case TEMP1_ID:
if (frskyData.hub.temperature1 > frskyData.hub.maxTemperature1)
frskyData.hub.maxTemperature1 = frskyData.hub.temperature1;
@@ -214,14 +223,15 @@ void processHubPacket(uint8_t id, uint16_t value)
break;
case GPS_ALT_AP_ID:
+ frskyData.hub.gpsAltitude_bp = frskyData.hub.gpsAltitude_bp*100;
if (!frskyData.hub.gpsAltitudeOffset)
frskyData.hub.gpsAltitudeOffset = -frskyData.hub.gpsAltitude_bp;
frskyData.hub.gpsAltitude_bp += frskyData.hub.gpsAltitudeOffset;
if (!frskyData.hub.baroAltitudeOffset) {
- if (frskyData.hub.gpsAltitude_bp > frskyData.hub.maxAltitude)
- frskyData.hub.maxAltitude = frskyData.hub.gpsAltitude_bp;
- if (frskyData.hub.gpsAltitude_bp < frskyData.hub.minAltitude)
- frskyData.hub.minAltitude = frskyData.hub.gpsAltitude_bp;
+ if (frskyData.hub.gpsAltitude_bp > frskyData.hub.maxAltitude*100)
+ frskyData.hub.maxAltitude = frskyData.hub.gpsAltitude_bp/100;
+ if (frskyData.hub.gpsAltitude_bp < frskyData.hub.minAltitude*100)
+ frskyData.hub.minAltitude = frskyData.hub.gpsAltitude_bp/100;
}
if (!frskyData.hub.pilotLatitude && !frskyData.hub.pilotLongitude) {
@@ -235,6 +245,7 @@ void processHubPacket(uint8_t id, uint16_t value)
case GPS_SPEED_BP_ID:
// Speed => Max speed
+ frskyData.hub.gpsSpeed_bp = (frskyData.hub.gpsSpeed_bp * 46) / 25;
if (frskyData.hub.gpsSpeed_bp > frskyData.hub.maxGpsSpeed)
frskyData.hub.maxGpsSpeed = frskyData.hub.gpsSpeed_bp;
break;
@@ -294,6 +305,7 @@ void processSportPacket(uint8_t *packet)
/* uint8_t dataId = packet[0]; */
uint8_t prim = packet[1];
uint16_t appId = *((uint16_t *)(packet+2));
+ static uint8_t t_coor;
if (!checkSportPacket(packet))
return;
@@ -378,9 +390,92 @@ void processSportPacket(uint8_t *packet)
}
else if (appId >= GPS_SPEED_FIRST_ID && appId <= GPS_SPEED_LAST_ID) {
frskyData.hub.gpsSpeed_bp = SPORT_DATA_U32(packet);
+ frskyData.hub.gpsSpeed_bp = (frskyData.hub.gpsSpeed_bp * 46) / 25/1000;
if (frskyData.hub.gpsSpeed_bp > frskyData.hub.maxGpsSpeed)
frskyData.hub.maxGpsSpeed = frskyData.hub.gpsSpeed_bp;
}
+ else if(appId>=GPS_TIME_DATE_FIRST_ID && appId<=GPS_TIME_DATE_LAST_ID) {
+ uint32_t gps_time_date = SPORT_DATA_U32(packet);
+ if(gps_time_date & 0x000000ff) {
+ frskyData.hub.year = (uint16_t)((gps_time_date & 0xff000000)>>24);
+ frskyData.hub.month =(uint8_t)((gps_time_date & 0x00ff0000)>>16);
+ frskyData.hub.day = (uint8_t)((gps_time_date & 0x0000ff00)>>8);
+ }
+ else {
+ frskyData.hub.hour =(uint8_t) ((gps_time_date & 0xff000000)>>24);
+ frskyData.hub.min = (uint8_t)((gps_time_date & 0x00ff0000)>>16);
+ frskyData.hub.sec =(uint16_t) ((gps_time_date & 0x0000ff00)>>8);
+ frskyData.hub.hour = ((uint8_t)(frskyData.hub.hour + g_eeGeneral.timezone + 24)) % 24;
+ }
+ }
+ else if(appId>=GPS_COURS_FIRST_ID && appId<=GPS_COURS_LAST_ID) {
+ uint32_t course = SPORT_DATA_U32(packet);
+ frskyData.hub.gpsCourse_bp = course/100;
+ frskyData.hub.gpsCourse_ap = course%100;
+ }
+ else if (appId>=GPS_ALT_FIRST_ID && appId<=GPS_ALT_LAST_ID) {
+ int32_t gps_altitude;
+ gps_altitude = SPORT_DATA_S32(packet);
+ frskyData.hub.gpsAltitude_bp = gps_altitude;
+
+ if (!frskyData.hub.gpsAltitudeOffset)
+ frskyData.hub.gpsAltitudeOffset = -frskyData.hub.gpsAltitude_bp;
+
+ frskyData.hub.gpsAltitude_bp += frskyData.hub.gpsAltitudeOffset;
+
+ if (!frskyData.hub.baroAltitudeOffset) {
+ if (frskyData.hub.gpsAltitude_bp > frskyData.hub.maxAltitude*100)
+ frskyData.hub.maxAltitude = frskyData.hub.gpsAltitude_bp/100;
+
+ if (frskyData.hub.gpsAltitude_bp < frskyData.hub.minAltitude*100)
+ frskyData.hub.minAltitude = frskyData.hub.gpsAltitude_bp/100;
+ }
+
+ if (!frskyData.hub.pilotLatitude && !frskyData.hub.pilotLongitude) {
+ // First received GPS position => Pilot GPS position
+ if(t_coor)
+ getGpsPilotPosition();
+ }
+ else if (frskyData.hub.gpsDistNeeded || g_menuStack[g_menuStackPtr] == menuTelemetryFrsky) {
+ getGpsDistance();
+ }
+ }
+ else if(appId>=GPS_LONG_LATI_FIRST_ID && appId<=GPS_LONG_LATI_LAST_ID) {
+ uint32_t gps_long_lati_data = SPORT_DATA_U32(packet);
+ if (gps_long_lati_data)
+ {
+ frskyData.hub.gpsFix = 1;
+ t_coor = 1;
+ }
+
+ uint32_t gps_long_lati_b1w,gps_long_lati_a1w;
+ gps_long_lati_b1w = (gps_long_lati_data&0x3fffffff)/10000;
+ gps_long_lati_a1w = (gps_long_lati_data&0x3fffffff)%10000;
+ switch ((gps_long_lati_data & 0xc0000000)>>30) {
+ case 0: {
+ frskyData.hub.gpsLatitude_bp = (gps_long_lati_b1w/60*100)+(gps_long_lati_b1w%60);
+ frskyData.hub.gpsLatitude_ap = gps_long_lati_a1w;
+ frskyData.hub.gpsLatitudeNS = 'N';
+ }break;
+ case 1: {
+ frskyData.hub.gpsLatitude_bp = (gps_long_lati_b1w/60*100) + (gps_long_lati_b1w%60);
+ frskyData.hub.gpsLatitude_ap = gps_long_lati_a1w;
+ frskyData.hub.gpsLatitudeNS = 'S'; }break;
+ case 2: {
+ frskyData.hub.gpsLongitude_bp = (gps_long_lati_b1w/60*100) +(gps_long_lati_b1w%60);
+ frskyData.hub.gpsLongitude_ap = gps_long_lati_a1w;
+ frskyData.hub.gpsLongitudeEW = 'E'; }break;
+ case 3: {
+ frskyData.hub.gpsLongitude_bp = (gps_long_lati_b1w/60*100) +(gps_long_lati_b1w%60);
+ frskyData.hub.gpsLongitude_ap = gps_long_lati_a1w;
+ frskyData.hub.gpsLongitudeEW = 'W';}break;
+ }
+ if (frskyData.hub.gpsFix > 0 && frskyData.hub.gpsLatitude_bp > 1)
+ frskyData.hub.gpsFix = 0;
+ if (frskyData.hub.gpsFix > 0 && frskyData.hub.gpsLongitude_bp > 1)
+ frskyData.hub.gpsFix = 0;
+ }
+
else if (appId >= CELLS_FIRST_ID && appId <= CELLS_LAST_ID) {
uint32_t cells = SPORT_DATA_U32(packet);
uint8_t battnumber = cells & 0xF;
diff --git a/radio/src/telemetry/frsky_sport.h b/radio/src/telemetry/frsky_sport.h
index fdbaae2fb..ac1dd94d9 100644
--- a/radio/src/telemetry/frsky_sport.h
+++ b/radio/src/telemetry/frsky_sport.h
@@ -173,12 +173,16 @@ bool FRSKY_alarmRaised(uint8_t idx);
void resetTelemetry();
+#define TELEMETRY_GPS_SPEED_BP frskyData.hub.gpsSpeed_bp
+#define TELEMETRY_GPS_SPEED_AP frskyData.hub.gpsSpeed_ap
+#define TELEMETRY_GPS_SPEED_LOG frskyData.hub.gpsSpeed_bp<0?'-':' ',abs(frskyData.hub.gpsSpeed_bp/1000),abs(frskyData.hub.gpsSpeed_bp%1000)
+
+#define TELEMETRY_GPS_ALT_AP (frskyData.hub.gpsAltitude_bp%100)
+#define TELEMETRY_GPS_ALT_BP (frskyData.hub.gpsAltitude_bp/100)
+#define TELEMETRY_GPS_ALT_LOG frskyData.hub.gpsAltitude_bp < 0 ? '-':' ',abs(frskyData.hub.gpsAltitude_bp/100),abs(frskyData.hub.gpsAltitude_bp%100)
+
#define TELEMETRY_ALT_BP (frskyData.hub.baroAltitude / 100)
#define TELEMETRY_ALT_AP (frskyData.hub.baroAltitude % 100)
-#define TELEMETRY_GPS_SPEED_BP frskyData.hub.gpsSpeed_bp
-#define TELEMETRY_GPS_SPEED_AP frskyData.hub.gpsSpeed_ap
-#define TELEMETRY_GPS_ALT_AP frskyData.hub.gpsAltitude_ap
-#define TELEMETRY_GPS_ALT_BP frskyData.hub.gpsAltitude_bp
#define TELEMETRY_ALT frskyData.hub.baroAltitude < 0 ? '-' : ' ', abs(frskyData.hub.baroAltitude / 100), abs(frskyData.hub.baroAltitude % 100)
#define TELEMETRY_ALT_FORMAT "%c%d.%02d,"
#define TELEMETRY_CELLS frskyData.hub.cellsSum / 10, frskyData.hub.cellsSum % 10, frskyData.hub.cellVolts[0]*2/100, frskyData.hub.cellVolts[0]*2%100, frskyData.hub.cellVolts[1]*2/100, frskyData.hub.cellVolts[1]*2%100, frskyData.hub.cellVolts[2]*2/100, frskyData.hub.cellVolts[2]*2%100, frskyData.hub.cellVolts[3]*2/100, frskyData.hub.cellVolts[3]*2%100, frskyData.hub.cellVolts[4]*2/100, frskyData.hub.cellVolts[4]*2%100, frskyData.hub.cellVolts[5]*2/100, frskyData.hub.cellVolts[5]*2%100
From 53f48dc487c5bd20ff1fc4f65a0083d5ce0aa3fb Mon Sep 17 00:00:00 2001
From: "romoloman@github.com" <>
Date: Sun, 29 Dec 2013 18:19:14 +0100
Subject: [PATCH 4/4] Allow selection of fields for GE export
---
companion/src/logsdialog.cpp | 84 +++++++++++++++++++++++++++++-------
companion/src/logsdialog.h | 1 +
2 files changed, 69 insertions(+), 16 deletions(-)
diff --git a/companion/src/logsdialog.cpp b/companion/src/logsdialog.cpp
index 12213536b..bba3ba2bc 100644
--- a/companion/src/logsdialog.cpp
+++ b/companion/src/logsdialog.cpp
@@ -173,12 +173,35 @@ void logsDialog::selectionChanged()
void logsDialog::on_mapsButton_clicked() {
int n = csvlog.count(); // number of points in graph
if (n==0) return;
- int latcol=0, longcol=0, altcol=0, coursecol=0, speedcol=0, rssicol=0;
+ int latcol=0, longcol=0, altcol=0, speedcol=0;
int itemSelected=0.;
bool rangeSelected=false;
+ enum fieldtype {
+ T_F,
+ I_F,
+ F_F,
+ G_F
+ };
+ ui->FieldsTW->setDisabled(true);
+ ui->logTable->setDisabled(true);
+ QString fields[]={"SWR","RSSI","A1","A2","GPS Date"\
+ ,"GPS Time","Long","Lat","Course","GPS Speed","GPS Alt","Baro Alt"\
+ ,"Vertical Speed","Temp1","Temp2","RPM","Fuel","Cell volts","Cell 1"\
+ ,"Cell 2","Cell 3","Cell 4","Cell 5","Cell 6","Current","Consumption"\
+ ,"Vfas","AccelX","AccelY","AccelZ","Rud","Ele","Thr","Ail"\
+ ,"S1","S2","LS","RS","SA","SB","SC","SD","SE","SF","SG","SH"};
+ int fieldstype[]={I_F,I_F,F_F,F_F,T_F\
+ ,T_F,G_F,G_F,F_F,G_F,G_F,F_F\
+ ,F_F,F_F,F_F,I_F,I_F,F_F,F_F\
+ ,F_F,F_F,F_F,F_F,F_F,F_F,F_F\
+ ,F_F,F_F,F_F,F_F,I_F,I_F,I_F,I_F\
+ ,I_F,I_F,I_F,I_F,I_F,I_F,I_F,I_F,I_F,I_F,I_F,I_F};
+
QSettings settings("companion9x", "companion9x");
QString gePath=settings.value("gePath", "").toString();
if (gePath.isEmpty() || !QFile(gePath).exists()) {
+ ui->FieldsTW->setDisabled(false);
+ ui->logTable->setDisabled(false);
return;
}
for (int i=1; iFieldsTW->setDisabled(false);
+ ui->logTable->setDisabled(false);
return;
}
QString latitude,longitude;
double flatitude, flongitude,temp;
QTextStream outputStream(&geFile);
outputStream << "\n\n";
- outputStream << "\t\n\t\tMy Flight\n";
+ outputStream << "\t\n\t\t" << logFilename << "\n";
outputStream << "\t\t\n";
outputStream << "\t\t\n";
outputStream << "\t\t\n\t\t\t\n\t\t\t\tnormal\n\t\t\t\t#multiTrack_n\n\t\t\t\n\t\t\t\n\t\t\t\thighlight\n\t\t\t\t#multiTrack_h\n\t\t\t\n\t\t\n";
outputStream << "\t\t\n";
outputStream << "\t\t\n";
outputStream << "\t\t\t\n\t\t\t\tGPS Speed\n\t\t\t\n";
- outputStream << "\t\t\t\n\t\t\t\tRSSI\n\t\t\t\n";
+ for (int i=0; iFieldsTW->item(0,i)->isSelected() && fieldstype[i]!=G_F ) {
+ outputStream << "\t\t\t\n\t\t\t\t" << fields[i] << "\n\t\t\t\n";
+ }
+ }
outputStream << "\t\t\n";
- outputStream << "\t\t\n\t\t\tFlight\n\t\t\t\n\t\t\t\tMy Flight\n\t\t\t\t#multiTrack\n\t\t\t\t\n";
+
+ QString planeName;
+ if (logFilename.indexOf("-")>0) {
+ planeName=logFilename.left(logFilename.indexOf("-"));
+ } else {
+ planeName=logFilename;
+ }
+ outputStream << "\t\t\n\t\t\tLog Data\n\t\t\t\n\t\t\t\t" << planeName << "\n\t\t\t\t#multiTrack\n\t\t\t\t\n";
for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) {
QString tstamp=csvlog.at(i).at(0)+QString("T")+csvlog.at(i).at(1);
@@ -281,20 +325,26 @@ void logsDialog::on_mapsButton_clicked() {
}
}
outputStream << "\t\t\t\t\t\t\t\n";
- outputStream << "\t\t\t\t\t\t\t\n";
- for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) {
- outputStream << "\t\t\t\t\t\t\t\t"<< csvlog.at(i).at(rssicol) <<"\n";
+ for (int i=0; iFieldsTW->item(0,i)->isSelected() && fieldstype[i]!= G_F ) {
+ outputStream << "\t\t\t\t\t\t\t\n";
+ for (int j=1; jlogTable->item(j-1,1)->isSelected() &&rangeSelected) || !rangeSelected) {
+ outputStream << "\t\t\t\t\t\t\t\t"<< csvlog.at(j).at(i+2) <<"\n";
+ }
+ }
+ outputStream << "\t\t\t\t\t\t\t\n";
}
}
- outputStream << "\t\t\t\t\t\t\t\n";
outputStream << "\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n";
geFile.close();
QStringList parameters;
parameters << geFilename;
QProcess *process = new QProcess(this);
- process->startDetached(gePath, parameters);
+ process->start(gePath, parameters);
+ ui->FieldsTW->setDisabled(false);
+ ui->logTable->setDisabled(false);
}
@@ -578,6 +628,7 @@ bool logsDialog::cvsFileParse()
} else {
ui->sessions_CB->clear();
csvlog.clear();
+ logFilename.clear();
QTextStream inputStream(&file);
QRegExp rx2("(?:\"([^\"]*)\";?)|(?:([^,]*),?)");
QStringList list;
@@ -626,6 +677,7 @@ bool logsDialog::cvsFileParse()
}
lines++;
}
+ logFilename=QFileInfo(file.fileName()).baseName();
}
file.close();
diff --git a/companion/src/logsdialog.h b/companion/src/logsdialog.h
index 9901228a7..e78fa6c51 100644
--- a/companion/src/logsdialog.h
+++ b/companion/src/logsdialog.h
@@ -43,6 +43,7 @@ private:
double GetScale(QString channel);
QList palette;
bool plotLock;
+ QString logFilename;
};
#endif // LOGSDIALOG_H