getCapability(FlightPhases); i++) {
@@ -342,7 +342,7 @@ void compareDialog::printPhases()
gvars=1;
}
if (gvars==1) {
- gvarnum=GetEepromInterface()->getCapability(GvarsNum);
+ gvarnum=GetEepromInterface()->getCapability(Gvars);
}
if ((gvars==1 && GetEepromInterface()->getCapability(GvarsFlightPhases)) || GetEepromInterface()->getCapability(RotaryEncoders)) {
str.append("
");
@@ -406,7 +406,7 @@ void compareDialog::printPhases()
str.append("| "+tr("Switch")+" | | "+tr("Flight mode name"));
str.append(" | "+tr("IN")+" | "+tr("OUT")+" | ");
for (i=0; i<4; i++) {
- str.append(QString("%1 | ").arg(getStickStr(i)));
+ str.append(QString("%1 | ").arg(getInputStr(*g_model1, i)));
}
str.append("
");
for (i=0; igetCapability(FlightPhases); i++) {
@@ -564,7 +564,7 @@ void compareDialog::printGvars()
int gvarnum=0;
if ((GetCurrentFirmwareVariant() & GVARS_VARIANT ) || (!GetEepromInterface()->getCapability(HasVariants) && GetEepromInterface()->getCapability(Gvars))) {
gvars=1;
- gvarnum=GetEepromInterface()->getCapability(GvarsNum);
+ gvarnum=GetEepromInterface()->getCapability(Gvars);
}
if (!GetEepromInterface()->getCapability(GvarsFlightPhases) && (gvars==1 && GetEepromInterface()->getCapability(Gvars))) {
@@ -649,7 +649,8 @@ void compareDialog::printExpos()
};
str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight)).rightJustified(6, ' ');
- str += " " + tr("Expo") + QString("%1").arg(getGVarString(ed->expo)).rightJustified(7, ' ');
+ str += ed->curve.toString().replace("<", "<").replace(">", ">");
+
if (GetEepromInterface()->getCapability(FlightPhases)) {
if(ed->phases) {
if (ed->phases!=(unsigned int)(1<getCapability(FlightPhases))-1) {
@@ -681,21 +682,19 @@ void compareDialog::printExpos()
mask <<=1;
}
str += QString(")");
- } else {
+ }
+ else {
str += tr("DISABLED")+QString(" !!!");
}
}
}
if (ed->swtch.type)
str += " " + tr("Switch") + QString("(%1)").arg(ed->swtch.toString());
- if (ed->curveMode)
- if (ed->curveParam)
- str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(ed->curveParam).replace("<", "<").replace(">", ">"));
str += "";
}
}
str.append("
");
- str.append(""+getStickStr(i)+" | ");
+ str.append(""+getInputStr(*g_model2, i)+" | ");
str.append("");
str.append("");
for (int j=0; jweight)).rightJustified(6, ' ');
- str += " " + tr("Expo") + QString("%1").arg(getGVarString(ed->expo)).rightJustified(7, ' ');
+ str += ed->curve.toString().replace("<", "<").replace(">", ">");
+
if (GetEepromInterface()->getCapability(FlightPhases)) {
if(ed->phases) {
if (ed->phases!=(unsigned int)(1<getCapability(FlightPhases))-1) {
@@ -767,9 +767,7 @@ void compareDialog::printExpos()
}
if (ed->swtch.type)
str += " " + tr("Switch") + QString("(%1)").arg(ed->swtch.toString());
- if (ed->curveMode)
- if (ed->curveParam)
- str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(ed->curveParam).replace("<", "<").replace(">", ">"));
+
str += "";
}
}
@@ -824,13 +822,8 @@ void compareDialog::printMixers()
str += md->srcRaw.toString();
if (md->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(md->swtch.toString());
if (md->carryTrim) str += " " + tr("noTrim");
- if(GetEepromInterface()->getCapability(MixFmTrim) && md->enableFmTrim==1){
- if (md->sOffset) str += " "+ tr("FMTrim") + QString(" (%1%)").arg(md->sOffset);
- } else {
- if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset));
- }
- if (md->differential) str += " "+ tr("Diff") + QString(" (%1%)").arg(getGVarString(md->differential));
- if (md->curve) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curve).replace("<", "<").replace(">", ">"));
+ if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset));
+ str += md->curve.toString().replace("<", "<").replace(">", ">");
if (md->delayDown || md->delayUp) str += tr(" Delay(u%1:d%2)").arg(md->delayUp/scale).arg(md->delayDown/scale);
if (md->speedDown || md->speedUp) str += tr(" Slow(u%1:d%2)").arg(md->speedUp/scale).arg(md->speedDown/scale);
if (md->mixWarn) str += " "+tr("Warn")+QString("(%1)").arg(md->mixWarn);
@@ -907,13 +900,9 @@ void compareDialog::printMixers()
str += md->srcRaw.toString();
if (md->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(md->swtch.toString());
if (md->carryTrim) str += " " + tr("noTrim");
- if(GetEepromInterface()->getCapability(MixFmTrim) && md->enableFmTrim==1){
- if (md->sOffset) str += " "+ tr("FMTrim") + QString(" (%1%)").arg(getGVarString(md->sOffset));
- } else {
- if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset));
- }
- if (md->differential) str += " "+ tr("Diff") + QString(" (%1%)").arg(getGVarString(md->differential));
- if (md->curve) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curve).replace("<", "<").replace(">", ">"));
+ if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset));
+ // TODO if (md->differential) str += " "+ tr("Diff") + QString(" (%1%)").arg(getGVarString(md->differential));
+ // TODO if (md->curve) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curve).replace("<", "<").replace(">", ">"));
if (md->delayDown || md->delayUp) str += tr(" Delay(u%1:d%2)").arg(md->delayUp/scale).arg(md->delayDown/scale);
if (md->speedDown || md->speedUp) str += tr(" Slow(u%1:d%2)").arg(md->speedUp/scale).arg(md->speedDown/scale);
if (md->mixWarn) str += " "+tr("Warn")+QString("(%1)").arg(md->mixWarn);
@@ -1049,19 +1038,19 @@ void compareDialog::printSwitches()
int sc=0;
QString color;
QString str = "";
- str.append(""+tr("Custom Switches")+" | ");
+ str.append(""+tr("Logical Switches")+" | ");
str.append("");
- for (int i=0; igetCapability(CustomSwitches); i++) {
- QString sw1 = getCustomSwitchStr(&g_model1->customSw[i], *g_model1);
- QString sw2 = getCustomSwitchStr(&g_model2->customSw[i], *g_model2);
+ for (int i=0; igetCapability(LogicalSwitches); i++) {
+ QString sw1 = g_model1->customSw[i].toString(*g_model1);
+ QString sw2 = g_model2->customSw[i].toString(*g_model2);
if (!(sw1.isEmpty() && sw2.isEmpty())) {
str.append("");
color=getColor1(sw1,sw2);
str.append(QString("| ").arg(color)+sw1+" | ");
if (i<9) {
- str.append(""+tr("CS")+QString("%1 | ").arg(i+1));
+ str.append(""+tr("LS")+QString("%1 | ").arg(i+1));
} else {
- str.append(""+tr("CS")+('A'+(i-9))+" | ");
+ str.append(""+tr("LS")+('A'+(i-9))+" | ");
}
color=getColor2(sw1,sw2);
str.append(QString("").arg(color)+sw2+" | ");
@@ -1080,7 +1069,7 @@ void compareDialog::printFSwitches()
QString color2;
int sc=0;
QString str = "";
- str.append(""+tr("Custom Functions")+" | ");
+ str.append(""+tr("Special Functions")+" | ");
str.append("");
str.append("| "+tr("Switch")+" | ");
str.append(""+tr("Function")+" | ");
@@ -1107,8 +1096,8 @@ void compareDialog::printFSwitches()
str.append(" ");
if (g_model1->funcSw[i].swtch.type) {
str.append(doTC(g_model1->funcSw[i].swtch.toString(),color1));
- str.append(doTC(getFuncName(g_model1->funcSw[i].func),color1));
- str.append(doTC(FuncParam(g_model1->funcSw[i].func,g_model1->funcSw[i].param,g_model1->funcSw[i].paramarm, g_model1->funcSw[i].adjustMode),color1));
+ str.append(doTC(g_model1->funcSw[i].funcToString(),color1));
+ str.append(doTC(g_model1->funcSw[i].paramToString(),color1));
int index=g_model1->funcSw[i].func;
if (index==FuncPlaySound || index==FuncPlayHaptic || index==FuncPlayValue || index==FuncPlayPrompt || index==FuncPlayBoth || index==FuncBackgroundMusic) {
str.append(doTC(QString("%1").arg(g_model1->funcSw[i].repeatParam),color1));
@@ -1123,11 +1112,11 @@ void compareDialog::printFSwitches()
} else {
str.append("| | | | | | ");
}
- str.append(doTC(tr("CF")+QString("%1").arg(i+1),"",true));
+ str.append(doTC(tr("SF")+QString("%1").arg(i+1),"",true));
if (g_model2->funcSw[i].swtch.type) {
str.append(doTC(g_model2->funcSw[i].swtch.toString(),color2));
- str.append(doTC(getFuncName(g_model2->funcSw[i].func),color2));
- str.append(doTC(FuncParam(g_model2->funcSw[i].func,g_model2->funcSw[i].param,g_model2->funcSw[i].paramarm, g_model2->funcSw[i].adjustMode),color2));
+ str.append(doTC(g_model2->funcSw[i].funcToString(),color2));
+ str.append(doTC(g_model2->funcSw[i].paramToString(),color2));
int index=g_model2->funcSw[i].func;
if (index==FuncPlaySound || index==FuncPlayHaptic || index==FuncPlayValue || index==FuncPlayPrompt || index==FuncPlayBoth || index==FuncBackgroundMusic) {
str.append(doTC(QString("%1").arg(g_model2->funcSw[i].repeatParam),color2));
@@ -1153,55 +1142,6 @@ void compareDialog::printFSwitches()
te->append(str);
}
-void compareDialog::printSafetySwitches()
-{
- QString color1;
- QString color2;
- int sc=0;
- QString str = "";
- str.append(""+tr("Safety Switches")+" | ");
- str.append("");
- str.append("| "+tr("Switch")+" | ");
- str.append(""+tr("Value")+" | ");
- str.append(" | ");
- str.append(""+tr("Switch")+" | ");
- str.append(""+tr("Value")+" | ");
- str.append(" ");
- for(int i=0; igetCapability(Outputs); i++)
- {
- if ((g_model1->safetySw[i].swtch.type!=SWITCH_TYPE_NONE)||(g_model2->safetySw[i].swtch.type!=SWITCH_TYPE_NONE)) {
- if ((g_model1->safetySw[i].swtch!=g_model2->safetySw[i].swtch)||(g_model1->safetySw[i].val!=g_model2->safetySw[i].val)) {
- color1="green";
- color2="red";
- } else {
- color1="grey";
- color2="grey";
- }
- str.append("");
- if (g_model1->safetySw[i].swtch.type) {
- str.append(doTC(g_model1->safetySw[i].swtch.toString(),color1));
- str.append(doTC(QString::number(g_model1->safetySw[i].val),color1));
- }
- else {
- str.append("| | | ");
- }
- str.append(doTC(tr("CH")+QString("%1").arg(i+1),"",true));
- if (g_model2->safetySw[i].swtch.type) {
- str.append(doTC(g_model2->safetySw[i].swtch.toString(),color2));
- str.append(doTC(QString::number(g_model2->safetySw[i].val),color2));
- } else {
- str.append(" | | ");
- }
- str.append(" ");
- sc++;
- }
-}
- str.append("
| ");
- str.append(" ");
- if (sc!=0)
- te->append(str);
-}
-
void compareDialog::printFrSky()
{
QString color;
@@ -1271,6 +1211,7 @@ void compareDialog::printFrSky()
color=getColor1(fd1->rssiAlarms[1].value,fd2->rssiAlarms[1].value);
str.append(""+QString::number(fd1->rssiAlarms[1].value,10)+" | ");
str.append(" ");
+#if 0
if (GetEepromInterface()->getCapability(TelemetryBars) || GetEepromInterface()->getCapability(TelemetryCSFields)) {
int cols=GetEepromInterface()->getCapability(TelemetryColsCSFields);
if (cols==0) cols=2;
@@ -1311,13 +1252,13 @@ void compareDialog::printFrSky()
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor1(fd1->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].source);
str.append(" | "+getFrSkySrc(fd1->screens[0].body.bars[i].source)+" | ");
- value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1);
- value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2);
+ // TODO value1 = getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1);
+ // TODO value2 = getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2);
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor1(value1,value2);
str.append(""+QString::number(value1)+" | ");
- value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1);
- value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2);
+ // TODO value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1);
+ // TODO value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2);
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor1(value1,value2);
str.append(""+QString::number(value1)+" | ");
@@ -1326,6 +1267,7 @@ void compareDialog::printFrSky()
}
}
}
+#endif
str.append("");
str.append("");
@@ -1388,7 +1330,7 @@ void compareDialog::printFrSky()
color=getColor2(fd1->rssiAlarms[1].value,fd2->rssiAlarms[1].value);
str.append("| "+QString::number(fd2->rssiAlarms[1].value,10)+" | ");
str.append(" ");
-
+#if 0
if (GetEepromInterface()->getCapability(TelemetryBars) || GetEepromInterface()->getCapability(TelemetryCSFields)) {
int cols=GetEepromInterface()->getCapability(TelemetryColsCSFields);
if (cols==0) cols=2;
@@ -1429,13 +1371,13 @@ void compareDialog::printFrSky()
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor2(fd1->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].source);
str.append(" | "+getFrSkySrc(fd2->screens[0].body.bars[i].source)+" | ");
- value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1);
- value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2);
+ // TODO value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1);
+ // TODO value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2);
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor2(value1,value2);
str.append(""+QString::number(value2)+" | ");
- value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1);
- value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2);
+ // TODO value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1);
+ // TODO value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2);
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor2(value1,value2);
str.append(""+QString::number(value2)+" | ");
@@ -1444,6 +1386,7 @@ void compareDialog::printFrSky()
}
}
}
+#endif
str.append(" ");
te->append(str);
}
diff --git a/companion/src/comparedialog.ui b/companion/src/comparedialog.ui
index 456d1db87..4a26482b0 100644
--- a/companion/src/comparedialog.ui
+++ b/companion/src/comparedialog.ui
@@ -26,11 +26,7 @@
false
- Dialog
-
-
-
- :/images/print.png:/images/print.png
+ Compare Models
-
@@ -129,7 +125,7 @@
-
+
diff --git a/companion/src/contributorsdialog.cpp b/companion/src/contributorsdialog.cpp
index d60a682db..8aefa222b 100644
--- a/companion/src/contributorsdialog.cpp
+++ b/companion/src/contributorsdialog.cpp
@@ -1,7 +1,7 @@
#include "contributorsdialog.h"
#include "ui_contributorsdialog.h"
#include
-#define CLINESEP "=====================================================\n"
+#include "helpers.h"
contributorsDialog::contributorsDialog(QWidget *parent, int contest, QString rnurl) :
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
@@ -9,44 +9,92 @@ contributorsDialog::contributorsDialog(QWidget *parent, int contest, QString rnu
{
ui->setupUi(this);
switch (contest) {
- case 0: {
- ui->textBrowser->insertPlainText(CLINESEP);
- ui->textBrowser->insertPlainText(tr("People who have contributed to this project")+"\n");
- ui->textBrowser->insertPlainText(CLINESEP);
- QFile file(":/contributors");
- if(file.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
- ui->textBrowser->insertPlainText(file.readAll());
+ case 0:
+ {
+ this->setWindowIcon(CompanionIcon("contributors.png"));
+ QFile file(":/DONATIONS.txt");
+ QString str;
+ str.append("");
+ str.append("\n");
+ str.append("| "+tr("People who have contributed to this project")+" | ");
+ str.append(" ");
+ str.append("");
+ if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ int columns=6;
+ float cwidth=100.0/columns;
+ while (!file.atEnd()) {
+ str.append("");
+ for (int i=0; i");
+ } else {
+ str.append("class=\"mycss\">");
+ }
+ str.append(line.trimmed()+"");
+ } else {
+ str.append("class=\"mycss\"> ");
+ }
+ }
+ str.append(" ");
+ }
}
- ui->textBrowser->insertPlainText("\n");
- ui->textBrowser->insertPlainText(CLINESEP);
- ui->textBrowser->insertPlainText(tr("Coders")+"\n");
- ui->textBrowser->insertPlainText(CLINESEP);
- QFile file2(":/coders");
+ str.append(" ");
+ QFile file2(":/CREDITS.txt");
+ str.append("");
+ str.append("| | ");
+ str.append("| "+tr("Coders")+" | ");
+ str.append(" ");
+ str.append("");
if(file2.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
- ui->textBrowser->insertPlainText(file2.readAll());
- }
- ui->textBrowser->insertPlainText("\n\n\n");
- ui->textBrowser->insertPlainText(tr("Honors go to Rafal Tomczak (RadioClone) and Thomas Husterer (th9x) \nof course. Also to Erez Raviv (er9x) and it's fantastic eePe, from which\ncompanion9x was forked out."));
- ui->textBrowser->insertPlainText("\n\n");
- ui->textBrowser->insertPlainText(tr("Thank you all !!!"));
- ui->textBrowser->setReadOnly(true);
- ui->textBrowser->verticalScrollBar()->setValue(0);
- this->setWindowTitle(tr("Contributors"));
+ while (!file2.atEnd()) {
+ str.append("");
+ for (int i=0; i<3; i++) {
+ str.append("| ");
+ if (!file2.atEnd()) {
+ QByteArray line = file2.readLine();
+ str.append(line.trimmed());
+ } else {
+ str.append(" ");
+ }
+ str.append(" | ");
+ }
+ str.append(" ");
+ }
}
+ str.append("| | ");
+ str.append("" + tr("Honors go to Rafal Tomczak (RadioClone), Thomas Husterer (th9x) and Erez Raviv (er9x and eePe)") + "
| ");
+ str.append("| " + tr("Thank you all !!!") + " | ");
+ str.append(" ");
+ str.append("");
+ ui->textEditor->setHtml(str);
+ ui->textEditor->scroll(0, 0);
+ setWindowTitle(tr("Contributors"));
break;
+ }
- case 1:{
- QFile file(":/releasenotes");
+ case 1:
+ {
+ this->setWindowIcon(CompanionIcon("changelog.png"));
+ QFile file(":/releasenotes.txt");
if(file.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
- ui->textBrowser->insertHtml(file.readAll());
- }
- ui->textBrowser->setReadOnly(true);
- ui->textBrowser->verticalScrollBar()->setValue(0);
- this->setWindowTitle(tr("Companion9x Release Notes"));
+ ui->textEditor->setHtml(file.readAll());
}
+ ui->textEditor->scroll(0,0);
+ setWindowTitle(tr("Companion Release Notes"));
break;
- case 2:{
+ }
+
+ case 2:
+ {
if (!rnurl.isEmpty()) {
+ this->setWindowIcon(CompanionIcon("changelog.png"));
this->setWindowTitle(tr("OpenTX Release Notes"));
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
@@ -54,7 +102,8 @@ contributorsDialog::contributorsDialog(QWidget *parent, int contest, QString rnu
QNetworkRequest request(url);
request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork);
manager->get(request);
- } else {
+ }
+ else {
QTimer::singleShot(0, this, SLOT(forceClose()));
}
break;
@@ -64,7 +113,7 @@ contributorsDialog::contributorsDialog(QWidget *parent, int contest, QString rnu
void contributorsDialog::showEvent ( QShowEvent * )
{
- ui->textBrowser->verticalScrollBar()->setValue(0);
+ ui->textEditor->scroll(0, 0);
}
contributorsDialog::~contributorsDialog()
@@ -74,9 +123,10 @@ contributorsDialog::~contributorsDialog()
void contributorsDialog::replyFinished(QNetworkReply * reply)
{
- ui->textBrowser->insertHtml(reply->readAll());
+ ui->textEditor->setHtml(reply->readAll());
}
-void contributorsDialog::forceClose() {
+void contributorsDialog::forceClose()
+{
accept();;
}
diff --git a/companion/src/contributorsdialog.ui b/companion/src/contributorsdialog.ui
index 1c09ba66d..5d7d670c1 100644
--- a/companion/src/contributorsdialog.ui
+++ b/companion/src/contributorsdialog.ui
@@ -6,25 +6,21 @@
0
0
- 926
- 333
+ 788
+ 528
Dialog
-
-
- :/icon.png:/icon.png
-
-
-
+
-
+
diff --git a/companion/src/customizesplashdialog.cpp b/companion/src/customizesplashdialog.cpp
index 2358e1c7a..3e9ed21c9 100644
--- a/companion/src/customizesplashdialog.cpp
+++ b/companion/src/customizesplashdialog.cpp
@@ -2,186 +2,268 @@
#include "ui_customizesplashdialog.h"
#include
+#include "appdata.h"
#include "helpers.h"
#include "burndialog.h"
#include "splashlibrary.h"
#include "flashinterface.h"
-customizeSplashDialog::customizeSplashDialog(QWidget *parent) :
-QDialog(parent),
-ui(new Ui::customizeSplashDialog) {
- ui->setupUi(this);
- ui->HowToLabel->clear();
- ui->HowToLabel->append("" + tr("Select an original firmware file") + "");
+//*** Side Class ***
+
+Side::Side(){
+ imageLabel = 0;
+ fileNameEdit = 0;
+ saveButton = 0;
+ loadFwButton=0;
+ loadPictButton = 0;
+ loadProfileButton = 0;
+ saveToFileName = new QString("");
+ source = new Source(UNDEFINED);
+ format = new LCDFormat(LCDTARANIS);
}
-customizeSplashDialog::~customizeSplashDialog() {
+void Side::markSourceButton()
+{
+ loadFwButton->setChecked(*source == FW ? true : false );
+ loadPictButton->setChecked(*source == PICT ? true : false );
+ loadProfileButton->setChecked(*source == PROFILE ? true : false );
+}
+
+void Side::copyImage( Side side )
+{
+ if ((*source!=UNDEFINED) && (*side.source!=UNDEFINED))
+ imageLabel->setPixmap(*side.imageLabel->pixmap());
+}
+
+bool Side::displayImage( QString fileName, Source pictSource )
+{
+ QImage image;
+
+ if (fileName.isEmpty())
+ return false;
+
+ // Determine which picture format to use
+ if (pictSource == FW ){
+ FlashInterface flash(fileName);
+ if (!flash.hasSplash())
+ return false;
+ else
+ image = flash.getSplash();
+ *format = (flash.getSplashWidth()==WIDTH_TARANIS ? LCDTARANIS : LCD9X);
+ }
+ else {
+ image.load(fileName);
+ if (pictSource== PICT)
+ *format = image.width()>WIDTH_9X ? LCDTARANIS : LCD9X;
+ else if (pictSource == PROFILE)
+ *format = (g.profile[g.id()].fwType().contains("taranis")) ? LCDTARANIS : LCD9X;
+ }
+ if (image.isNull()) {
+ return false;
+ }
+ // Load image
+ if (*format==LCDTARANIS) {
+ imageLabel->setPixmap( makePixMap( image, "taranis" ));
+ imageLabel->setFixedSize(WIDTH_TARANIS*2, HEIGHT_TARANIS*2);
+ }
+ else {
+ imageLabel->setPixmap( makePixMap( image, "9x" ));
+ imageLabel->setFixedSize(WIDTH_9X*2, HEIGHT_9X*2);
+ }
+
+ switch (pictSource){
+ case FW:
+ fileNameEdit->setText(QObject::tr("FW: %1").arg(fileName));
+ *saveToFileName = fileName;
+ *source=FW;
+ break;
+ case PICT:
+ fileNameEdit->setText(QObject::tr("Pict: %1").arg(fileName));
+ *saveToFileName = fileName;
+ *source=PICT;
+ break;
+ case PROFILE:
+ fileNameEdit->setText(QObject::tr("Profile image"));
+ *saveToFileName = fileName;
+ *source=PROFILE;
+ break;
+ default:
+ break;
+ }
+ saveButton->setEnabled(true);
+ libraryButton->setEnabled(true);
+ invertButton->setEnabled(true);
+ return true;
+}
+
+bool Side::refreshImage()
+{
+ return displayImage( *saveToFileName, *source );
+}
+
+bool Side::saveImage()
+{
+ if (*source == FW )
+ {
+ FlashInterface flash(*saveToFileName);
+ if (!flash.hasSplash()) {
+ return false;
+ }
+ QImage image = imageLabel->pixmap()->toImage().scaled(flash.getSplashWidth(), flash.getSplashHeight());
+ if (flash.setSplash(image) && (flash.saveFlash(*saveToFileName) > 0)) {
+ g.flashDir( QFileInfo(*saveToFileName).dir().absolutePath() );
+ }
+ else {
+ return false;
+ }
+ }
+ else if (*source == PICT) {
+ QImage image = imageLabel->pixmap()->toImage().scaled(imageLabel->width()/2, imageLabel->height()/2).convertToFormat(QImage::Format_Indexed8);
+ if (image.save(*saveToFileName)) {
+ g.imagesDir( QFileInfo(*saveToFileName).dir().absolutePath() );
+ }
+ else {
+ return false;
+ }
+ }
+ else if (*source == PROFILE) {
+ QImage image = imageLabel->pixmap()->toImage().scaled(imageLabel->width()/2, imageLabel->height()/2).convertToFormat(QImage::Format_Indexed8);
+ if (!image.save(*saveToFileName)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+//*** customizeSplashDialog Class ***
+
+customizeSplashDialog::customizeSplashDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::customizeSplashDialog)
+{
+ ui->setupUi(this);
+ setWindowIcon(CompanionIcon("paintbrush.png"));
+ ui->leftLibraryButton->setIcon(CompanionIcon("library.png"));
+ ui->rightLibraryButton->setIcon(CompanionIcon("library.png"));
+
+ left.imageLabel = ui->leftImageLabel;
+ right.imageLabel = ui->rightImageLabel;
+ left.fileNameEdit = ui->leftFileNameEdit;
+ right.fileNameEdit = ui->rightFileNameEdit;
+ left.saveButton = ui->leftSaveButton;
+ right.saveButton = ui->rightSaveButton;
+ left.libraryButton = ui->leftLibraryButton;
+ right.libraryButton = ui->rightLibraryButton;
+ left.invertButton = ui->leftInvertButton;
+ right.invertButton = ui->rightInvertButton;
+
+ left.loadFwButton = ui->leftLoadFwButton;
+ right.loadFwButton = ui->rightLoadFwButton;
+ left.loadPictButton = ui->leftLoadPictButton;
+ right.loadPictButton = ui->rightLoadPictButton;
+ left.loadProfileButton = ui->leftLoadProfileButton;
+ right.loadProfileButton = ui->rightLoadProfileButton;
+
+ loadProfile(left);
+ left.markSourceButton();
+
+ resize(0,0);
+}
+
+customizeSplashDialog::~customizeSplashDialog()
+{
delete ui;
}
-void customizeSplashDialog::on_FlashLoadButton_clicked()
-{
- QString fileName;
- QSettings settings("companion9x", "companion9x");
- ui->ImageLoadButton->setDisabled(true);
- ui->libraryButton->setDisabled(true);
- ui->SaveFlashButton->setDisabled(true);
- ui->SaveImageButton->setDisabled(true);
- ui->ImageFileName->clear();
- ui->imageLabel->clear();
- ui->HowToLabel->clear();
- ui->HowToLabel->setStyleSheet("background:rgb(255, 255, 0)");
- fileName = QFileDialog::getOpenFileName(this, tr("Open"), settings.value("lastFlashDir").toString(), FLASH_FILES_FILTER);
- QFile file(fileName);
- if (!file.exists()) {
- ui->FWFileName->clear();
- ui->HowToLabel->append("" + tr("Select an original firmware file") + "");
- return;
- }
- if (fileName.isEmpty()) {
- ui->FWFileName->clear();
- ui->HowToLabel->append("" + tr("Select an original firmware file") + "");
- return;
- }
-
- ui->FWFileName->setText(fileName);
- FlashInterface flash(fileName);
- if (flash.hasSplash()) {
- ui->HowToLabel->append("" + tr("Select an image to customize your splash or save actual firmware splash") + "");
- ui->ImageLoadButton->setEnabled(true);
- ui->libraryButton->setEnabled(true);
- ui->SaveImageButton->setEnabled(true);
- ui->imageLabel->setPixmap(QPixmap::fromImage(flash.getSplash()));
- ui->imageLabel->setFixedSize(flash.getSplashWidth()*2,flash.getSplashHeight()*2);
- } else {
- QMessageBox::information(this, tr("Error"), tr("Could not find bitmap to replace in file"));
- return;
- }
- settings.setValue("lastFlashDir", QFileInfo(fileName).dir().absolutePath());
+void customizeSplashDialog::on_copyRightToLeftButton_clicked() {
+ left.copyImage(right);
+}
+void customizeSplashDialog::on_copyLeftToRightButton_clicked() {
+right.copyImage(left);
}
-void customizeSplashDialog::on_ImageLoadButton_clicked() {
+
+void customizeSplashDialog::on_leftLoadFwButton_clicked() {loadFirmware(left);}
+void customizeSplashDialog::on_rightLoadFwButton_clicked() {loadFirmware(right);}
+void customizeSplashDialog::loadFirmware(Side side)
+{
+ QString fileName = QFileDialog::getOpenFileName(this, tr("Open Firmware File"), g.flashDir(), FLASH_FILES_FILTER);
+ if (!fileName.isEmpty()) {
+ if (!side.displayImage( fileName, FW ))
+ QMessageBox::critical(this, tr("Error"), tr("Can not load embedded image from firmware file %1.").arg(fileName));
+ else
+ g.flashDir( QFileInfo(fileName).dir().absolutePath() );
+ }
+ side.markSourceButton();
+}
+
+void customizeSplashDialog::on_leftLoadPictButton_clicked() {loadPicture(left);}
+void customizeSplashDialog::on_rightLoadPictButton_clicked() {loadPicture(right);}
+void customizeSplashDialog::loadPicture(Side side)
+{
QString supportedImageFormats;
for (int formatIndex = 0; formatIndex < QImageReader::supportedImageFormats().count(); formatIndex++) {
supportedImageFormats += QLatin1String(" *.") + QImageReader::supportedImageFormats()[formatIndex];
}
-
- QSettings settings("companion9x", "companion9x");
QString fileName = QFileDialog::getOpenFileName(this,
- tr("Open Image to load"), settings.value("lastImagesDir").toString(), tr("Images (%1)").arg(supportedImageFormats));
+ tr("Open Image to load"), g.imagesDir(), tr("Images (%1)").arg(supportedImageFormats));
if (!fileName.isEmpty()) {
- settings.setValue("lastImagesDir", QFileInfo(fileName).dir().absolutePath());
- QImage image(fileName);
- if (image.isNull()) {
- QMessageBox::critical(this, tr("Error"), tr("Cannot load %1.").arg(fileName));
- return;
- }
- ui->HowToLabel->clear();
- ui->ImageFileName->setText(fileName);
- if (ui->imageLabel->width()==424) {
- image=image.convertToFormat(QImage::Format_RGB32);
- QRgb col;
- int gray;
- int width = image.width();
- int height = image.height();
- for (int i = 0; i < width; ++i)
- {
- for (int j = 0; j < height; ++j)
- {
- col = image.pixel(i, j);
- gray = qGray(col);
- image.setPixel(i, j, qRgb(gray, gray, gray));
- }
- }
- ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width()/2, ui->imageLabel->height()/2)));
- } else {
- ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width()/2, ui->imageLabel->height()/2).convertToFormat(QImage::Format_Mono)));
- }
- ui->SaveFlashButton->setEnabled(true);
- ui->HowToLabel->append("" + tr("Save your custimized firmware") + "");
+ if (!side.displayImage( fileName, PICT ))
+ QMessageBox::critical(this, tr("Error"), tr("Cannot load the image file %1.").arg(fileName));
+ else
+ g.imagesDir( QFileInfo(fileName).dir().absolutePath() );
}
+ side.markSourceButton();
}
-void customizeSplashDialog::on_libraryButton_clicked() {
+void customizeSplashDialog::on_leftLoadProfileButton_clicked() {loadProfile(left);}
+void customizeSplashDialog::on_rightLoadProfileButton_clicked() {loadProfile(right);}
+void customizeSplashDialog::loadProfile(Side side)
+{
+ QString fileName=g.profile[g.id()].splashFile();
+
+ if (!fileName.isEmpty()) {
+ if (!side.displayImage( fileName, PROFILE ))
+ QMessageBox::critical(this, tr("Error"), tr("Cannot load the profile image %1.").arg(fileName));
+ }
+ side.markSourceButton();
+}
+
+void customizeSplashDialog::on_leftLibraryButton_clicked(){libraryButton_clicked(left);}
+void customizeSplashDialog::on_rightLibraryButton_clicked(){libraryButton_clicked(right);}
+void customizeSplashDialog::libraryButton_clicked( Side side )
+{
QString fileName;
-
splashLibrary *ld = new splashLibrary(this,&fileName);
ld->exec();
if (!fileName.isEmpty()) {
- QImage image(fileName);
- if (image.isNull()) {
- QMessageBox::critical(this, tr("Error"), tr("Cannot load %1.").arg(fileName));
- return;
- }
- ui->HowToLabel->clear();
- ui->ImageFileName->setText(fileName);
- if (ui->imageLabel->width()==424) {
- image=image.convertToFormat(QImage::Format_RGB32);
- QRgb col;
- int gray;
- int width = image.width();
- int height = image.height();
- for (int i = 0; i < width; ++i)
- {
- for (int j = 0; j < height; ++j)
- {
- col = image.pixel(i, j);
- gray = qGray(col);
- image.setPixel(i, j, qRgb(gray, gray, gray));
- }
- }
- ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width()/2, ui->imageLabel->height()/2)));
- } else {
- ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width()/2, ui->imageLabel->height()/2).convertToFormat(QImage::Format_Mono)));
- }
- ui->SaveFlashButton->setEnabled(true);
- ui->HowToLabel->append("" + tr("Save your custimized firmware") + "");
+ if (!side.displayImage( fileName, UNDEFINED ))
+ QMessageBox::critical(this, tr("Error"), tr("Cannot load the library image %1.").arg(fileName));
}
}
-void customizeSplashDialog::on_SaveFlashButton_clicked()
+void customizeSplashDialog::on_leftSaveButton_clicked(){saveButton_clicked(left);}
+void customizeSplashDialog::on_rightSaveButton_clicked(){saveButton_clicked(right);}
+void customizeSplashDialog::saveButton_clicked( Side side )
{
- QString fileName;
- QSettings settings("companion9x", "companion9x");
- ui->HowToLabel->clear();
- fileName = QFileDialog::getSaveFileName(this, tr("Write to file"), settings.value("lastFlashDir").toString(), FLASH_FILES_FILTER, 0, QFileDialog::DontConfirmOverwrite);
- if (fileName.isEmpty()) {
- return;
- }
- FlashInterface flash(ui->FWFileName->text());
- if (!flash.hasSplash()) {
- QMessageBox::critical(this, tr("Error"), tr("Error reading file %1").arg(fileName));
- return;
- }
- settings.setValue("lastFlashDir", QFileInfo(fileName).dir().absolutePath());
- QImage image = ui->imageLabel->pixmap()->toImage().scaled(flash.getSplashWidth(), flash.getSplashHeight());
- flash.setSplash(image);
- if (flash.saveFlash(fileName) > 0) {
- ui->HowToLabel->setStyleSheet("background:rgb(0,255.0);");
- ui->HowToLabel->append("" + tr("Firmware correctly saved.") + "");
- } else {
- ui->HowToLabel->setStyleSheet("background:rgb(255.0.0);");
- ui->HowToLabel->append("" + tr("Firmware not saved.") + "");
+ if (side.saveImage()){
+ QMessageBox::information(this, tr("File Saved"), tr("The image was saved to the file %1").arg(*side.saveToFileName));
+ if ( !side.refreshImage()){
+ QMessageBox::critical(this, tr("Image Refresh Error"), tr("Failed to refresh image from file %1").arg(*side.saveToFileName));
+ }
}
+ else
+ QMessageBox::critical(this, tr("File Save Error"), tr("Failed to write image to %1").arg(*side.saveToFileName));
}
-void customizeSplashDialog::on_InvertColorButton_clicked()
+void customizeSplashDialog::on_leftInvertButton_clicked(){invertButton_clicked(left);}
+void customizeSplashDialog::on_rightInvertButton_clicked(){invertButton_clicked(right);}
+void customizeSplashDialog::invertButton_clicked(Side side)
{
- QImage image = ui->imageLabel->pixmap()->toImage();
+ QImage image = side.imageLabel->pixmap()->toImage();
image.invertPixels();
- ui->imageLabel->setPixmap(QPixmap::fromImage(image));
+ side.imageLabel->setPixmap(QPixmap::fromImage(image));
}
-void customizeSplashDialog::on_SaveImageButton_clicked()
-{
- QString fileName;
- QSettings settings("companion9x", "companion9x");
- fileName = QFileDialog::getSaveFileName(this, tr("Write to file"), settings.value("lastImagesDir").toString(), tr("PNG images (*.png);;"), 0, QFileDialog::DontConfirmOverwrite);
- if (!fileName.isEmpty()) {
- settings.setValue("lastImagesDir", QFileInfo(fileName).dir().absolutePath());
- QImage image = ui->imageLabel->pixmap()->toImage().scaled(ui->imageLabel->width()/2, ui->imageLabel->height()/2).convertToFormat(QImage::Format_Indexed8);
- image.save(fileName, "PNG");
- }
-}
diff --git a/companion/src/customizesplashdialog.h b/companion/src/customizesplashdialog.h
index f5a7acd6d..c931005b2 100644
--- a/companion/src/customizesplashdialog.h
+++ b/companion/src/customizesplashdialog.h
@@ -10,24 +10,78 @@ namespace Ui
class customizeSplashDialog;
}
+const int WIDTH_TARANIS = 212;
+const int HEIGHT_TARANIS = 64;
+const int WIDTH_9X = 128;
+const int HEIGHT_9X = 64;
+
+enum Source {FW, PICT, PROFILE, UNDEFINED};
+enum LCDFormat {LCD9X, LCDTARANIS};
+
+class Side
+{
+public:
+ Side();
+ void markSourceButton();
+ void copyImage( Side );
+ bool displayImage( QString fileName, Source source );
+ bool saveImage();
+ bool refreshImage();
+
+ QLabel *imageLabel;
+ QLineEdit *fileNameEdit;
+ QPushButton *saveButton;
+ QPushButton *invertButton;
+ QToolButton *libraryButton;
+ QPushButton *loadFwButton;
+ QPushButton *loadPictButton;
+ QPushButton *loadProfileButton;
+
+ QString *saveToFileName;
+
+private:
+ Source *source;
+ LCDFormat *format;
+};
+
class customizeSplashDialog : public QDialog
{
Q_OBJECT
+ Side left;
+ Side right;
public:
explicit customizeSplashDialog(QWidget *parent = 0);
~customizeSplashDialog();
private slots:
- void on_FlashLoadButton_clicked();
- void on_ImageLoadButton_clicked();
- void on_libraryButton_clicked();
- void on_SaveFlashButton_clicked();
- void on_InvertColorButton_clicked();
- void on_SaveImageButton_clicked();
+ void on_leftLoadFwButton_clicked();
+ void on_leftLoadPictButton_clicked();
+ void on_leftLoadProfileButton_clicked();
+ void on_leftLibraryButton_clicked();
+ void on_leftSaveButton_clicked();
+ void on_leftInvertButton_clicked();
+
+ void on_rightLoadFwButton_clicked();
+ void on_rightLoadPictButton_clicked();
+ void on_rightLoadProfileButton_clicked();
+ void on_rightLibraryButton_clicked();
+ void on_rightSaveButton_clicked();
+ void on_rightInvertButton_clicked();
+
+ void on_copyRightToLeftButton_clicked();
+ void on_copyLeftToRightButton_clicked();
private:
+ void loadFirmware( Side );
+ void loadPicture( Side );
+ void loadProfile( Side );
+ void libraryButton_clicked( Side );
+ void saveButton_clicked( Side );
+ void invertButton_clicked( Side );
+
Ui::customizeSplashDialog *ui;
+ enum sideEnum { LEFT, RIGHT };
};
#endif // CUSTOMIZESPLASHDIALOG_H
diff --git a/companion/src/customizesplashdialog.ui b/companion/src/customizesplashdialog.ui
index 69762f1ba..9a6971893 100644
--- a/companion/src/customizesplashdialog.ui
+++ b/companion/src/customizesplashdialog.ui
@@ -2,88 +2,519 @@
customizeSplashDialog
+
+ true
+
0
0
- 366
- 303
+ 1087
+ 298
-
+
0
0
- Customize Splash
+ Transmitter Splash Screen Editor
-
-
- :/images/c_home.png:/images/c_home.png
-
-
- -
-
+
+
+ 6
+
+
+ 3
+
+
+ 0
+
+
+ 3
+
+
+ 3
+
+
-
+
+
+ 0
+
-
-
+
- Qt::Horizontal
+ Qt::Vertical
-
-
- 40
- 20
-
-
-
+
-
-
+
-
-
-
-
- 0
- 0
-
-
-
-
- 256
- 128
-
-
-
-
- 424
- 128
-
-
-
- QFrame::Panel
-
-
- QFrame::Raised
-
-
-
-
-
- :/images/customize.png
-
-
- true
+
+
+ Qt::Horizontal
-
-
+
+
+ 6
+
-
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ true
+
+
+
+ 424
+ 0
+
+
+
+
+ 426
+ 16777215
+
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ 6
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 424
+ 128
+
+
+
+
+ 424
+ 128
+
+
+
+ QFrame::Panel
+
+
+ QFrame::Plain
+
+
+ 0
+
- Save Image
+
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
-
+
+
+ false
+
+
+ Invert
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ false
+
+
+ Open Splash Library
+
+
+ ...
+
+
+
+ 24
+ 24
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
-
+
+
+ true
+
+
+ Load Profile
+
+
+ true
+
+
+
+ -
+
+
+ Load FW
+
+
+ true
+
+
+
+ -
+
+
+ Load Pict
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ false
+
+
+ Save
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
-
+
+
+ ...
+
+
+ Qt::LeftArrow
+
+
+
+ -
+
+
+ ...
+
+
+ Qt::RightArrow
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ 6
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ true
+
+
+
+ 426
+ 0
+
+
+
+
+ 424
+ 16777215
+
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ 6
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 424
+ 128
+
+
+
+
+ 424
+ 128
+
+
+
+ QFrame::Panel
+
+
+ QFrame::Plain
+
+
+ 0
+
+
+
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
-
+
+
+ false
+
+
+ Invert
@@ -101,170 +532,136 @@
-
-
+
+
+ false
+
+
+ Open Splash Library
+
- Invert Color
+ ...
+
+
+
+ 24
+ 24
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
-
+
+
+ true
+
+
+ Load Profile
+
+
+ true
+
+
+
+ -
+
+
+ true
+
+
+ Load FW
+
+
+ true
+
+
+
+ -
+
+
+ Load Pict
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ false
+
+
+ Save
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
-
-
+
- Qt::Horizontal
-
-
-
- 50
- 20
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 16777215
- 40
-
-
-
- background:rgb(255, 255, 0);
-
-
- Qt::ScrollBarAlwaysOff
-
-
- Qt::ScrollBarAlwaysOff
-
-
- true
-
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
-<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html>
-
-
- true
-
-
-
- -
-
-
-
-
-
- true
-
-
- true
-
-
-
- -
-
-
- Load Firmware
-
-
-
- -
-
-
- true
-
-
- true
-
-
-
- -
-
-
- false
-
-
- Load Image
-
-
-
- -
-
-
- Open Splash Library
-
-
- ...
-
-
-
- :/images/library.png:/images/library.png
-
-
-
- 16
- 16
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 208
- 20
-
-
-
-
- -
-
-
- false
-
-
- Save Firmware
+ Qt::Vertical
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 1
-
-
-
-
+
+ leftFileNameEdit
+ leftInvertButton
+ leftLibraryButton
+ leftLoadProfileButton
+ leftLoadFwButton
+ leftLoadPictButton
+ leftSaveButton
+ copyLeftToRightButton
+ copyRightToLeftButton
+ rightFileNameEdit
+ rightInvertButton
+ rightLibraryButton
+ rightLoadProfileButton
+ rightLoadFwButton
+ rightLoadPictButton
+ rightSaveButton
+
-
+
diff --git a/companion/src/downloaddialog.cpp b/companion/src/downloaddialog.cpp
index 83da451bd..aa7ea6ef3 100644
--- a/companion/src/downloaddialog.cpp
+++ b/companion/src/downloaddialog.cpp
@@ -2,13 +2,15 @@
#include "ui_downloaddialog.h"
#include
#include
+#include
+#include "helpers.h"
downloadDialog::downloadDialog(QWidget *parent, QString src, QString tgt) :
QDialog(parent),
ui(new Ui::downloadDialog)
{
ui->setupUi(this);
-
+ this->setWindowIcon(CompanionIcon("fwpreferences.png"));
ui->progressBar->setValue(1);
ui->progressBar->setMinimum(0);
ui->progressBar->setMaximum(0);
@@ -21,7 +23,7 @@ downloadDialog::downloadDialog(QWidget *parent, QString src, QString tgt) :
file = new QFile(tgt);
if (!file->open(QIODevice::WriteOnly)) {
- QMessageBox::critical(this, "companion9x",
+ QMessageBox::critical(this, "Companion",
tr("Unable to save the file %1: %2.")
.arg(tgt).arg(file->errorString()));
QTimer::singleShot(0, this, SLOT(fileError()));
@@ -51,7 +53,7 @@ void downloadDialog::httpFinished()
if (reply->error())
{
file->remove();
- QMessageBox::information(this, tr("companion9x"),
+ QMessageBox::information(this, tr("Companion"),
tr("Download failed: %1.")
.arg(reply->errorString()));
ok = false;
@@ -86,3 +88,14 @@ void downloadDialog::fileError()
file = 0;
reject();
}
+
+void downloadDialog::closeEvent( QCloseEvent * event)
+{
+ // Delay closing 2 seconds to avoid unpleasant flashing download dialogs
+ QTime closeTime= QTime::currentTime().addSecs(2);
+ while( QTime::currentTime() < closeTime )
+ QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
+
+ event->accept();
+}
+
diff --git a/companion/src/downloaddialog.h b/companion/src/downloaddialog.h
index 596002250..9730e3134 100644
--- a/companion/src/downloaddialog.h
+++ b/companion/src/downloaddialog.h
@@ -27,6 +27,7 @@ private slots:
void updateDataReadProgress(qint64 bytesRead, qint64 totalBytes);
private:
+ void closeEvent( QCloseEvent * event);
Ui::downloadDialog *ui;
QNetworkAccessManager qnam;
diff --git a/companion/src/downloaddialog.ui b/companion/src/downloaddialog.ui
index 9f5681542..f51dfd085 100644
--- a/companion/src/downloaddialog.ui
+++ b/companion/src/downloaddialog.ui
@@ -13,10 +13,6 @@
Downloading:
-
-
- :/icon.png:/icon.png
-
-
@@ -51,7 +47,7 @@
-
+
diff --git a/companion/src/eepromimportexport.h b/companion/src/eepromimportexport.h
index 370287851..0d7ea49ec 100644
--- a/companion/src/eepromimportexport.h
+++ b/companion/src/eepromimportexport.h
@@ -74,7 +74,10 @@ class DataField {
QByteArray bytes = bitsToBytes(bits);
int result = (offset+bits.count()) % 8;
for (int i=0; i
class UnsignedField: public DataField {
public:
@@ -270,9 +284,10 @@ class SpareBitsField: public UnsignedField {
template
class CharField: public DataField {
public:
- CharField(char *field):
+ CharField(char *field, bool truncate=true):
DataField("Char"),
- field(field)
+ field(field),
+ truncate(truncate)
{
}
@@ -280,7 +295,7 @@ class CharField: public DataField {
{
output.resize(N*8);
int b = 0;
- int len = strlen(field);
+ int len = truncate ? strlen(field) : N;
for (int i=0; i=len ? 0 : field[i]);
for (int j=0; j<8; j++, b++) {
@@ -310,6 +325,7 @@ class CharField: public DataField {
protected:
char * field;
+ bool truncate;
};
int8_t char2idx(char c);
@@ -422,7 +438,7 @@ class StructField: public DataField {
virtual int Dump(int level=0, int offset=0)
{
for (int i=0; iDump(level+1, offset);
}
@@ -547,6 +563,7 @@ class ConversionField: public TransformedField {
_field(0),
table(table),
shift(0),
+ scale(1),
min(INT_MIN),
max(INT_MAX),
exportFunc(NULL),
@@ -562,6 +579,7 @@ class ConversionField: public TransformedField {
_field(0),
table(table),
shift(0),
+ scale(0),
min(INT_MIN),
max(INT_MAX),
exportFunc(NULL),
@@ -577,6 +595,7 @@ class ConversionField: public TransformedField {
_field(0),
table(NULL),
shift(0),
+ scale(0),
min(INT_MIN),
max(INT_MAX),
exportFunc(exportFunc),
@@ -585,13 +604,14 @@ class ConversionField: public TransformedField {
{
}
- ConversionField(int & field, int shift, int min=INT_MIN, int max=INT_MAX, const char *name = "Signed shifted"):
+ ConversionField(int & field, int shift, int scale=0, int min=INT_MIN, int max=INT_MAX, const char *name = "Signed shifted"):
TransformedField(internalField),
internalField(_field, name),
field(field),
_field(0),
table(NULL),
shift(shift),
+ scale(scale),
min(min),
max(max),
exportFunc(NULL),
@@ -600,13 +620,14 @@ class ConversionField: public TransformedField {
{
}
- ConversionField(unsigned int & field, int shift):
+ ConversionField(unsigned int & field, int shift, int scale=0):
TransformedField(internalField),
internalField((unsigned int &)_field),
field((int &)field),
_field(0),
table(NULL),
shift(shift),
+ scale(scale),
min(INT_MIN),
max(INT_MAX),
exportFunc(NULL),
@@ -617,33 +638,49 @@ class ConversionField: public TransformedField {
virtual void beforeExport()
{
+ _field = field;
+
+ if (scale) {
+ _field /= scale;
+ }
+
if (table) {
- if (table->exportValue(field, _field))
+ if (table->exportValue(_field, _field))
return;
if (!error.isEmpty())
EEPROMWarnings += error + "\n";
}
- else if (shift) {
- if (field < min) _field = min + shift;
- else if (field > max) _field = max + shift;
- else _field = field + shift;
+
+ if (shift) {
+ if (_field < min) _field = min + shift;
+ else if (_field > max) _field = max + shift;
+ else _field += shift;
}
- else {
- _field = exportFunc(field);
+
+ if (exportFunc) {
+ _field = exportFunc(_field);
}
}
virtual void afterImport()
{
+ field = _field;
+
if (table) {
- if (table->importValue(_field, field))
+ if (table->importValue(field, field))
return;
}
- else if (shift) {
- field = _field - shift;
+
+ if (shift) {
+ field -= shift;
}
- else {
- field = importFunc(_field);
+
+ if (importFunc) {
+ field = importFunc(field);
+ }
+
+ if (scale) {
+ field *= scale;
}
}
@@ -653,6 +690,7 @@ class ConversionField: public TransformedField {
int _field;
ConversionTable * table;
int shift;
+ int scale;
int min;
int max;
int (*exportFunc)(int);
diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp
index 497149ca2..eb231f563 100644
--- a/companion/src/eeprominterface.cpp
+++ b/companion/src/eeprominterface.cpp
@@ -4,12 +4,24 @@
#include "firmwares/er9x/er9xinterface.h"
#include "firmwares/th9x/th9xinterface.h"
#include "firmwares/gruvin9x/gruvin9xinterface.h"
-#include "firmwares/opentx/open9xinterface.h"
+#include "firmwares/opentx/opentxinterface.h"
#include "firmwares/ersky9x/ersky9xinterface.h"
-#include "qsettings.h"
+#include "appdata.h"
+#include "helpers.h"
+#include "wizarddata.h"
QString EEPROMWarnings;
+const char * switches9X[] = { "3POS", "THR", "RUD", "ELE", "AIL", "GEA", "TRN" };
+const char * switchesX9D[] = { "SA", "SB", "SC", "SD", "SE", "SF", "SG", "SH" };
+
+const uint8_t chout_ar[] = { // First number is 0..23 -> template setup, Second is relevant channel out
+ 1,2,3,4 , 1,2,4,3 , 1,3,2,4 , 1,3,4,2 , 1,4,2,3 , 1,4,3,2,
+ 2,1,3,4 , 2,1,4,3 , 2,3,1,4 , 2,3,4,1 , 2,4,1,3 , 2,4,3,1,
+ 3,1,2,4 , 3,1,4,2 , 3,2,1,4 , 3,2,4,1 , 3,4,1,2 , 3,4,2,1,
+ 4,1,2,3 , 4,1,3,2 , 4,2,1,3 , 4,2,3,1 , 4,3,1,2 , 4,3,2,1
+};
+
void setEEPROMString(char *dst, const char *src, int size)
{
memcpy(dst, src, size);
@@ -33,265 +45,234 @@ void getEEPROMString(char *dst, const char *src, int size)
}
}
-int RawSource::getDecimals(const ModelData & Model)
+float ValToTim(int value)
{
- if(type==SOURCE_TYPE_TELEMETRY) {
- switch (index) {
- case TELEMETRY_SOURCE_A1:
- case TELEMETRY_SOURCE_A2:
- return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0 ? 2: 0);
- case TELEMETRY_SOURCE_CELL:
- return 2;
- case TELEMETRY_SOURCE_CELLS_SUM:
- case TELEMETRY_SOURCE_VFAS:
- case TELEMETRY_SOURCE_CURRENT:
- return 1;
- default:
- return 0;
- }
- }
- return 0;
+ return ((value < -109 ? 129+value : (value < 7 ? (113+value)*5 : (53+value)*10))/10.0);
}
-double RawSource::getMin(const ModelData & Model)
+int TimToVal(float value)
{
+ int temp;
+ if (value>60) {
+ temp=136+round((value-60));
+ }
+ else if (value>2) {
+ temp=20+round((value-2.0)*2.0);
+ }
+ else {
+ temp=round(value*10.0);
+ }
+ return (temp-129);
+}
+
+QString getSignedStr(int value)
+{
+ return value > 0 ? QString("+%1").arg(value) : QString("%1").arg(value);
+}
+
+QString getGVarString(int16_t val, bool sign)
+{
+ if (val >= -10000 && val <= 10000) {
+ if (sign)
+ return QString("%1%").arg(getSignedStr(val));
+ else
+ return QString("%1%").arg(val);
+ }
+ else {
+ if (val<0)
+ return QObject::tr("-GV%1").arg(-val-10000);
+ else
+ return QObject::tr("GV%1").arg(val-10000);
+ }
+}
+
+RawSourceRange RawSource::getRange(bool singleprec)
+{
+ RawSourceRange result;
+
+ int board = GetEepromInterface()->getBoard();
+
+ if (!singleprec && !IS_ARM(board)) {
+ singleprec = true;
+ }
+
switch (type) {
case SOURCE_TYPE_TELEMETRY:
switch (index) {
- /*case TELEMETRY_SOURCE_NONE:
case TELEMETRY_SOURCE_TX_BATT:
+ result.step = 0.1;
+ result.decimals = 1;
+ result.max = 25.5;
+ break;
case TELEMETRY_SOURCE_TIMER1:
case TELEMETRY_SOURCE_TIMER2:
- return 0; */
- case TELEMETRY_SOURCE_A1:
- case TELEMETRY_SOURCE_A2:
- if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) {
- return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/2550.0;
- }
- else {
- return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0;
- }
- case TELEMETRY_SOURCE_ALT:
- case TELEMETRY_SOURCE_GPS_ALT:
- return -500;
- case TELEMETRY_SOURCE_T1:
- case TELEMETRY_SOURCE_T2:
- return -30;
- default:
- return 0;
- }
- break;
- default:
- return (Model.extendedLimits ? -125 :-100);
- }
-}
-
-double RawSource::getMax(const ModelData & Model)
-{
- switch (type) {
- case SOURCE_TYPE_TELEMETRY:
- switch (index) {
- case TELEMETRY_SOURCE_TIMER1:
- case TELEMETRY_SOURCE_TIMER2:
- return 765;
+ result.step = singleprec ? 5 : 1;
+ result.max = singleprec ? 255*5 : 7200;
+ break;
case TELEMETRY_SOURCE_RSSI_TX:
case TELEMETRY_SOURCE_RSSI_RX:
- return 100;
+ result.max = 100;
+ break;
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2:
- if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) {
- return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio-(Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0)/10;
- } else {
- return Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio-(Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0;
+ if (model) {
+ const FrSkyChannelData & channel = model->frsky.channels[index-TELEMETRY_SOURCE_A1];
+ float ratio = channel.getRatio();
+ if (channel.type==0 || channel.type==1 || channel.type==2)
+ result.decimals = 2;
+ else
+ result.decimals = 0;
+ result.step = ratio / 255;
+ result.min = channel.offset * result.step;
+ result.max = ratio + result.min;
}
+ break;
case TELEMETRY_SOURCE_ALT:
case TELEMETRY_SOURCE_GPS_ALT:
- return 1540;
- case TELEMETRY_SOURCE_RPM:
- return 12750;
- case TELEMETRY_SOURCE_FUEL:
- return 100;
+ result.step = singleprec ? 8 : 1;
+ result.min = -500;
+ result.max = singleprec ? 1540 : 3000;
+ break;
case TELEMETRY_SOURCE_T1:
+ case TELEMETRY_SOURCE_T1_MAX:
case TELEMETRY_SOURCE_T2:
- return 225;
- case TELEMETRY_SOURCE_SPEED:
- return 944;
- case TELEMETRY_SOURCE_DIST:
- return 2040;
- case TELEMETRY_SOURCE_CELL:
- return 5.1;
- case TELEMETRY_SOURCE_CELLS_SUM:
- case TELEMETRY_SOURCE_VFAS:
- return 25.5;
- case TELEMETRY_SOURCE_CURRENT:
- return 127.5;
- case TELEMETRY_SOURCE_CONSUMPTION:
- return 5100;
- case TELEMETRY_SOURCE_POWER:
- return 1275;
- default:
- return 125;
- }
- break;
- default:
- return (Model.extendedLimits ? 125 :100);
- }
-}
-
-double RawSource::getOffset(const ModelData & Model)
-{
- if (type==SOURCE_TYPE_TELEMETRY) {
- switch (index) {
- case TELEMETRY_SOURCE_A1:
- case TELEMETRY_SOURCE_A2:
- if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) {
- return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/2550.0;
- }
- else {
- return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0;
- }
- case TELEMETRY_SOURCE_ALT:
- case TELEMETRY_SOURCE_GPS_ALT:
- return 524;
- case TELEMETRY_SOURCE_RPM:
- return 6400;
- case TELEMETRY_SOURCE_FUEL:
- return 0;
- case TELEMETRY_SOURCE_T1:
- case TELEMETRY_SOURCE_T2:
- return 98;
- case TELEMETRY_SOURCE_SPEED:
- return 474;
- case TELEMETRY_SOURCE_DIST:
- return 1024;
- case TELEMETRY_SOURCE_CELL:
- return 2.56;
- default:
- return 0;
- }
- }
- return 0;
-}
-
-int RawSource::getRawOffset(const ModelData & Model)
-{
- switch (type) {
- case SOURCE_TYPE_TELEMETRY:
- switch (index) {
- case TELEMETRY_SOURCE_TIMER1:
- case TELEMETRY_SOURCE_TIMER2:
- case TELEMETRY_SOURCE_RSSI_TX:
- case TELEMETRY_SOURCE_RSSI_RX:
- case TELEMETRY_SOURCE_A1:
- case TELEMETRY_SOURCE_A2:
- case TELEMETRY_SOURCE_FUEL:
- case TELEMETRY_SOURCE_CELLS_SUM:
- case TELEMETRY_SOURCE_VFAS:
- case TELEMETRY_SOURCE_CURRENT:
- case TELEMETRY_SOURCE_CONSUMPTION:
- case TELEMETRY_SOURCE_POWER:
- return 128;
- default:
- return 0;
- }
- default:
- return 0;
- }
-}
-
-double RawSource::getStep(const ModelData & Model)
-{
- switch (type) {
- case SOURCE_TYPE_TELEMETRY:
- switch (index) {
- case TELEMETRY_SOURCE_TIMER1:
- case TELEMETRY_SOURCE_TIMER2:
- return 3;
- case TELEMETRY_SOURCE_A1:
- case TELEMETRY_SOURCE_A2:
- if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) {
- return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio/2550.0);
- }
- else {
- return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio/255.0);
- }
- case TELEMETRY_SOURCE_ALT:
- case TELEMETRY_SOURCE_GPS_ALT:
- return 8;
+ case TELEMETRY_SOURCE_T2_MAX:
+ result.min = -30;
+ result.max = 225;
+ break;
case TELEMETRY_SOURCE_RPM:
- return 50;
+ case TELEMETRY_SOURCE_RPM_MAX:
+ result.step = singleprec ? 50 : 1;
+ result.max = singleprec ? 12750 : 20000;
+ break;
+ case TELEMETRY_SOURCE_FUEL:
+ result.max = 100;
+ break;
case TELEMETRY_SOURCE_SPEED:
- return 4;
+ case TELEMETRY_SOURCE_SPEED_MAX:
+ result.step = singleprec ? 4 : 1;
+ result.max = singleprec ? 944 : 2000;
+ if (model && !model->frsky.imperial) {
+ result.step *= 1.852;
+ result.max *= 1.852;
+ }
+ break;
case TELEMETRY_SOURCE_DIST:
- return 8;
+ case TELEMETRY_SOURCE_DIST_MAX:
+ result.step = singleprec ? 8 : 1;
+ result.max = singleprec ? 2040 : 10000;
+ break;
case TELEMETRY_SOURCE_CELL:
- return 0.02;
+ case TELEMETRY_SOURCE_CELL_MIN:
+ result.step = singleprec ? 0.02 : 0.01;
+ result.max = 5.1;
+ result.decimals = 2;
+ break;
case TELEMETRY_SOURCE_CELLS_SUM:
+ case TELEMETRY_SOURCE_CELLS_MIN:
case TELEMETRY_SOURCE_VFAS:
- return 0.1;
+ case TELEMETRY_SOURCE_VFAS_MIN:
+ result.step = 0.1;
+ result.max = 25.5;
+ result.decimals = 1;
+ break;
case TELEMETRY_SOURCE_CURRENT:
- return 0.5;
+ case TELEMETRY_SOURCE_CURRENT_MAX:
+ result.step = singleprec ? 0.5 : 0.1;
+ result.max = singleprec ? 127.5 : 200.0;
+ result.decimals = 1;
+ break;
case TELEMETRY_SOURCE_CONSUMPTION:
- return 20;
+ result.step = singleprec ? 20 : 1;
+ result.max = singleprec ? 5100 : 10000;
+ break;
case TELEMETRY_SOURCE_POWER:
- return 5;
+ case TELEMETRY_SOURCE_POWER_MAX:
+ result.step = singleprec ? 5 : 1;
+ result.max = singleprec ? 1275 : 2000;
+ break;
default:
- return 1;
+ result.max = 125;
+ break;
+ }
+ if (singleprec) {
+ result.offset = result.max - (127*result.step);
}
break;
- default:
- return 1;
+
+ default:
+ result.max = (model && model->extendedLimits ? 125 : 100);
+ result.min = - result.max;
+ break;
}
+
+ return result;
+}
+
+QString AnalogString(int index)
+{
+ static const QString sticks[] = { QObject::tr("Rud"), QObject::tr("Ele"), QObject::tr("Thr"), QObject::tr("Ail") };
+ static const QString pots9X[] = { QObject::tr("P1"), QObject::tr("P2"), QObject::tr("P3") };
+ static const QString potsTaranis[] = { QObject::tr("S1"), QObject::tr("S2"), QObject::tr("S3"), QObject::tr("LS"), QObject::tr("RS") };
+
+ if (index < 4)
+ return CHECK_IN_ARRAY(sticks, index);
+ else
+ return (IS_TARANIS(GetEepromInterface()->getBoard()) ? CHECK_IN_ARRAY(potsTaranis, index-4) : CHECK_IN_ARRAY(pots9X, index-4));
+}
+
+QString RotaryEncoderString(int index)
+{
+ static const QString rotary[] = { QObject::tr("REa"), QObject::tr("REb") };
+ return CHECK_IN_ARRAY(rotary, index);
}
QString RawSource::toString()
{
- static const QString sticks[] = { QObject::tr("Rud"), QObject::tr("Ele"), QObject::tr("Thr"), QObject::tr("Ail") };
+ static const QString trims[] = {
+ QObject::tr("TrmR"), QObject::tr("TrmE"), QObject::tr("TrmT"), QObject::tr("TrmA")
+ };
- static const QString trims[] = { QObject::tr("TrmR"), QObject::tr("TrmE"), QObject::tr("TrmT"), QObject::tr("TrmA")};
+ static const QString telemetry[] = {
+ QObject::tr("Batt"), QObject::tr("Timer1"), QObject::tr("Timer2"),
+ QObject::tr("SWR"), QObject::tr("RSSI Tx"), QObject::tr("RSSI Rx"), QObject::tr("Rx Batt"),
+ QObject::tr("A1"), QObject::tr("A2"), QObject::tr("A3"), QObject::tr("A4"),
+ QObject::tr("Alt"), QObject::tr("Rpm"), QObject::tr("Fuel"), QObject::tr("T1"), QObject::tr("T2"),
+ QObject::tr("Speed"), QObject::tr("Dist"), QObject::tr("GPS Alt"),
+ QObject::tr("Cell"), QObject::tr("Cells"), QObject::tr("Vfas"), QObject::tr("Curr"), QObject::tr("Cnsp"), QObject::tr("Powr"),
+ QObject::tr("AccX"), QObject::tr("AccY"), QObject::tr("AccZ"),
+ QObject::tr("HDG "), QObject::tr("VSpd"), QObject::tr("ASpd"), QObject::tr("dTE"),
+ QObject::tr("A1-"), QObject::tr("A2-"), QObject::tr("A3-"), QObject::tr("A4-"),
+ QObject::tr("Alt-"), QObject::tr("Alt+"), QObject::tr("Rpm+"), QObject::tr("T1+"), QObject::tr("T2+"), QObject::tr("Speed+"), QObject::tr("Dist+"),
+ QObject::tr("Cell-"), QObject::tr("Cells-"), QObject::tr("Vfas-"), QObject::tr("Curr+"), QObject::tr("Powr+"),
+ QObject::tr("ACC"), QObject::tr("Time"),
+ };
- static const QString pots9X[] = { QObject::tr("P1"), QObject::tr("P2"), QObject::tr("P3") };
-
- static const QString potsX9D[] = { QObject::tr("S1"), QObject::tr("S2"), QObject::tr("LS"), QObject::tr("RS") };
-
- static const QString rotary[] = { QObject::tr("REa"), QObject::tr("REb") };
-
- static const QString switches9X[] = { QObject::tr("3POS"),
- QObject::tr("THR"), QObject::tr("RUD"), QObject::tr("ELE"),
- QObject::tr("AIL"), QObject::tr("GEA"), QObject::tr("TRN"),
- };
-
- static const QString switchesX9D[] = { QObject::tr("SA"), QObject::tr("SB"), QObject::tr("SC"), QObject::tr("SD"),
- QObject::tr("SE"), QObject::tr("SF"), QObject::tr("SG"), QObject::tr("SH"),
- };
-
- static const QString telemetry[] = { QObject::tr("Batt"), QObject::tr("Timer1"), QObject::tr("Timer2"),
- (IS_TARANIS(GetEepromInterface()->getBoard()) ? QObject::tr("SWR") : QObject::tr("Tx")), (IS_TARANIS(GetEepromInterface()->getBoard()) ? QObject::tr("RSSI") : QObject::tr("Rx")), QObject::tr("A1"), QObject::tr("A2"), QObject::tr("Alt"), QObject::tr("Rpm"), QObject::tr("Fuel"), QObject::tr("T1"),
- QObject::tr("T2"), QObject::tr("Speed"), QObject::tr("Dist"), QObject::tr("GPS Alt"), QObject::tr("Cell"), QObject::tr("Cels"), QObject::tr("Vfas"), QObject::tr("Curr"),
- QObject::tr("Cnsp"), QObject::tr("Powr"), QObject::tr("AccX"), QObject::tr("AccY"), QObject::tr("AccZ"), QObject::tr("HDG "), QObject::tr("VSpd"), QObject::tr("A1-"),
- QObject::tr("A2-"), QObject::tr("Alt-"), QObject::tr("Alt+"), QObject::tr("Rpm+"), QObject::tr("T1+"), QObject::tr("T2+"), QObject::tr("Spd+"), QObject::tr("Dst+"),
- QObject::tr("Cur+"), QObject::tr("Pwr+"), QObject::tr("ACC "), QObject::tr("Time"),
- };
-
- static const QString virtualSwitches[] = { QObject::tr("CS1"), QObject::tr("CS2"), QObject::tr("CS3"), QObject::tr("CS4"), QObject::tr("CS5"), QObject::tr("CS6"), QObject::tr("CS7"), QObject::tr("CS8"), QObject::tr("CS9"), QObject::tr("CSA"),
- QObject::tr("CSB"), QObject::tr("CSC"), QObject::tr("CSD"), QObject::tr("CSE"), QObject::tr("CSF"), QObject::tr("CSG"), QObject::tr("CSH"), QObject::tr("CSI"), QObject::tr("CSJ"), QObject::tr("CSK"),
- QObject::tr("CSL"), QObject::tr("CSM"), QObject::tr("CSN"), QObject::tr("CSO"), QObject::tr("CSP"), QObject::tr("CSQ"), QObject::tr("CSR"), QObject::tr("CSS"), QObject::tr("CST"), QObject::tr("CSU"),
- QObject::tr("CSV"), QObject::tr("CSW")
- };
+ static const QString virtualSwitches[] = {
+ QObject::tr("L1"), QObject::tr("L2"), QObject::tr("L3"), QObject::tr("L4"), QObject::tr("L5"), QObject::tr("L6"), QObject::tr("L7"), QObject::tr("L8"), QObject::tr("L9"), QObject::tr("L10"),
+ QObject::tr("L11"), QObject::tr("L12"), QObject::tr("L13"), QObject::tr("L14"), QObject::tr("L15"), QObject::tr("L16"), QObject::tr("L17"), QObject::tr("L18"), QObject::tr("L19"), QObject::tr("L20"),
+ QObject::tr("L21"), QObject::tr("L22"), QObject::tr("L23"), QObject::tr("L24"), QObject::tr("L25"), QObject::tr("L26"), QObject::tr("L27"), QObject::tr("L28"), QObject::tr("L29"), QObject::tr("L30"),
+ QObject::tr("L31"), QObject::tr("L32")
+ };
if (index<0) {
return QObject::tr("----");
}
- switch(type) {
+ switch (type) {
+ case SOURCE_TYPE_VIRTUAL_INPUT:
+ {
+ QString result = QObject::tr("[I%1]").arg(index+1);
+ if (model && strlen(model->inputNames[index]) > 0) {
+ result += QString(model->inputNames[index]);
+ }
+ return result;
+ }
case SOURCE_TYPE_STICK:
- if (index < 4)
- return CHECK_IN_ARRAY(sticks, index);
- else
- return (IS_TARANIS(GetEepromInterface()->getBoard()) ? CHECK_IN_ARRAY(potsX9D, index-4) : CHECK_IN_ARRAY(pots9X, index-4));
+ return AnalogString(index);
case SOURCE_TYPE_TRIM:
return CHECK_IN_ARRAY(trims, index);
case SOURCE_TYPE_ROTARY_ENCODER:
- return CHECK_IN_ARRAY(rotary, index);
+ return RotaryEncoderString(index);
case SOURCE_TYPE_MAX:
return QObject::tr("MAX");
case SOURCE_TYPE_SWITCH:
@@ -301,7 +282,7 @@ QString RawSource::toString()
case SOURCE_TYPE_CYC:
return QObject::tr("CYC%1").arg(index+1);
case SOURCE_TYPE_PPM:
- return QObject::tr("PPM%1").arg(index+1);
+ return QObject::tr("TR%1").arg(index+1);
case SOURCE_TYPE_CH:
if (index < GetEepromInterface()->getCapability(Outputs))
return QObject::tr("CH%1%2").arg((index+1)/10).arg((index+1)%10);
@@ -330,210 +311,695 @@ QString SwitchDn(const char sw)
QString RawSwitch::toString()
{
- static const QString switches9X[] = { QObject::tr("THR"), QObject::tr("RUD"), QObject::tr("ELE"),
- QObject::tr("ID0"), QObject::tr("ID1"), QObject::tr("ID2"),
- QObject::tr("AIL"), QObject::tr("GEA"), QObject::tr("TRN")
- };
+ static const QString switches9X[] = {
+ QString("THR"), QString("RUD"), QString("ELE"),
+ QString("ID0"), QString("ID1"), QString("ID2"),
+ QString("AIL"), QString("GEA"), QString("TRN")
+ };
- static const QString switchesX9D[] = { SwitchUp('A'), QString::fromUtf8("SA-"), SwitchDn('A'),
- SwitchUp('B'), QString::fromUtf8("SB-"), SwitchDn('B'),
- SwitchUp('C'), QString::fromUtf8("SC-"), SwitchDn('C'),
- SwitchUp('D'), QString::fromUtf8("SD-"), SwitchDn('D'),
- SwitchUp('E'), QString::fromUtf8("SE-"), SwitchDn('E'),
- SwitchUp('F'), SwitchDn('F'),
- SwitchUp('G'), QString::fromUtf8("SG-"), SwitchDn('G'),
- SwitchUp('H'), SwitchDn('H'),
- };
+ static const QString switchesX9D[] = {
+ SwitchUp('A'), QString::fromUtf8("SA-"), SwitchDn('A'),
+ SwitchUp('B'), QString::fromUtf8("SB-"), SwitchDn('B'),
+ SwitchUp('C'), QString::fromUtf8("SC-"), SwitchDn('C'),
+ SwitchUp('D'), QString::fromUtf8("SD-"), SwitchDn('D'),
+ SwitchUp('E'), QString::fromUtf8("SE-"), SwitchDn('E'),
+ SwitchUp('F'), SwitchDn('F'),
+ SwitchUp('G'), QString::fromUtf8("SG-"), SwitchDn('G'),
+ SwitchUp('H'), SwitchDn('H'),
+ };
- static const QString virtualSwitches[] = { QObject::tr("CS1"), QObject::tr("CS2"), QObject::tr("CS3"), QObject::tr("CS4"), QObject::tr("CS5"), QObject::tr("CS6"), QObject::tr("CS7"), QObject::tr("CS8"), QObject::tr("CS9"), QObject::tr("CSA"),
- QObject::tr("CSB"), QObject::tr("CSC"), QObject::tr("CSD"), QObject::tr("CSE"), QObject::tr("CSF"), QObject::tr("CSG"), QObject::tr("CSH"), QObject::tr("CSI"), QObject::tr("CSJ"), QObject::tr("CSK"),
- QObject::tr("CSL"), QObject::tr("CSM"), QObject::tr("CSN"), QObject::tr("CSO"), QObject::tr("CSP"), QObject::tr("CSQ"), QObject::tr("CSR"), QObject::tr("CSS"), QObject::tr("CST"), QObject::tr("CSU"),
- QObject::tr("CSV"), QObject::tr("CSW")
- };
+ static const QString virtualSwitches[] = {
+ QObject::tr("L1"), QObject::tr("L2"), QObject::tr("L3"), QObject::tr("L4"), QObject::tr("L5"), QObject::tr("L6"), QObject::tr("L7"), QObject::tr("L8"), QObject::tr("L9"), QObject::tr("L10"),
+ QObject::tr("L11"), QObject::tr("L12"), QObject::tr("L13"), QObject::tr("L14"), QObject::tr("L15"), QObject::tr("L16"), QObject::tr("L17"), QObject::tr("L18"), QObject::tr("L19"), QObject::tr("L20"),
+ QObject::tr("L21"), QObject::tr("L22"), QObject::tr("L23"), QObject::tr("L24"), QObject::tr("L25"), QObject::tr("L26"), QObject::tr("L27"), QObject::tr("L28"), QObject::tr("L29"), QObject::tr("L30"),
+ QObject::tr("L31"), QObject::tr("L32")
+ };
- switch(type) {
- case SWITCH_TYPE_SWITCH:
- if (IS_TARANIS(GetEepromInterface()->getBoard()))
- return index > 0 ? CHECK_IN_ARRAY(switchesX9D, index-1) : QString("!") + CHECK_IN_ARRAY(switchesX9D, -index-1);
- else
- return index > 0 ? CHECK_IN_ARRAY(switches9X, index-1) : QString("!") + CHECK_IN_ARRAY(switches9X, -index-1);
- case SWITCH_TYPE_VIRTUAL:
- return index > 0 ? CHECK_IN_ARRAY(virtualSwitches, index-1) : QString("!") + CHECK_IN_ARRAY(virtualSwitches, -index-1);
- case SWITCH_TYPE_ON:
- return QObject::tr("ON");
- case SWITCH_TYPE_ONM:
- if (index==0) {
- return QObject::tr("ONE");
- }
- else if (index==1) {
- return QObject::tr("!ONE");
- }
- break;
- case SWITCH_TYPE_TRN:
- if (index==0) {
- if (IS_TARANIS(GetEepromInterface()->getBoard()))
- return SwitchDn('H')+"s";
+ static const QString multiposPots[] = {
+ QObject::tr("S11"), QObject::tr("S12"), QObject::tr("S13"), QObject::tr("S14"), QObject::tr("S15"), QObject::tr("S16"),
+ QObject::tr("S21"), QObject::tr("S22"), QObject::tr("S23"), QObject::tr("S24"), QObject::tr("S25"), QObject::tr("S26"),
+ QObject::tr("S31"), QObject::tr("S32"), QObject::tr("S33"), QObject::tr("S34"), QObject::tr("S35"), QObject::tr("S36")
+ };
+
+ static const QString trimsSwitches[] = {
+ QObject::tr("RudTrim Left"), QObject::tr("RudTrim Right"),
+ QObject::tr("EleTrim Down"), QObject::tr("EleTrim Up"),
+ QObject::tr("ThrTrim Down"), QObject::tr("ThrTrim Up"),
+ QObject::tr("AilTrim Left"), QObject::tr("AilTrim Right")
+ };
+
+ static const QString rotaryEncoders[] = {
+ QObject::tr("REa"), QObject::tr("REb")
+ };
+
+ static const QString timerModes[] = {
+ QObject::tr("OFF"), QObject::tr("ABS"),
+ QObject::tr("THs"), QObject::tr("TH%"), QObject::tr("THt")
+ };
+
+ if (index < 0) {
+ return QString("!") + RawSwitch(type, -index).toString();
+ }
+ else {
+ switch(type) {
+ case SWITCH_TYPE_SWITCH:
+ if (IS_TARANIS(GetEepromInterface()->getBoard()))
+ return CHECK_IN_ARRAY(switchesX9D, index-1);
else
- return QObject::tr("TRNs");
- } else if (index==1) {
- if (IS_TARANIS(GetEepromInterface()->getBoard()))
- return SwitchDn('H')+"l";
- else
- return QObject::tr("TRNl");
- }
- break;
- case SWITCH_TYPE_REA:
- if (index==0) {
- if (GetEepromInterface()->getBoard() == BOARD_SKY9X)
- return QObject::tr("REAs");
- } else if (index==1) {
- if (GetEepromInterface()->getBoard() == BOARD_SKY9X)
- return QObject::tr("REAl");
- }
- break;
- case SWITCH_TYPE_OFF:
- return QObject::tr("OFF");
- case SWITCH_TYPE_MOMENT_SWITCH:
- if (IS_TARANIS(GetEepromInterface()->getBoard()))
- return index > 0 ? CHECK_IN_ARRAY(switchesX9D, index-1)+QString("t") : QString("!")+CHECK_IN_ARRAY(switchesX9D, -index-1)+QString("t");
- else
- return index > 0 ? CHECK_IN_ARRAY(switches9X, index-1)+QString("t") : QString("!")+CHECK_IN_ARRAY(switches9X, -index-1)+QString("t");
- case SWITCH_TYPE_MOMENT_VIRTUAL:
- return index > 0 ? CHECK_IN_ARRAY(virtualSwitches, index-1)+QString("t") : QString("!")+CHECK_IN_ARRAY(virtualSwitches, -index-1)+QString("t");
+ return CHECK_IN_ARRAY(switches9X, index-1);
+ case SWITCH_TYPE_VIRTUAL:
+ return CHECK_IN_ARRAY(virtualSwitches, index-1);
+ case SWITCH_TYPE_MULTIPOS_POT:
+ return CHECK_IN_ARRAY(multiposPots, index-1);
+ case SWITCH_TYPE_TRIM:
+ return CHECK_IN_ARRAY(trimsSwitches, index-1);
+ case SWITCH_TYPE_ROTARY_ENCODER:
+ return CHECK_IN_ARRAY(rotaryEncoders, index-1);
+ case SWITCH_TYPE_ON:
+ return QObject::tr("ON");
+ case SWITCH_TYPE_OFF:
+ return QObject::tr("OFF");
+ case SWITCH_TYPE_NONE:
+ return QObject::tr("----");
+ case SWITCH_TYPE_TIMER_MODE:
+ return CHECK_IN_ARRAY(timerModes, index);
+ default:
+ return QObject::tr("???");
+ }
+ }
+}
+
+QString CurveReference::toString()
+{
+ if (value == 0) {
+ return "----";
+ }
+ else {
+ switch(type) {
+ case CURVE_REF_DIFF:
+ return QObject::tr("Diff(%1)").arg(getGVarString(value));
+ case CURVE_REF_EXPO:
+ return QObject::tr("Expo(%1)").arg(getGVarString(value));
+ case CURVE_REF_FUNC:
+ return QObject::tr("Function(%1)").arg(QString("x>0" "x<0" "|x|" "f>0" "f<0" "|f|").mid(3*(value-1), 3));
+ default:
+ return QString(value > 0 ? QObject::tr("Curve(%1)") : QObject::tr("!Curve(%1)")).arg(abs(value));
+ }
+ }
+}
+
+CSFunctionFamily LogicalSwitchData::getFunctionFamily()
+{
+ if (func == LS_FN_STAY)
+ return LS_FAMILY_STAY;
+ else if (func == LS_FN_TIMER)
+ return LS_FAMILY_TIMER;
+ else if (func == LS_FN_STICKY)
+ return LS_FAMILY_STICKY;
+ else if (func < LS_FN_AND || func > LS_FN_ELESS)
+ return LS_FAMILY_VOFS;
+ else if (func < LS_FN_EQUAL)
+ return LS_FAMILY_VBOOL;
+ else
+ return LS_FAMILY_VCOMP;
+}
+
+QString LogicalSwitchData::funcToString()
+{
+ switch (func) {
+ case LS_FN_OFF:
+ return QObject::tr("---");
+ case LS_FN_VPOS:
+ return QObject::tr("a>x");
+ case LS_FN_VNEG:
+ return QObject::tr("ax");
+ case LS_FN_ANEG:
+ return QObject::tr("|a|b");
+ case LS_FN_LESS:
+ return QObject::tr("a=b");
+ case LS_FN_ELESS:
+ return QObject::tr("a<=b");
+ case LS_FN_DPOS:
+ return QObject::tr("d>=x");
+ case LS_FN_DAPOS:
+ return QObject::tr("|d|>=x");
+ case LS_FN_VEQUAL:
+ return QObject::tr("a=x");
+ case LS_FN_VALMOSTEQUAL:
+ return QObject::tr("a~x");
+ case LS_FN_TIMER:
+ return QObject::tr("Timer");
+ case LS_FN_STICKY:
+ return QObject::tr("Sticky");
+ case LS_FN_STAY:
+ return QObject::tr("Edge");
default:
+ return QObject::tr("Unknown");
+ }
+}
+
+QString LogicalSwitchData::toString(const ModelData & model)
+{
+ QString result = "";
+
+ if (!func)
+ return result;
+
+ if (andsw!=0) {
+ result +="( ";
+ }
+ switch (getFunctionFamily()) {
+ case LS_FAMILY_STAY:
+ result = QObject::tr("STAY(%1, [%2:%3])").arg(RawSwitch(val1).toString()).arg(ValToTim(val2)).arg(ValToTim(val2+val3));
+ break;
+ case LS_FAMILY_STICKY:
+ result = QObject::tr("STICKY(%1, %2)").arg(RawSwitch(val1).toString()).arg(RawSwitch(val2).toString());
+ break;
+ case LS_FAMILY_TIMER:
+ result = QObject::tr("TIMER(%1, %2)").arg(ValToTim(val1)).arg(ValToTim(val2));
+ break;
+ case LS_FAMILY_VOFS: {
+ RawSource source = RawSource(val1, &model);
+ RawSourceRange range = source.getRange();
+ if (val1)
+ result += source.toString();
+ else
+ result += "0";
+ result.remove(" ");
+ if (func == LS_FN_APOS || func == LS_FN_ANEG)
+ result = "|" + result + "|";
+ else if (func == LS_FN_DAPOS)
+ result = "|d(" + result + ")|";
+ else if (func == LS_FN_DPOS) result = "d(" + result + ")";
+ if (func == LS_FN_APOS || func == LS_FN_VPOS || func == LS_FN_DAPOS || func == LS_FN_DPOS)
+ result += " > ";
+ else if (func == LS_FN_ANEG || func == LS_FN_VNEG)
+ result += " < ";
+ result += QString::number(range.step * (val2 /*TODO+ source.getRawOffset(model)*/) + range.offset);
+ break;
+ }
+ case LS_FAMILY_VBOOL:
+ result = RawSwitch(val1).toString();
+ switch (func) {
+ case LS_FN_AND:
+ result += " AND ";
+ break;
+ case LS_FN_OR:
+ result += " OR ";
+ break;
+ case LS_FN_XOR:
+ result += " XOR ";
+ break;
+ default:
+ break;
+ }
+ result += RawSwitch(val2).toString();
+ break;
+
+ case LS_FAMILY_VCOMP:
+ if (val1)
+ result += RawSource(val1).toString();
+ else
+ result += "0";
+ switch (func) {
+ case LS_FN_EQUAL:
+ result += " = ";
+ break;
+ case LS_FN_NEQUAL:
+ result += " != ";
+ break;
+ case LS_FN_GREATER:
+ result += " > ";
+ break;
+ case LS_FN_LESS:
+ result += " < ";
+ break;
+ case LS_FN_EGREATER:
+ result += " >= ";
+ break;
+ case LS_FN_ELESS:
+ result += " <= ";
+ break;
+ default:
+ break;
+ }
+ if (val2)
+ result += RawSource(val2).toString();
+ else
+ result += "0";
break;
}
- return QObject::tr("----");
+ if (andsw!=0) {
+ result +=" ) AND ";
+ result += RawSwitch(andsw).toString();
+ }
+
+ if (GetEepromInterface()->getCapability(LogicalSwitchesExt)) {
+ if (delay)
+ result += QObject::tr(" Delay %1 sec").arg(delay/10.0);
+ if (duration)
+ result += QObject::tr(" Duration %1 sec").arg(duration/10.0);
+ }
+
+ return result;
+}
+
+#if 0
+QStringList FuncSwData::toStringList()
+{
+ QStringList result;
+ QStringList qs;
+
+ result << swtch.toString();
+ result << funcToString();
+
+ if (func < FuncInstantTrim) {
+ result << QString("%1").arg(param);
+ }
+ else if (func==FuncPlaySound) {
+ qs <<"Beep 1" << "Beep 2" << "Beep 3" << "Warn1" << "Warn2" << "Cheep" << "Ratata" << "Tick" << "Siren" << "Ring" ;
+ qs << "SciFi" << "Robot" << "Chirp" << "Tada" << "Crickt" << "AlmClk" ;
+ if (param>=0 && param<(int)qs.count())
+ result << qs.at(param);
+ else
+ result << QObject::tr("Inconsistent parameter");
+ }
+ else if (func==FuncPlayHaptic) {
+ qs << "0" << "1" << "2" << "3";
+ if (param>=0 && param<(int)qs.count())
+ result << qs.at(param);
+ else
+ result << QObject::tr("Inconsistent parameter");
+ }
+ else if (func==FuncReset) {
+ qs.append( QObject::tr("Timer1"));
+ qs.append( QObject::tr("Timer2"));
+ qs.append( QObject::tr("All"));
+ qs.append( QObject::tr("Telemetry"));
+ if (param>=0 && param<(int)qs.count())
+ result << qs.at(param);
+ else
+ result << QObject::tr("Inconsistent parameter");
+ }
+ else if ((func==FuncVolume)|| (func==FuncPlayValue)) {
+ RawSource item(param);
+ result << item.toString();
+ }
+ else if ((func==FuncPlayPrompt) || (func==FuncPlayBoth)) {
+ if ( GetEepromInterface()->getCapability(VoicesAsNumbers)) {
+ result << QString("%1").arg(param);
+ } else {
+ result << paramarm;
+ }
+ }
+ else if ((func>FuncBackgroundMusicPause) && (funcfuncSw[i].repeatParam),"green"));
+ } else {
+ str.append(doTC( " ","green"));
+ }
+ if ((index<=FuncInstantTrim) || (index>FuncBackgroundMusicPause)) {
+ str.append(doTC((g_model->funcSw[i].enabled ? "ON" : "OFF"),"green"));
+ } else {
+ str.append(doTC( "---","green"));
+ }
+
+ return result;
+}
+#endif
+
+QString FuncSwData::funcToString()
+{
+ if (func >= FuncSafetyCh1 && func <= FuncSafetyCh32)
+ return QObject::tr("Safety %1").arg(RawSource(SOURCE_TYPE_CH, func).toString());
+ else if (func == FuncTrainer)
+ return QObject::tr("Trainer");
+ else if (func == FuncTrainerRUD)
+ return QObject::tr("Trainer RUD");
+ else if (func == FuncTrainerELE)
+ return QObject::tr("Trainer ELE");
+ else if (func == FuncTrainerTHR)
+ return QObject::tr("Trainer THR");
+ else if (func == FuncTrainerAIL)
+ return QObject::tr("Trainer AIL");
+ else if (func == FuncInstantTrim)
+ return QObject::tr("Instant Trim");
+ else if (func == FuncPlaySound)
+ return QObject::tr("Play Sound");
+ else if (func == FuncPlayHaptic)
+ return QObject::tr("Play Haptic");
+ else if (func == FuncReset)
+ return QObject::tr("Reset");
+ else if (func >= FuncSetTimer1 && func <= FuncSetTimer2)
+ return QObject::tr("Set Timer %1").arg(func-FuncSetTimer1+1);
+ else if (func == FuncVario)
+ return QObject::tr("Vario");
+ else if (func == FuncPlayPrompt)
+ return QObject::tr("Play Track");
+ else if (func == FuncPlayBoth)
+ return QObject::tr("Play Both");
+ else if (func == FuncPlayValue)
+ return QObject::tr("Play Value");
+ else if (func == FuncLogs)
+ return QObject::tr("Start Logs");
+ else if (func == FuncVolume)
+ return QObject::tr("Volume");
+ else if (func == FuncBacklight)
+ return QObject::tr("Backlight");
+ else if (func == FuncBackgroundMusic)
+ return QObject::tr("Background Music");
+ else if (func == FuncBackgroundMusicPause)
+ return QObject::tr("Background Music Pause");
+ else if (func >= FuncAdjustGV1 && func <= FuncAdjustGVLast)
+ return QObject::tr("Adjust GV%1").arg(func-FuncAdjustGV1+1);
+ else {
+ return QString("???"); // Highlight unknown functions with output of question marks.(BTW should not happen that we do not know what a function is)
+ }
+}
+
+QString FuncSwData::paramToString()
+{
+ QStringList qs;
+ if (func <= FuncInstantTrim) {
+ return QString("%1").arg(param);
+ }
+ else if (func==FuncPlaySound) {
+ qs <<"Beep 1" << "Beep 2" << "Beep 3" << "Warn1" << "Warn2" << "Cheep" << "Ratata" << "Tick" << "Siren" << "Ring" ;
+ qs << "SciFi" << "Robot" << "Chirp" << "Tada" << "Crickt" << "AlmClk" ;
+ if (param>=0 && param<(int)qs.count())
+ return qs.at(param);
+ else
+ return QObject::tr("Inconsistent parameter");
+ }
+ else if (func==FuncPlayHaptic) {
+ qs << "0" << "1" << "2" << "3";
+ if (param>=0 && param<(int)qs.count())
+ return qs.at(param);
+ else
+ return QObject::tr("Inconsistent parameter");
+ }
+ else if (func==FuncReset) {
+ qs.append( QObject::tr("Timer1"));
+ qs.append( QObject::tr("Timer2"));
+ qs.append( QObject::tr("All"));
+ qs.append( QObject::tr("Telemetry"));
+ if (param>=0 && param<(int)qs.count())
+ return qs.at(param);
+ else
+ return QObject::tr("Inconsistent parameter");
+ }
+ else if ((func==FuncVolume)|| (func==FuncPlayValue)) {
+ RawSource item(param);
+ return item.toString();
+ }
+ else if ((func==FuncPlayPrompt) || (func==FuncPlayBoth)) {
+ if ( GetEepromInterface()->getCapability(VoicesAsNumbers)) {
+ return QString("%1").arg(param);
+ } else {
+ return paramarm;
+ }
+ }
+ else if ((func>FuncBackgroundMusicPause) && (funcgetBoard()) ? 5 : 10;
+ return QObject::tr("%1 sec").arg(step*repeatParam);
+ }
}
GeneralSettings::GeneralSettings()
{
memset(this, 0, sizeof(GeneralSettings));
+
contrast = 25;
vBatWarn = 90;
- for (int i=0; i<(NUM_STICKS+C9X_NUM_POTS ); ++i) {
+
+ for (int i=0; i0) {
- settings.beginGroup("Profiles");
- QString profile=QString("profile%1").arg(profile_id);
- settings.beginGroup(profile);
- QString t_calib=settings.value("StickPotCalib","").toString();
- int potsnum=GetEepromInterface()->getCapability(Pots);
- if (t_calib.isEmpty()) {
- settings.endGroup();
- settings.endGroup();
- return;
- } else {
- QString t_trainercalib=settings.value("TrainerCalib","").toString();
- int8_t t_vBatCalib=(int8_t)settings.value("VbatCalib", vBatCalib).toInt();
- int8_t t_currentCalib=(int8_t)settings.value("currentCalib", currentCalib).toInt();
- int8_t t_PPM_Multiplier=(int8_t)settings.value("PPM_Multiplier", PPM_Multiplier).toInt();
- uint8_t t_stickMode=(uint8_t)settings.value("GSStickMode", stickMode).toUInt();
- uint8_t t_vBatWarn=(uint8_t)settings.value("vBatWarn",vBatWarn).toUInt();
- QString t_DisplaySet=settings.value("Display","").toString();
- QString t_BeeperSet=settings.value("Beeper","").toString();
- QString t_HapticSet=settings.value("Haptic","").toString();
- QString t_SpeakerSet=settings.value("Speaker","").toString();
- QString t_CountrySet=settings.value("countryCode","").toString();
- settings.endGroup();
- settings.endGroup();
- if ((t_calib.length()==(NUM_STICKS+potsnum)*12) && (t_trainercalib.length()==16)) {
- QString Byte;
- int16_t byte16;
- bool ok;
- for (int i=0; i<(NUM_STICKS+potsnum); i++) {
- Byte=t_calib.mid(i*12,4);
- byte16=(int16_t)Byte.toInt(&ok,16);
- if (ok)
- calibMid[i]=byte16;
- Byte=t_calib.mid(4+i*12,4);
- byte16=(int16_t)Byte.toInt(&ok,16);
- if (ok)
- calibSpanNeg[i]=byte16;
- Byte=t_calib.mid(8+i*12,4);
- byte16=(int16_t)Byte.toInt(&ok,16);
- if (ok)
- calibSpanPos[i]=byte16;
- }
- for (int i=0; i<4; i++) {
- Byte=t_trainercalib.mid(i*4,4);
- byte16=(int16_t)Byte.toInt(&ok,16);
- if (ok)
- trainer.calib[i]=byte16;
- }
- currentCalib=t_currentCalib;
- vBatCalib=t_vBatCalib;
- vBatWarn=t_vBatWarn;
- PPM_Multiplier=t_PPM_Multiplier;
- stickMode = t_stickMode;
+ if (IS_TARANIS(GetEepromInterface()->getBoard())) {
+ potsType[0] = 1;
+ potsType[1] = 1;
+ }
+
+ templateSetup = g.profile[g.id()].channelOrder();
+ stickMode = g.profile[g.id()].defaultMode();
+
+ QString t_calib=g.profile[g.id()].stickPotCalib();
+ int potsnum=GetEepromInterface()->getCapability(Pots);
+ if (t_calib.isEmpty()) {
+ return;
+ }
+ else {
+ QString t_trainercalib=g.profile[g.id()].trainerCalib();
+ int8_t t_vBatCalib=(int8_t)g.profile[g.id()].vBatCalib();
+ int8_t t_currentCalib=(int8_t)g.profile[g.id()].currentCalib();
+ int8_t t_PPM_Multiplier=(int8_t)g.profile[g.id()].ppmMultiplier();
+ uint8_t t_stickMode=(uint8_t)g.profile[g.id()].gsStickMode();
+ uint8_t t_vBatWarn=(uint8_t)g.profile[g.id()].vBatWarn();
+ QString t_DisplaySet=g.profile[g.id()].display();
+ QString t_BeeperSet=g.profile[g.id()].beeper();
+ QString t_HapticSet=g.profile[g.id()].haptic();
+ QString t_SpeakerSet=g.profile[g.id()].speaker();
+ QString t_CountrySet=g.profile[g.id()].countryCode();
+
+ if ((t_calib.length()==(NUM_STICKS+potsnum)*12) && (t_trainercalib.length()==16)) {
+ QString Byte;
+ int16_t byte16;
+ bool ok;
+ for (int i=0; i<(NUM_STICKS+potsnum); i++) {
+ Byte=t_calib.mid(i*12,4);
+ byte16=(int16_t)Byte.toInt(&ok,16);
+ if (ok)
+ calibMid[i]=byte16;
+ Byte=t_calib.mid(4+i*12,4);
+ byte16=(int16_t)Byte.toInt(&ok,16);
+ if (ok)
+ calibSpanNeg[i]=byte16;
+ Byte=t_calib.mid(8+i*12,4);
+ byte16=(int16_t)Byte.toInt(&ok,16);
+ if (ok)
+ calibSpanPos[i]=byte16;
}
- if ((t_DisplaySet.length()==6) && (t_BeeperSet.length()==4) && (t_HapticSet.length()==6) && (t_SpeakerSet.length()==6)) {
- uint8_t byte8u;
- int8_t byte8;
- bool ok;
- byte8=(int8_t)t_DisplaySet.mid(0,2).toInt(&ok,16);
+ for (int i=0; i<4; i++) {
+ Byte=t_trainercalib.mid(i*4,4);
+ byte16=(int16_t)Byte.toInt(&ok,16);
if (ok)
- optrexDisplay=(byte8==1 ? true : false);
- byte8u=(uint8_t)t_DisplaySet.mid(2,2).toUInt(&ok,16);
+ trainer.calib[i]=byte16;
+ }
+ currentCalib=t_currentCalib;
+ vBatCalib=t_vBatCalib;
+ vBatWarn=t_vBatWarn;
+ PPM_Multiplier=t_PPM_Multiplier;
+ stickMode = t_stickMode;
+ }
+ if ((t_DisplaySet.length()==6) && (t_BeeperSet.length()==4) && (t_HapticSet.length()==6) && (t_SpeakerSet.length()==6)) {
+ uint8_t byte8u;
+ int8_t byte8;
+ bool ok;
+ byte8=(int8_t)t_DisplaySet.mid(0,2).toInt(&ok,16);
+ if (ok)
+ optrexDisplay=(byte8==1 ? true : false);
+ byte8u=(uint8_t)t_DisplaySet.mid(2,2).toUInt(&ok,16);
+ if (ok)
+ contrast=byte8u;
+ byte8u=(uint8_t)t_DisplaySet.mid(4,2).toUInt(&ok,16);
+ if (ok)
+ backlightBright=byte8u;
+ byte8=(int8_t)t_BeeperSet.mid(0,2).toUInt(&ok,16);
+ if (ok)
+ beeperMode=(BeeperMode)byte8;
+ byte8=(int8_t)t_BeeperSet.mid(2,2).toInt(&ok,16);
+ if (ok)
+ beeperLength=byte8;
+ byte8=(int8_t)t_HapticSet.mid(0,2).toUInt(&ok,16);
+ if (ok)
+ hapticMode=(BeeperMode)byte8;
+ byte8u=(uint8_t)t_HapticSet.mid(2,2).toUInt(&ok,16);
+ if (ok)
+ hapticStrength=byte8u;
+ byte8=(int8_t)t_HapticSet.mid(4,2).toInt(&ok,16);
+ if (ok)
+ hapticLength=byte8;
+ byte8u=(uint8_t)t_SpeakerSet.mid(0,2).toUInt(&ok,16);
+ if (ok)
+ speakerMode=byte8u;
+ byte8u=(uint8_t)t_SpeakerSet.mid(2,2).toUInt(&ok,16);
+ if (ok)
+ speakerPitch=byte8u;
+ byte8u=(uint8_t)t_SpeakerSet.mid(4,2).toUInt(&ok,16);
+ if (ok)
+ speakerVolume=byte8u;
+ if (t_CountrySet.length()==6) {
+ byte8u=(uint8_t)t_CountrySet.mid(0,2).toUInt(&ok,16);
if (ok)
- contrast=byte8u;
- byte8u=(uint8_t)t_DisplaySet.mid(4,2).toUInt(&ok,16);
+ countryCode=byte8u;
+ byte8u=(uint8_t)t_CountrySet.mid(2,2).toUInt(&ok,16);
if (ok)
- backlightBright=byte8u;
- byte8=(int8_t)t_BeeperSet.mid(0,2).toUInt(&ok,16);
- if (ok)
- beeperMode=(BeeperMode)byte8;
- byte8=(int8_t)t_BeeperSet.mid(2,2).toInt(&ok,16);
- if (ok)
- beeperLength=byte8;
- byte8=(int8_t)t_HapticSet.mid(0,2).toUInt(&ok,16);
- if (ok)
- hapticMode=(BeeperMode)byte8;
- byte8u=(uint8_t)t_HapticSet.mid(2,2).toUInt(&ok,16);
- if (ok)
- hapticStrength=byte8u;
- byte8=(int8_t)t_HapticSet.mid(4,2).toInt(&ok,16);
- if (ok)
- hapticLength=byte8;
- byte8u=(uint8_t)t_SpeakerSet.mid(0,2).toUInt(&ok,16);
- if (ok)
- speakerMode=byte8u;
- byte8u=(uint8_t)t_SpeakerSet.mid(2,2).toUInt(&ok,16);
- if (ok)
- speakerPitch=byte8u;
- byte8u=(uint8_t)t_SpeakerSet.mid(4,2).toUInt(&ok,16);
- if (ok)
- speakerVolume=byte8u;
- if (t_CountrySet.length()==6) {
- byte8u=(uint8_t)t_CountrySet.mid(0,2).toUInt(&ok,16);
- if (ok)
- countryCode=byte8u;
- byte8u=(uint8_t)t_CountrySet.mid(2,2).toUInt(&ok,16);
- if (ok)
- imperial=byte8u;
- QString chars=t_CountrySet.mid(4,2);
- ttsLanguage[0]=chars[0].toAscii();
- ttsLanguage[1]=chars[1].toAscii();
- }
+ imperial=byte8u;
+ QString chars=t_CountrySet.mid(4,2);
+ ttsLanguage[0]=chars[0].toAscii();
+ ttsLanguage[1]=chars[1].toAscii();
}
}
}
}
+int GeneralSettings::getDefaultStick(unsigned int channel) const
+{
+ if (channel >= NUM_STICKS)
+ return -1;
+ else
+ return chout_ar[4*templateSetup + channel] - 1;
+}
+
+RawSource GeneralSettings::getDefaultSource(unsigned int channel) const
+{
+ int stick = getDefaultStick(channel);
+ if (stick >= 0)
+ return RawSource(SOURCE_TYPE_STICK, stick);
+ else
+ return RawSource(SOURCE_TYPE_NONE);
+}
+
+int GeneralSettings::getDefaultChannel(unsigned int stick) const
+{
+ for (int i=0; i<4; i++){
+ if (getDefaultStick(i) == (int)stick)
+ return i;
+ }
+ return -1;
+}
+
+void FrSkyData::clear()
+{
+ memset(this, 0, sizeof(FrSkyData));
+ rssiAlarms[0].clear(2, 45);
+ rssiAlarms[1].clear(3, 42);
+ varioSource = 2/*VARIO*/;
+ blades = 2;
+}
+
ModelData::ModelData()
{
clear();
}
+ModelData::ModelData(const ModelData & src)
+{
+ *this = src;
+}
+
+ModelData & ModelData::operator = (const ModelData & src)
+{
+ memcpy(this, &src, sizeof(ModelData));
+
+ for (int i=0; igetBoard();
+ int board = GetEepromInterface()->getBoard();
if (IS_TARANIS(board)) {
moduleData[0].protocol=PXX_XJT_X16;
moduleData[1].protocol=OFF;
- } else {
+ }
+ else {
moduleData[0].protocol=PPM;
moduleData[1].protocol=OFF;
}
for (int i=0; igetCapability(CustomCurves);
- for (int i=0; i=8)
- curves[i].clear(9);
- else
- curves[i].clear(5);
- }
+ for (int i=0; igetBoard())) {
+ for (int i=0; ichn = i;
+ expo->mode = INPUT_MODE_BOTH;
+ expo->srcRaw = settings.getDefaultSource(i);
+ expo->weight = 100;
+ strncpy(inputNames[i], expo->srcRaw.toString().toLatin1().constData(), sizeof(inputNames[i])-1);
+ }
+ }
+}
+
+void ModelData::setDefaultMixes(const GeneralSettings & settings)
+{
+ if (IS_TARANIS(GetEepromInterface()->getBoard())) {
+ setDefaultInputs(settings);
+ }
+
+ for (int i=0; idestCh = i+1;
+ mix->weight = 100;
+ if (IS_TARANIS(GetEepromInterface()->getBoard())) {
+ mix->srcRaw = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, i, this);
+ }
+ else {
+ mix->srcRaw = RawSource(SOURCE_TYPE_STICK, i);
+ }
+ }
+}
+
+void ModelData::setDefaultValues(unsigned int id, const GeneralSettings & settings)
{
clear();
used = true;
sprintf(name, "MODEL%02d", id+1);
+ modelId = id+1;
+ setDefaultMixes(settings);
}
-unsigned int ModelData::getTrimFlightPhase(uint8_t idx, int8_t phase)
+int ModelData::getTrimValue(int phaseIdx, int trimIdx)
{
- // if (phase == -1) phase = getFlightPhase();
-
- for (uint8_t i=0; i 500)
+ trim = 500;
+ break;
+ }
+ }
+}
+
void ModelData::removeGlobalVar(int & var)
{
if (var >= 126 && var <= 130)
@@ -617,13 +1150,13 @@ ModelData ModelData::removeGlobalVars()
for (int i=0; i eepromInterfaces;
void RegisterEepromInterfaces()
{
- QSettings settings("companion9x", "companion9x");
- int rev4a = settings.value("rev4asupport",0).toInt();
- eepromInterfaces.push_back(new Open9xInterface(BOARD_STOCK));
- eepromInterfaces.push_back(new Open9xInterface(BOARD_M128));
- eepromInterfaces.push_back(new Open9xInterface(BOARD_GRUVIN9X));
- eepromInterfaces.push_back(new Open9xInterface(BOARD_SKY9X));
- eepromInterfaces.push_back(new Open9xInterface(BOARD_TARANIS));
- if (rev4a)
- eepromInterfaces.push_back(new Open9xInterface(BOARD_TARANIS_REV4a));
+ eepromInterfaces.push_back(new OpenTxInterface(BOARD_STOCK));
+ eepromInterfaces.push_back(new OpenTxInterface(BOARD_M128));
+ eepromInterfaces.push_back(new OpenTxInterface(BOARD_GRUVIN9X));
+ eepromInterfaces.push_back(new OpenTxInterface(BOARD_SKY9X));
+ eepromInterfaces.push_back(new OpenTxInterface(BOARD_TARANIS));
+ if (g.rev4aSupport())
+ eepromInterfaces.push_back(new OpenTxInterface(BOARD_TARANIS_REV4a));
eepromInterfaces.push_back(new Gruvin9xInterface(BOARD_STOCK));
eepromInterfaces.push_back(new Gruvin9xInterface(BOARD_GRUVIN9X));
eepromInterfaces.push_back(new Ersky9xInterface());
@@ -652,30 +1183,15 @@ QList firmwares;
FirmwareVariant default_firmware_variant;
FirmwareVariant current_firmware_variant;
-const char * ER9X_STAMP = "http://er9x.googlecode.com/svn/trunk/src/stamp-er9x.h";
-const char * ERSKY9X_STAMP = "http://ersky9x.googlecode.com/svn/trunk/src/stamp-ersky9x.h";
-
void RegisterFirmwares()
{
- firmwares.push_back(new FirmwareInfo("th9x", QObject::tr("th9x"), new Th9xInterface(), "http://th9x.googlecode.com/svn/trunk/%1.bin", "http://th9x.googlecode.com/svn/trunk/src/stamp-th9x.h"));
-
- firmwares.push_back(new FirmwareInfo("er9x", QObject::tr("er9x"), new Er9xInterface(), "http://er9x.googlecode.com/svn/trunk/%1.hex", ER9X_STAMP));
- FirmwareInfo * er9x = firmwares.last();
-
- Option er9x_options[] = { { "noht", "", 0 }, { "frsky", "", 0 }, { "frsky-noht", "", 0 }, { "jeti", "", 0 }, { "ardupilot", "", 0 }, { "nmea", "", 0 }, { NULL } };
- er9x->addOptions(er9x_options);
- er9x->addOption("noht");
-
RegisterOpen9xFirmwares();
-#ifndef __APPLE__
- firmwares.push_back(new FirmwareInfo("ersky9x", QObject::tr("ersky9x"), new Ersky9xInterface(), "http://ersky9x.googlecode.com/svn/trunk/ersky9x_rom.bin", ERSKY9X_STAMP));
-#endif
- default_firmware_variant = GetFirmwareVariant("opentx-stock-heli-templates-en");
-
+ default_firmware_variant = GetFirmwareVariant("opentx-9x-heli-templates-en");
+ current_firmware_variant = default_firmware_variant;
RegisterEepromInterfaces();
}
-bool LoadEeprom(RadioData &radioData, uint8_t *eeprom, int size)
+bool LoadEeprom(RadioData &radioData, const uint8_t *eeprom, const int size)
{
foreach(EEPROMInterface *eepromInterface, eepromInterfaces) {
if (eepromInterface->load(radioData, eeprom, size))
@@ -712,7 +1228,6 @@ FirmwareVariant GetFirmwareVariant(QString id)
FirmwareVariant result;
foreach(FirmwareInfo * firmware, firmwares) {
-
if (id.contains(firmware->id+"-") || (!id.contains("-") && id.contains(firmware->id))) {
result.id = id;
result.firmware = firmware;
diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h
index 4f91a8719..ab2ad16b4 100644
--- a/companion/src/eeprominterface.h
+++ b/companion/src/eeprominterface.h
@@ -44,14 +44,18 @@ template t LIMIT(t mi, t x, t ma) { return std::min(std::max(mi, x), ma
enum BoardEnum {
BOARD_STOCK,
BOARD_M128,
+ BOARD_MEGA2560,
BOARD_GRUVIN9X,
BOARD_SKY9X,
BOARD_TARANIS,
BOARD_TARANIS_REV4a
};
-#define IS_STOCK(board) (board==BOARD_STOCK || board==BOARD_M128)
-#define IS_ARM(board) (board==BOARD_SKY9X || board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a)
-#define IS_TARANIS(board) (board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a)
+
+#define IS_9X(board) (board==BOARD_STOCK || board==BOARD_M128)
+#define IS_STOCK(board) (board==BOARD_STOCK)
+#define IS_2560(board) (board==BOARD_GRUVIN9X || board==BOARD_MEGA2560)
+#define IS_ARM(board) (board==BOARD_SKY9X || board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a)
+#define IS_TARANIS(board) (board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a)
const uint8_t modn12x3[4][4]= {
{1, 2, 3, 4},
@@ -59,17 +63,18 @@ const uint8_t modn12x3[4][4]= {
{4, 2, 3, 1},
{4, 3, 2, 1} };
-#define C9XMAX_MODELS 60
+#define C9X_MAX_MODELS 60
#define C9X_MAX_PHASES 9
#define C9X_MAX_MIXERS 64
-#define C9X_MAX_EXPOS 32
-#define C9X_MAX_CURVES 16
-#define MAX_POINTS 17
-#define C9X_MAX_GVARS 9
-#define NUM_SAFETY_CHNOUT 16
+#define C9X_MAX_INPUTS 32
+#define C9X_MAX_EXPOS 64
+#define C9X_MAX_CURVES 32
+#define C9X_MAX_POINTS 17
+#define C9X_MAX_GVARS 9
+#define C9X_MAX_ENCODERS 2
#define C9X_NUM_CHNOUT 32 // number of real output channels
#define C9X_NUM_CSW 32 // number of custom switches
-#define C9X_MAX_CUSTOM_FUNCTIONS 32 // number of functions assigned to switches
+#define C9X_MAX_CUSTOM_FUNCTIONS 64 // number of functions assigned to switches
#define C9X_NUM_MODULES 2
#define STK_RUD 1
@@ -101,11 +106,17 @@ const uint8_t modn12x3[4][4]= {
#define DSW_SG1 19
#define DSW_SG2 20
-const uint8_t chout_ar[] = { //First number is 0..23 -> template setup, Second is relevant channel out
-1,2,3,4 , 1,2,4,3 , 1,3,2,4 , 1,3,4,2 , 1,4,2,3 , 1,4,3,2,
-2,1,3,4 , 2,1,4,3 , 2,3,1,4 , 2,3,4,1 , 2,4,1,3 , 2,4,3,1,
-3,1,2,4 , 3,1,4,2 , 3,2,1,4 , 3,2,4,1 , 3,4,1,2 , 3,4,2,1,
-4,1,2,3 , 4,1,3,2 , 4,2,1,3 , 4,2,3,1 , 4,3,1,2 , 4,3,2,1 }; // TODO delete it?
+// Beep center bits
+#define BC_BIT_RUD (0x01)
+#define BC_BIT_ELE (0x02)
+#define BC_BIT_THR (0x04)
+#define BC_BIT_AIL (0x08)
+#define BC_BIT_P1 (0x10)
+#define BC_BIT_P2 (0x20)
+#define BC_BIT_P3 (0x40)
+#define BC_BIT_P4 (0x80)
+#define BC_BIT_REA (0x80)
+#define BC_BIT_REB (0x100)
// TODO remove this enum!
enum EnumKeys {
@@ -129,44 +140,6 @@ enum EnumKeys {
#endif
};
-enum CSFunction {
- CS_FN_OFF,
- CS_FN_VPOS,
- CS_FN_VNEG,
- CS_FN_APOS,
- CS_FN_ANEG,
- CS_FN_AND,
- CS_FN_OR,
- CS_FN_XOR,
- CS_FN_EQUAL,
- CS_FN_NEQUAL,
- CS_FN_GREATER,
- CS_FN_LESS,
- CS_FN_EGREATER,
- CS_FN_ELESS,
- CS_FN_DPOS,
- CS_FN_DAPOS,
- CS_FN_VEQUAL, // added at the end to avoid everything renumbered
- CS_FN_TIM,
- CS_FN_MAXF
-};
-
-enum CSFunctionFamily {
- CS_FAMILY_VOFS,
- CS_FAMILY_VBOOL,
- CS_FAMILY_VCOMP,
- CS_FAMILY_TIMERS
-};
-
-inline CSFunctionFamily getCSFunctionFamily(int fn)
-{
- if (fn==CS_FN_TIM) {
- return (CS_FAMILY_TIMERS);
- } else {
- return ((fnCS_FN_ELESS) ? CS_FAMILY_VOFS : (fn= 0 ? abs(value)%65536 : -(abs(value)%65536))
+ index(value >= 0 ? abs(value)%65536 : -(abs(value)%65536)),
+ model(model)
{
}
- RawSource(RawSourceType type, int index=0):
+ RawSource(RawSourceType type, int index=0, const ModelData * model=NULL):
type(type),
- index(index)
+ index(index),
+ model(model)
{
}
@@ -283,32 +314,31 @@ class RawSource {
QString toString();
- int getDecimals(const ModelData & Model);
- double getMin(const ModelData & Model);
- double getMax(const ModelData & Model);
- double getStep(const ModelData & Model);
- double getOffset(const ModelData & Model);
- int getRawOffset(const ModelData & Model);
+ RawSourceRange getRange(bool singleprec=false);
- bool operator== ( const RawSource& other) {
+ bool operator == ( const RawSource & other) {
return (this->type == other.type) && (this->index == other.index);
}
+ bool operator != ( const RawSource & other) {
+ return (this->type != other.type) || (this->index != other.index);
+ }
+
RawSourceType type;
int index;
+ const ModelData * model;
};
enum RawSwitchType {
SWITCH_TYPE_NONE,
SWITCH_TYPE_SWITCH,
SWITCH_TYPE_VIRTUAL,
- SWITCH_TYPE_MOMENT_SWITCH,
- SWITCH_TYPE_MOMENT_VIRTUAL,
+ SWITCH_TYPE_MULTIPOS_POT,
+ SWITCH_TYPE_TRIM,
+ SWITCH_TYPE_ROTARY_ENCODER,
SWITCH_TYPE_ON,
SWITCH_TYPE_OFF,
- SWITCH_TYPE_ONM,
- SWITCH_TYPE_TRN,
- SWITCH_TYPE_REA,
+ SWITCH_TYPE_TIMER_MODE
};
class RawSwitch {
@@ -378,6 +408,11 @@ enum BeeperMode {
class GeneralSettings {
public:
GeneralSettings();
+
+ int getDefaultStick(unsigned int channel) const;
+ RawSource getDefaultSource(unsigned int channel) const;
+ int getDefaultChannel(unsigned int stick) const;
+
unsigned int version;
unsigned int variant;
int calibMid[NUM_STICKS+C9X_NUM_POTS];
@@ -404,7 +439,6 @@ class GeneralSettings {
int timezone;
bool optrexDisplay;
unsigned int inactivityTimer;
- bool throttleReversed;
bool minuteBeep;
bool preBeep;
bool flashBeep;
@@ -412,11 +446,12 @@ class GeneralSettings {
bool frskyinternalalarm;
bool disableBG;
unsigned int splashMode;
+ int splashDuration;
uint8_t filterInput; // TODO enum
unsigned int backlightDelay;
bool blightinv;
bool stickScroll;
- unsigned int templateSetup; //RETA order according to chout_ar array // TODO enum
+ unsigned int templateSetup; //RETA order according to chout_ar array
int PPM_Multiplier;
int hapticLength;
unsigned int reNavigation;
@@ -446,22 +481,61 @@ class GeneralSettings {
int beepVolume;
int wavVolume;
int varioVolume;
+ int varioPitch;
+ int varioRange;
+ int varioRepeat;
int backgroundVolume;
unsigned int mavbaud;
unsigned int switchUnlockStates;
+ unsigned int hw_uartMode;
+ unsigned int potsType[8];
+};
+
+class CurveReference {
+ public:
+ enum CurveRefType {
+ CURVE_REF_DIFF,
+ CURVE_REF_EXPO,
+ CURVE_REF_FUNC,
+ CURVE_REF_CUSTOM
+ };
+
+ CurveReference() { clear(); }
+
+ CurveReference(CurveRefType type, int value):
+ type(type),
+ value(value)
+ {
+ }
+
+ void clear() { memset(this, 0, sizeof(CurveReference)); }
+
+ CurveRefType type;
+ int value;
+
+ QString toString();
+};
+
+enum InputMode {
+ INPUT_MODE_NONE,
+ INPUT_MODE_POS,
+ INPUT_MODE_NEG,
+ INPUT_MODE_BOTH
};
class ExpoData {
public:
ExpoData() { clear(); }
- unsigned int mode; // 0=end, 1=pos, 2=neg, 3=both
+ RawSource srcRaw;
+ unsigned int scale;
+ unsigned int mode;
unsigned int chn;
RawSwitch swtch;
unsigned int phases; // -5=!FP4, 0=normal, 5=FP4
int weight;
- int expo;
- unsigned int curveMode;
- int curveParam;
+ int offset;
+ CurveReference curve;
+ int carryTrim;
char name[10+1];
void clear() { memset(this, 0, sizeof(ExpoData)); }
};
@@ -474,11 +548,19 @@ class CurvePoint {
class CurveData {
public:
+ enum CurveType {
+ CURVE_TYPE_STANDARD,
+ CURVE_TYPE_CUSTOM,
+ CURVE_TYPE_LAST = CURVE_TYPE_CUSTOM
+ };
+
CurveData() { clear(5); }
- bool custom; // 0=end, 1=pos, 2=neg, 3=both
- uint8_t count;
- CurvePoint points[MAX_POINTS];
- char name[6+1];
+
+ CurveType type;
+ bool smooth;
+ int count;
+ CurvePoint points[C9X_MAX_POINTS];
+ char name[6+1];
void clear(int count) { memset(this, 0, sizeof(CurveData)); this->count = count; }
};
@@ -492,7 +574,8 @@ class LimitData {
int ppmCenter;
bool symetrical;
char name[6+1];
- void clear() { memset(this, 0, sizeof(LimitData)); min = -100; max = +100; }
+ CurveReference curve;
+ void clear() { memset(this, 0, sizeof(LimitData)); min = -1000; max = +1000; }
};
enum MltpxValue {
@@ -501,17 +584,14 @@ enum MltpxValue {
MLTPX_REP=2
};
-
class MixData {
public:
MixData() { clear(); }
unsigned int destCh; // 1..C9X_NUM_CHNOUT
RawSource srcRaw;
- unsigned int srcVariant;
int weight;
- int differential;
RawSwitch swtch;
- int curve; //0=symmetrisch
+ CurveReference curve; //0=symmetrisch
unsigned int delayUp;
unsigned int delayDown;
unsigned int speedUp; // Servogeschwindigkeit aus Tabelle (10ms Cycle)
@@ -520,39 +600,71 @@ class MixData {
bool noExpo;
MltpxValue mltpx; // multiplex method 0=+ 1=* 2=replace
unsigned int mixWarn; // mixer warning
- unsigned int enableFmTrim;
unsigned int phases; // -5=!FP4, 0=normal, 5=FP4
- unsigned int lateOffset;
int sOffset;
char name[10+1];
void clear() { memset(this, 0, sizeof(MixData)); }
};
-class CustomSwData { // Custom Switches data
- public:
- CustomSwData() { clear(); }
- int val1; //input
- int val2; //offset
- unsigned int func;
- unsigned int delay;
- unsigned int duration;
- unsigned int andsw;
- void clear() { memset(this, 0, sizeof(CustomSwData)); }
+enum CSFunction {
+ LS_FN_OFF,
+ LS_FN_VPOS,
+ LS_FN_VNEG,
+ LS_FN_APOS,
+ LS_FN_ANEG,
+ LS_FN_AND,
+ LS_FN_OR,
+ LS_FN_XOR,
+ LS_FN_EQUAL,
+ LS_FN_NEQUAL,
+ LS_FN_GREATER,
+ LS_FN_LESS,
+ LS_FN_EGREATER,
+ LS_FN_ELESS,
+ LS_FN_DPOS,
+ LS_FN_DAPOS,
+ LS_FN_VEQUAL, // added at the end to avoid everything renumbered
+ LS_FN_VALMOSTEQUAL,
+ LS_FN_TIMER,
+ LS_FN_STICKY,
+ LS_FN_STAY,
+ // later ... LS_FN_RANGE,
+ LS_FN_MAX
};
-class SafetySwData { // Custom Switches data
- public:
- SafetySwData() { clear(); }
- RawSwitch swtch;
- int val;
+enum CSFunctionFamily {
+ LS_FAMILY_VOFS,
+ LS_FAMILY_VBOOL,
+ LS_FAMILY_VCOMP,
+ LS_FAMILY_TIMER,
+ LS_FAMILY_STICKY,
+ LS_FAMILY_STAY,
+};
- void clear() { memset(this, 0, sizeof(SafetySwData)); }
+class LogicalSwitchData { // Custom Switches data
+ public:
+ LogicalSwitchData(unsigned int func=0)
+ {
+ clear();
+ this->func = func;
+ }
+ unsigned int func;
+ int val1;
+ int val2;
+ int val3;
+ unsigned int delay;
+ unsigned int duration;
+ int andsw;
+ void clear() { memset(this, 0, sizeof(LogicalSwitchData)); }
+ CSFunctionFamily getFunctionFamily();
+ QString funcToString();
+ QString toString(const ModelData & model);
};
enum AssignFunc {
FuncSafetyCh1 = 0,
- FuncSafetyCh16 = FuncSafetyCh1+15,
+ FuncSafetyCh32 = FuncSafetyCh1+C9X_NUM_CHNOUT-1,
FuncTrainer,
FuncTrainerRUD,
FuncTrainerELE,
@@ -562,6 +674,8 @@ enum AssignFunc {
FuncPlaySound,
FuncPlayHaptic,
FuncReset,
+ FuncSetTimer1,
+ FuncSetTimer2,
FuncVario,
FuncPlayPrompt,
FuncPlayBoth,
@@ -572,38 +686,41 @@ enum AssignFunc {
FuncBackgroundMusic,
FuncBackgroundMusicPause,
FuncAdjustGV1,
- FuncAdjustGV2,
- FuncAdjustGV3,
- FuncAdjustGV4,
- FuncAdjustGV5,
- FuncCount
+ FuncAdjustGVLast = FuncAdjustGV1+C9X_MAX_GVARS-1,
+ FuncCount,
+ FuncReserve = -1
};
class FuncSwData { // Function Switches data
public:
- FuncSwData() { clear(); }
+ FuncSwData(AssignFunc func=FuncSafetyCh1) { clear(); this->func = func; }
RawSwitch swtch;
AssignFunc func;
int param;
char paramarm[10];
unsigned int enabled; // TODO perhaps not any more the right name
unsigned int adjustMode;
- unsigned int repeatParam;
+ int repeatParam;
void clear() { memset(this, 0, sizeof(FuncSwData)); }
+ QString funcToString();
+ QString paramToString();
+ QString repeatToString();
+ QStringList toStringList();
};
class PhaseData {
public:
PhaseData() { clear(); }
- int trimRef[NUM_STICKS]; //
+ int trimMode[NUM_STICKS];
+ int trimRef[NUM_STICKS];
int trim[NUM_STICKS];
RawSwitch swtch;
char name[10+1];
unsigned int fadeIn;
unsigned int fadeOut;
int rotaryEncoders[2];
- int gvars[5];
- void clear() { memset(this, 0, sizeof(PhaseData)); for (int i=0; i off, abs, THs, TH%, THt, sw/!sw, !m_sw/!m_sw
- int8_t modeB;
- bool minuteBeep;
- bool countdownBeep;
- bool dir; // 0=>Count Down, 1=>Count Up
+ RawSwitch mode;
+ bool minuteBeep;
+ unsigned int countdownBeep;
+ bool dir; // 0=>Count Down, 1=>Count Up
unsigned int val;
- bool persistent;
- int pvalue;
- void clear() { memset(this, 0, sizeof(TimerData)); }
+ bool persistent;
+ int pvalue;
+ void clear() { memset(this, 0, sizeof(TimerData)); mode = RawSwitch(SWITCH_TYPE_TIMER_MODE, 0); }
};
enum Protocol {
@@ -774,16 +886,33 @@ class ModuleData {
void clear() { memset(this, 0, sizeof(ModuleData)); }
};
+#define C9X_MAX_SCRIPTS 7
+#define C9X_MAX_SCRIPT_INPUTS 10
+class ScriptData {
+ public:
+ ScriptData() { clear(); }
+ char filename[10+1];
+ char name[10+1];
+ int inputs[C9X_MAX_SCRIPT_INPUTS];
+ void clear() { memset(this, 0, sizeof(ScriptData)); }
+};
+
class ModelData {
public:
ModelData();
+ ModelData(const ModelData & src);
+ ModelData & operator = (const ModelData & src);
+
+ ExpoData * insertInput(const int idx);
+ void removeInput(const int idx);
+
bool used;
char name[12+1];
uint8_t modelVoice;
TimerData timers[2];
bool thrTrim; // Enable Throttle Trim
bool thrExpo; // Enable Throttle Expo
- unsigned int trimInc; // Trim Increments
+ int trimInc; // Trim Increments
bool disableThrottleWarning;
unsigned int beepANACenter; // 1<<0->A1.. 1<<6->A7
@@ -794,18 +923,25 @@ class ModelData {
PhaseData phaseData[C9X_MAX_PHASES];
MixData mixData[C9X_MAX_MIXERS];
LimitData limitData[C9X_NUM_CHNOUT];
+
+ char inputNames[C9X_MAX_INPUTS][4+1];
ExpoData expoData[C9X_MAX_EXPOS];
+
CurveData curves[C9X_MAX_CURVES];
- CustomSwData customSw[C9X_NUM_CSW];
+ LogicalSwitchData customSw[C9X_NUM_CSW];
FuncSwData funcSw[C9X_MAX_CUSTOM_FUNCTIONS];
- SafetySwData safetySw[C9X_NUM_CHNOUT];
SwashRingData swashRingData;
unsigned int thrTraceSrc;
int8_t traineron; // 0 disable trainer, 1 allow trainer
- int8_t t2throttle; // Start timer2 using throttle
- unsigned int modelId;
+ unsigned int modelId;
unsigned int switchWarningStates;
+ unsigned int nSwToWarn;
+ unsigned int nPotsToWarn;
+ int potPosition[C9X_NUM_POTS];
+ bool displayText;
+ // TODO structure
char gvars_names[C9X_MAX_GVARS][6+1];
+ bool gvars_popups[C9X_MAX_GVARS];
uint8_t gvsource[5];
uint8_t bt_telemetry;
uint8_t numVoice;
@@ -821,13 +957,21 @@ class ModelData {
ModuleData moduleData[C9X_NUM_MODULES+1/*trainer*/];
+ ScriptData scriptData[C9X_MAX_SCRIPTS];
+
void clear();
bool isempty();
- void setDefault(uint8_t id);
- unsigned int getTrimFlightPhase(uint8_t idx, int8_t phase);
+ void setDefaultInputs(const GeneralSettings & settings);
+ void setDefaultMixes(const GeneralSettings & settings);
+ void setDefaultValues(unsigned int id, const GeneralSettings & settings);
+ int getTrimValue(int phaseIdx, int trimIdx);
+ void setTrimValue(int phaseIdx, int trimIdx, int value);
ModelData removeGlobalVars();
+ void clearMixes();
+ void clearInputs();
+
protected:
void removeGlobalVar(int & var);
};
@@ -835,52 +979,37 @@ class ModelData {
class RadioData {
public:
GeneralSettings generalSettings;
- ModelData models[C9XMAX_MODELS];
+ ModelData models[C9X_MAX_MODELS];
};
+// TODO rename FlightPhase to FlightMode
enum Capability {
- OwnerName,
FlightPhases,
- FlightPhasesAreNamed,
+ FlightModesName,
FlightPhasesHaveFades,
- SimulatorType,
Mixes,
MixesWithoutExpo,
Timers,
- TimerTriggerB,
TimeDivisions,
- minuteBeep,
- countdownBeep,
CustomFunctions,
VoicesAsNumbers,
VoicesMaxLength,
ModelVoice,
MultiLangVoice,
ModelImage,
- InstantTrimSW,
Pots,
Switches,
SwitchesPositions,
- CustomSwitches,
+ LogicalSwitches,
CustomAndSwitches,
HasNegAndSwitches,
- CustomSwitchesExt,
+ LogicalSwitchesExt,
RotaryEncoders,
Outputs,
+ ChannelsName,
ExtraChannels,
ExtraInputs,
- ExtraTrims,
ExtendedTrims,
- HasNegCurves,
- HasInputFilter,
- HasExpoCurves,
- ExpoIsCurve,
- ExpoCurve5,
- ExpoCurve9,
- CustomCurves,
- NumCurves3,
- NumCurves5,
- NumCurves9,
NumCurves,
NumCurvePoints,
OffsetWeight,
@@ -893,14 +1022,9 @@ enum Capability {
Haptic,
HapticLength,
HapticMode,
- HasBlInvert,
HasBeeper,
- BandgapMeasure,
- PotScrolling,
- TrainerSwitch,
ModelTrainerEnable,
Timer2ThrTrig,
- HasTTrace,
HasExpoNames,
HasMixerNames,
HasChNames,
@@ -910,15 +1034,9 @@ enum Capability {
HasPPMStart,
HasGeneralUnits,
HasFAIMode,
- NoTimerDirs,
- NoThrExpo,
OptrexDisplay,
PPMExtCtrl,
PPMFrameLength,
- MixFmTrim,
- gsSwitchMask,
- pmSwitchMask,
- BLonStickMove,
DSM2Indexes,
Telemetry,
TelemetryUnits,
@@ -928,17 +1046,11 @@ enum Capability {
GvarsInCS,
GvarsAreNamed,
GvarsFlightPhases,
- GvarsHaveSources,
- GvarsAsSources,
- GvarsAsWeight,
- GvarsNum,
- GvarsOfsNum,
+ GvarsName,
NoTelemetryProtocol,
- TelemetryCSFields,
- TelemetryColsCSFields,
+ TelemetryCustomScreens,
+ TelemetryCustomScreensFieldsPerLine,
TelemetryRSSIModel,
- TelemetryAlarm,
- TelemetryInternalAlarm,
TelemetryTimeshift,
TelemetryMaxMultiplier,
HasAltitudeSel,
@@ -946,14 +1058,8 @@ enum Capability {
HasVarioSink,
HasVariants,
HasFailsafe,
- HasPPMSim,
- HasCrossTrims,
- HasStickScroll,
- HasFixOffset,
HasSoundMixer,
NumModules,
- FSSwitch,
- DiffMixers,
PPMCenter,
SYMLimits,
HasCurrentCalibration,
@@ -961,8 +1067,6 @@ enum Capability {
HasBrightness,
HasContrast,
PerModelTimers,
- PerModelThrottleWarning,
- PerModelThrottleInvert,
SlowScale,
SlowRange,
PermTimers,
@@ -970,14 +1074,17 @@ enum Capability {
CSFunc,
LCDWidth,
GetThrSwitch,
-};
-
-enum UseContext {
- DefaultContext,
- TimerContext,
- FlightPhaseContext,
- MixerContext,
- ExpoContext,
+ HasDisplayText,
+ VirtualInputs,
+ TrainerInputs,
+ LuaInputs,
+ LimitsPer1000,
+ EnhancedCurves,
+ HasFasOffset,
+ HasMahPersistent,
+ MultiposPots,
+ MultiposPotsPositions,
+ SimulatorVariant,
};
class SimulatorInterface;
@@ -996,7 +1103,7 @@ class EEPROMInterface
inline BoardEnum getBoard() { return board; }
- virtual bool load(RadioData &radioData, uint8_t *eeprom, int size) = 0;
+ virtual bool load(RadioData &radioData, const uint8_t *eeprom, int size) = 0;
virtual bool loadBackup(RadioData &radioData, uint8_t *eeprom, int esize, int index) = 0;
@@ -1012,11 +1119,7 @@ class EEPROMInterface
virtual int isAvailable(Protocol proto, int port=0) = 0;
- virtual bool isAvailable(const RawSwitch & swtch, UseContext context) { return true; }
-
- virtual bool isAvailable(const RawSource & source, UseContext context) { return true; }
-
- virtual SimulatorInterface * getSimulator() = 0;
+ virtual SimulatorInterface * getSimulator() { return NULL; }
virtual const int getEEpromSize() = 0;
@@ -1038,6 +1141,12 @@ extern QString EEPROMWarnings;
void setEEPROMString(char *dst, const char *src, int size);
void getEEPROMString(char *dst, const char *src, int size);
+float ValToTim(int value);
+int TimToVal(float value);
+
+QString getSignedStr(int value);
+QString getGVarString(int16_t val, bool sign=false);
+
inline int applyStickMode(int stick, unsigned int mode)
{
if (mode == 0 || mode > 4) {
@@ -1097,14 +1206,14 @@ inline void applyStickModeToModel(ModelData &model, unsigned int mode)
// virtual switches
for (int i=0; isetupUi(this);
- QLabel * lb_fp[] = {ui->lb_FP0,ui->lb_FP1,ui->lb_FP2,ui->lb_FP3,ui->lb_FP4,ui->lb_FP5,ui->lb_FP6,ui->lb_FP7,ui->lb_FP8 };
- QCheckBox * cb_fp[] = {ui->cb_FP0,ui->cb_FP1,ui->cb_FP2,ui->cb_FP3,ui->cb_FP4,ui->cb_FP5,ui->cb_FP6,ui->cb_FP7,ui->cb_FP8 };
-
- setWindowTitle(tr("DEST -> %1").arg(getStickStr(ed->chn)));
- QRegExp rx(CHAR_FOR_NAMES_REGEX);
-
- if (GetEepromInterface()->getCapability(GvarsAsWeight)) {
- int gvars=0;
- if (GetEepromInterface()->getCapability(HasVariants)) {
- if ((GetCurrentFirmwareVariant() & GVARS_VARIANT)) {
- gvars=1;
- }
- } else {
- gvars=1;
- }
- if (gvars==0) {
- ui->expoGV->setDisabled(true);
- ui->weightGV->setDisabled(true);
- ui->expoCurveGV->setDisabled(true);
- if (ed->expo>100) {
- ed->expo=0;
- }
- if (ed->weight>100 || ed->weight<-100) {
- ed->weight=100;
- }
- if (ed->curveParam>100 || ed->curveParam<-100) {
- ed->curveParam=0;
- }
- }
- populateGVCB(ui->expoCB,ed->expo);
- populateGVCB(ui->weightCB,ed->weight);
- populateGVCB(ui->expoCurveCB,ed->curveParam);
-
- ui->weightSB->setMinimum(0);
- ui->weightSB->setMaximum(100);
- if (ed->weight>100 || ed->weight<0) {
- ui->weightGV->setChecked(true);
- ui->weightSB->hide();
- ui->weightCB->show();
- } else {
- ui->weightGV->setChecked(false);
- ui->weightSB->setValue(ed->weight);
- ui->weightSB->show();
- ui->weightCB->hide();
- }
-
- ui->expoSB->setMinimum(-100);
- ui->expoSB->setMaximum(100);
- if (ed->expo>100 || ed->expo<-100) {
- ui->expoGV->setChecked(true);
- ui->expoSB->hide();
- ui->expoCB->show();
- } else {
- ui->expoGV->setChecked(false);
- ui->expoSB->setValue(ed->expo);
- ui->expoSB->show();
- ui->expoCB->hide();
- }
-
- ui->expoCurveSB->setMinimum(-100);
- ui->expoCurveSB->setMaximum(100);
- if (ed->curveParam>100 || ed->curveParam<-100) {
- ui->expoCurveGV->setChecked(true);
- ui->expoCurveSB->hide();
- ui->expoCurveCB->show();
- } else {
- ui->expoCurveGV->setChecked(false);
- ui->expoCurveSB->setValue(ed->curveParam);
- ui->expoCurveSB->show();
- ui->expoCurveCB->hide();
- }
- } else {
- ui->expoGV->hide();
- ui->weightGV->hide();
- ui->expoCurveGV->hide();
- ui->expoSB->setMinimum(-100);
- ui->expoSB->setMaximum(100);
- ui->expoSB->setValue(ed->expo);
- ui->expoCurveSB->setMinimum(-100);
- ui->expoCurveSB->setMaximum(100);
- ui->expoCurveSB->setValue(ed->curveParam);
- ui->weightSB->setMinimum(0);
- ui->weightSB->setMaximum(100);
- ui->weightSB->setValue(ed->weight);
- }
- populateSwitchCB(ui->switchesCB,ed->swtch);
- if (ed->curveMode==0) {
- populateExpoCurvesCB(ui->curvesCB,0); // TODO capacity for er9x
- } else {
- populateExpoCurvesCB(ui->curvesCB,ed->curveParam); // TODO capacity for er9x
- }
- ui->modeCB->setCurrentIndex(ed->mode-1);
- if (!GetEepromInterface()->getCapability(HasExpoCurves)) {
- ui->label_curves->hide();
- ui->curvesCB->hide();
- ed->curveMode=1;
- }
- if (!GetEepromInterface()->getCapability(ExpoIsCurve)) {
- ui->expoCurveCB->hide();
- ui->expoCurveSB->hide();
- ui->expoCurveGV->hide();
- ui->label_curves->setText(tr("Curve"));
- } else {
- ui->label_expo->hide();
- ui->expoCB->hide();
- ui->expoGV->hide();
- ui->expoSB->hide();
- }
- if (!GetEepromInterface()->getCapability(FlightPhases)) {
- ui->label_phases->hide();
- for (int i=0; i<9; i++) {
- lb_fp[i]->hide();
- cb_fp[i]->hide();
- }
- } else {
- int mask=1;
- for (int i=0; i<9 ; i++) {
- if ((ed->phases & mask)==0) {
- cb_fp[i]->setChecked(true);
- }
- mask <<= 1;
- }
- for (int i=GetEepromInterface()->getCapability(FlightPhases); i<9;i++) {
- lb_fp[i]->hide();
- cb_fp[i]->hide();
- }
- }
- int expolength=GetEepromInterface()->getCapability(HasExpoNames);
- if (!expolength) {
- ui->label_name->hide();
- ui->expoName->hide();
- } else {
- ui->expoName->setMaxLength(expolength);
- }
- ui->expoName->setValidator(new QRegExpValidator(rx, this));
- ui->expoName->setText(ed->name);
- valuesChanged();
- connect(ui->expoName,SIGNAL(editingFinished()),this,SLOT(valuesChanged()));
- connect(ui->expoCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
- connect(ui->expoSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged()));
- connect(ui->expoCurveCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
- connect(ui->expoCurveSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged()));
- connect(ui->weightCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
- connect(ui->weightSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged()));
- connect(ui->switchesCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
- connect(ui->curvesCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
- connect(ui->modeCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
- connect(ui->expoGV,SIGNAL(stateChanged(int)),this,SLOT(widgetChanged()));
- connect(ui->expoCurveGV,SIGNAL(stateChanged(int)),this,SLOT(widgetChanged()));
- connect(ui->weightGV,SIGNAL(stateChanged(int)),this,SLOT(widgetChanged()));
- for (int i=0; i<9; i++) {
- connect(cb_fp[i],SIGNAL(toggled(bool)),this,SLOT(valuesChanged()));
- }
- QTimer::singleShot(0, this, SLOT(shrink()));
-}
-
-ExpoDialog::~ExpoDialog()
-{
- delete ui;
-}
-
-void ExpoDialog::changeEvent(QEvent *e)
-{
- QDialog::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
-}
-
-void ExpoDialog::widgetChanged()
-{
- if (GetEepromInterface()->getCapability(GvarsAsWeight)) {
- int gvars=0;
- if (GetEepromInterface()->getCapability(HasVariants)) {
- if ((GetCurrentFirmwareVariant() & GVARS_VARIANT)) {
- gvars=1;
- }
- } else {
- gvars=1;
- }
- if (gvars==1) {
- if (!GetEepromInterface()->getCapability(ExpoIsCurve)) {
- if (ui->expoGV->isChecked()) {
- ui->expoCB->show();
- ui->expoSB->hide();
- } else {
- ui->expoCB->hide();
- ui->expoSB->show();
- }
- } else {
- if (ui->expoCurveGV->isChecked()) {
- ui->expoCurveCB->show();
- ui->expoCurveSB->hide();
- } else {
- ui->expoCurveCB->hide();
- ui->expoCurveSB->show();
- }
- }
- if (ui->weightGV->isChecked()) {
- ui->weightCB->show();
- ui->weightSB->hide();
- } else {
- ui->weightCB->hide();
- ui->weightSB->show();
- }
- }
- valuesChanged();
- QTimer::singleShot(0, this, SLOT(shrink()));
- }
-}
-
-
-void ExpoDialog::valuesChanged()
-{
- QCheckBox * cb_fp[] = {ui->cb_FP0,ui->cb_FP1,ui->cb_FP2,ui->cb_FP3,ui->cb_FP4,ui->cb_FP5,ui->cb_FP6,ui->cb_FP7,ui->cb_FP8 };
- if (ui->curvesCB->currentIndex()==0) {
- if (GetEepromInterface()->getCapability(ExpoIsCurve)) {
- ed->curveMode = 0;
- ui->expoCurveGV->show();
- if (ui->expoCurveGV->isChecked()) {
- ui->expoCurveCB->show();
- ui->expoCurveSB->hide();
- ed->curveParam = ui->expoCurveCB->itemData(ui->expoCurveCB->currentIndex()).toInt();
- } else {
- ui->expoCurveCB->hide();
- ui->expoCurveSB->show();
- ed->curveParam = ui->expoCurveSB->value();
- }
- ed->expo = ed->curveParam;
- } else {
- ui->expoCurveCB->hide();
- ui->expoCurveSB->hide();
- ui->expoCurveGV->hide();
- ed->curveMode = 0;
- if (ui->expoGV->isChecked()) {
- ed->expo = ui->expoCB->itemData(ui->expoCB->currentIndex()).toInt();
- } else {
- ed->expo = ui->expoSB->value();
- }
- ed->curveParam = ed->expo;
- }
- } else {
- if (!GetEepromInterface()->getCapability(ExpoIsCurve)) {
- ed->curveMode = 1;
- ed->curveParam = ui->curvesCB->currentIndex();
- if (ui->expoGV->isChecked()) {
- ed->expo = ui->expoCB->itemData(ui->expoCB->currentIndex()).toInt();
- } else {
- ed->expo = ui->expoSB->value();
- }
- } else {
- ed->curveMode = 1;
- ed->curveParam = ui->curvesCB->currentIndex();
- ed->expo = 0;
- }
- ui->expoCurveCB->hide();
- ui->expoCurveSB->hide();
- ui->expoCurveGV->hide();
- }
- if (ui->weightGV->isChecked()) {
- ed->weight = ui->weightCB->itemData(ui->weightCB->currentIndex()).toInt();
- } else {
- ed->weight = ui->weightSB->value();
- }
- ed->swtch = RawSwitch(ui->switchesCB->itemData(ui->switchesCB->currentIndex()).toInt());
- ed->mode = ui->modeCB->currentIndex() + 1;
- int i=0;
- for (i=0; iexpoName->text().toAscii().length(); i++) {
- ed->name[i]=ui->expoName->text().toAscii().at(i);
- }
- ed->name[i]=0;
- ed->phases=0;
- for (int i=8; i>=0 ; i--) {
- if (!cb_fp[i]->checkState()) {
- ed->phases+=1;
- }
- ed->phases<<=1;
- }
- ed->phases>>=1;
- if (GetEepromInterface()->getCapability(FlightPhases)) {
- int zeros=0;
- int ones=0;
- int phtemp=ed->phases;
- for (int i=0; igetCapability(FlightPhases); i++) {
- if (phtemp & 1) {
- ones++;
- }
- else {
- zeros++;
- }
- phtemp >>=1;
- }
- if (zeros==1) {
- phtemp=ed->phases;
- for (int i=0; igetCapability(FlightPhases); i++) {
- if ((phtemp & 1)==0) {
- break;
- }
- phtemp >>=1;
- }
- }
- else if (ones==1) {
- phtemp=ed->phases;
- for (int i=0; igetCapability(FlightPhases); i++) {
- if (phtemp & 1) {
- break;
- }
- phtemp >>=1;
- }
- }
- } else {
- ed->phases=0;
- }
-}
-
-void ExpoDialog::shrink()
-{
- resize(0,0);
-}
diff --git a/companion/src/expodialog.h b/companion/src/expodialog.h
deleted file mode 100644
index a7630cc87..000000000
--- a/companion/src/expodialog.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef EXPODIALOG_H
-#define EXPODIALOG_H
-
-#include
-#include "eeprominterface.h"
-
-namespace Ui {
- class ExpoDialog;
-}
-
-class ExpoDialog : public QDialog {
- Q_OBJECT
-public:
- ExpoDialog(QWidget *parent, ExpoData *mixdata, int stickMode);
- ~ExpoDialog();
-
-protected:
- void changeEvent(QEvent *e);
-
-private slots:
- void valuesChanged();
- void widgetChanged();
- void shrink();
-
-private:
- Ui::ExpoDialog *ui;
- ExpoData *ed;
-};
-
-#endif // EXPODIALOG_H
diff --git a/companion/src/file.cpp b/companion/src/file.cpp
index 10c918cf3..404a40db8 100644
--- a/companion/src/file.cpp
+++ b/companion/src/file.cpp
@@ -323,7 +323,10 @@ unsigned int EFile::readRlc12(uint8_t *buf, unsigned int i_len, bool rlc2)
if (read(&m_bRlc, 1) !=1) break; //read how many bytes to read
- assert(m_bRlc & 0x7f);
+ if (!(m_bRlc & 0x7f)) {
+ qDebug() << "RLC decoding error!";
+ return 0;
+ }
if (rlc2) {
if(m_bRlc&0x80){ // if contains high byte
diff --git a/companion/src/firmwares/er9x/er9xeeprom.cpp b/companion/src/firmwares/er9x/er9xeeprom.cpp
index 335121706..8cf91d022 100644
--- a/companion/src/firmwares/er9x/er9xeeprom.cpp
+++ b/companion/src/firmwares/er9x/er9xeeprom.cpp
@@ -3,26 +3,6 @@
#include "helpers.h"
#include
-int8_t er9xFromSwitch(const RawSwitch & sw)
-{
- switch (sw.type) {
- case SWITCH_TYPE_SWITCH:
- return sw.index;
- case SWITCH_TYPE_VIRTUAL:
- return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index);
- case SWITCH_TYPE_ON:
- return 22;
- case SWITCH_TYPE_OFF:
- return -22;
- case SWITCH_TYPE_MOMENT_SWITCH:
- return sw.index > 0 ? (22 + sw.index) : (-22 + sw.index);
- case SWITCH_TYPE_MOMENT_VIRTUAL:
- return sw.index > 0 ? (31 + sw.index) : (-31 + sw.index);
- default:
- return 0;
- }
-}
-
RawSwitch er9xToSwitch(int8_t sw)
{
uint8_t swa = abs(sw);
@@ -37,9 +17,9 @@ RawSwitch er9xToSwitch(int8_t sw)
else if (sw == -22)
return RawSwitch(SWITCH_TYPE_OFF);
else if (swa <= 22+9)
- return RawSwitch(SWITCH_TYPE_MOMENT_SWITCH, sw > 0 ? sw-22 : sw+22);
+ return RawSwitch(SWITCH_TYPE_SWITCH, sw > 0 ? sw-22 : sw+22);
else
- return RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, sw > 0 ? sw-22-9 : sw+22+9);
+ return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-22-9 : sw+22+9);
}
t_Er9xTrainerMix::t_Er9xTrainerMix()
@@ -47,15 +27,6 @@ t_Er9xTrainerMix::t_Er9xTrainerMix()
memset(this, 0, sizeof(t_Er9xTrainerMix));
}
-t_Er9xTrainerMix::t_Er9xTrainerMix(TrainerMix &c9x)
-{
- memset(this, 0, sizeof(t_Er9xTrainerMix));
- srcChn = c9x.src;
- swtch = er9xFromSwitch(c9x.swtch);
- studWeight = (8 * c9x.weight) / 25;
- mode = c9x.mode;
-}
-
t_Er9xTrainerMix::operator TrainerMix()
{
TrainerMix c9x;
@@ -71,15 +42,6 @@ t_Er9xTrainerData::t_Er9xTrainerData()
memset(this, 0, sizeof(t_Er9xTrainerData));
}
-t_Er9xTrainerData::t_Er9xTrainerData(TrainerData &c9x)
-{
- memset(this, 0, sizeof(t_Er9xTrainerData));
- for (int i=0; i125) {
- if (c9x.weight>0) {
- int index=abs(c9x.weight)-10000;
- int gvar=125+index;
- if (gvar>127) {
- gvar-=256;
- }
- weight = gvar;
- } else {
- EEPROMWarnings += ::QObject::tr("er9x doesn't have negative gvars as weight") + "\n";
- weight=0;
- }
- } else {
- weight = c9x.weight;
- }
-
- if (abs(c9x.sOffset)>125) {
- if (c9x.sOffset>0) {
- int index=abs(c9x.sOffset)-10000;
- int gvar=125+index;
- if (gvar>127) {
- gvar-=256;
- }
- sOffset = gvar;
- } else {
- EEPROMWarnings += ::QObject::tr("er9x doesn't have negative gvars as offset") + "\n";
- sOffset=0;
- }
- } else {
- sOffset = c9x.sOffset;
- }
-
- if (c9x.curve!=0) {
- curve = c9x.curve;
- differential=0;
- } else {
- if (c9x.differential!=0) {
- curve=c9x.differential;
- differential=1;
- } else {
- curve=0;
- differential=0;
- }
- }
- lateOffset=c9x.lateOffset;
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- if (c9x.carryTrim<0) {
- EEPROMWarnings += ::QObject::tr("er9x doesn't have swappable trims") + "\n";
- carryTrim=1;
- } else {
- carryTrim = c9x.carryTrim;
- }
- mltpx = (MltpxValue)c9x.mltpx;
- mixWarn = c9x.mixWarn;
- enableFmTrim=c9x.enableFmTrim;
-
-}
-
t_Er9xMixData::operator MixData ()
{
MixData c9x;
@@ -434,14 +215,21 @@ t_Er9xMixData::operator MixData ()
else {
c9x.srcRaw = RawSource(SOURCE_TYPE_GVAR, srcRaw-38);
}
+
if (differential==1) {
- c9x.differential=curve;
- c9x.curve=0;
- } else {
- c9x.differential=0;
- c9x.curve=curve;
+ c9x.curve.type = CurveReference::CURVE_REF_DIFF;
+ c9x.curve.value = differential;
}
- c9x.lateOffset=lateOffset;
+ else if (curve > 6) {
+ c9x.curve.type = CurveReference::CURVE_REF_CUSTOM;
+ c9x.curve.value = curve - 6;
+ }
+ else if (curve > 0) {
+ c9x.curve.type = CurveReference::CURVE_REF_FUNC;
+ c9x.curve.value = curve;
+ }
+
+ // c9x.lateOffset=lateOffset;
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -449,32 +237,10 @@ t_Er9xMixData::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
- c9x.enableFmTrim=enableFmTrim;
+ // c9x.enableFmTrim=enableFmTrim;
return c9x;
}
-int8_t er9xFromSource(RawSource source)
-{
- int v1 = 0;
- if (source.type == SOURCE_TYPE_STICK)
- v1 = 1+source.index;
- else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("er9x on this board doesn't have Rotary Encoders") + "\n";
- v1 = 5+source.index;
- }
- else if (source.type == SOURCE_TYPE_MAX)
- v1 = 8;
- else if (source.type == SOURCE_TYPE_CYC)
- v1 = 10+source.index;
- else if (source.type == SOURCE_TYPE_PPM)
- v1 = 13+source.index;
- else if (source.type == SOURCE_TYPE_CH)
- v1 = 21+source.index;
- else if (source.type == SOURCE_TYPE_TELEMETRY)
- v1 = 36+source.index;
- return v1;
-}
-
RawSource er9xToSource(int8_t value)
{
if (value == 0) {
@@ -503,49 +269,22 @@ RawSource er9xToSource(int8_t value)
}
}
-t_Er9xCustomSwData::t_Er9xCustomSwData(CustomSwData &c9x)
+Er9xLogicalSwitchData::operator LogicalSwitchData ()
{
- func = c9x.func;
- v1 = c9x.val1;
- v2 = c9x.val2;
-
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
- v1 = er9xFromSource(RawSource(c9x.val1));
- }
-
- if (c9x.func >= CS_FN_EQUAL) {
- v2 = er9xFromSource(RawSource(c9x.val2));
- }
-
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
- v1 = er9xFromSwitch(RawSwitch(c9x.val1));
- v2 = er9xFromSwitch(RawSwitch(c9x.val2));
- }
-
- if (func>ER9X_MAX_CSFUNC ) {
- EEPROMWarnings += ::QObject::tr("er9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n";
- func=0;
- v1=0;
- v2=0;
- }
-}
-
-Er9xCustomSwData::operator CustomSwData ()
-{
- CustomSwData c9x;
+ LogicalSwitchData c9x;
c9x.func = func;
c9x.val1 = v1;
c9x.val2 = v2;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
+ if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) {
c9x.val1 = er9xToSource(v1).toValue();
}
- if (c9x.func >= CS_FN_EQUAL) {
+ if (c9x.func >= LS_FN_EQUAL) {
c9x.val2 = er9xToSource(v2).toValue();
}
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
+ if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) {
c9x.val1 = er9xToSwitch(v1).toValue();
c9x.val2 = er9xToSwitch(v2).toValue();
}
@@ -559,50 +298,11 @@ t_Er9xSafetySwData::t_Er9xSafetySwData()
memset(this, 0, sizeof(t_Er9xSafetySwData));
}
-t_Er9xSafetySwData::t_Er9xSafetySwData(SafetySwData &c9x)
-{
- memset(this, 0, sizeof(t_Er9xSafetySwData));
- swtch = er9xFromSwitch(c9x.swtch);
- val = c9x.val;
-}
-
-t_Er9xSafetySwData::operator SafetySwData ()
-{
- SafetySwData c9x;
- c9x.swtch = er9xToSwitch(swtch);
- c9x.val = val;
- return c9x;
-}
-
-
t_Er9xFrSkyChannelData::t_Er9xFrSkyChannelData()
{
memset(this, 0, sizeof(t_Er9xFrSkyChannelData));
}
-t_Er9xFrSkyChannelData::t_Er9xFrSkyChannelData(FrSkyChannelData &c9x)
-{
- memset(this, 0, sizeof(t_Er9xFrSkyChannelData));
- ratio = c9x.ratio;
- alarms_value[0] = c9x.alarms[0].value;
- alarms_value[1] = c9x.alarms[1].value;
- alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level;
- alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater;
- if (c9x.type==0) {
- if (c9x.multiplier==0) {
- type = 0;
- } else if (c9x.multiplier==1) {
- type = 2;
- } else {
- EEPROMWarnings += ::QObject::tr("er9x does not support this range for A1/A2") + "\n";
- }
- } else if (c9x.type==1 || c9x.type==3) {
- type=c9x.type;
- } else {
- EEPROMWarnings += ::QObject::tr("er9x does not support this telemetry units") + "\n";
- }
-}
-
t_Er9xFrSkyChannelData::operator FrSkyChannelData ()
{
FrSkyChannelData c9x;
@@ -622,19 +322,11 @@ t_Er9xFrSkyChannelData::operator FrSkyChannelData ()
return c9x;
}
-
t_Er9xFrSkyData::t_Er9xFrSkyData()
{
memset(this, 0, sizeof(t_Er9xFrSkyData));
}
-t_Er9xFrSkyData::t_Er9xFrSkyData(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Er9xFrSkyData));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
-}
-
t_Er9xFrSkyData::operator FrSkyData ()
{
FrSkyData c9x;
@@ -643,28 +335,11 @@ t_Er9xFrSkyData::operator FrSkyData ()
return c9x;
}
-int setEr9xTimerMode(TimerMode mode)
-{
- if (mode == TMRMODE_OFF || mode == TMRMODE_ABS)
- return mode;
- else if (mode == TMRMODE_THs || mode == TMRMODE_THp)
- return mode + 4;
- else if (mode >= TMRMODE_FIRST_MOMENT_SWITCH)
- return 37+mode-TMRMODE_FIRST_MOMENT_SWITCH;
- else if (mode >= TMRMODE_FIRST_SWITCH)
- return 16+mode-TMRMODE_FIRST_SWITCH;
- else if (mode <= TMRMODE_FIRST_NEG_MOMENT_SWITCH)
- return -37+mode-TMRMODE_FIRST_NEG_MOMENT_SWITCH;
- else if (mode <= TMRMODE_FIRST_NEG_SWITCH)
- return -16+mode-TMRMODE_FIRST_NEG_SWITCH;
- else
- return 0;
-}
-
-TimerMode getEr9xTimerMode(int mode)
+RawSwitch getEr9xTimerMode(int mode)
{
+ /*
if (mode <= -33)
- return TimerMode(TMRMODE_FIRST_NEG_MOMENT_SWITCH+(mode+33));
+ return TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+33));
else if (mode <= -1)
return TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+1));
else if (mode < 16)
@@ -672,163 +347,9 @@ TimerMode getEr9xTimerMode(int mode)
else if (mode < 16+21)
return TimerMode(TMRMODE_FIRST_SWITCH+(mode-16));
else
- return TimerMode(TMRMODE_FIRST_MOMENT_SWITCH+(mode-16-21));
-}
-
-t_Er9xModelData::t_Er9xModelData(ModelData &c9x)
-{
- memset(this, 0, sizeof(t_Er9xModelData));
-
- if (c9x.used) {
- setEEPROMString(name, c9x.name, sizeof(name));
- modelVoice=c9x.modelVoice;
- tmrMode = setEr9xTimerMode(c9x.timers[0].mode);
- tmrModeB = c9x.timers[0].modeB;
- tmrDir = c9x.timers[0].dir;
- tmrVal = c9x.timers[0].val;
- switch(c9x.moduleData[0].protocol) {
- case PPM:
- protocol = 0;
- break;
- case PXX_DJT:
- protocol = 1;
- break;
- case DSM2:
- protocol = 2;
- break;
- case PPM16:
- protocol = 3;
- break;
- default:
- protocol = 0;
- EEPROMWarnings += QObject::tr("Er9x doesn't accept this protocol") + "\n";
- // TODO more explicit warning for each protocol
- break;
- }
- traineron = c9x.traineron;
- t2throttle = c9x.t2throttle;
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- ppmNCH = (c9x.moduleData[0].channelsCount - 8) / 2;
- thrTrim = c9x.thrTrim;
- thrExpo = c9x.thrExpo;
- trimInc = c9x.trimInc;
- ppmDelay = (c9x.moduleData[0].ppmDelay - 300) / 50;
- for (unsigned int i=0; iEeFsOpen(eeprom, size, BOARD_STOCK)) {
+ if (!efile->EeFsOpen((uint8_t *)eeprom, size, BOARD_STOCK)) {
std::cout << "wrong file system\n";
return false;
}
@@ -184,57 +184,20 @@ bool Er9xInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, int esize,
int Er9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version)
{
- EEPROMWarnings.clear();
+ std::cout << "NO!\n";
+ // TODO an error
- efile->EeFsCreate(eeprom, getEEpromSize(), BOARD_STOCK);
-
- Er9xGeneral er9xGeneral(radioData.generalSettings);
- int sz = efile->writeRlc1(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&er9xGeneral, sizeof(Er9xGeneral));
- if(sz != sizeof(Er9xGeneral)) {
- return 0;
- }
-
- for (int i=0; iwriteRlc1(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&er9xModel, sizeof(Er9xModelData));
- if(sz != sizeof(Er9xModelData)) {
- return 0;
- }
- }
- }
-
- return getEEpromSize();
+ return 0;
}
int Er9xInterface::getSize(ModelData &model)
{
- if (model.isempty())
- return 0;
-
- uint8_t tmp[2*EESIZE_STOCK];
- efile->EeFsCreate(tmp, getEEpromSize(), BOARD_STOCK);
-
- Er9xModelData er9xModel(model);
- int sz = efile->writeRlc1(0, FILE_TYP_MODEL, (uint8_t*)&er9xModel, sizeof(Er9xModelData));
- if(sz != sizeof(Er9xModelData)) {
- return -1;
- }
- return efile->size(0);
+ return 0;
}
int Er9xInterface::getSize(GeneralSettings &settings)
{
- uint8_t tmp[2*EESIZE_STOCK];
- efile->EeFsCreate(tmp, getEEpromSize(), BOARD_STOCK);
-
- Er9xGeneral er9xGeneral(settings);
- int sz = efile->writeRlc1(0, FILE_TYP_GENERAL, (uint8_t*)&er9xGeneral, sizeof(Er9xGeneral));
- if(sz != sizeof(Er9xGeneral)) {
- return -1;
- }
- return efile->size(0);
+ return 0;
}
int Er9xInterface::getCapability(const Capability capability)
@@ -244,34 +207,20 @@ int Er9xInterface::getCapability(const Capability capability)
return 4;
case Mixes:
return ER9X_MAX_MIXERS;
- case NumCurves5:
- return ER9X_MAX_CURVE5;
- case NumCurves9:
- return ER9X_MAX_CURVE5;
- case MixFmTrim:
- return 1;
case PPMExtCtrl:
return 1;
case ModelTrainerEnable:
return 1;
case Timer2ThrTrig:
return 1;
- case TrainerSwitch:
- return 1;
case OffsetWeight:
return 125;
- case BandgapMeasure:
- return 1;
- case PotScrolling:
- return 1;
case SoundMod:
return 1;
case SoundPitch:
return 1;
case Haptic:
return 1;
- case OwnerName:
- return 10;
case Timers:
return 1;
case Pots:
@@ -282,14 +231,10 @@ int Er9xInterface::getCapability(const Capability capability)
return 9;
case CustomFunctions:
return 0;
- case CustomSwitches:
+ case LogicalSwitches:
return 12;
case CustomAndSwitches:
return 5;
- case GvarsNum:
- return 7;
- case GvarsOfsNum:
- return 5;
case CSFunc:
return 13;
case Outputs:
@@ -298,16 +243,10 @@ int Er9xInterface::getCapability(const Capability capability)
return 0;
case Simulation:
return 1;
- case gsSwitchMask:
- return 1;
- case BLonStickMove:
- return 1;
case Telemetry:
return TM_HASTELEMETRY|TM_HASWSHH;
case TelemetryUnits:
return 1;
- case TimerTriggerB:
- return 1;
case TelemetryMaxMultiplier:
return 2;
case MaxVolume:
@@ -319,24 +258,12 @@ int Er9xInterface::getCapability(const Capability capability)
case LCDWidth:
return 128;
case VoicesAsNumbers:
- case TelemetryInternalAlarm:
- case HasPPMSim:
- case HasCrossTrims:
- case HasStickScroll:
case HasAltitudeSel:
case HasContrast:
- case InstantTrimSW:
case HasVolume:
- case HasBlInvert:
case ModelVoice:
- case DiffMixers:
- case HasNegCurves:
- case HasFixOffset:
case Gvars:
- case GvarsHaveSources:
- case GvarsAsSources:
- case GvarsAsWeight:
- return 1;
+ return 7;
case GetThrSwitch:
return DSW_THR;
default:
@@ -359,7 +286,7 @@ int Er9xInterface::isAvailable(Protocol prot, int port)
SimulatorInterface * Er9xInterface::getSimulator()
{
- return new Er9xSimulator(this);
+ return NULL; // new Er9xSimulator(this);
}
diff --git a/companion/src/firmwares/er9x/er9xinterface.h b/companion/src/firmwares/er9x/er9xinterface.h
index e6d60b6ee..9ea4854be 100644
--- a/companion/src/firmwares/er9x/er9xinterface.h
+++ b/companion/src/firmwares/er9x/er9xinterface.h
@@ -34,7 +34,7 @@ class Er9xInterface : public EEPROMInterface
virtual const int getMaxModels();
- virtual bool load(RadioData &, uint8_t * eeprom, int size);
+ virtual bool load(RadioData &, const uint8_t * eeprom, int size);
virtual bool loadBackup(RadioData &, uint8_t * eeprom, int esize, int index);
diff --git a/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp b/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp
index f21688f20..2d506243d 100644
--- a/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp
+++ b/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp
@@ -3,47 +3,14 @@
#include "ersky9xeeprom.h"
#include
-extern int8_t er9xFromSwitch(const RawSwitch & sw);
extern RawSwitch er9xToSwitch(int8_t sw);
-int setErSky9xTimerMode(TimerMode mode)
-{
- if (mode == TMRMODE_OFF || mode == TMRMODE_ABS || mode == TMRMODE_THs || mode == TMRMODE_THp)
- return mode;
- else if (mode >= TMRMODE_FIRST_CHPERC)
- return 4+mode-TMRMODE_FIRST_CHPERC;
- else
- return 0;
-}
-
-TimerMode getErSky9xTimerMode(int mode)
+RawSwitch getErSky9xTimerMode(int mode)
{
if (mode<4)
- return TimerMode(mode);
- else if (mode < 20)
- return TimerMode(TMRMODE_FIRST_CHPERC+(mode-4));
+ return RawSwitch(SWITCH_TYPE_TIMER_MODE, mode);
else
- return TimerMode(0);
-}
-
-int8_t ersky9xFromSwitch(const RawSwitch & sw)
-{
- switch (sw.type) {
- case SWITCH_TYPE_SWITCH:
- return sw.index;
- case SWITCH_TYPE_VIRTUAL:
- return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index);
- case SWITCH_TYPE_ON:
- return 34;
- case SWITCH_TYPE_OFF:
- return -34;
- case SWITCH_TYPE_MOMENT_SWITCH:
- return sw.index > 0 ? (34 + sw.index) : (-34 + sw.index);
- case SWITCH_TYPE_MOMENT_VIRTUAL:
- return sw.index > 0 ? (31 + sw.index) : (-31 + sw.index);
- default:
- return 0;
- }
+ return RawSwitch();
}
RawSwitch ersky9xToSwitch(int8_t sw)
@@ -60,26 +27,16 @@ RawSwitch ersky9xToSwitch(int8_t sw)
else if (sw == -34)
return RawSwitch(SWITCH_TYPE_OFF);
else if (swa <= 34+9)
- return RawSwitch(SWITCH_TYPE_MOMENT_SWITCH, sw > 0 ? sw-34 : sw+34);
+ return RawSwitch(SWITCH_TYPE_SWITCH, sw > 0 ? sw-34 : sw+34);
else
- return RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, sw > 0 ? sw-34-9 : sw+34+9);
+ return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-34-9 : sw+34+9);
}
-
t_Ersky9xTrainerMix::t_Ersky9xTrainerMix()
{
memset(this, 0, sizeof(t_Ersky9xTrainerMix));
}
-t_Ersky9xTrainerMix::t_Ersky9xTrainerMix(TrainerMix &c9x)
-{
- memset(this, 0, sizeof(t_Ersky9xTrainerMix));
- srcChn = c9x.src;
- swtch = er9xFromSwitch(c9x.swtch);
- studWeight = (8 * c9x.weight) / 25;
- mode = c9x.mode;
-}
-
t_Ersky9xTrainerMix::operator TrainerMix()
{
TrainerMix c9x;
@@ -95,15 +52,6 @@ t_Ersky9xTrainerData::t_Ersky9xTrainerData()
memset(this, 0, sizeof(t_Ersky9xTrainerData));
}
-t_Ersky9xTrainerData::t_Ersky9xTrainerData(TrainerData &c9x)
-{
- memset(this, 0, sizeof(t_Ersky9xTrainerData));
- for (int i=0; i 6) {
+ c9x.curve.type = CurveReference::CURVE_REF_CUSTOM;
+ c9x.curve.value = curve - 6;
+ }
+ else if (curve > 0) {
+ c9x.curve.type = CurveReference::CURVE_REF_FUNC;
+ c9x.curve.value = curve;
+ }
+
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -398,7 +219,7 @@ t_Ersky9xMixData_v10::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
- c9x.enableFmTrim=enableFmTrim;
+ // c9x.enableFmTrim=enableFmTrim;
c9x.sOffset = sOffset;
return c9x;
}
@@ -409,67 +230,6 @@ t_Ersky9xMixData_v11::t_Ersky9xMixData_v11()
memset(this, 0, sizeof(t_Ersky9xMixData_v11));
}
-t_Ersky9xMixData_v11::t_Ersky9xMixData_v11(MixData &c9x)
-{
- memset(this, 0, sizeof(t_Ersky9xMixData_v11));
- destCh = c9x.destCh;
- swtch = ersky9xFromSwitch(c9x.swtch);
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("ersky9x doesn't have Rotary Encoders") + "\n";
- srcRaw = 5 + c9x.srcRaw.index; // use pots instead
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 8; // MAX
- }
- /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) {
- srcRaw = 45;
- } */
- else if (c9x.srcRaw.type == SOURCE_TYPE_GVAR) {
- srcRaw = 46+c9x.srcRaw.index; // MAX
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 9; // FULL
- swtch = ersky9xFromSwitch(RawSwitch(c9x.srcRaw.index));
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 10 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 13 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 21 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) {
- EEPROMWarnings += ::QObject::tr("ersky9x doesn't have trims as source") + "\n";
- srcRaw = 0; // use pots instead
- }
-
- weight = c9x.weight;
- curve = c9x.curve;
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- if (c9x.carryTrim<0) {
- EEPROMWarnings += ::QObject::tr("er9x doesn't have swappable trims") + "\n";
- carryTrim=1;
- } else {
- carryTrim = c9x.carryTrim;
- }
- mltpx = (MltpxValue)c9x.mltpx;
- mixWarn = c9x.mixWarn;
- enableFmTrim=c9x.enableFmTrim;
- sOffset = c9x.sOffset;
-}
-
t_Ersky9xMixData_v11::operator MixData ()
{
MixData c9x;
@@ -516,7 +276,15 @@ t_Ersky9xMixData_v11::operator MixData ()
c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-21);
}
- c9x.curve = curve;
+ if (curve > 6) {
+ c9x.curve.type = CurveReference::CURVE_REF_CUSTOM;
+ c9x.curve.value = curve - 6;
+ }
+ else if (curve > 0) {
+ c9x.curve.type = CurveReference::CURVE_REF_FUNC;
+ c9x.curve.value = curve;
+ }
+
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -524,60 +292,11 @@ t_Ersky9xMixData_v11::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
- c9x.enableFmTrim=enableFmTrim;
+ // c9x.enableFmTrim=enableFmTrim;
c9x.sOffset = sOffset;
return c9x;
}
-int8_t ersky9xFromSource_v10(RawSource source)
-{
- int v1 = 0;
- if (source.type == SOURCE_TYPE_STICK)
- v1 = 1+source.index;
- else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("er9x on this board doesn't have Rotary Encoders") + "\n";
- v1 = 5+source.index;
- }
- else if (source.type == SOURCE_TYPE_MAX)
- v1 = 8;
- /* else if (source.type == SOURCE_TYPE_3POS)
- v1 = 0; */
- else if (source.type == SOURCE_TYPE_CYC)
- v1 = 10+source.index;
- else if (source.type == SOURCE_TYPE_PPM)
- v1 = 13+source.index;
- else if (source.type == SOURCE_TYPE_CH)
- v1 = 21+source.index;
- else if (source.type == SOURCE_TYPE_TELEMETRY)
- v1 = 36+source.index;
- return v1;
-}
-
-int8_t ersky9xFromSource_v11(RawSource source)
-{
- int v1 = 0;
- if (source.type == SOURCE_TYPE_STICK)
- v1 = 1+source.index;
- else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("er9x on this board doesn't have Rotary Encoders") + "\n";
- v1 = 5+source.index;
- }
- else if (source.type == SOURCE_TYPE_MAX)
- v1 = 8;
- /* else if (source.type == SOURCE_TYPE_3POS)
- v1 = 0; */
- else if (source.type == SOURCE_TYPE_CYC)
- v1 = 10+source.index;
- else if (source.type == SOURCE_TYPE_PPM)
- v1 = 13+source.index;
- else if (source.type == SOURCE_TYPE_CH)
- v1 = 21+source.index;
- else if (source.type == SOURCE_TYPE_TELEMETRY)
- v1 = 36+source.index;
- return v1;
-}
-
-
RawSource ersky9xToSource_v10(int8_t value)
{
if (value == 0) {
@@ -634,49 +353,22 @@ RawSource ersky9xToSource_v11(int8_t value)
}
}
-t_Ersky9xCustomSwData_v10::t_Ersky9xCustomSwData_v10(CustomSwData &c9x)
+Ersky9xLogicalSwitchData_v10::operator LogicalSwitchData ()
{
- func = c9x.func;
- v1 = c9x.val1;
- v2 = c9x.val2;
-
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
- v1 = ersky9xFromSource_v10(RawSource(c9x.val1));
- }
-
- if (c9x.func >= CS_FN_EQUAL) {
- v2 = ersky9xFromSource_v10(RawSource(c9x.val2));
- }
-
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
- v1 = er9xFromSwitch(RawSwitch(c9x.val1));
- v2 = er9xFromSwitch(RawSwitch(c9x.val2));
- }
-
- if (func>ERSKY9X_MAX_CSFUNC ) {
- EEPROMWarnings += ::QObject::tr("ersky9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n";
- func=0;
- v1=0;
- v2=0;
- }
-}
-
-Ersky9xCustomSwData_v10::operator CustomSwData ()
-{
- CustomSwData c9x;
+ LogicalSwitchData c9x;
c9x.func = func;
c9x.val1 = v1;
c9x.val2 = v2;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
+ if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) {
c9x.val1 = ersky9xToSource_v10(v1).toValue();
}
- if (c9x.func >= CS_FN_EQUAL) {
+ if (c9x.func >= LS_FN_EQUAL) {
c9x.val2 = ersky9xToSource_v10(v2).toValue();
}
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
+ if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) {
c9x.val1 = er9xToSwitch(v1).toValue();
c9x.val2 = er9xToSwitch(v2).toValue();
}
@@ -684,49 +376,22 @@ Ersky9xCustomSwData_v10::operator CustomSwData ()
return c9x;
}
-t_Ersky9xCustomSwData_v11::t_Ersky9xCustomSwData_v11(CustomSwData &c9x)
+Ersky9xLogicalSwitchData_v11::operator LogicalSwitchData ()
{
- func = c9x.func;
- v1 = c9x.val1;
- v2 = c9x.val2;
-
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
- v1 = ersky9xFromSource_v11(RawSource(c9x.val1));
- }
-
- if (c9x.func >= CS_FN_EQUAL) {
- v2 = ersky9xFromSource_v11(RawSource(c9x.val2));
- }
-
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
- v1 = er9xFromSwitch(RawSwitch(c9x.val1));
- v2 = er9xFromSwitch(RawSwitch(c9x.val2));
- }
-
- if (func>ERSKY9X_MAX_CSFUNC ) {
- EEPROMWarnings += ::QObject::tr("ersky9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n";
- func=0;
- v1=0;
- v2=0;
- }
-}
-
-Ersky9xCustomSwData_v11::operator CustomSwData ()
-{
- CustomSwData c9x;
+ LogicalSwitchData c9x;
c9x.func = func;
c9x.val1 = v1;
c9x.val2 = v2;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
+ if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) {
c9x.val1 = ersky9xToSource_v11(v1).toValue();
}
- if (c9x.func >= CS_FN_EQUAL) {
+ if (c9x.func >= LS_FN_EQUAL) {
c9x.val2 = ersky9xToSource_v11(v2).toValue();
}
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
+ if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) {
c9x.val1 = er9xToSwitch(v1).toValue();
c9x.val2 = er9xToSwitch(v2).toValue();
}
@@ -739,69 +404,16 @@ t_Ersky9xSafetySwData_v10::t_Ersky9xSafetySwData_v10()
memset(this, 0, sizeof(t_Ersky9xSafetySwData_v10));
}
-t_Ersky9xSafetySwData_v10::t_Ersky9xSafetySwData_v10(SafetySwData &c9x)
-{
- memset(this, 0, sizeof(t_Ersky9xSafetySwData_v10));
- swtch = er9xFromSwitch(c9x.swtch);
- val = c9x.val;
-}
-
-t_Ersky9xSafetySwData_v10::operator SafetySwData ()
-{
- SafetySwData c9x;
- c9x.swtch = er9xToSwitch(swtch);
- c9x.val = val;
- return c9x;
-}
-
t_Ersky9xSafetySwData_v11::t_Ersky9xSafetySwData_v11()
{
memset(this, 0, sizeof(t_Ersky9xSafetySwData_v11));
}
-t_Ersky9xSafetySwData_v11::t_Ersky9xSafetySwData_v11(SafetySwData &c9x)
-{
- memset(this, 0, sizeof(t_Ersky9xSafetySwData_v11));
- opt.ss.swtch = ersky9xFromSwitch(c9x.swtch);
- opt.ss.val = c9x.val;
-}
-
-t_Ersky9xSafetySwData_v11::operator SafetySwData ()
-{
- SafetySwData c9x;
- c9x.swtch = ersky9xToSwitch(opt.ss.swtch);
- c9x.val = opt.ss.val;
- return c9x;
-}
-
t_Ersky9xFrSkyChannelData_v10::t_Ersky9xFrSkyChannelData_v10()
{
memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v10));
}
-t_Ersky9xFrSkyChannelData_v10::t_Ersky9xFrSkyChannelData_v10(FrSkyChannelData &c9x)
-{
- memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v10));
- ratio = c9x.ratio;
- alarms_value[0] = c9x.alarms[0].value;
- alarms_value[1] = c9x.alarms[1].value;
- alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level;
- alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater;
- if (c9x.type==0) {
- if (c9x.multiplier==0) {
- type = 0;
- } else if (c9x.multiplier==1) {
- type = 2;
- } else {
- EEPROMWarnings += ::QObject::tr("er9x does not support this range for A1/A2") + "\n";
- }
- } else if (c9x.type==1 || c9x.type==3) {
- type=c9x.type;
- } else {
- EEPROMWarnings += ::QObject::tr("er9x does not support this telemetry units") + "\n";
- }
-}
-
t_Ersky9xFrSkyChannelData_v10::operator FrSkyChannelData ()
{
FrSkyChannelData c9x;
@@ -826,29 +438,6 @@ t_Ersky9xFrSkyChannelData_v11::t_Ersky9xFrSkyChannelData_v11()
memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v11));
}
-t_Ersky9xFrSkyChannelData_v11::t_Ersky9xFrSkyChannelData_v11(FrSkyChannelData &c9x)
-{
- memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v11));
- ratio = c9x.ratio;
- alarms_value[0] = c9x.alarms[0].value;
- alarms_value[1] = c9x.alarms[1].value;
- alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level;
- alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater;
- if (c9x.type==0) {
- if (c9x.multiplier==0) {
- type = 0;
- } else if (c9x.multiplier==1) {
- type = 2;
- } else {
- EEPROMWarnings += ::QObject::tr("er9x does not support this range for A1/A2") + "\n";
- }
- } else if (c9x.type==1 || c9x.type==3) {
- type=c9x.type;
- } else {
- EEPROMWarnings += ::QObject::tr("er9x does not support this telemetry units") + "\n";
- }
-}
-
t_Ersky9xFrSkyChannelData_v11::operator FrSkyChannelData ()
{
FrSkyChannelData c9x;
@@ -873,13 +462,6 @@ t_Ersky9xFrSkyData_v10::t_Ersky9xFrSkyData_v10()
memset(this, 0, sizeof(t_Ersky9xFrSkyData_v10));
}
-t_Ersky9xFrSkyData_v10::t_Ersky9xFrSkyData_v10(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Ersky9xFrSkyData_v10));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
-}
-
t_Ersky9xFrSkyData_v10::operator FrSkyData ()
{
FrSkyData c9x;
@@ -893,13 +475,6 @@ t_Ersky9xFrSkyData_v11::t_Ersky9xFrSkyData_v11()
memset(this, 0, sizeof(t_Ersky9xFrSkyData_v11));
}
-t_Ersky9xFrSkyData_v11::t_Ersky9xFrSkyData_v11(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Ersky9xFrSkyData_v11));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
-}
-
t_Ersky9xFrSkyData_v11::operator FrSkyData ()
{
FrSkyData c9x;
@@ -908,168 +483,6 @@ t_Ersky9xFrSkyData_v11::operator FrSkyData ()
return c9x;
}
-t_Ersky9xModelData_v10::t_Ersky9xModelData_v10(ModelData &c9x)
-{
- memset(this, 0, sizeof(t_Ersky9xModelData_v10));
-
- if (c9x.used) {
- setEEPROMString(name, c9x.name, sizeof(name));
- reserved_spare = 0;
- spare21 = 0;
- sparex = 0;
- spare22 = 0;
- for (int i=0; i<2; i++) {
- timer[i].tmrModeA = setErSky9xTimerMode(c9x.timers[i].mode);
- timer[i].tmrModeB = c9x.timers[i].modeB;
- timer[i].tmrDir = c9x.timers[i].dir;
- timer[i].tmrVal = c9x.timers[i].val;
- }
- switch(c9x.moduleData[0].protocol) {
- case PPM:
- protocol = 0;
- break;
- case PXX_DJT:
- protocol = 1;
- break;
- case DSM2:
- protocol = 2;
- break;
- case PPM16:
- protocol = 3;
- break;
- default:
- protocol = 0;
- EEPROMWarnings += QObject::tr("Ersky9x doesn't accept this protocol") + "\n";
- // TODO more explicit warning for each protocol
- break;
- }
- traineron = c9x.traineron;
- // t2throttle = c9x.t2throttle;
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- ppmNCH = (c9x.moduleData[0].channelsCount - 8) / 2;
- thrTrim = c9x.thrTrim;
- thrExpo = c9x.thrExpo;
- trimInc = c9x.trimInc;
- ppmDelay = (c9x.moduleData[0].ppmDelay - 300) / 50;
- for (unsigned int i=0; i
#include "eeprominterface.h"
-extern TimerMode getEr9xTimerMode(int mode);
-extern int setEr9xTimerMode(TimerMode mode);
+extern RawSwitch getEr9xTimerMode(int mode);
//eeprom data
#define ERSKY9X_MAX_MIXERS_V10 32
@@ -51,8 +50,6 @@ PACK(typedef struct t_Ersky9xTrainerMix {
operator TrainerMix();
t_Ersky9xTrainerMix();
- t_Ersky9xTrainerMix(TrainerMix&);
-
}) Ersky9xTrainerMix; //
PACK(typedef struct t_Ersky9xTrainerData {
@@ -61,8 +58,6 @@ PACK(typedef struct t_Ersky9xTrainerData {
operator TrainerData();
t_Ersky9xTrainerData();
- t_Ersky9xTrainerData(TrainerData&);
-
}) Ersky9xTrainerData;
PACK(typedef struct t_Ersky9xGeneral {
@@ -122,8 +117,6 @@ PACK(typedef struct t_Ersky9xGeneral {
uint8_t rotaryDivisor ;
operator GeneralSettings();
t_Ersky9xGeneral();
- t_Ersky9xGeneral(GeneralSettings&);
-
}) Ersky9xGeneral;
PACK(typedef struct t_Ersky9xExpoData {
@@ -143,7 +136,6 @@ PACK(typedef struct t_Ersky9xLimitData {
operator LimitData();
t_Ersky9xLimitData() ;
- t_Ersky9xLimitData(LimitData&);
}) Ersky9xLimitData;
#define MLTPX_ADD 0
@@ -170,7 +162,6 @@ PACK(typedef struct t_Ersky9xMixData_v10 {
operator MixData();
t_Ersky9xMixData_v10();
- t_Ersky9xMixData_v10(MixData&);
}) Ersky9xMixData_v10;
PACK(typedef struct t_Ersky9xMixData_v11 {
@@ -192,40 +183,33 @@ PACK(typedef struct t_Ersky9xMixData_v11 {
uint8_t res[4];
operator MixData();
t_Ersky9xMixData_v11();
- t_Ersky9xMixData_v11(MixData&);
}) Ersky9xMixData_v11;
-PACK(typedef struct t_Ersky9xCustomSwData_v10 { // Custom Switches data
+PACK(typedef struct t_Ersky9xLogicalSwitchData_v10 { // Custom Switches data
int8_t v1; //input
int8_t v2; //offset
uint8_t func;
- operator CustomSwData();
- t_Ersky9xCustomSwData_v10() { memset(this, 0, sizeof(t_Ersky9xCustomSwData_v10)); }
- t_Ersky9xCustomSwData_v10(CustomSwData&);
+ operator LogicalSwitchData();
+ t_Ersky9xLogicalSwitchData_v10() { memset(this, 0, sizeof(t_Ersky9xLogicalSwitchData_v10)); }
+}) Ersky9xLogicalSwitchData_v10;
-}) Ersky9xCustomSwData_v10;
-
-PACK(typedef struct t_Ersky9xCustomSwData_v11 { // Custom Switches data
+PACK(typedef struct t_Ersky9xLogicalSwitchData_v11 { // Custom Switches data
int8_t v1; //input
int8_t v2; //offset
uint8_t func;
uint8_t andsw;
uint8_t res ;
- operator CustomSwData();
- t_Ersky9xCustomSwData_v11() { memset(this, 0, sizeof(t_Ersky9xCustomSwData_v11)); }
- t_Ersky9xCustomSwData_v11(CustomSwData&);
-
-}) Ersky9xCustomSwData_v11;
+ operator LogicalSwitchData();
+ t_Ersky9xLogicalSwitchData_v11() { memset(this, 0, sizeof(t_Ersky9xLogicalSwitchData_v11)); }
+}) Ersky9xLogicalSwitchData_v11;
PACK(typedef struct t_Ersky9xSafetySwData_v10 { // Custom Switches data
int8_t swtch;
int8_t val;
- operator SafetySwData();
t_Ersky9xSafetySwData_v10();
- t_Ersky9xSafetySwData_v10(SafetySwData&);
}) Ersky9xSafetySwData_v10;
PACK(typedef struct t_Ersky9xSafetySwData_v11 { // Custom Switches data
@@ -244,9 +228,7 @@ PACK(typedef struct t_Ersky9xSafetySwData_v11 { // Custom Switches data
} vs ;
} opt ;
- operator SafetySwData();
t_Ersky9xSafetySwData_v11();
- t_Ersky9xSafetySwData_v11(SafetySwData&);
}) Ersky9xSafetySwData_v11;
PACK(typedef struct t_Ersky9xgvar {
@@ -281,7 +263,6 @@ PACK(typedef struct t_Ersky9xFrSkyChannelData_v10 {
operator FrSkyChannelData();
t_Ersky9xFrSkyChannelData_v10();
- t_Ersky9xFrSkyChannelData_v10(FrSkyChannelData&);
}) Ersky9xFrSkyChannelData_v10;
PACK(typedef struct t_Ersky9xFrSkyData_v10 {
@@ -289,7 +270,6 @@ PACK(typedef struct t_Ersky9xFrSkyData_v10 {
operator FrSkyData();
t_Ersky9xFrSkyData_v10();
- t_Ersky9xFrSkyData_v10(FrSkyData&);
}) Ersky9xFrSkyData_v10;
PACK(typedef struct t_Ersky9xFrSkyChannelData_v11 {
@@ -303,7 +283,6 @@ PACK(typedef struct t_Ersky9xFrSkyChannelData_v11 {
operator FrSkyChannelData();
t_Ersky9xFrSkyChannelData_v11();
- t_Ersky9xFrSkyChannelData_v11(FrSkyChannelData&);
}) Ersky9xFrSkyChannelData_v11;
PACK(typedef struct t_Ersky9xFrSkyData_v11 {
@@ -311,7 +290,6 @@ PACK(typedef struct t_Ersky9xFrSkyData_v11 {
operator FrSkyData();
t_Ersky9xFrSkyData_v11();
- t_Ersky9xFrSkyData_v11(FrSkyData&);
}) Ersky9xFrSkyData_v11;
PACK(typedef struct t_Ersky9xFrSkyalarms_v11 {
@@ -382,7 +360,7 @@ PACK(typedef struct t_Ersky9xModelData_v10 {
int8_t trim[4];
int8_t curves5[ERSKY9X_MAX_CURVE5][5];
int8_t curves9[ERSKY9X_MAX_CURVE9][9];
- Ersky9xCustomSwData_v10 customSw[ERSKY9X_NUM_CSW_V10];
+ Ersky9xLogicalSwitchData_v10 customSw[ERSKY9X_NUM_CSW_V10];
uint8_t frSkyVoltThreshold ;
uint8_t res3[2];
Ersky9xSafetySwData_v10 safetySw[ERSKY9X_NUM_CHNOUT_V10];
@@ -390,7 +368,6 @@ PACK(typedef struct t_Ersky9xModelData_v10 {
Ersky9xTimerMode_v10 timer[2] ;
operator ModelData();
t_Ersky9xModelData_v10() { memset(this, 0, sizeof(t_Ersky9xModelData_v10)); }
- t_Ersky9xModelData_v10(ModelData&);
}) Ersky9xModelData_v10;
PACK(typedef struct t_Ersky9xModelData_v11 {
@@ -432,7 +409,7 @@ PACK(typedef struct t_Ersky9xModelData_v11 {
int8_t curves5[ERSKY9X_MAX_CURVE5][5];
int8_t curves9[ERSKY9X_MAX_CURVE9][9];
int8_t curvexy[18];
- Ersky9xCustomSwData_v11 customSw[ERSKY9X_NUM_CSW_V11];
+ Ersky9xLogicalSwitchData_v11 customSw[ERSKY9X_NUM_CSW_V11];
uint8_t frSkyVoltThreshold ;
uint8_t bt_telemetry;
uint8_t numVoice; // 0-16, rest are Safety switches
@@ -449,8 +426,6 @@ PACK(typedef struct t_Ersky9xModelData_v11 {
operator ModelData();
t_Ersky9xModelData_v11() { memset(this, 0, sizeof(t_Ersky9xModelData_v11)); }
- t_Ersky9xModelData_v11(ModelData&);
}) Ersky9xModelData_v11;
#endif
-/*eof*/
diff --git a/companion/src/firmwares/ersky9x/ersky9xinterface.cpp b/companion/src/firmwares/ersky9x/ersky9xinterface.cpp
index 412d13520..91ae4ec59 100644
--- a/companion/src/firmwares/ersky9x/ersky9xinterface.cpp
+++ b/companion/src/firmwares/ersky9x/ersky9xinterface.cpp
@@ -74,11 +74,11 @@ inline void applyStickModeToModel(Ersky9xModelData_v10 & model, unsigned int mod
for (int i=0; iEeFsOpen(eeprom, size, BOARD_SKY9X)) {
+ if (!efile->EeFsOpen((uint8_t *)eeprom, size, BOARD_SKY9X)) {
std::cout << "wrong file system\n";
return false;
}
@@ -228,33 +228,10 @@ bool Ersky9xInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, int esi
int Ersky9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version)
{
- EEPROMWarnings.clear();
+ std::cout << "NO!\n";
+ // TODO an error
- efile->EeFsCreate(eeprom, EESIZE_SKY9X, BOARD_SKY9X);
-
- Ersky9xGeneral ersky9xGeneral(radioData.generalSettings);
- int sz = efile->writeRlc2(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&ersky9xGeneral, sizeof(Ersky9xGeneral));
- if(sz != sizeof(Ersky9xGeneral)) {
- return 0;
- }
-
- for (int i=0; iwriteRlc2(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&ersky9xModel, sizeof(Ersky9xModelData_v11));
- if(sz != sizeof(Ersky9xModelData_v11)) {
- return 0;
- }
- }
- }
-
- if (!EEPROMWarnings.isEmpty())
- QMessageBox::warning(NULL,
- QObject::tr("Warning"),
- QObject::tr("EEPROM saved with these warnings:") + "\n- " + EEPROMWarnings.remove(EEPROMWarnings.length()-1, 1).replace("\n", "\n- "));
-
- return EESIZE_SKY9X;
+ return 0;
}
int Ersky9xInterface::getSize(ModelData &model)
@@ -272,51 +249,33 @@ int Ersky9xInterface::getCapability(const Capability capability)
switch (capability) {
case Mixes:
return ERSKY9X_MAX_MIXERS_V11;
- case NumCurves5:
- return ERSKY9X_MAX_CURVE5;
- case NumCurves9:
- return ERSKY9X_MAX_CURVE9;
- case MixFmTrim:
- return 1;
case PPMExtCtrl:
return 1;
case ModelTrainerEnable:
return 1;
case Timer2ThrTrig:
return 1;
- case TrainerSwitch:
- return 1;
- case BandgapMeasure:
- return 1;
- case PotScrolling:
- return 1;
case SoundMod:
return 1;
case SoundPitch:
return 1;
case Haptic:
return 1;
- case OwnerName:
- return 10;
- case HasInputFilter:
- return 0;
case ModelVoice:
return 1;
case Timers:
return 2;
case Pots:
return 3;
- case GvarsNum:
+ case Gvars:
return 7;
- case GvarsOfsNum:
- return 5;
case Switches:
return 7;
case SwitchesPositions:
return 9;
case CustomFunctions:
return 0;
- case CustomSwitches:
+ case LogicalSwitches:
return ERSKY9X_NUM_CSW_V11;
case CustomAndSwitches:
return 1;
@@ -328,18 +287,12 @@ int Ersky9xInterface::getCapability(const Capability capability)
return 0;
case Simulation:
return 1;
- case gsSwitchMask:
- return 1;
- case BLonStickMove:
- return 1;
case Telemetry:
return TM_HASTELEMETRY|TM_HASWSHH;
case TelemetryUnits:
return 1;
case OptrexDisplay:
return 1;
- case TimerTriggerB:
- return 2;
case HasAltitudeSel:
case HasCurrentCalibration:
case HasVolume:
@@ -350,13 +303,6 @@ int Ersky9xInterface::getCapability(const Capability capability)
return 125;
case MaxVolume:
return 23;
- case Gvars:
- case GvarsHaveSources:
- case GvarsAsSources:
- case GvarsAsWeight:
- return 1;
- case InstantTrimSW:
- return 1;
case TelemetryMaxMultiplier:
return 2;
case LCDWidth:
@@ -383,7 +329,7 @@ int Ersky9xInterface::isAvailable(Protocol prot, int port)
SimulatorInterface * Ersky9xInterface::getSimulator()
{
- return new Ersky9xSimulator(this);
+ return NULL; // new Ersky9xSimulator(this);
}
diff --git a/companion/src/firmwares/ersky9x/ersky9xinterface.h b/companion/src/firmwares/ersky9x/ersky9xinterface.h
index 23473eae4..d37151c05 100644
--- a/companion/src/firmwares/ersky9x/ersky9xinterface.h
+++ b/companion/src/firmwares/ersky9x/ersky9xinterface.h
@@ -34,7 +34,7 @@ class Ersky9xInterface : public EEPROMInterface
virtual const int getMaxModels();
- virtual bool load(RadioData &, uint8_t * eeprom, int size);
+ virtual bool load(RadioData &, const uint8_t * eeprom, int size);
virtual bool loadBackup(RadioData &, uint8_t * eeprom, int esize, int index);
diff --git a/companion/src/firmwares/gruvin9x/gruvin9xeeprom.cpp b/companion/src/firmwares/gruvin9x/gruvin9xeeprom.cpp
index c1c740efb..cc42de8f8 100644
--- a/companion/src/firmwares/gruvin9x/gruvin9xeeprom.cpp
+++ b/companion/src/firmwares/gruvin9x/gruvin9xeeprom.cpp
@@ -6,7 +6,6 @@
#define EEPROM_VER 106
-extern void setEEPROMZString(char *dst, const char *src, int size);
extern void getEEPROMZString(char *dst, const char *src, int size);
RawSwitch gruvin9xToSwitch(int8_t sw)
@@ -19,18 +18,6 @@ RawSwitch gruvin9xToSwitch(int8_t sw)
return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-9 : sw+9);
}
-int8_t gruvin9xFromSwitch(const RawSwitch & sw)
-{
- switch (sw.type) {
- case SWITCH_TYPE_SWITCH:
- return sw.index;
- case SWITCH_TYPE_VIRTUAL:
- return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index);
- default:
- return 0;
- }
-}
-
t_Gruvin9xTrainerMix_v103::operator TrainerMix()
{
TrainerMix c9x;
@@ -50,14 +37,6 @@ t_Gruvin9xTrainerMix_v104::operator TrainerMix()
return c9x;
}
-t_Gruvin9xTrainerMix_v104::t_Gruvin9xTrainerMix_v104(TrainerMix &c9x)
-{
- memset(this, 0, sizeof(t_Gruvin9xTrainerMix_v104));
- srcChn = c9x.src;
- studWeight = c9x.weight;
- mode = c9x.mode;
-}
-
t_Gruvin9xTrainerData_v103::operator TrainerData ()
{
TrainerData c9x;
@@ -78,16 +57,6 @@ t_Gruvin9xTrainerData_v104::operator TrainerData ()
return c9x;
}
-t_Gruvin9xTrainerData_v104::t_Gruvin9xTrainerData_v104(TrainerData &c9x)
-{
- memset(this, 0, sizeof(t_Gruvin9xTrainerData_v104));
- for (int i=0; i>=1;
- }
- if (zeros==G9X_MAX_PHASES || zeros==0) {
- phase=0;
- negPhase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- negPhase=0;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=(ph+1);
- negPhase=1;
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight modes settings on expos not exported") + "\n";
- }
- weight = c9x.weight;
- expo = c9x.expo;
-}
-
t_Gruvin9xExpoData::operator ExpoData ()
{
ExpoData c9x;
c9x.mode = mode;
c9x.chn = chn;
- c9x.curveParam = curve;
- c9x.curveMode=1;
c9x.swtch = gruvin9xToSwitch(swtch);
if (negPhase) {
c9x.phases= 1 << (phase -1);
@@ -325,7 +180,18 @@ t_Gruvin9xExpoData::operator ExpoData ()
c9x.phases &= ~(1 << (phase -1));
}
c9x.weight = weight;
- c9x.expo = expo;
+ if (expo) {
+ c9x.curve.type = CurveReference::CURVE_REF_EXPO;
+ c9x.curve.value = expo;
+ }
+ else if (curve > 6) {
+ c9x.curve.type = CurveReference::CURVE_REF_CUSTOM;
+ c9x.curve.value = curve - 6;
+ }
+ else if (curve > 0) {
+ c9x.curve.type = CurveReference::CURVE_REF_FUNC;
+ c9x.curve.value = curve;
+ }
return c9x;
}
@@ -334,14 +200,6 @@ t_Gruvin9xLimitData::t_Gruvin9xLimitData()
memset(this, 0, sizeof(t_Gruvin9xLimitData));
}
-t_Gruvin9xLimitData::t_Gruvin9xLimitData(LimitData &c9x)
-{
- min = c9x.min+100;
- max = c9x.max-100;
- revert = c9x.revert;
- offset = c9x.offset;
-}
-
t_Gruvin9xLimitData::operator LimitData ()
{
LimitData c9x;
@@ -352,67 +210,11 @@ t_Gruvin9xLimitData::operator LimitData ()
return c9x;
}
-
t_Gruvin9xMixData::t_Gruvin9xMixData()
{
memset(this, 0, sizeof(t_Gruvin9xMixData));
}
-t_Gruvin9xMixData::t_Gruvin9xMixData(MixData &c9x)
-{
- destCh = c9x.destCh;
- mixWarn = c9x.mixWarn;
- swtch = gruvin9xFromSwitch(c9x.swtch);
-
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n";
- srcRaw = 5 + c9x.srcRaw.index; // use pots instead
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 8; // MAX
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 9; // FULL
- swtch = c9x.srcRaw.index+1;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 10 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 13 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 21 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) {
- EEPROMWarnings += ::QObject::tr("gruvin9x doesn't have trims as source") + "\n";
- srcRaw = 0; // use pots instead
- }
-
- weight = c9x.weight;
- curve = c9x.curve;
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- if (c9x.carryTrim<0) {
- EEPROMWarnings += ::QObject::tr("gruvin9x doesn't have swappable trims") + "\n";
- carryTrim=1;
- } else {
- carryTrim = c9x.carryTrim;
- }
- mltpx = (MltpxValue)c9x.mltpx;
-// phase = c9x.phase;
- sOffset = c9x.sOffset;
-}
-
t_Gruvin9xMixData::operator MixData ()
{
MixData c9x;
@@ -450,7 +252,6 @@ t_Gruvin9xMixData::operator MixData ()
c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-21);
}
- c9x.curve = curve;
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -458,34 +259,18 @@ t_Gruvin9xMixData::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
- // c9x.phase = phase;
c9x.sOffset = sOffset;
- return c9x;
-}
-
-int8_t gruvin9xFromSource(RawSource source)
-{
- int v1 = 0;
- if (source.type == SOURCE_TYPE_STICK)
- v1 = 1+source.index;
- else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("gruvin9x on this board doesn't have Rotary Encoders") + "\n";
- v1 = 5+source.index;
+ if (curve > 6) {
+ c9x.curve.type = CurveReference::CURVE_REF_CUSTOM;
+ c9x.curve.value = curve - 6;
}
- else if (source.type == SOURCE_TYPE_MAX)
- v1 = 8;
- /* else if (source.type == SOURCE_TYPE_3POS)
- v1 = 0; */
- else if (source.type == SOURCE_TYPE_CYC)
- v1 = 10+source.index;
- else if (source.type == SOURCE_TYPE_PPM)
- v1 = 13+source.index;
- else if (source.type == SOURCE_TYPE_CH)
- v1 = 21+source.index;
- else if (source.type == SOURCE_TYPE_TELEMETRY)
- v1 = 36+source.index;
- return v1;
+ else if (curve > 0) {
+ c9x.curve.type = CurveReference::CURVE_REF_FUNC;
+ c9x.curve.value = curve;
+ }
+
+ return c9x;
}
RawSource gruvin9xToSource(int8_t value)
@@ -516,49 +301,22 @@ RawSource gruvin9xToSource(int8_t value)
}
}
-t_Gruvin9xCustomSwData::t_Gruvin9xCustomSwData(CustomSwData &c9x)
+Gruvin9xLogicalSwitchData::operator LogicalSwitchData ()
{
- func = c9x.func;
- v1 = c9x.val1;
- v2 = c9x.val2;
-
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
- v1 = gruvin9xFromSource(RawSource(c9x.val1));
- }
-
- if (c9x.func >= CS_FN_EQUAL) {
- v2 = gruvin9xFromSource(RawSource(c9x.val2));
- }
-
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
- v1 = gruvin9xFromSwitch(RawSwitch(c9x.val1));
- v2 = gruvin9xFromSwitch(RawSwitch(c9x.val2));
- }
-
- if (func>GR9X_MAX_CSFUNC ) {
- EEPROMWarnings += ::QObject::tr("gruvin9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n";
- func=0;
- v1=0;
- v2=0;
- }
-}
-
-Gruvin9xCustomSwData::operator CustomSwData ()
-{
- CustomSwData c9x;
+ LogicalSwitchData c9x;
c9x.func = func;
c9x.val1 = v1;
c9x.val2 = v2;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
+ if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) {
c9x.val1 = gruvin9xToSource(v1).toValue();
}
- if (c9x.func >= CS_FN_EQUAL) {
+ if (c9x.func >= LS_FN_EQUAL) {
c9x.val2 = gruvin9xToSource(v2).toValue();
}
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
+ if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) {
c9x.val1 = gruvin9xToSwitch(v1).toValue();
c9x.val2 = gruvin9xToSwitch(v2).toValue();
}
@@ -566,12 +324,6 @@ Gruvin9xCustomSwData::operator CustomSwData ()
return c9x;
}
-t_Gruvin9xFuncSwData::t_Gruvin9xFuncSwData(FuncSwData &c9x)
-{
- swtch = gruvin9xFromSwitch(c9x.swtch);
- func = c9x.func - G9X_NUM_CHNOUT;
-}
-
Gruvin9xFuncSwData::operator FuncSwData ()
{
FuncSwData c9x;
@@ -580,35 +332,11 @@ Gruvin9xFuncSwData::operator FuncSwData ()
return c9x;
}
-t_Gruvin9xSafetySwData::t_Gruvin9xSafetySwData(SafetySwData &c9x)
-{
- swtch = gruvin9xFromSwitch(c9x.swtch);
- val = c9x.val;
-}
-
-t_Gruvin9xSafetySwData::operator SafetySwData ()
-{
- SafetySwData c9x;
- c9x.swtch = gruvin9xToSwitch(swtch);
- c9x.val = val;
- return c9x;
-}
-
t_Gruvin9xSwashRingData::t_Gruvin9xSwashRingData()
{
memset(this, 0, sizeof(t_Gruvin9xSwashRingData));
}
-t_Gruvin9xSwashRingData::t_Gruvin9xSwashRingData(SwashRingData &c9x)
-{
- invertELE = c9x.invertELE;
- invertAIL = c9x.invertAIL;
- invertCOL = c9x.invertCOL;
- type = c9x.type;
- collectiveSource = gruvin9xFromSource(c9x.collectiveSource);
- value = c9x.value;
-}
-
t_Gruvin9xSwashRingData::operator SwashRingData ()
{
SwashRingData c9x;
@@ -645,21 +373,7 @@ t_Gruvin9xPhaseData_v106::operator PhaseData ()
return c9x;
}
-t_Gruvin9xPhaseData_v106::t_Gruvin9xPhaseData_v106(PhaseData &c9x)
-{
- trim_ext = 0;
- for (int i=0; i> 2);
- trim_ext = (trim_ext & ~(0x03 << (2*i))) + (((c9x.trim[i] & 0x03) << (2*i)));
- }
- swtch = gruvin9xFromSwitch(c9x.swtch);
- setEEPROMZString(name, c9x.name, sizeof(name));
- fadeIn = c9x.fadeIn;
- fadeOut = c9x.fadeOut;
-}
-
-extern TimerMode getEr9xTimerMode(int mode);
-extern int setEr9xTimerMode(TimerMode mode);
+extern RawSwitch getEr9xTimerMode(int mode);
t_Gruvin9xTimerData::operator TimerData ()
{
@@ -670,29 +384,11 @@ t_Gruvin9xTimerData::operator TimerData ()
return c9x;
}
-t_Gruvin9xTimerData::t_Gruvin9xTimerData(TimerData &c9x)
-{
- mode = setEr9xTimerMode(c9x.mode);
- val = c9x.val;
- dir = c9x.dir;
-}
-
t_Gruvin9xFrSkyChannelData::t_Gruvin9xFrSkyChannelData()
{
memset(this, 0, sizeof(t_Gruvin9xFrSkyChannelData));
}
-t_Gruvin9xFrSkyChannelData::t_Gruvin9xFrSkyChannelData(FrSkyChannelData &c9x)
-{
- memset(this, 0, sizeof(t_Gruvin9xFrSkyChannelData));
- ratio = c9x.ratio;
- alarms_value[0] = c9x.alarms[0].value;
- alarms_value[1] = c9x.alarms[1].value;
- alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level;
- alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater;
- type = c9x.type;
-}
-
t_Gruvin9xFrSkyChannelData::operator FrSkyChannelData ()
{
FrSkyChannelData c9x;
@@ -707,19 +403,11 @@ t_Gruvin9xFrSkyChannelData::operator FrSkyChannelData ()
return c9x;
}
-
t_Gruvin9xFrSkyData::t_Gruvin9xFrSkyData()
{
memset(this, 0, sizeof(t_Gruvin9xFrSkyData));
}
-t_Gruvin9xFrSkyData::t_Gruvin9xFrSkyData(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Gruvin9xFrSkyData));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
-}
-
t_Gruvin9xFrSkyData::operator FrSkyData ()
{
FrSkyData c9x;
@@ -728,7 +416,6 @@ t_Gruvin9xFrSkyData::operator FrSkyData ()
return c9x;
}
-
t_Gruvin9xModelData_v102::operator ModelData ()
{
ModelData c9x;
@@ -763,7 +450,7 @@ t_Gruvin9xModelData_v102::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo;
- c9x.trimInc = trimInc;
+ c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@@ -778,7 +465,6 @@ t_Gruvin9xModelData_v102::operator ModelData ()
c9x.expoData[i] = expoData[i];
for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- }
- else {
- memset(this, 0, sizeof(t_Gruvin9xModelData_v106));
- }
-}
-
diff --git a/companion/src/firmwares/gruvin9x/gruvin9xeeprom.h b/companion/src/firmwares/gruvin9x/gruvin9xeeprom.h
index f2e0cf1e2..8886c83d1 100644
--- a/companion/src/firmwares/gruvin9x/gruvin9xeeprom.h
+++ b/companion/src/firmwares/gruvin9x/gruvin9xeeprom.h
@@ -38,8 +38,6 @@ PACK(typedef struct t_Gruvin9xTrainerMix_v104 {
operator TrainerMix();
t_Gruvin9xTrainerMix_v104() { memset(this, 0, sizeof(t_Gruvin9xTrainerMix_v104)); }
- t_Gruvin9xTrainerMix_v104(TrainerMix&);
-
}) Gruvin9xTrainerMix_v104; //
PACK(typedef struct t_Gruvin9xTrainerData_v103 {
@@ -55,8 +53,6 @@ PACK(typedef struct t_Gruvin9xTrainerData_v104 {
operator TrainerData();
t_Gruvin9xTrainerData_v104() { memset(this, 0, sizeof(t_Gruvin9xTrainerData_v104)); }
- t_Gruvin9xTrainerData_v104(TrainerData&);
-
}) Gruvin9xTrainerData_v104;
PACK(typedef struct t_Gruvin9xFrSkyRSSIAlarm {
@@ -136,8 +132,6 @@ PACK(typedef struct t_Gruvin9xGeneral_v104 {
operator GeneralSettings();
t_Gruvin9xGeneral_v104() { memset(this, 0, sizeof(t_Gruvin9xGeneral_v104)); }
- t_Gruvin9xGeneral_v104(GeneralSettings&);
-
}) Gruvin9xGeneral_v104;
typedef Gruvin9xGeneral_v104 Gruvin9xGeneral;
@@ -156,8 +150,6 @@ PACK(typedef struct t_Gruvin9xExpoData {
operator ExpoData();
t_Gruvin9xExpoData();
- t_Gruvin9xExpoData(ExpoData&);
-
}) Gruvin9xExpoData;
PACK(typedef struct t_Gruvin9xLimitData {
@@ -168,8 +160,6 @@ PACK(typedef struct t_Gruvin9xLimitData {
operator LimitData();
t_Gruvin9xLimitData();
- t_Gruvin9xLimitData(LimitData&);
-
}) Gruvin9xLimitData;
#define MLTPX_ADD 0
@@ -194,29 +184,22 @@ PACK(typedef struct t_Gruvin9xMixData {
operator MixData();
t_Gruvin9xMixData();
- t_Gruvin9xMixData(MixData&);
-
}) Gruvin9xMixData;
-PACK(typedef struct t_Gruvin9xCustomSwData { // Custom Switches data
+PACK(typedef struct t_Gruvin9xLogicalSwitchData { // Custom Switches data
int8_t v1; //input
int8_t v2; //offset
uint8_t func;
- operator CustomSwData();
- t_Gruvin9xCustomSwData() { memset(this, 0, sizeof(t_Gruvin9xCustomSwData)); }
- t_Gruvin9xCustomSwData(CustomSwData&);
-
-}) Gruvin9xCustomSwData;
+ operator LogicalSwitchData();
+ t_Gruvin9xLogicalSwitchData() { memset(this, 0, sizeof(t_Gruvin9xLogicalSwitchData)); }
+}) Gruvin9xLogicalSwitchData;
PACK(typedef struct t_Gruvin9xSafetySwData { // Safety Switches data
int8_t swtch;
int8_t val;
- operator SafetySwData();
t_Gruvin9xSafetySwData() { memset(this, 0, sizeof(t_Gruvin9xSafetySwData)); }
- t_Gruvin9xSafetySwData(SafetySwData&);
-
}) Gruvin9xSafetySwData;
PACK(typedef struct t_Gruvin9xFuncSwData { // Function Switches data
@@ -225,8 +208,6 @@ PACK(typedef struct t_Gruvin9xFuncSwData { // Function Switches data
operator FuncSwData();
t_Gruvin9xFuncSwData() { memset(this, 0, sizeof(t_Gruvin9xFuncSwData)); }
- t_Gruvin9xFuncSwData(FuncSwData&);
-
}) Gruvin9xFuncSwData;
PACK(typedef struct t_Gruvin9xFrSkyChannelData {
@@ -242,17 +223,13 @@ PACK(typedef struct t_Gruvin9xFrSkyChannelData {
operator FrSkyChannelData();
t_Gruvin9xFrSkyChannelData();
- t_Gruvin9xFrSkyChannelData(FrSkyChannelData&);
-
}) Gruvin9xFrSkyChannelData;
PACK(typedef struct t_Gruvin9xFrSkyData {
- Gruvin9xFrSkyChannelData channels[2];
-
- operator FrSkyData();
- t_Gruvin9xFrSkyData();
- t_Gruvin9xFrSkyData(FrSkyData&);
+ Gruvin9xFrSkyChannelData channels[2];
+ operator FrSkyData();
+ t_Gruvin9xFrSkyData();
}) Gruvin9xFrSkyData;
PACK(typedef struct t_Gruvin9xSwashRingData { // Swash Ring data
@@ -265,8 +242,6 @@ PACK(typedef struct t_Gruvin9xSwashRingData { // Swash Ring data
operator SwashRingData();
t_Gruvin9xSwashRingData();
- t_Gruvin9xSwashRingData(SwashRingData&);
-
}) Gruvin9xSwashRingData;
PACK(typedef struct t_Gruvin9xPhaseData_v102 {
@@ -291,7 +266,6 @@ PACK(typedef struct t_Gruvin9xPhaseData_v106 {
operator PhaseData();
t_Gruvin9xPhaseData_v106() { memset(this, 0, sizeof(t_Gruvin9xPhaseData_v106)); }
- t_Gruvin9xPhaseData_v106(PhaseData &eepe);
}) Gruvin9xPhaseData_v106;
PACK(typedef struct t_Gruvin9xTimerData {
@@ -301,7 +275,6 @@ PACK(typedef struct t_Gruvin9xTimerData {
operator TimerData();
t_Gruvin9xTimerData() { memset(this, 0, sizeof(t_Gruvin9xTimerData)); }
- t_Gruvin9xTimerData(TimerData &eepe);
}) Gruvin9xTimerData;
#define G9X_MAX_PHASES 5
@@ -336,7 +309,7 @@ PACK(typedef struct t_Gruvin9xModelData_v102 {
Gruvin9xExpoData expoData[G9X_MAX_EXPOS];
int8_t curves5[G9X_MAX_CURVE5][5];
int8_t curves9[G9X_MAX_CURVE9][9];
- Gruvin9xCustomSwData customSw[G9X_NUM_CSW];
+ Gruvin9xLogicalSwitchData customSw[G9X_NUM_CSW];
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
Gruvin9xSwashRingData swashR;
Gruvin9xPhaseData_v102 phaseData[G9X_MAX_PHASES];
@@ -368,7 +341,7 @@ PACK(typedef struct t_Gruvin9xModelData_v103 {
Gruvin9xExpoData expoData[G9X_MAX_EXPOS];
int8_t curves5[G9X_MAX_CURVE5][5];
int8_t curves9[G9X_MAX_CURVE9][9];
- Gruvin9xCustomSwData customSw[G9X_NUM_CSW];
+ Gruvin9xLogicalSwitchData customSw[G9X_NUM_CSW];
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
Gruvin9xSwashRingData swashR;
Gruvin9xPhaseData_v102 phaseData[G9X_MAX_PHASES];
@@ -400,7 +373,7 @@ PACK(typedef struct t_Gruvin9xModelData_v105 {
Gruvin9xExpoData expoData[G9X_MAX_EXPOS];
int8_t curves5[G9X_MAX_CURVE5][5];
int8_t curves9[G9X_MAX_CURVE9][9];
- Gruvin9xCustomSwData customSw[G9X_NUM_CSW];
+ Gruvin9xLogicalSwitchData customSw[G9X_NUM_CSW];
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
Gruvin9xFuncSwData funcSw[G9X_NUM_FSW];
Gruvin9xSwashRingData swashR;
@@ -410,8 +383,6 @@ PACK(typedef struct t_Gruvin9xModelData_v105 {
operator ModelData();
t_Gruvin9xModelData_v105() { memset(this, 0, sizeof(t_Gruvin9xModelData_v105)); }
- t_Gruvin9xModelData_v105(ModelData&);
-
}) Gruvin9xModelData_v105;
PACK(typedef struct t_Gruvin9xModelData_v106 {
@@ -434,7 +405,7 @@ PACK(typedef struct t_Gruvin9xModelData_v106 {
Gruvin9xExpoData expoData[G9X_MAX_EXPOS];
int8_t curves5[G9X_MAX_CURVE5][5];
int8_t curves9[G9X_MAX_CURVE9][9];
- Gruvin9xCustomSwData customSw[G9X_NUM_CSW];
+ Gruvin9xLogicalSwitchData customSw[G9X_NUM_CSW];
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
Gruvin9xFuncSwData funcSw[G9X_NUM_FSW];
Gruvin9xSwashRingData swashR;
@@ -443,11 +414,8 @@ PACK(typedef struct t_Gruvin9xModelData_v106 {
operator ModelData();
t_Gruvin9xModelData_v106() { memset(this, 0, sizeof(t_Gruvin9xModelData_v106)); }
- t_Gruvin9xModelData_v106(ModelData&);
-
}) Gruvin9xModelData_v106;
typedef Gruvin9xModelData_v106 Gruvin9xModelData;
#endif
-/*eof*/
diff --git a/companion/src/firmwares/gruvin9x/gruvin9xinterface.cpp b/companion/src/firmwares/gruvin9x/gruvin9xinterface.cpp
index 114fd3bee..2afe8ba03 100644
--- a/companion/src/firmwares/gruvin9x/gruvin9xinterface.cpp
+++ b/companion/src/firmwares/gruvin9x/gruvin9xinterface.cpp
@@ -18,6 +18,7 @@
#include "gruvin9xinterface.h"
#include "gruvin9xeeprom.h"
#include "file.h"
+#include "appdata.h"
#define FILE_TYP_GENERAL 1
#define FILE_TYP_MODEL 2
@@ -47,8 +48,7 @@ const char * Gruvin9xInterface::getName()
const int Gruvin9xInterface::getEEpromSize()
{
if (board == BOARD_STOCK) {
- QSettings settings("companion9x", "companion9x");
- QString avrMCU = settings.value("mcu", QString("m64")).toString();
+ QString avrMCU = g.mcu();
if (avrMCU==QString("m128")) {
return EESIZE_STOCK*2;
}
@@ -99,7 +99,7 @@ bool Gruvin9xInterface::loadxml(RadioData &radioData, QDomDocument &doc)
}
-bool Gruvin9xInterface::load(RadioData &radioData, uint8_t *eeprom, int size)
+bool Gruvin9xInterface::load(RadioData &radioData, const uint8_t *eeprom, int size)
{
std::cout << "trying " << getName() << " import... ";
@@ -108,7 +108,7 @@ bool Gruvin9xInterface::load(RadioData &radioData, uint8_t *eeprom, int size)
return false;
}
- if (!efile->EeFsOpen(eeprom, size, BOARD_STOCK)) {
+ if (!efile->EeFsOpen((uint8_t *)eeprom, size, BOARD_STOCK)) {
std::cout << "wrong file system\n";
return false;
}
@@ -200,73 +200,25 @@ bool Gruvin9xInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, int es
int Gruvin9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version)
{
- EEPROMWarnings.clear();
+ std::cout << "NO!\n";
+ // TODO an error
- int size = getEEpromSize();
-
- efile->EeFsCreate(eeprom, size, BOARD_STOCK);
-
- Gruvin9xGeneral gruvin9xGeneral(radioData.generalSettings);
- int sz = efile->writeRlc2(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&gruvin9xGeneral, sizeof(Gruvin9xGeneral));
- if(sz != sizeof(Gruvin9xGeneral)) {
- return 0;
- }
-
- for (int i=0; iwriteRlc2(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&gruvin9xModel, sizeof(Gruvin9xModelData));
- if(sz != sizeof(Gruvin9xModelData)) {
- return 0;
- }
- }
- }
-
- return size;
+ return 0;
}
int Gruvin9xInterface::getSize(ModelData &model)
{
- if (model.isempty())
- return 0;
-
- uint8_t tmp[EESIZE_GRUVIN9X];
- efile->EeFsCreate(tmp, EESIZE_GRUVIN9X, BOARD_STOCK);
-
- Gruvin9xModelData gruvin9xModel(model);
- int sz = efile->writeRlc2(0, FILE_TYP_MODEL, (uint8_t*)&gruvin9xModel, sizeof(Gruvin9xModelData));
- if(sz != sizeof(Gruvin9xModelData)) {
- return -1;
- }
- return efile->size(0);
+ return 0;
}
int Gruvin9xInterface::getSize(GeneralSettings &settings)
{
- uint8_t tmp[EESIZE_GRUVIN9X];
- efile->EeFsCreate(tmp, EESIZE_GRUVIN9X, BOARD_STOCK);
-
- Gruvin9xGeneral gruvin9xGeneral(settings);
- int sz = efile->writeRlc1(0, FILE_TYP_GENERAL, (uint8_t*)&gruvin9xGeneral, sizeof(gruvin9xGeneral));
- if(sz != sizeof(gruvin9xGeneral)) {
- return -1;
- }
- return efile->size(0);
+ return 0;
}
int Gruvin9xInterface::getCapability(const Capability capability)
{
switch (capability) {
- case OwnerName:
- return 0;
- case NumCurves5:
- return G9X_MAX_CURVE5;
- case NumCurves9:
- return G9X_MAX_CURVE9;
case Mixes:
return G9X_MAX_MIXERS;
case FlightPhases:
@@ -283,7 +235,7 @@ int Gruvin9xInterface::getCapability(const Capability capability)
return 9;
case CustomFunctions:
return 12;
- case CustomSwitches:
+ case LogicalSwitches:
return 12;
case CSFunc:
return 13;
@@ -297,7 +249,6 @@ int Gruvin9xInterface::getCapability(const Capability capability)
return true;
case OffsetWeight:
return 125;
- case HasExpoCurves:
case HasContrast:
return true;
case Telemetry:
diff --git a/companion/src/firmwares/gruvin9x/gruvin9xinterface.h b/companion/src/firmwares/gruvin9x/gruvin9xinterface.h
index 7da0975e1..2c8a28dc2 100644
--- a/companion/src/firmwares/gruvin9x/gruvin9xinterface.h
+++ b/companion/src/firmwares/gruvin9x/gruvin9xinterface.h
@@ -35,7 +35,7 @@ class Gruvin9xInterface : public EEPROMInterface
virtual const int getMaxModels();
- virtual bool load(RadioData &, uint8_t *eeprom, int size);
+ virtual bool load(RadioData &, const uint8_t *eeprom, int size);
virtual bool loadBackup(RadioData &, uint8_t *eeprom,int esize, int index);
diff --git a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp
index 74d4d0074..6ec5f402d 100644
--- a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp
+++ b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp
@@ -5,10 +5,7 @@
#include
#include
-extern void setEEPROMZString(char *dst, const char *src, int size);
extern void getEEPROMZString(char *dst, const char *src, int size);
-
-extern int8_t open9xStockFromSwitch(const RawSwitch & sw);
extern RawSwitch open9xStockToSwitch(int8_t sw);
t_Open9xGruvin9xPhaseData_v207::operator PhaseData ()
@@ -25,21 +22,6 @@ t_Open9xGruvin9xPhaseData_v207::operator PhaseData ()
return c9x;
}
-t_Open9xGruvin9xPhaseData_v207::t_Open9xGruvin9xPhaseData_v207(PhaseData &c9x)
-{
- trim_ext = 0;
- for (int i=0; i> 2);
- trim_ext = (trim_ext & ~(0x03 << (2*i))) + (((c9x.trim[i] & 0x03) << (2*i)));
- }
- swtch = open9xStockFromSwitch(c9x.swtch);
- setEEPROMZString(name, c9x.name, sizeof(name));
- fadeIn = c9x.fadeIn;
- fadeOut = c9x.fadeOut;
- for (int i=0; i<2; i++)
- rotaryEncoders[i] = c9x.rotaryEncoders[i];
-}
-
t_Open9xGruvin9xPhaseData_v208::operator PhaseData ()
{
PhaseData c9x;
@@ -54,107 +36,6 @@ t_Open9xGruvin9xPhaseData_v208::operator PhaseData ()
return c9x;
}
-t_Open9xGruvin9xPhaseData_v208::t_Open9xGruvin9xPhaseData_v208(PhaseData &c9x)
-{
- for (int i=0; i>=1;
- }
- if (zeros==O9X_MAX_PHASES || zeros==0) {
- phase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=-(ph+1);
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight mode settings on mixers not exported") + "\n";
- }
- sOffset = c9x.sOffset;
- }
- else {
- memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v207));
- }
-}
-
t_Open9xGruvin9xMixData_v207::operator MixData ()
{
MixData c9x;
@@ -188,9 +69,15 @@ t_Open9xGruvin9xMixData_v207::operator MixData ()
c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-44);
}
c9x.weight = weight;
- c9x.differential = differential*2;
+
+ if (differential) {
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2);
+ }
+ else {
+ // TODO c9x.curve = curve;
+ }
+
c9x.swtch = open9xStockToSwitch(swtch);
- c9x.curve = curve;
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -198,12 +85,14 @@ t_Open9xGruvin9xMixData_v207::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
-// c9x.phase = phase;
+
if (phase<0) {
c9x.phases= 1 << (-phase -1);
- } else if (phase==0) {
+ }
+ else if (phase==0) {
c9x.phases=0;
- } else {
+ }
+ else {
c9x.phases=63;
c9x.phases &= ~(1 << (phase -1));
}
@@ -212,98 +101,6 @@ t_Open9xGruvin9xMixData_v207::operator MixData ()
return c9x;
}
-t_Open9xGruvin9xMixData_v209::t_Open9xGruvin9xMixData_v209(MixData &c9x)
-{
- if (c9x.destCh) {
- destCh = c9x.destCh-1;
- mixWarn = c9x.mixWarn;
- swtch = open9xStockFromSwitch(c9x.swtch);
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
- srcRaw = 8 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) {
- srcRaw = 10 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 14;
- }
- /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) {
- srcRaw = 15;
- } */
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 15 + open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index));
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 37 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 40 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 48 + c9x.srcRaw.index;
- }
- weight = c9x.weight;
- differential = c9x.differential/2;
- curve = c9x.curve;
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- carryTrim = c9x.carryTrim;
- mltpx = (MltpxValue)c9x.mltpx;
- int zeros=0;
- int ones=0;
- int phtemp=c9x.phases;
- for (int i=0; i>=1;
- }
- if (zeros==O9X_MAX_PHASES || zeros==0) {
- phase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=-(ph+1);
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight mode settings on mixers not exported") + "\n";
- }
- sOffset = c9x.sOffset;
- }
- else {
- memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v207));
- }
-}
-
t_Open9xGruvin9xMixData_v209::operator MixData ()
{
MixData c9x;
@@ -340,9 +137,15 @@ t_Open9xGruvin9xMixData_v209::operator MixData ()
c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-48);
}
c9x.weight = weight;
- c9x.differential = differential*2;
+
+ if (differential) {
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2);
+ }
+ else {
+ // TODO c9x.curve = curve;
+ }
+
c9x.swtch = open9xStockToSwitch(swtch);
- c9x.curve = curve;
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -350,12 +153,14 @@ t_Open9xGruvin9xMixData_v209::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
- // c9x.phase = phase;
+
if (phase<0) {
c9x.phases= 1 << (-phase -1);
- } else if (phase==0) {
+ }
+ else if (phase==0) {
c9x.phases=0;
- } else {
+ }
+ else {
c9x.phases=63;
c9x.phases &= ~(1 << (phase -1));
}
@@ -364,66 +169,6 @@ t_Open9xGruvin9xMixData_v209::operator MixData ()
return c9x;
}
-t_Open9xGruvin9xMixData_v211::t_Open9xGruvin9xMixData_v211(MixData &c9x)
-{
- if (c9x.destCh) {
- destCh = c9x.destCh-1;
- mixWarn = c9x.mixWarn;
- swtch = open9xStockFromSwitch(c9x.swtch);
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
- srcRaw = 8 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) {
- srcRaw = 10 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 14;
- }
- /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) {
- srcRaw = 15;
- } */
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 15 + open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index));
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 37 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 40 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 48 + c9x.srcRaw.index;
- }
- weight = c9x.weight;
- if (c9x.curve==0) {
- curveMode=0;
- curveParam=c9x.differential;
- } else {
- curveMode=1;
- curveParam = c9x.curve;
- }
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- carryTrim = c9x.carryTrim;
- noExpo = c9x.noExpo;
- mltpx = (MltpxValue)c9x.mltpx;
- phases = c9x.phases;
- sOffset = c9x.sOffset;
- }
- else {
- memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v211));
- }
-}
-
t_Open9xGruvin9xMixData_v211::operator MixData ()
{
MixData c9x;
@@ -461,12 +206,14 @@ t_Open9xGruvin9xMixData_v211::operator MixData ()
}
c9x.weight = weight;
c9x.swtch = open9xStockToSwitch(swtch);
+
if (curveMode==0) {
- c9x.differential = curveParam;
- c9x.curve=0;
- } else {
- c9x.curve=curveParam;
- }
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, curveParam);
+ }
+ else {
+ // TODO c9x.curve = curve;
+ }
+
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -481,28 +228,6 @@ t_Open9xGruvin9xMixData_v211::operator MixData ()
return c9x;
}
-int8_t open9xV4207FromSource(RawSource source)
-{
- int v1 = 0;
- if (source.type == SOURCE_TYPE_STICK)
- v1 = 1+source.index;
- else if (source.type == SOURCE_TYPE_ROTARY_ENCODER)
- v1 = 8+source.index;
- else if (source.type == SOURCE_TYPE_MAX)
- v1 = 10;
- /* else if (source.type == SOURCE_TYPE_3POS)
- v1 = 11; */
- else if (source.type == SOURCE_TYPE_CYC)
- v1 = 12+source.index;
- else if (source.type == SOURCE_TYPE_PPM)
- v1 = 15+source.index;
- else if (source.type == SOURCE_TYPE_CH)
- v1 = 23+source.index;
- else if (source.type == SOURCE_TYPE_TELEMETRY)
- v1 = 38+source.index;
- return v1;
-}
-
RawSource open9xV4207ToSource(int8_t value)
{
if (value == 0) {
@@ -534,30 +259,6 @@ RawSource open9xV4207ToSource(int8_t value)
}
}
-int8_t open9xV4209FromSource(RawSource source)
-{
- int v1 = 0;
- if (source.type == SOURCE_TYPE_STICK)
- v1 = 1+source.index;
- else if (source.type == SOURCE_TYPE_ROTARY_ENCODER)
- v1 = 8+source.index;
- if (source.type == SOURCE_TYPE_TRIM)
- v1 = 10+source.index;
- else if (source.type == SOURCE_TYPE_MAX)
- v1 = 14;
- /* else if (source.type == SOURCE_TYPE_3POS)
- v1 = 15; */
- else if (source.type == SOURCE_TYPE_CYC)
- v1 = 16+source.index;
- else if (source.type == SOURCE_TYPE_PPM)
- v1 = 19+source.index;
- else if (source.type == SOURCE_TYPE_CH)
- v1 = 27+source.index;
- else if (source.type == SOURCE_TYPE_TELEMETRY)
- v1 = 42+source.index;
- return v1;
-}
-
RawSource open9xV4209ToSource(int8_t value)
{
if (value == 0) {
@@ -592,49 +293,22 @@ RawSource open9xV4209ToSource(int8_t value)
}
}
-t_Open9xGruvin9xCustomSwData_v207::t_Open9xGruvin9xCustomSwData_v207(CustomSwData &c9x)
+Open9xGruvin9xLogicalSwitchData_v207::operator LogicalSwitchData ()
{
- func = c9x.func;
- v1 = c9x.val1;
- v2 = c9x.val2;
-
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
- v1 = open9xV4207FromSource(RawSource(c9x.val1));
- }
-
- if (c9x.func >= CS_FN_EQUAL) {
- v2 = open9xV4207FromSource(RawSource(c9x.val2));
- }
-
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
- v1 = open9xStockFromSwitch(RawSwitch(c9x.val1));
- v2 = open9xStockFromSwitch(RawSwitch(c9x.val2));
- }
-
- if (func>O9X_V4_MAX_CSFUNCOLD ) {
- EEPROMWarnings += ::QObject::tr("This version of open9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n";
- func=0;
- v1=0;
- v2=0;
- }
-}
-
-Open9xGruvin9xCustomSwData_v207::operator CustomSwData ()
-{
- CustomSwData c9x;
+ LogicalSwitchData c9x;
c9x.func = func;
c9x.val1 = v1;
c9x.val2 = v2;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
+ if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) {
c9x.val1 = open9xV4207ToSource(v1).toValue();
}
- if (c9x.func >= CS_FN_EQUAL) {
+ if (c9x.func >= LS_FN_EQUAL) {
c9x.val2 = open9xV4207ToSource(v2).toValue();
}
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
+ if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) {
c9x.val1 = open9xStockToSwitch(v1).toValue();
c9x.val2 = open9xStockToSwitch(v2).toValue();
}
@@ -642,42 +316,22 @@ Open9xGruvin9xCustomSwData_v207::operator CustomSwData ()
return c9x;
}
-t_Open9xGruvin9xCustomSwData_v209::t_Open9xGruvin9xCustomSwData_v209(CustomSwData &c9x)
+Open9xGruvin9xLogicalSwitchData_v209::operator LogicalSwitchData ()
{
- func = c9x.func;
- v1 = c9x.val1;
- v2 = c9x.val2;
-
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
- v1 = open9xV4209FromSource(RawSource(c9x.val1));
- }
-
- if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) {
- v2 = open9xV4209FromSource(RawSource(c9x.val2));
- }
-
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
- v1 = open9xStockFromSwitch(RawSwitch(c9x.val1));
- v2 = open9xStockFromSwitch(RawSwitch(c9x.val2));
- }
-}
-
-Open9xGruvin9xCustomSwData_v209::operator CustomSwData ()
-{
- CustomSwData c9x;
+ LogicalSwitchData c9x;
c9x.func = func;
c9x.val1 = v1;
c9x.val2 = v2;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
+ if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) {
c9x.val1 = open9xV4209ToSource(v1).toValue();
}
- if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) {
+ if (c9x.func >= LS_FN_EQUAL && c9x.func <= LS_FN_ELESS) {
c9x.val2 = open9xV4209ToSource(v2).toValue();
}
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
+ if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) {
c9x.val1 = open9xStockToSwitch(v1).toValue();
c9x.val2 = open9xStockToSwitch(v2).toValue();
}
@@ -685,45 +339,6 @@ Open9xGruvin9xCustomSwData_v209::operator CustomSwData ()
return c9x;
}
-t_Open9xGruvin9xFuncSwData_v203::t_Open9xGruvin9xFuncSwData_v203(FuncSwData &c9x)
-{
- swtch = open9xStockFromSwitch(c9x.swtch);
- if (c9x.func <= FuncSafetyCh16) {
- param = ((c9x.param>>1)<<1);
- param |=(c9x.enabled & 0x01);
- func = c9x.func;
- } else {
- param = c9x.param;
- if (c9x.func <= FuncTrainerAIL)
- func = 16 + c9x.func - FuncTrainer;
- else if (c9x.func == FuncInstantTrim)
- func = 21;
- else if (c9x.func == FuncPlaySound)
- func = 22;
- else if (c9x.func == FuncPlayHaptic)
- func = 23;
- else if (c9x.func == FuncReset)
- func = 24;
- else if (c9x.func == FuncVario)
- func = 25;
- else if (c9x.func == FuncPlayPrompt)
- func = 26;
- else if (c9x.func == FuncPlayValue)
- func = 27;
- else if (c9x.func == FuncLogs)
- func = 28;
- else if (c9x.func == FuncBacklight)
- func = 29;
- else if (c9x.func >= FuncAdjustGV1 && c9x.func <= FuncAdjustGV5)
- func = 30 + c9x.func - FuncAdjustGV1;
- else {
- swtch = 0;
- func = 0;
- param = 0;
- }
- }
-}
-
t_Open9xGruvin9xFuncSwData_v203::operator FuncSwData ()
{
FuncSwData c9x;
@@ -763,37 +378,6 @@ t_Open9xGruvin9xFuncSwData_v203::operator FuncSwData ()
return c9x;
}
-t_Open9xGruvin9xFuncSwData_v210::t_Open9xGruvin9xFuncSwData_v210(FuncSwData &c9x)
-{
- swtch = open9xStockFromSwitch(c9x.swtch);
- param = c9x.param;
- if (c9x.func <= FuncInstantTrim) {
- func = (uint8_t)c9x.func;
- delay = c9x.enabled;
- }
- else if (c9x.func == FuncPlaySound)
- func = 22;
- else if (c9x.func == FuncPlayHaptic)
- func = 23;
- else if (c9x.func == FuncReset)
- func = 24;
- else if (c9x.func == FuncVario)
- func = 25;
- else if (c9x.func == FuncPlayPrompt)
- func = 26;
- else if (c9x.func == FuncPlayValue)
- func = 27;
- else if (c9x.func == FuncLogs)
- func = 28;
- else if (c9x.func == FuncBacklight)
- func = 29;
- else {
- swtch = 0;
- func = 0;
- param = 0;
- }
-}
-
t_Open9xGruvin9xFuncSwData_v210::operator FuncSwData ()
{
FuncSwData c9x;
@@ -823,16 +407,6 @@ t_Open9xGruvin9xFuncSwData_v210::operator FuncSwData ()
return c9x;
}
-t_Open9xGruvin9xSwashRingData_v208::t_Open9xGruvin9xSwashRingData_v208(SwashRingData &c9x)
-{
- invertELE = c9x.invertELE;
- invertAIL = c9x.invertAIL;
- invertCOL = c9x.invertCOL;
- type = c9x.type;
- collectiveSource = open9xV4207FromSource(c9x.collectiveSource);
- value = c9x.value;
-}
-
t_Open9xGruvin9xSwashRingData_v208::operator SwashRingData ()
{
SwashRingData c9x;
@@ -845,16 +419,6 @@ t_Open9xGruvin9xSwashRingData_v208::operator SwashRingData ()
return c9x;
}
-t_Open9xGruvin9xSwashRingData_v209::t_Open9xGruvin9xSwashRingData_v209(SwashRingData &c9x)
-{
- invertELE = c9x.invertELE;
- invertAIL = c9x.invertAIL;
- invertCOL = c9x.invertCOL;
- type = c9x.type;
- collectiveSource = open9xV4209FromSource(c9x.collectiveSource);
- value = c9x.value;
-}
-
t_Open9xGruvin9xSwashRingData_v209::operator SwashRingData ()
{
SwashRingData c9x;
@@ -890,7 +454,7 @@ t_Open9xGruvin9xModelData_v207::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
- c9x.trimInc = trimInc;
+ c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@@ -915,7 +479,6 @@ t_Open9xGruvin9xModelData_v207::operator ModelData ()
c9x.expoData[i] = expoData[i];
for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- frskyLinesXtra=0;
- for (int j=0; j<4; j++) {
- frskyLines[j] = 0;
- for (int k=0; k<2; k++) {
- int value = c9x.frsky.screens[1].body.lines[j].source[k];
- frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4));
- frskyLinesXtra |= (value / 16) << (4*j+2*k);
- }
- }
- }
- else {
- memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v207));
- }
-}
-
-
t_Open9xGruvin9xModelData_v208::operator ModelData ()
{
ModelData c9x;
@@ -1079,7 +538,7 @@ t_Open9xGruvin9xModelData_v208::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
- c9x.trimInc = trimInc;
+ c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
@@ -1104,7 +563,6 @@ t_Open9xGruvin9xModelData_v208::operator ModelData ()
for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- varioSource = c9x.frsky.varioSource;
- varioSpeedUpMin = c9x.frsky.varioCenterMax;
- varioSpeedDownMin = c9x.frsky.varioCenterMin;
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- frskyLinesXtra=0;
- for (int j=0; j<4; j++) {
- frskyLines[j] = 0;
- for (int k=0; k<2; k++) {
- int value = c9x.frsky.screens[1].body.lines[j].source[k];
- frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4));
- frskyLinesXtra |= (value / 16) << (4*j+2*k);
- }
- }
- for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- varioSource = c9x.frsky.varioSource;
- varioSpeedUpMin = c9x.frsky.varioCenterMax;
- varioSpeedDownMin = c9x.frsky.varioCenterMin;
- switchWarningStates = c9x.switchWarningStates;
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- frskyLinesXtra=0;
- for (int j=0; j<4; j++) {
- frskyLines[j] = 0;
- for (int k=0; k<2; k++) {
- int value = c9x.frsky.screens[1].body.lines[j].source[k];
- frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4));
- frskyLinesXtra |= (value / 16) << (4*j+2*k);
- }
- }
- for (int i=0; i O9X_NUM_POINTS - 5 * O9X_MAX_CURVES) {
- EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_NUM_POINTS) + "\n";
- break;
- }
- curves[i] = offset;
- for (int j=0; j= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- switchWarningStates = c9x.switchWarningStates;
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- for (int i=0; i O9X_NUM_POINTS - 5 * O9X_MAX_CURVES) {
- EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_NUM_POINTS) + "\n";
- break;
- }
- curves[i] = offset;
- for (int j=0; j= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- switchWarningStates = c9x.switchWarningStates;
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- }
-}
-
diff --git a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h
index a37ed3d9d..214e2ef6d 100644
--- a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h
+++ b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h
@@ -32,7 +32,6 @@ PACK(typedef struct t_Open9xGruvin9xPhaseData_v207 {
int16_t rotaryEncoders[2];
operator PhaseData();
t_Open9xGruvin9xPhaseData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xPhaseData_v207)); }
- t_Open9xGruvin9xPhaseData_v207(PhaseData &eepe);
}) Open9xGruvin9xPhaseData_v207;
PACK(typedef struct t_Open9xGruvin9xPhaseData_v208 {
@@ -44,7 +43,6 @@ PACK(typedef struct t_Open9xGruvin9xPhaseData_v208 {
int16_t rotaryEncoders[2];
operator PhaseData();
t_Open9xGruvin9xPhaseData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xPhaseData_v208)); }
- t_Open9xGruvin9xPhaseData_v208(PhaseData &eepe);
}) Open9xGruvin9xPhaseData_v208;
PACK(typedef struct t_Open9xGruvin9xMixData_v207 {
@@ -66,8 +64,6 @@ PACK(typedef struct t_Open9xGruvin9xMixData_v207 {
operator MixData();
t_Open9xGruvin9xMixData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v207)); }
- t_Open9xGruvin9xMixData_v207(MixData&);
-
}) Open9xGruvin9xMixData_v207;
PACK(typedef struct t_Open9xGruvin9xMixData_v209 {
@@ -89,8 +85,6 @@ PACK(typedef struct t_Open9xGruvin9xMixData_v209 {
operator MixData();
t_Open9xGruvin9xMixData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v209)); }
- t_Open9xGruvin9xMixData_v209(MixData&);
-
}) Open9xGruvin9xMixData_v209;
PACK(typedef struct t_Open9xGruvin9xMixData_v211 {
@@ -114,35 +108,29 @@ PACK(typedef struct t_Open9xGruvin9xMixData_v211 {
operator MixData();
t_Open9xGruvin9xMixData_v211() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v211)); }
- t_Open9xGruvin9xMixData_v211(MixData&);
-
}) Open9xGruvin9xMixData_v211;
-PACK(typedef struct t_Open9xGruvin9xCustomSwData_v207 { // Custom Switches data
+PACK(typedef struct t_Open9xGruvin9xLogicalSwitchData_v207 { // Custom Switches data
int8_t v1; //input
int8_t v2; //offset
uint8_t func;
- operator CustomSwData();
- t_Open9xGruvin9xCustomSwData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xCustomSwData_v207)); }
- t_Open9xGruvin9xCustomSwData_v207(CustomSwData&);
+ operator LogicalSwitchData();
+ t_Open9xGruvin9xLogicalSwitchData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xLogicalSwitchData_v207)); }
int8_t fromSource(RawSource source);
RawSource toSource(int8_t value);
+}) Open9xGruvin9xLogicalSwitchData_v207;
-}) Open9xGruvin9xCustomSwData_v207;
-
-PACK(typedef struct t_Open9xGruvin9xCustomSwData_v209 { // Custom Switches data
+PACK(typedef struct t_Open9xGruvin9xLogicalSwitchData_v209 { // Custom Switches data
int8_t v1; //input
int8_t v2; //offset
uint8_t func;
- operator CustomSwData();
- t_Open9xGruvin9xCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xCustomSwData_v209)); }
- t_Open9xGruvin9xCustomSwData_v209(CustomSwData&);
+ operator LogicalSwitchData();
+ t_Open9xGruvin9xLogicalSwitchData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xLogicalSwitchData_v209)); }
int8_t fromSource(RawSource source);
RawSource toSource(int8_t value);
-
-}) Open9xGruvin9xCustomSwData_v209;
+}) Open9xGruvin9xLogicalSwitchData_v209;
PACK(typedef struct t_Open9xGruvin9xFuncSwData_v203 { // Function Switches data
int8_t swtch; // input
@@ -151,8 +139,6 @@ PACK(typedef struct t_Open9xGruvin9xFuncSwData_v203 { // Function Switches data
operator FuncSwData();
t_Open9xGruvin9xFuncSwData_v203() { memset(this, 0, sizeof(t_Open9xGruvin9xFuncSwData_v203)); }
- t_Open9xGruvin9xFuncSwData_v203(FuncSwData&);
-
}) Open9xGruvin9xFuncSwData_v203;
PACK(typedef struct t_Open9xGruvin9xFuncSwData_v210 { // Function Switches data
@@ -163,8 +149,6 @@ PACK(typedef struct t_Open9xGruvin9xFuncSwData_v210 { // Function Switches data
operator FuncSwData();
t_Open9xGruvin9xFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xGruvin9xFuncSwData_v210)); }
- t_Open9xGruvin9xFuncSwData_v210(FuncSwData&);
-
}) Open9xGruvin9xFuncSwData_v210;
PACK(typedef struct t_Open9xGruvin9xSwashRingData_v208 { // Swash Ring data
@@ -177,8 +161,6 @@ PACK(typedef struct t_Open9xGruvin9xSwashRingData_v208 { // Swash Ring data
operator SwashRingData();
t_Open9xGruvin9xSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xSwashRingData_v208)); }
- t_Open9xGruvin9xSwashRingData_v208(SwashRingData&);
-
}) Open9xGruvin9xSwashRingData_v208;
PACK(typedef struct t_Open9xGruvin9xSwashRingData_v209 { // Swash Ring data
@@ -191,8 +173,6 @@ PACK(typedef struct t_Open9xGruvin9xSwashRingData_v209 { // Swash Ring data
operator SwashRingData();
t_Open9xGruvin9xSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xSwashRingData_v209)); }
- t_Open9xGruvin9xSwashRingData_v209(SwashRingData&);
-
}) Open9xGruvin9xSwashRingData_v209;
PACK(typedef struct t_Open9xGruvin9xModelData_v207 {
@@ -214,7 +194,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v207 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xGruvin9xCustomSwData_v207 customSw[O9X_NUM_CSW];
+ Open9xGruvin9xLogicalSwitchData_v207 customSw[O9X_NUM_CSW];
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
Open9xGruvin9xSwashRingData_v208 swashR;
Open9xGruvin9xPhaseData_v207 phaseData[O9X_MAX_PHASES];
@@ -227,8 +207,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v207 {
operator ModelData();
t_Open9xGruvin9xModelData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v207)); }
- t_Open9xGruvin9xModelData_v207(ModelData&);
-
}) Open9xGruvin9xModelData_v207;
PACK(typedef struct t_Open9xGruvin9xModelData_v208 {
@@ -250,7 +228,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v208 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xGruvin9xCustomSwData_v207 customSw[O9X_NUM_CSW];
+ Open9xGruvin9xLogicalSwitchData_v207 customSw[O9X_NUM_CSW];
Open9xGruvin9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
Open9xGruvin9xSwashRingData_v208 swashR;
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES];
@@ -268,8 +246,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v208 {
operator ModelData();
t_Open9xGruvin9xModelData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v208)); }
- t_Open9xGruvin9xModelData_v208(ModelData&);
-
}) Open9xGruvin9xModelData_v208;
PACK(typedef struct t_Open9xGruvin9xModelData_v209 {
@@ -291,7 +267,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v209 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xGruvin9xCustomSwData_v209 customSw[O9X_NUM_CSW];
+ Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
Open9xGruvin9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
Open9xGruvin9xSwashRingData_v209 swashR;
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES];
@@ -310,8 +286,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v209 {
operator ModelData();
t_Open9xGruvin9xModelData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v209)); }
- t_Open9xGruvin9xModelData_v209(ModelData&);
-
}) Open9xGruvin9xModelData_v209;
PACK(typedef struct t_Open9xGruvin9xModelData_v210 {
@@ -333,7 +307,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v210 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves[O9X_MAX_CURVES];
int8_t points[O9X_NUM_POINTS];
- Open9xGruvin9xCustomSwData_v209 customSw[O9X_NUM_CSW];
+ Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
Open9xGruvin9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
Open9xGruvin9xSwashRingData_v209 swashR;
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES];
@@ -350,8 +324,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v210 {
operator ModelData();
t_Open9xGruvin9xModelData_v210() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v210)); }
- t_Open9xGruvin9xModelData_v210(ModelData&);
-
}) Open9xGruvin9xModelData_v210;
PACK(typedef struct t_Open9xGruvin9xModelData_v211 {
@@ -373,7 +345,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v211 {
Open9xExpoData_v211 expoData[O9X_MAX_EXPOS];
int8_t curves[O9X_MAX_CURVES];
int8_t points[O9X_NUM_POINTS];
- Open9xGruvin9xCustomSwData_v209 customSw[O9X_NUM_CSW];
+ Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
Open9xGruvin9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
Open9xGruvin9xSwashRingData_v209 swashR;
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES];
@@ -388,8 +360,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v211 {
operator ModelData();
t_Open9xGruvin9xModelData_v211() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v211)); }
- t_Open9xGruvin9xModelData_v211(ModelData&);
-
}) Open9xGruvin9xModelData_v211;
#endif
diff --git a/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp b/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp
index afa897700..d50b42cf0 100644
--- a/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp
+++ b/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp
@@ -5,31 +5,8 @@
#include
#include
-extern void setEEPROMZString(char *dst, const char *src, int size);
extern void getEEPROMZString(char *dst, const char *src, int size);
-int8_t open9xArmFromSwitch(const RawSwitch & sw)
-{
- switch (sw.type) {
- case SWITCH_TYPE_SWITCH:
- return sw.index;
- case SWITCH_TYPE_VIRTUAL:
- return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index);
- case SWITCH_TYPE_ON:
- return 42;
- case SWITCH_TYPE_OFF:
- return -42;
- case SWITCH_TYPE_MOMENT_SWITCH:
- return sw.index > 0 ? (42 + sw.index) : (-42 + sw.index);
- case SWITCH_TYPE_MOMENT_VIRTUAL:
- return sw.index > 0 ? (51 + sw.index) : (-51 + sw.index);
- case SWITCH_TYPE_ONM:
- return 84;
- default:
- return 0;
- }
-}
-
RawSwitch open9xArmToSwitch(int8_t sw)
{
uint8_t swa = abs(sw);
@@ -42,37 +19,13 @@ RawSwitch open9xArmToSwitch(int8_t sw)
else if (sw == 42)
return RawSwitch(SWITCH_TYPE_ON);
else if (sw == 84)
- return RawSwitch(SWITCH_TYPE_ONM);
+ return RawSwitch(SWITCH_TYPE_ON);
else if (sw == -42)
return RawSwitch(SWITCH_TYPE_OFF);
else if (swa <= 42+9)
- return RawSwitch(SWITCH_TYPE_MOMENT_SWITCH, sw > 0 ? sw-42 : sw+42);
+ return RawSwitch(SWITCH_TYPE_SWITCH, sw > 0 ? sw-42 : sw+42);
else
- return RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, sw > 0 ? sw-42-9 : sw+42+9);
-}
-
-int8_t open9xArm208FromSource(RawSource source)
-{
- int v1 = 0;
- if (source.type == SOURCE_TYPE_STICK)
- v1 = 1+source.index;
- else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n";
- v1 = 5+source.index;
- }
- else if (source.type == SOURCE_TYPE_MAX)
- v1 = 8;
- /* else if (source.type == SOURCE_TYPE_3POS)
- v1 = 9; */
- else if (source.type == SOURCE_TYPE_CYC)
- v1 = 10+source.index;
- else if (source.type == SOURCE_TYPE_PPM)
- v1 = 13+source.index;
- else if (source.type == SOURCE_TYPE_CH)
- v1 = 21+source.index;
- else if (source.type == SOURCE_TYPE_TELEMETRY)
- v1 = 52+source.index;
- return v1;
+ return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-42-9 : sw+42+9);
}
RawSource open9xArm208ToSource(int8_t value)
@@ -103,32 +56,6 @@ RawSource open9xArm208ToSource(int8_t value)
}
}
-int8_t open9xArm209FromSource(RawSource source)
-{
- int v1 = 0;
- if (source.type == SOURCE_TYPE_STICK)
- v1 = 1+source.index;
- else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n";
- v1 = 5+source.index;
- }
- else if (source.type == SOURCE_TYPE_TRIM)
- v1 = 8 + source.index;
- else if (source.type == SOURCE_TYPE_MAX)
- v1 = 12;
- /* else if (source.type == SOURCE_TYPE_3POS)
- v1 = 13; */
- else if (source.type == SOURCE_TYPE_CYC)
- v1 = 14+source.index;
- else if (source.type == SOURCE_TYPE_PPM)
- v1 = 17+source.index;
- else if (source.type == SOURCE_TYPE_CH)
- v1 = 25+source.index;
- else if (source.type == SOURCE_TYPE_TELEMETRY)
- v1 = 56+source.index;
- return v1;
-}
-
RawSource open9xArm209ToSource(int8_t value)
{
if (value == 0) {
@@ -160,30 +87,6 @@ RawSource open9xArm209ToSource(int8_t value)
}
}
-int8_t open9xArm210FromSource(RawSource source)
-{
- int v1 = 0;
- if (source.type == SOURCE_TYPE_STICK)
- v1 = 1+source.index;
- else if (source.type == SOURCE_TYPE_ROTARY_ENCODER)
- v1 = 8;
- else if (source.type == SOURCE_TYPE_TRIM)
- v1 = 9 + source.index;
- else if (source.type == SOURCE_TYPE_MAX)
- v1 = 13;
- /* else if (source.type == SOURCE_TYPE_3POS)
- v1 = 14; */
- else if (source.type == SOURCE_TYPE_CYC)
- v1 = 15+source.index;
- else if (source.type == SOURCE_TYPE_PPM)
- v1 = 18+source.index;
- else if (source.type == SOURCE_TYPE_CH)
- v1 = 26+source.index;
- else if (source.type == SOURCE_TYPE_TELEMETRY)
- v1 = 57+source.index;
- return v1;
-}
-
RawSource open9xArm210ToSource(int8_t value)
{
if (value == 0) {
@@ -221,9 +124,9 @@ RawSource open9xArm210ToSource(int8_t value)
t_Open9xArmTimerData_v202::operator TimerData ()
{
TimerData c9x;
-
+/*
if (mode <= -42)
- c9x.mode = TimerMode(TMRMODE_FIRST_NEG_MOMENT_SWITCH+(mode+22));
+ c9x.mode = TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+22));
else if (mode <= -1)
c9x.mode = TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+1));
else if (mode < 5)
@@ -231,96 +134,14 @@ t_Open9xArmTimerData_v202::operator TimerData ()
else if (mode < 5+41)
c9x.mode = TimerMode(TMRMODE_FIRST_SWITCH+(mode-5));
else
- c9x.mode = TimerMode(TMRMODE_FIRST_MOMENT_SWITCH+(mode-5-21));
-
+ c9x.mode = TimerMode(TMRMODE_FIRST_SWITCH+(mode-5-21));
+*/
c9x.val = val;
c9x.persistent = false;
c9x.dir = (val == 0);
return c9x;
}
-t_Open9xArmTimerData_v202::t_Open9xArmTimerData_v202(TimerData &c9x)
-{
- val = c9x.val;
-
- if (c9x.mode >= TMRMODE_OFF && c9x.mode <= TMRMODE_THt)
- mode = 0+c9x.mode-TMRMODE_OFF;
- else if (c9x.mode >= TMRMODE_FIRST_MOMENT_SWITCH)
- mode = 46+c9x.mode-TMRMODE_FIRST_MOMENT_SWITCH;
- else if (c9x.mode >= TMRMODE_FIRST_SWITCH)
- mode = 5+c9x.mode-TMRMODE_FIRST_SWITCH;
- else if (c9x.mode <= TMRMODE_FIRST_NEG_MOMENT_SWITCH)
- mode = -42+c9x.mode-TMRMODE_FIRST_NEG_MOMENT_SWITCH;
- else if (c9x.mode <= TMRMODE_FIRST_NEG_SWITCH)
- mode = -1+c9x.mode-TMRMODE_FIRST_NEG_SWITCH;
- else
- mode = 0;
-}
-
-t_Open9xArmExpoData_v208::t_Open9xArmExpoData_v208(ExpoData &c9x)
-{
- mode = c9x.mode;
- chn = c9x.chn;
- // 0=no curve, 1-6=std curves, 7-10=CV1-CV4, 11-15=CV9-CV13
- curve = 0;
- expo = 0;
- if (c9x.curveMode==1) {
- if (c9x.curveParam >=0 && c9x.curveParam <= 10)
- curve = c9x.curveParam;
- else if (c9x.curveParam >= 15 && c9x.curveParam <= 19)
- curve = c9x.curveParam - 4;
- else
- EEPROMWarnings += ::QObject::tr("Open9x doesn't allow Curve%1 in expos").arg(c9x.curveParam-6) + "\n";
- }
- else {
- expo=c9x.curveParam;
- }
-
- swtch = open9xArmFromSwitch(c9x.swtch);
- int zeros=0;
- int ones=0;
- int phtemp=c9x.phases;
- for (int i=0; i>=1;
- }
- if (zeros==O9X_MAX_PHASES || zeros==0) {
- phase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=-(ph+1);
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight modes settings on expos not exported") + "\n";
- }
-
- weight = c9x.weight;
- expo = c9x.expo;
-}
-
t_Open9xArmExpoData_v208::operator ExpoData ()
{
ExpoData c9x;
@@ -332,14 +153,10 @@ t_Open9xArmExpoData_v208::operator ExpoData ()
}
else {
if (curve == 0) {
- c9x.curveMode=0;
- c9x.curveParam=expo;
- } else {
- c9x.curveMode=1;
- if (curve <= 10)
- c9x.curveParam = curve;
- else
- c9x.curveParam = curve + 4;
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_EXPO, expo);
+ }
+ else {
+ // TODO
}
}
c9x.swtch = open9xArmToSwitch(swtch);
@@ -355,70 +172,6 @@ t_Open9xArmExpoData_v208::operator ExpoData ()
return c9x;
}
-t_Open9xArmExpoData_v210::t_Open9xArmExpoData_v210(ExpoData &c9x)
-{
- mode = c9x.mode;
- chn = c9x.chn;
- // 0=no curve, 1-6=std curves, 7-10=CV1-CV4, 11-15=CV9-CV13
- curve = 0;
- expo = 0;
- if (c9x.curveMode==1) {
- if (c9x.curveParam >=0 && c9x.curveParam <= 10)
- curve = c9x.curveParam;
- else if (c9x.curveParam >= 15 && c9x.curveParam <= 19)
- curve = c9x.curveParam - 4;
- else
- EEPROMWarnings += ::QObject::tr("Open9x doesn't allow Curve%1 in expos").arg(c9x.curveParam-6) + "\n";
- }
- else {
- expo=c9x.curveParam;
- }
-
- swtch = open9xArmFromSwitch(c9x.swtch);
- int zeros=0;
- int ones=0;
- int phtemp=c9x.phases;
- for (int i=0; i>=1;
- }
- if (zeros==O9X_MAX_PHASES || zeros==0) {
- phase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=-(ph+1);
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight modes settings on expos not exported") + "\n";
- }
- weight = c9x.weight;
- expo = c9x.expo;
- setEEPROMZString(name, c9x.name, sizeof(name));
-}
-
t_Open9xArmExpoData_v210::operator ExpoData ()
{
ExpoData c9x;
@@ -430,53 +183,36 @@ t_Open9xArmExpoData_v210::operator ExpoData ()
}
else {
if (curve == 0) {
- c9x.curveMode=0;
- c9x.curveParam=expo;
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_EXPO, expo);
}
else {
- c9x.curveMode=1;
- if (curve <= 10)
- c9x.curveParam = curve;
- else
- c9x.curveParam = curve + 4;
+ // TODO
}
}
c9x.swtch = open9xArmToSwitch(swtch);
if (phase<0) {
c9x.phases= 1 << (-phase -1);
- } else if (phase==0) {
+ }
+ else if (phase==0) {
c9x.phases=0;
- } else {
+ }
+ else {
c9x.phases=63;
c9x.phases &= ~(1 << (phase -1));
}
c9x.weight = weight;
- c9x.expo = expo;
getEEPROMZString(c9x.name, name, sizeof(name));
return c9x;
}
-t_Open9xArmExpoData_v212::t_Open9xArmExpoData_v212(ExpoData &c9x)
-{
- mode = c9x.mode;
- chn = c9x.chn;
- // 0=no curve, 1-6=std curves, 7-10=CV1-CV4, 11-15=CV9-CV13
- curveParam=c9x.curveParam;
- curveMode=c9x.curveMode;
- swtch = open9xArmFromSwitch(c9x.swtch);
- phases=c9x.phases;
- weight = c9x.weight;
- setEEPROMZString(name, c9x.name, sizeof(name));
-}
-
t_Open9xArmExpoData_v212::operator ExpoData ()
{
ExpoData c9x;
c9x.mode = mode;
c9x.chn = chn;
- c9x.curveMode=curveMode;
- c9x.curveParam=curveParam;
+ // TODO c9x.curveMode=curveMode;
+ // c9x.curveParam=curveParam;
c9x.swtch = open9xArmToSwitch(swtch);
c9x.phases= phases;
c9x.weight = weight;
@@ -496,16 +232,6 @@ t_Open9xArmPhaseData_v208::operator PhaseData ()
return c9x;
}
-t_Open9xArmPhaseData_v208::t_Open9xArmPhaseData_v208(PhaseData &c9x)
-{
- for (int i=0; i>=1;
- }
- if (zeros==O9X_ARM_MAX_PHASES || zeros==0) {
- phase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=-(ph+1);
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n";
- }
- sOffset = c9x.sOffset;
- }
- else {
- memset(this, 0, sizeof(t_Open9xArmMixData_v208));
- }
-}
-
t_Open9xArmMixData_v208::operator MixData ()
{
MixData c9x;
@@ -639,16 +268,22 @@ t_Open9xArmMixData_v208::operator MixData ()
else if (srcRaw <= 9+9+O9X_ARM_NUM_CSW+NUM_CYC) {
c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-10-9-O9X_ARM_NUM_CSW);
}
- else if (srcRaw <= 9+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM) {
+ else if (srcRaw <= 9+9+O9X_ARM_NUM_CSW+NUM_CYC+8) {
c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-10-9-O9X_ARM_NUM_CSW-NUM_CYC);
}
else {
- c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-10-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM);
+ c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-10-9-O9X_ARM_NUM_CSW-NUM_CYC-8);
}
c9x.weight = weight;
- c9x.differential = differential*2;
c9x.swtch = open9xArmToSwitch(swtch);
- c9x.curve = curve;
+
+ if (differential) {
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2);
+ }
+ else {
+ // TODO c9x.curve = curve;
+ }
+
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -656,109 +291,23 @@ t_Open9xArmMixData_v208::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
-// c9x.phase = phase;
+
if (phase<0) {
c9x.phases= 1 << (-phase -1);
- } else if (phase==0) {
+ }
+ else if (phase==0) {
c9x.phases=0;
- } else {
+ }
+ else {
c9x.phases=511;
c9x.phases &= ~(1 << (phase -1));
- }
+ }
+
c9x.sOffset = sOffset;
}
return c9x;
}
-t_Open9xArmMixData_v209::t_Open9xArmMixData_v209(MixData &c9x)
-{
- if (c9x.destCh) {
- destCh = c9x.destCh-1;
- mixWarn = c9x.mixWarn;
- swtch = open9xArmFromSwitch(c9x.swtch);
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 8;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) {
- srcRaw = 9 + c9x.srcRaw.index;
- }
- /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) {
- srcRaw = 13;
- } */
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 13 + open9xArmFromSwitch(RawSwitch(c9x.srcRaw.index));
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 14+9+O9X_ARM_NUM_CSW + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 14+9+O9X_ARM_NUM_CSW+NUM_CYC + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 14+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM + c9x.srcRaw.index;
- }
- weight = c9x.weight;
- differential = c9x.differential/2;
- curve = c9x.curve;
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- carryTrim = c9x.carryTrim;
- mltpx = (MltpxValue)c9x.mltpx;
- int zeros=0;
- int ones=0;
- int phtemp=c9x.phases;
- for (int i=0; i>=1;
- }
- if (zeros==O9X_ARM_MAX_PHASES || zeros==0) {
- phase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=-(ph+1);
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n";
- }
- sOffset = c9x.sOffset;
- }
- else {
- memset(this, 0, sizeof(t_Open9xArmMixData_v209));
- }
-}
-
t_Open9xArmMixData_v209::operator MixData ()
{
MixData c9x;
@@ -785,16 +334,22 @@ t_Open9xArmMixData_v209::operator MixData ()
else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC) {
c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-14-9-O9X_ARM_NUM_CSW);
}
- else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM) {
+ else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC+8) {
c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC);
}
else {
- c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM);
+ c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC-8);
}
c9x.weight = weight;
- c9x.differential = differential*2;
+
+ if (differential) {
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2);
+ }
+ else {
+ // TODO c9x.curve = curve;
+ }
+
c9x.swtch = open9xArmToSwitch(swtch);
- c9x.curve = curve;
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -802,110 +357,23 @@ t_Open9xArmMixData_v209::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
- // c9x.phase = phase;
+
if (phase<0) {
c9x.phases= 1 << (-phase -1);
- } else if (phase==0) {
+ }
+ else if (phase==0) {
c9x.phases=0;
- } else {
+ }
+ else {
c9x.phases=511;
c9x.phases &= ~(1 << (phase -1));
- }
+ }
+
c9x.sOffset = sOffset;
}
return c9x;
}
-t_Open9xArmMixData_v210::t_Open9xArmMixData_v210(MixData &c9x)
-{
- if (c9x.destCh) {
- destCh = c9x.destCh-1;
- mixWarn = c9x.mixWarn;
- swtch = open9xArmFromSwitch(c9x.swtch);
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) {
- srcRaw = 8 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 12;
- }
- /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) {
- srcRaw = 13;
- } */
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 13 + open9xArmFromSwitch(RawSwitch(c9x.srcRaw.index));
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 14+9+O9X_ARM_NUM_CSW + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 14+9+O9X_ARM_NUM_CSW+NUM_CYC + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 14+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM + c9x.srcRaw.index;
- }
- weight = c9x.weight;
- differential = c9x.differential/2;
- curve = c9x.curve;
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- carryTrim = c9x.carryTrim;
- mltpx = (MltpxValue)c9x.mltpx;
- int zeros=0;
- int ones=0;
- int phtemp=c9x.phases;
- for (int i=0; i>=1;
- }
- if (zeros==O9X_ARM_MAX_PHASES || zeros==0) {
- phase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=-(ph+1);
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n";
- }
- sOffset = c9x.sOffset;
- setEEPROMZString(name, c9x.name, sizeof(name));
- }
- else {
- memset(this, 0, sizeof(t_Open9xArmMixData_v210));
- }
-}
-
t_Open9xArmMixData_v210::operator MixData ()
{
MixData c9x;
@@ -932,16 +400,22 @@ t_Open9xArmMixData_v210::operator MixData ()
else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC) {
c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-14-9-O9X_ARM_NUM_CSW);
}
- else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM) {
+ else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC+8) {
c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC);
}
else {
- c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM);
+ c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC-8);
}
c9x.weight = weight;
- c9x.differential = differential*2;
+
+ if (differential) {
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2);
+ }
+ else {
+ // TODO c9x.curve = curve;
+ }
+
c9x.swtch = open9xArmToSwitch(swtch);
- c9x.curve = curve;
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -949,82 +423,24 @@ t_Open9xArmMixData_v210::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
- // c9x.phase = phase;
+
if (phase<0) {
c9x.phases= 1 << (-phase -1);
- } else if (phase==0) {
+ }
+ else if (phase==0) {
c9x.phases=0;
- } else {
+ }
+ else {
c9x.phases=511;
c9x.phases &= ~(1 << (phase -1));
}
+
c9x.sOffset = sOffset;
getEEPROMZString(c9x.name, name, sizeof(name));
}
return c9x;
}
-t_Open9xArmMixData_v212::t_Open9xArmMixData_v212(MixData &c9x)
-{
- if (c9x.destCh) {
- destCh = c9x.destCh-1;
- mixWarn = c9x.mixWarn;
- swtch = open9xArmFromSwitch(c9x.swtch);
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
- srcRaw = 8;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) {
- srcRaw = 9 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 13;
- }
- /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) {
- srcRaw = 14;
- } */
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 14 + open9xArmFromSwitch(RawSwitch(c9x.srcRaw.index));
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 15+9+O9X_ARM_NUM_CSW + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 15+9+O9X_ARM_NUM_CSW+NUM_CYC + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 15+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM + c9x.srcRaw.index;
- }
- weight = c9x.weight;
- if (c9x.curve==0) {
- curveMode=0;
- curveParam=c9x.differential;
- } else {
- curveMode=1;
- curveParam = c9x.curve;
- }
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- carryTrim = c9x.carryTrim;
- noExpo = c9x.noExpo;
- mltpx = (MltpxValue)c9x.mltpx;
- phases = c9x.phases;
- sOffset = c9x.sOffset;
- setEEPROMZString(name, c9x.name, sizeof(name));
- }
- else {
- memset(this, 0, sizeof(t_Open9xArmMixData_v210));
- }
-}
-
t_Open9xArmMixData_v212::operator MixData ()
{
MixData c9x;
@@ -1054,19 +470,21 @@ t_Open9xArmMixData_v212::operator MixData ()
else if (srcRaw <= 14+9+O9X_ARM_NUM_CSW+NUM_CYC) {
c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-15-9-O9X_ARM_NUM_CSW);
}
- else if (srcRaw <= 14+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM) {
+ else if (srcRaw <= 14+9+O9X_ARM_NUM_CSW+NUM_CYC+8) {
c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-15-9-O9X_ARM_NUM_CSW-NUM_CYC);
}
else {
- c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-15-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM);
+ c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-15-9-O9X_ARM_NUM_CSW-NUM_CYC-8);
}
c9x.weight = weight;
+
if (curveMode==0) {
- c9x.differential = curveParam;
- c9x.curve=0;
- } else {
- c9x.curve=curveParam;
- }
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, curveParam);
+ }
+ else {
+ // TODO
+ }
+
c9x.swtch = open9xArmToSwitch(swtch);
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
@@ -1083,49 +501,22 @@ t_Open9xArmMixData_v212::operator MixData ()
return c9x;
}
-t_Open9xArmCustomSwData_v208::t_Open9xArmCustomSwData_v208(CustomSwData &c9x)
+t_Open9xArmLogicalSwitchData_v208::operator LogicalSwitchData ()
{
- func = c9x.func;
- v1 = c9x.val1;
- v2 = c9x.val2;
-
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
- v1 = open9xArm208FromSource(RawSource(c9x.val1));
- }
-
- if (c9x.func >= CS_FN_EQUAL) {
- v2 = open9xArm208FromSource(RawSource(c9x.val2));
- }
-
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
- v1 = open9xArmFromSwitch(RawSwitch(c9x.val1));
- v2 = open9xArmFromSwitch(RawSwitch(c9x.val2));
- }
-
- if (func>O9X_ARM_MAX_CSFUNCOLD ) {
- EEPROMWarnings += ::QObject::tr("This version of open9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n";
- func=0;
- v1=0;
- v2=0;
- }
-}
-
-t_Open9xArmCustomSwData_v208::operator CustomSwData ()
-{
- CustomSwData c9x;
+ LogicalSwitchData c9x;
c9x.func = func;
c9x.val1 = v1;
c9x.val2 = v2;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
+ if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) {
c9x.val1 = open9xArm208ToSource(v1).toValue();
}
- if (c9x.func >= CS_FN_EQUAL) {
+ if (c9x.func >= LS_FN_EQUAL) {
c9x.val2 = open9xArm208ToSource(v2).toValue();
}
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
+ if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) {
c9x.val1 = open9xArmToSwitch(v1).toValue();
c9x.val2 = open9xArmToSwitch(v2).toValue();
}
@@ -1133,49 +524,22 @@ t_Open9xArmCustomSwData_v208::operator CustomSwData ()
return c9x;
}
-t_Open9xArmCustomSwData_v209::t_Open9xArmCustomSwData_v209(CustomSwData &c9x)
+t_Open9xArmLogicalSwitchData_v209::operator LogicalSwitchData ()
{
- func = c9x.func;
- v1 = c9x.val1;
- v2 = c9x.val2;
-
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
- v1 = open9xArm209FromSource(RawSource(c9x.val1));
- }
-
- if (c9x.func >= CS_FN_EQUAL) {
- v2 = open9xArm209FromSource(RawSource(c9x.val2));
- }
-
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
- v1 = open9xArmFromSwitch(RawSwitch(c9x.val1));
- v2 = open9xArmFromSwitch(RawSwitch(c9x.val2));
- }
-
- if (func>O9X_ARM_MAX_CSFUNCOLD ) {
- EEPROMWarnings += ::QObject::tr("This version of open9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n";
- func=0;
- v1=0;
- v2=0;
- }
-}
-
-t_Open9xArmCustomSwData_v209::operator CustomSwData ()
-{
- CustomSwData c9x;
+ LogicalSwitchData c9x;
c9x.func = func;
c9x.val1 = v1;
c9x.val2 = v2;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
+ if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) {
c9x.val1 = open9xArm209ToSource(v1).toValue();
}
- if (c9x.func >= CS_FN_EQUAL) {
+ if (c9x.func >= LS_FN_EQUAL) {
c9x.val2 = open9xArm209ToSource(v2).toValue();
}
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
+ if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) {
c9x.val1 = open9xArmToSwitch(v1).toValue();
c9x.val2 = open9xArmToSwitch(v2).toValue();
}
@@ -1183,46 +547,24 @@ t_Open9xArmCustomSwData_v209::operator CustomSwData ()
return c9x;
}
-t_Open9xArmCustomSwData_v210::t_Open9xArmCustomSwData_v210(CustomSwData &c9x)
+t_Open9xArmLogicalSwitchData_v210::operator LogicalSwitchData ()
{
- func = c9x.func;
- v1 = c9x.val1;
- v2 = c9x.val2;
-
- delay = c9x.delay;
- duration = c9x.duration;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
- v1 = open9xArm210FromSource(RawSource(c9x.val1));
- }
-
- if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) {
- v2 = open9xArm210FromSource(RawSource(c9x.val2));
- }
-
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
- v1 = open9xArmFromSwitch(RawSwitch(c9x.val1));
- v2 = open9xArmFromSwitch(RawSwitch(c9x.val2));
- }
-}
-
-t_Open9xArmCustomSwData_v210::operator CustomSwData ()
-{
- CustomSwData c9x;
+ LogicalSwitchData c9x;
c9x.func = func;
c9x.val1 = v1;
c9x.val2 = v2;
c9x.delay = delay;
c9x.duration = duration;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
+ if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) {
c9x.val1 = open9xArm210ToSource(v1).toValue();
}
- if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) {
+ if (c9x.func >= LS_FN_EQUAL && c9x.func <= LS_FN_ELESS) {
c9x.val2 = open9xArm210ToSource(v2).toValue();
}
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
+ if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) {
c9x.val1 = open9xArmToSwitch(v1).toValue();
c9x.val2 = open9xArmToSwitch(v2).toValue();
}
@@ -1230,27 +572,12 @@ t_Open9xArmCustomSwData_v210::operator CustomSwData ()
return c9x;
}
-t_Open9xArmFuncSwData_v208::t_Open9xArmFuncSwData_v208(FuncSwData &c9x)
-{
- swtch = open9xArmFromSwitch(c9x.swtch);
- if (c9x.func <= FuncSafetyCh16) {
- param = ((c9x.param>>1)<<1);
- param |=(c9x.enabled & 0x01);
- } else {
- param = c9x.param;
- if ((c9x.func == FuncPlayValue || c9x.func == FuncVolume) && param > 7) {
- param -= -2;
- }
- }
- func = c9x.func;
-}
-
t_Open9xArmFuncSwData_v208::operator FuncSwData ()
{
FuncSwData c9x;
c9x.swtch = open9xArmToSwitch(swtch);
c9x.func = (AssignFunc)(func);
- if (c9x.func <= FuncSafetyCh16) {
+ if (c9x.func <= FuncSafetyCh32) {
c9x.enabled=param & 0x01;
c9x.param = (param>>1)<<1;
}
@@ -1263,29 +590,6 @@ t_Open9xArmFuncSwData_v208::operator FuncSwData ()
return c9x;
}
-t_Open9xArmFuncSwData_v210::t_Open9xArmFuncSwData_v210(FuncSwData &c9x)
-{
- swtch = open9xArmFromSwitch(c9x.swtch);
- uint32_t value;
- if (c9x.func <= FuncInstantTrim) {
- value = ((c9x.param>>1)<<1);
- value |=(c9x.enabled & 0x01);
- }
- else {
- if (c9x.func == FuncPlayPrompt || c9x.func == FuncBackgroundMusic) {
- memcpy(param, c9x.paramarm, sizeof(param));
- }
- else {
- value = c9x.param;
- if ((c9x.func == FuncPlayValue || c9x.func == FuncVolume) && value > 7) {
- value-=2;
- }
- *((uint32_t *)param) = value;
- }
- }
- func = c9x.func;
-}
-
t_Open9xArmFuncSwData_v210::operator FuncSwData ()
{
FuncSwData c9x;
@@ -1310,30 +614,6 @@ t_Open9xArmFuncSwData_v210::operator FuncSwData ()
return c9x;
}
-t_Open9xArmFuncSwData_v211::t_Open9xArmFuncSwData_v211(FuncSwData &c9x)
-{
- swtch = open9xArmFromSwitch(c9x.swtch);
- uint32_t value;
- if (c9x.func <= FuncInstantTrim) {
- value = c9x.param;
- *((uint32_t *)param) = value;
- delay=(c9x.enabled & 0x01);
- }
- else {
- if (c9x.func == FuncPlayPrompt || c9x.func == FuncBackgroundMusic) {
- memcpy(param, c9x.paramarm, sizeof(param));
- }
- else {
- value = c9x.param;
- if ((c9x.func == FuncPlayValue || c9x.func == FuncVolume || (c9x.func >= FuncAdjustGV1 && c9x.func <= FuncAdjustGV5)) && value > 7) {
- value--;
- }
- *((uint32_t *)param) = value;
- }
- }
- func = c9x.func;
-}
-
t_Open9xArmFuncSwData_v211::operator FuncSwData ()
{
FuncSwData c9x;
@@ -1350,7 +630,7 @@ t_Open9xArmFuncSwData_v211::operator FuncSwData ()
}
else {
c9x.param = value;
- if ((c9x.func == FuncPlayValue || c9x.func == FuncVolume || (c9x.func >= FuncAdjustGV1 && c9x.func <= FuncAdjustGV5)) && value > 7) {
+ if ((c9x.func == FuncPlayValue || c9x.func == FuncVolume || (c9x.func >= FuncAdjustGV1 && c9x.func <= FuncAdjustGVLast)) && value > 7) {
c9x.param++;
}
}
@@ -1358,16 +638,6 @@ t_Open9xArmFuncSwData_v211::operator FuncSwData ()
return c9x;
}
-t_Open9xArmSwashRingData_v208::t_Open9xArmSwashRingData_v208(SwashRingData &c9x)
-{
- invertELE = c9x.invertELE;
- invertAIL = c9x.invertAIL;
- invertCOL = c9x.invertCOL;
- type = c9x.type;
- collectiveSource = open9xArm208FromSource(c9x.collectiveSource);
- value = c9x.value;
-}
-
t_Open9xArmSwashRingData_v208::operator SwashRingData ()
{
SwashRingData c9x;
@@ -1380,16 +650,6 @@ t_Open9xArmSwashRingData_v208::operator SwashRingData ()
return c9x;
}
-t_Open9xArmSwashRingData_v209::t_Open9xArmSwashRingData_v209(SwashRingData &c9x)
-{
- invertELE = c9x.invertELE;
- invertAIL = c9x.invertAIL;
- invertCOL = c9x.invertCOL;
- type = c9x.type;
- collectiveSource = open9xArm209FromSource(c9x.collectiveSource);
- value = c9x.value;
-}
-
t_Open9xArmSwashRingData_v209::operator SwashRingData ()
{
SwashRingData c9x;
@@ -1402,16 +662,6 @@ t_Open9xArmSwashRingData_v209::operator SwashRingData ()
return c9x;
}
-t_Open9xArmSwashRingData_v210::t_Open9xArmSwashRingData_v210(SwashRingData &c9x)
-{
- invertELE = c9x.invertELE;
- invertAIL = c9x.invertAIL;
- invertCOL = c9x.invertCOL;
- type = c9x.type;
- collectiveSource = open9xArm210FromSource(c9x.collectiveSource);
- value = c9x.value;
-}
-
t_Open9xArmSwashRingData_v210::operator SwashRingData ()
{
SwashRingData c9x;
@@ -1431,7 +681,7 @@ t_Open9xArmFrSkyData_v210::operator FrSkyData ()
c9x.channels[1] = channels[1];
c9x.usrProto = usrProto;
c9x.voltsSource = voltsSource;
- c9x.blades = blades;
+ c9x.blades = blades+2;
c9x.currentSource=currentSource;
c9x.screens[0].type = 1;
for (int i=0; i<4; i++) {
@@ -1452,31 +702,6 @@ t_Open9xArmFrSkyData_v210::operator FrSkyData ()
return c9x;
}
-t_Open9xArmFrSkyData_v210::t_Open9xArmFrSkyData_v210(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xArmFrSkyData_v210));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
- usrProto = c9x.usrProto;
- voltsSource = c9x.voltsSource;
- blades = c9x.blades;
- currentSource=c9x.currentSource;
- for (int i=0; i<4; i++) {
- bars[i].source = c9x.screens[0].body.bars[i].source;
- bars[i].barMin = c9x.screens[0].body.bars[i].barMin;
- bars[i].barMax = c9x.screens[0].body.bars[i].barMax;
- }
- for (int line=0; line<4; line++) {
- for (int col=0; col<2; col++) {
- int i=line*2+col;
- lines[i]=c9x.screens[1].body.lines[line].source[col];
- }
- }
- rssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.rssiAlarms[0]);
- rssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.rssiAlarms[1]);
-}
-
-
t_Open9xArmFrSkyData_v211::operator FrSkyData ()
{
FrSkyData c9x;
@@ -1484,7 +709,7 @@ t_Open9xArmFrSkyData_v211::operator FrSkyData ()
c9x.channels[1] = channels[1];
c9x.usrProto = usrProto;
c9x.voltsSource = voltsSource;
- c9x.blades = blades;
+ c9x.blades = blades+2;
c9x.currentSource=currentSource;
c9x.screens[0].type = 1;
for (int i=0; i<4; i++) {
@@ -1509,33 +734,6 @@ t_Open9xArmFrSkyData_v211::operator FrSkyData ()
return c9x;
}
-t_Open9xArmFrSkyData_v211::t_Open9xArmFrSkyData_v211(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xArmFrSkyData_v211));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
- usrProto = c9x.usrProto;
- voltsSource = c9x.voltsSource;
- blades = c9x.blades;
- currentSource=c9x.currentSource;
- for (int i=0; i<4; i++) {
- bars[i].source = c9x.screens[0].body.bars[i].source;
- bars[i].barMin = c9x.screens[0].body.bars[i].barMin;
- bars[i].barMax = c9x.screens[0].body.bars[i].barMax;
- }
- for (int line=0; line<4; line++) {
- for (int col=0; col<2; col++) {
- int i=line*2+col;
- lines[i]=c9x.screens[1].body.lines[line].source[col];
- }
- }
- rssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.rssiAlarms[0]);
- rssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.rssiAlarms[1]);
- varioSource = c9x.varioSource;
- varioSpeedUpMin = c9x.varioCenterMax;
- varioSpeedDownMin = c9x.varioCenterMin;
-}
-
t_Open9xArmModelData_v208::operator ModelData ()
{
ModelData c9x;
@@ -1562,7 +760,7 @@ t_Open9xArmModelData_v208::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
- c9x.trimInc = trimInc;
+ c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
@@ -1587,7 +785,6 @@ t_Open9xArmModelData_v208::operator ModelData ()
for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- varioSource = c9x.frsky.varioSource;
- varioSpeedUpMin = c9x.frsky.varioCenterMax;
- varioSpeedDownMin = c9x.frsky.varioCenterMin;
-
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- frskyLinesXtra=0;
- for (int j=0; j<4; j++) {
- frskyLines[j] = 0;
- for (int k=0; k<2; k++) {
- int value = c9x.frsky.screens[1].body.lines[j].source[k];
- frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4));
- frskyLinesXtra |= (value / 16) << (4*j+2*k);
- }
- }
- for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- varioSource = c9x.frsky.varioSource;
- varioSpeedUpMin = c9x.frsky.varioCenterMax;
- varioSpeedDownMin = c9x.frsky.varioCenterMin;
- switchWarningStates = c9x.switchWarningStates;
-
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- frskyLinesXtra=0;
- for (int j=0; j<4; j++) {
- frskyLines[j] = 0;
- for (int k=0; k<2; k++) {
- int value = c9x.frsky.screens[1].body.lines[j].source[k];
- frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4));
- frskyLinesXtra |= (value / 16) << (4*j+2*k);
- }
- }
- for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- varioSource = c9x.frsky.varioSource;
- varioSpeedUpMin = c9x.frsky.varioCenterMax;
- varioSpeedDownMin = c9x.frsky.varioCenterMin;
- switchWarningStates = c9x.switchWarningStates;
-
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
-
- for (int i=0; i O9X_ARM_NUM_POINTS - 5 * O9X_ARM_MAX_CURVES) {
- EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_ARM_NUM_POINTS) + "\n";
- break;
- }
- curves[i] = offset;
- for (int j=0; j= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- switchWarningStates = c9x.switchWarningStates;
-
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
-
- for (int i=0; i O9X_ARM_NUM_POINTS - 5 * O9X_ARM_MAX_CURVES) {
- EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_ARM_NUM_POINTS) + "\n";
- break;
- }
- curves[i] = offset;
- for (int j=0; j= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- switchWarningStates = c9x.switchWarningStates;
-
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- }
-}
diff --git a/companion/src/firmwares/opentx/open9xSky9xeeprom.h b/companion/src/firmwares/opentx/open9xSky9xeeprom.h
index 1c28d6d18..fdb3974ee 100644
--- a/companion/src/firmwares/opentx/open9xSky9xeeprom.h
+++ b/companion/src/firmwares/opentx/open9xSky9xeeprom.h
@@ -36,7 +36,6 @@ PACK(typedef struct t_Open9xArmTimerData_v202 {
operator TimerData();
t_Open9xArmTimerData_v202() { memset(this, 0, sizeof(t_Open9xArmTimerData_v202)); }
- t_Open9xArmTimerData_v202(TimerData &eepe);
}) Open9xArmTimerData_v202;
PACK(typedef struct t_Open9xArmExpoData_v208 {
@@ -50,8 +49,6 @@ PACK(typedef struct t_Open9xArmExpoData_v208 {
operator ExpoData();
t_Open9xArmExpoData_v208() { memset(this, 0, sizeof(t_Open9xArmExpoData_v208)); }
- t_Open9xArmExpoData_v208(ExpoData&);
-
}) Open9xArmExpoData_v208;
PACK(typedef struct t_Open9xArmExpoData_v210 {
@@ -67,8 +64,6 @@ PACK(typedef struct t_Open9xArmExpoData_v210 {
operator ExpoData();
t_Open9xArmExpoData_v210() { memset(this, 0, sizeof(t_Open9xArmExpoData_v210)); }
- t_Open9xArmExpoData_v210(ExpoData&);
-
}) Open9xArmExpoData_v210;
PACK(typedef struct t_Open9xArmExpoData_v212 {
@@ -83,8 +78,6 @@ PACK(typedef struct t_Open9xArmExpoData_v212 {
operator ExpoData();
t_Open9xArmExpoData_v212() { memset(this, 0, sizeof(t_Open9xArmExpoData_v212)); }
- t_Open9xArmExpoData_v212(ExpoData&);
-
}) Open9xArmExpoData_v212;
PACK(typedef struct t_Open9xArmMixData_v208 {
@@ -106,8 +99,6 @@ PACK(typedef struct t_Open9xArmMixData_v208 {
operator MixData();
t_Open9xArmMixData_v208() { memset(this, 0, sizeof(t_Open9xArmMixData_v208)); }
- t_Open9xArmMixData_v208(MixData&);
-
}) Open9xArmMixData_v208;
PACK(typedef struct t_Open9xArmMixData_v209 {
@@ -129,8 +120,6 @@ PACK(typedef struct t_Open9xArmMixData_v209 {
operator MixData();
t_Open9xArmMixData_v209() { memset(this, 0, sizeof(t_Open9xArmMixData_v209)); }
- t_Open9xArmMixData_v209(MixData&);
-
}) Open9xArmMixData_v209;
PACK(typedef struct t_Open9xArmMixData_v210 {
@@ -154,8 +143,6 @@ PACK(typedef struct t_Open9xArmMixData_v210 {
operator MixData();
t_Open9xArmMixData_v210() { memset(this, 0, sizeof(t_Open9xArmMixData_v210)); }
- t_Open9xArmMixData_v210(MixData&);
-
}) Open9xArmMixData_v210;
PACK(typedef struct t_Open9xArmMixData_v212 {
@@ -180,8 +167,6 @@ PACK(typedef struct t_Open9xArmMixData_v212 {
operator MixData();
t_Open9xArmMixData_v212() { memset(this, 0, sizeof(t_Open9xArmMixData_v212)); }
- t_Open9xArmMixData_v212(MixData&);
-
}) Open9xArmMixData_v212;
PACK(typedef struct t_Open9xArmPhaseData_v208 {
@@ -192,7 +177,6 @@ PACK(typedef struct t_Open9xArmPhaseData_v208 {
uint8_t fadeOut:4;
operator PhaseData();
t_Open9xArmPhaseData_v208() { memset(this, 0, sizeof(t_Open9xArmPhaseData_v208)); }
- t_Open9xArmPhaseData_v208(PhaseData &eepe);
}) Open9xArmPhaseData_v208;
PACK(typedef struct t_Open9xArmPhaseData_v212 {
@@ -204,40 +188,36 @@ PACK(typedef struct t_Open9xArmPhaseData_v212 {
int16_t rotaryEncoders[1];
operator PhaseData();
t_Open9xArmPhaseData_v212() { memset(this, 0, sizeof(t_Open9xArmPhaseData_v212)); }
- t_Open9xArmPhaseData_v212(PhaseData &eepe);
}) Open9xArmPhaseData_v212;
-PACK(typedef struct t_Open9xArmCustomSwData_v208 { // Custom Switches data
+PACK(typedef struct t_Open9xArmLogicalSwitchData_v208 { // Custom Switches data
int8_t v1; //input
int8_t v2; //offset
uint8_t func;
- operator CustomSwData();
- t_Open9xArmCustomSwData_v208() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v208)); }
- t_Open9xArmCustomSwData_v208(CustomSwData&);
-}) Open9xArmCustomSwData_v208;
+ operator LogicalSwitchData();
+ t_Open9xArmLogicalSwitchData_v208() { memset(this, 0, sizeof(t_Open9xArmLogicalSwitchData_v208)); }
+}) Open9xArmLogicalSwitchData_v208;
-PACK(typedef struct t_Open9xArmCustomSwData_v209 { // Custom Switches data
+PACK(typedef struct t_Open9xArmLogicalSwitchData_v209 { // Custom Switches data
int8_t v1; //input
int8_t v2; //offset
uint8_t func;
- operator CustomSwData();
- t_Open9xArmCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v209)); }
- t_Open9xArmCustomSwData_v209(CustomSwData&);
-}) Open9xArmCustomSwData_v209;
+ operator LogicalSwitchData();
+ t_Open9xArmLogicalSwitchData_v209() { memset(this, 0, sizeof(t_Open9xArmLogicalSwitchData_v209)); }
+}) Open9xArmLogicalSwitchData_v209;
-PACK(typedef struct t_Open9xArmCustomSwData_v210 { // Custom Switches data
+PACK(typedef struct t_Open9xArmLogicalSwitchData_v210 { // Custom Switches data
int8_t v1; //input
int8_t v2; //offset
uint8_t func;
uint8_t delay;
uint8_t duration;
- operator CustomSwData();
- t_Open9xArmCustomSwData_v210() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v210)); }
- t_Open9xArmCustomSwData_v210(CustomSwData&);
-}) Open9xArmCustomSwData_v210;
+ operator LogicalSwitchData();
+ t_Open9xArmLogicalSwitchData_v210() { memset(this, 0, sizeof(t_Open9xArmLogicalSwitchData_v210)); }
+}) Open9xArmLogicalSwitchData_v210;
PACK(typedef struct t_Open9xArmFuncSwData_v208 { // Function Switches data
int8_t swtch; // input
@@ -246,8 +226,6 @@ PACK(typedef struct t_Open9xArmFuncSwData_v208 { // Function Switches data
operator FuncSwData();
t_Open9xArmFuncSwData_v208() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v208)); }
- t_Open9xArmFuncSwData_v208(FuncSwData&);
-
}) Open9xArmFuncSwData_v208;
PACK(typedef struct t_Open9xArmFuncSwData_v210 { // Function Switches data
@@ -257,8 +235,6 @@ PACK(typedef struct t_Open9xArmFuncSwData_v210 { // Function Switches data
operator FuncSwData();
t_Open9xArmFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v210)); }
- t_Open9xArmFuncSwData_v210(FuncSwData&);
-
}) Open9xArmFuncSwData_v210;
PACK(typedef struct t_Open9xArmFuncSwData_v211 { // Function Switches data
@@ -270,8 +246,6 @@ PACK(typedef struct t_Open9xArmFuncSwData_v211 { // Function Switches data
operator FuncSwData();
t_Open9xArmFuncSwData_v211() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v211)); }
- t_Open9xArmFuncSwData_v211(FuncSwData&);
-
}) Open9xArmFuncSwData_v211;
PACK(typedef struct t_Open9xArmSwashRingData_v208 { // Swash Ring data
@@ -284,8 +258,6 @@ PACK(typedef struct t_Open9xArmSwashRingData_v208 { // Swash Ring data
operator SwashRingData();
t_Open9xArmSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v208)); }
- t_Open9xArmSwashRingData_v208(SwashRingData&);
-
}) Open9xArmSwashRingData_v208;
PACK(typedef struct t_Open9xArmSwashRingData_v209 { // Swash Ring data
@@ -298,8 +270,6 @@ PACK(typedef struct t_Open9xArmSwashRingData_v209 { // Swash Ring data
operator SwashRingData();
t_Open9xArmSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v209)); }
- t_Open9xArmSwashRingData_v209(SwashRingData&);
-
}) Open9xArmSwashRingData_v209;
PACK(typedef struct t_Open9xArmSwashRingData_v210 { // Swash Ring data
@@ -312,8 +282,6 @@ PACK(typedef struct t_Open9xArmSwashRingData_v210 { // Swash Ring data
operator SwashRingData();
t_Open9xArmSwashRingData_v210() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v210)); }
- t_Open9xArmSwashRingData_v210(SwashRingData&);
-
}) Open9xArmSwashRingData_v210;
@@ -336,7 +304,6 @@ PACK(typedef struct t_Open9xArmFrSkyData_v210 {
operator FrSkyData();
t_Open9xArmFrSkyData_v210() { memset(this, 0, sizeof(t_Open9xArmFrSkyData_v210)); }
- t_Open9xArmFrSkyData_v210(FrSkyData&);
}) Open9xArmFrSkyData_v210;
PACK(typedef struct t_Open9xArmFrSkyData_v211 {
@@ -355,7 +322,6 @@ PACK(typedef struct t_Open9xArmFrSkyData_v211 {
operator FrSkyData();
t_Open9xArmFrSkyData_v211() { memset(this, 0, sizeof(t_Open9xArmFrSkyData_v211)); }
- t_Open9xArmFrSkyData_v211(FrSkyData&);
}) Open9xArmFrSkyData_v211;
PACK(typedef struct t_Open9xArmModelData_v208 {
@@ -377,7 +343,7 @@ PACK(typedef struct t_Open9xArmModelData_v208 {
Open9xArmExpoData_v208 expoData[O9X_ARM_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xArmCustomSwData_v208 customSw[O9X_ARM_NUM_CSW];
+ Open9xArmLogicalSwitchData_v208 customSw[O9X_ARM_NUM_CSW];
Open9xArmFuncSwData_v208 funcSw[O9X_ARM_NUM_FSW];
Open9xArmSwashRingData_v208 swashR;
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES];
@@ -395,8 +361,6 @@ PACK(typedef struct t_Open9xArmModelData_v208 {
operator ModelData();
t_Open9xArmModelData_v208() { memset(this, 0, sizeof(t_Open9xArmModelData_v208)); }
- t_Open9xArmModelData_v208(ModelData&);
-
}) Open9xArmModelData_v208;
PACK(typedef struct t_Open9xArmModelData_v209 {
@@ -418,7 +382,7 @@ PACK(typedef struct t_Open9xArmModelData_v209 {
Open9xArmExpoData_v208 expoData[O9X_ARM_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xArmCustomSwData_v209 customSw[O9X_ARM_NUM_CSW];
+ Open9xArmLogicalSwitchData_v209 customSw[O9X_ARM_NUM_CSW];
Open9xArmFuncSwData_v208 funcSw[O9X_ARM_NUM_FSW];
Open9xArmSwashRingData_v209 swashR;
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES];
@@ -437,8 +401,6 @@ PACK(typedef struct t_Open9xArmModelData_v209 {
operator ModelData();
t_Open9xArmModelData_v209() { memset(this, 0, sizeof(t_Open9xArmModelData_v209)); }
- t_Open9xArmModelData_v209(ModelData&);
-
}) Open9xArmModelData_v209;
PACK(typedef struct t_Open9xArmModelData_v210 {
@@ -460,7 +422,7 @@ PACK(typedef struct t_Open9xArmModelData_v210 {
Open9xArmExpoData_v210 expoData[O9X_ARM_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xArmCustomSwData_v210 customSw[O9X_ARM_NUM_CSW];
+ Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW];
Open9xArmFuncSwData_v210 funcSw[O9X_ARM_NUM_FSW];
Open9xArmSwashRingData_v209 swashR;
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES];
@@ -477,7 +439,6 @@ PACK(typedef struct t_Open9xArmModelData_v210 {
operator ModelData();
t_Open9xArmModelData_v210() { memset(this, 0, sizeof(t_Open9xArmModelData_v210)); }
- t_Open9xArmModelData_v210(ModelData&);
}) Open9xArmModelData_v210;
@@ -500,7 +461,7 @@ PACK(typedef struct t_Open9xArmModelData_v211 {
Open9xArmExpoData_v210 expoData[O9X_ARM_MAX_EXPOS];
int16_t curves[O9X_ARM_MAX_CURVES];
int8_t points[O9X_ARM_NUM_POINTS];
- Open9xArmCustomSwData_v210 customSw[O9X_ARM_NUM_CSW];
+ Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW];
Open9xArmFuncSwData_v211 funcSw[O9X_ARM_NUM_FSW];
Open9xArmSwashRingData_v209 swashR;
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES];
@@ -517,8 +478,6 @@ PACK(typedef struct t_Open9xArmModelData_v211 {
operator ModelData();
t_Open9xArmModelData_v211() { memset(this, 0, sizeof(t_Open9xArmModelData_v211)); }
- t_Open9xArmModelData_v211(ModelData&);
-
}) Open9xArmModelData_v211;
PACK(typedef struct t_Open9xArmModelData_v212 {
@@ -540,7 +499,7 @@ PACK(typedef struct t_Open9xArmModelData_v212 {
Open9xArmExpoData_v212 expoData[O9X_ARM_MAX_EXPOS];
int16_t curves[O9X_ARM_MAX_CURVES];
int8_t points[O9X_ARM_NUM_POINTS];
- Open9xArmCustomSwData_v210 customSw[O9X_ARM_NUM_CSW];
+ Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW];
Open9xArmFuncSwData_v211 funcSw[O9X_ARM_NUM_FSW];
Open9xArmSwashRingData_v210 swashR;
Open9xArmPhaseData_v212 phaseData[O9X_ARM_MAX_PHASES];
@@ -555,8 +514,6 @@ PACK(typedef struct t_Open9xArmModelData_v212 {
operator ModelData();
t_Open9xArmModelData_v212() { memset(this, 0, sizeof(t_Open9xArmModelData_v212)); }
- t_Open9xArmModelData_v212(ModelData&);
-
}) Open9xArmModelData_v212;
#endif
diff --git a/companion/src/firmwares/opentx/open9xStockeeprom.cpp b/companion/src/firmwares/opentx/open9xStockeeprom.cpp
index 274e91be9..44c16e78b 100644
--- a/companion/src/firmwares/opentx/open9xStockeeprom.cpp
+++ b/companion/src/firmwares/opentx/open9xStockeeprom.cpp
@@ -62,28 +62,6 @@ void getEEPROMZString(char *dst, const char *src, int size)
}
}
-int8_t open9xStockFromSwitch(const RawSwitch & sw)
-{
- switch (sw.type) {
- case SWITCH_TYPE_SWITCH:
- return sw.index;
- case SWITCH_TYPE_VIRTUAL:
- return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index);
- case SWITCH_TYPE_ON:
- return 22;
- case SWITCH_TYPE_OFF:
- return -22;
- case SWITCH_TYPE_MOMENT_SWITCH:
- return sw.index > 0 ? (22 + sw.index) : (-22 + sw.index);
- case SWITCH_TYPE_MOMENT_VIRTUAL:
- return sw.index > 0 ? (31 + sw.index) : (-31 + sw.index);
- case SWITCH_TYPE_ONM:
- return 44;
- default:
- return 0;
- }
-}
-
RawSwitch open9xStockToSwitch(int8_t sw)
{
uint8_t swa = abs(sw);
@@ -96,77 +74,13 @@ RawSwitch open9xStockToSwitch(int8_t sw)
else if (sw == 22)
return RawSwitch(SWITCH_TYPE_ON);
else if (sw == 44)
- return RawSwitch(SWITCH_TYPE_ONM);
+ return RawSwitch(SWITCH_TYPE_ON);
else if (sw == -22)
return RawSwitch(SWITCH_TYPE_OFF);
else if (swa <= 22+9)
- return RawSwitch(SWITCH_TYPE_MOMENT_SWITCH, sw > 0 ? sw-22 : sw+22);
+ return RawSwitch(SWITCH_TYPE_SWITCH, sw > 0 ? sw-22 : sw+22);
else
- return RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, sw > 0 ? sw-22-9 : sw+22+9);
-}
-
-t_Open9xExpoData_v201::t_Open9xExpoData_v201(ExpoData &c9x)
-{
- mode = c9x.mode;
- chn = c9x.chn;
- // 0=no curve, 1-6=std curves, 7-10=CV1-CV4, 11-15=CV9-CV13
- curve = 0;
- expo = 0;
- if (c9x.curveMode == 1) {
- if (c9x.curveParam >=0 && c9x.curveParam <= 10)
- curve = c9x.curveParam;
- else if (c9x.curveParam >= 15 && c9x.curveParam <= 19)
- curve = c9x.curveParam - 4;
- else
- EEPROMWarnings += ::QObject::tr("Open9x doesn't allow Curve%1 in expos").arg(c9x.curveParam-6) + "\n";
- }
- else {
- expo=c9x.expo;
- }
- swtch = open9xStockFromSwitch(c9x.swtch);
- int zeros=0;
- int ones=0;
- int phtemp=c9x.phases;
- for (int i=0; i>=1;
- }
- if (zeros==O9X_MAX_PHASES || zeros==0) {
- phase=0;
- negPhase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- negPhase=0;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=(ph+1);
- negPhase=1;
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight modes settings on expos not exported") + "\n";
- }
- weight = c9x.weight;
+ return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-22-9 : sw+22+9);
}
t_Open9xExpoData_v201::operator ExpoData ()
@@ -179,15 +93,10 @@ t_Open9xExpoData_v201::operator ExpoData ()
}
else {
if (curve == 0) {
- c9x.curveMode = 0;
- c9x.curveParam = expo;
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_EXPO, expo);
}
else {
- c9x.curveMode = 1;
- if (curve <= 10)
- c9x.curveParam = curve;
- else
- c9x.curveParam = curve + 4;
+ // TODO
}
}
c9x.swtch = open9xStockToSwitch(swtch);
@@ -205,40 +114,18 @@ t_Open9xExpoData_v201::operator ExpoData ()
return c9x;
}
-t_Open9xExpoData_v211::t_Open9xExpoData_v211(ExpoData &c9x)
-{
- mode = c9x.mode;
- chn = c9x.chn;
- // 0=no curve, 1-6=std curves, 7-10=CV1-CV4, 11-15=CV9-CV13
-
- swtch = open9xStockFromSwitch(c9x.swtch);
- phases = c9x.phases;
- weight = c9x.weight;
- curveMode = c9x.curveMode;
- curveParam = c9x.curveParam;
-}
-
t_Open9xExpoData_v211::operator ExpoData ()
{
ExpoData c9x;
c9x.mode = mode;
c9x.chn = chn;
- c9x.curveMode = curveMode;
- c9x.curveParam = curveParam;
+ // TODO c9x.curve
c9x.swtch = open9xStockToSwitch(swtch);
c9x.phases = phases;
c9x.weight = weight;
return c9x;
}
-t_Open9xLimitData_v201::t_Open9xLimitData_v201(LimitData &c9x)
-{
- min = c9x.min+100;
- max = c9x.max-100;
- revert = c9x.revert;
- offset = c9x.offset;
-}
-
t_Open9xLimitData_v201::operator LimitData ()
{
LimitData c9x;
@@ -249,16 +136,6 @@ t_Open9xLimitData_v201::operator LimitData ()
return c9x;
}
-t_Open9xLimitData_v211::t_Open9xLimitData_v211(LimitData &c9x)
-{
- min = c9x.min+100;
- max = c9x.max-100;
- revert = c9x.revert;
- offset = c9x.offset;
- ppmCenter = c9x.ppmCenter;
- symetrical = c9x.symetrical;
-}
-
t_Open9xLimitData_v211::operator LimitData ()
{
LimitData c9x;
@@ -271,90 +148,6 @@ t_Open9xLimitData_v211::operator LimitData ()
return c9x;
}
-t_Open9xMixData_v201::t_Open9xMixData_v201(MixData &c9x)
-{
- destCh = c9x.destCh;
- mixWarn = c9x.mixWarn;
- swtch = open9xStockFromSwitch(c9x.swtch);
-
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("open9x on this board doesn't have Rotary Encoders") + "\n";
- srcRaw = 5 + c9x.srcRaw.index; // use pots instead
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 8; // MAX
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 9; // FULL
- swtch = open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index));
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 10 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 13 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 21 + c9x.srcRaw.index;
- }
-
- weight = c9x.weight;
- curve = c9x.curve;
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- carryTrim = c9x.carryTrim;
- mltpx = (MltpxValue)c9x.mltpx;
- int zeros=0;
- int ones=0;
- int phtemp=c9x.phases;
- for (int i=0; i>=1;
- }
- if (zeros==O9X_MAX_PHASES || zeros==0) {
- phase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=-(ph+1);
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n";
- }
- sOffset = c9x.sOffset;
-}
-
t_Open9xMixData_v201::operator MixData ()
{
MixData c9x;
@@ -395,7 +188,7 @@ t_Open9xMixData_v201::operator MixData ()
c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-21);
}
- c9x.curve = curve;
+ // TODO c9x.curve = curve;
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -403,7 +196,7 @@ t_Open9xMixData_v201::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
-// c9x.phase = phase;
+
if (phase<0) {
c9x.phases= 1 << (-phase -1);
} else if (phase==0) {
@@ -416,90 +209,6 @@ t_Open9xMixData_v201::operator MixData ()
return c9x;
}
-t_Open9xMixData_v203::t_Open9xMixData_v203(MixData &c9x)
-{
- destCh = c9x.destCh;
- mixWarn = c9x.mixWarn;
- swtch = open9xStockFromSwitch(c9x.swtch);
-
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("open9x on this board doesn't have Rotary Encoders") + "\n";
- srcRaw = 5 + c9x.srcRaw.index; // use pots instead
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 8; // MAX
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 9; // FULL
- swtch = open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index));
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 10 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 13 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 21 + c9x.srcRaw.index;
- }
-
- weight = c9x.weight;
- curve = c9x.curve;
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- carryTrim = c9x.carryTrim;
- mltpx = (MltpxValue)c9x.mltpx;
- int zeros=0;
- int ones=0;
- int phtemp=c9x.phases;
- for (int i=0; i>=1;
- }
- if (zeros==O9X_MAX_PHASES || zeros==0) {
- phase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=-(ph+1);
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n";
- }
- sOffset = c9x.sOffset;
-}
-
t_Open9xMixData_v203::operator MixData ()
{
MixData c9x;
@@ -540,7 +249,7 @@ t_Open9xMixData_v203::operator MixData ()
c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-21);
}
- c9x.curve = curve;
+ // TODO c9x.curve = curve;
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -548,7 +257,7 @@ t_Open9xMixData_v203::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
- // c9x.phase = phase;
+
if (phase<0) {
c9x.phases= 1 << (-phase -1);
} else if (phase==0) {
@@ -561,98 +270,6 @@ t_Open9xMixData_v203::operator MixData ()
return c9x;
}
-t_Open9xMixData_v205::t_Open9xMixData_v205(MixData &c9x)
-{
- if (c9x.destCh) {
- destCh = c9x.destCh-1;
- mixWarn = c9x.mixWarn;
- swtch = open9xStockFromSwitch(c9x.swtch);
-
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n";
- srcRaw = 5 + c9x.srcRaw.index; // use pots instead
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 8; // MAX
- }
- /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) {
- srcRaw = 9;
- } */
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 9 + open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index));
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 31 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 34 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 42 + c9x.srcRaw.index;
- }
-
- weight = c9x.weight;
- differential = c9x.differential/2;
- curve = c9x.curve;
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- carryTrim = c9x.carryTrim;
- mltpx = (MltpxValue)c9x.mltpx;
- int zeros=0;
- int ones=0;
- int phtemp=c9x.phases;
- for (int i=0; i>=1;
- }
- if (zeros==O9X_MAX_PHASES || zeros==0) {
- phase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=-(ph+1);
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n";
- }
- sOffset = c9x.sOffset;
- }
- else {
- memset(this, 0, sizeof(t_Open9xMixData_v205));
- }
-}
-
t_Open9xMixData_v205::operator MixData ()
{
MixData c9x;
@@ -686,8 +303,14 @@ t_Open9xMixData_v205::operator MixData ()
c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-42);
}
c9x.weight = weight;
- c9x.differential = differential*2;
- c9x.curve = curve;
+
+ if (differential) {
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2);
+ }
+ else {
+ // TODO c9x.curve = curve;
+ }
+
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -695,12 +318,14 @@ t_Open9xMixData_v205::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
- // c9x.phase = phase;
+
if (phase<0) {
c9x.phases= 1 << (-phase -1);
- } else if (phase==0) {
+ }
+ else if (phase==0) {
c9x.phases=0;
- } else {
+ }
+ else {
c9x.phases=63;
c9x.phases &= ~(1 << (phase -1));
}
@@ -709,101 +334,6 @@ t_Open9xMixData_v205::operator MixData ()
return c9x;
}
-t_Open9xMixData_v209::t_Open9xMixData_v209(MixData &c9x)
-{
- if (c9x.destCh) {
- destCh = c9x.destCh-1;
- mixWarn = c9x.mixWarn;
- swtch = open9xStockFromSwitch(c9x.swtch);
-
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n";
- srcRaw = 5 + c9x.srcRaw.index; // use pots instead
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) {
- srcRaw = 8 + c9x.srcRaw.index; // use pots instead
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 12; // MAX
- }
- /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) {
- srcRaw = 13;
- } */
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 13 + open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index));
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 35 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 38 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 46 + c9x.srcRaw.index;
- }
-
- weight = c9x.weight;
- differential = c9x.differential/2;
- curve = c9x.curve;
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- carryTrim = c9x.carryTrim;
- mltpx = (MltpxValue)c9x.mltpx;
- int zeros=0;
- int ones=0;
- int phtemp=c9x.phases;
- for (int i=0; i>=1;
- }
- if (zeros==O9X_MAX_PHASES || zeros==0) {
- phase=0;
- } else if (zeros==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=ph+1;
- } else if (ones==1) {
- int phtemp=c9x.phases;
- int ph=0;
- for (int i=0; i>=1;
- }
- phase=-(ph+1);
- } else {
- phase=0;
- EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n";
- }
- sOffset = c9x.sOffset;
- }
- else {
- memset(this, 0, sizeof(t_Open9xMixData_v209));
- }
-}
-
t_Open9xMixData_v209::operator MixData ()
{
MixData c9x;
@@ -840,8 +370,14 @@ t_Open9xMixData_v209::operator MixData ()
c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-46);
}
c9x.weight = weight;
- c9x.differential = differential*2;
- c9x.curve = curve;
+
+ if (differential) {
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2);
+ }
+ else {
+ // TODO c9x.curve = curve;
+ }
+
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -849,12 +385,14 @@ t_Open9xMixData_v209::operator MixData ()
c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn;
- // c9x.phase = phase;
+
if (phase<0) {
c9x.phases= 1 << (-phase -1);
- } else if (phase==0) {
+ }
+ else if (phase==0) {
c9x.phases=0;
- } else {
+ }
+ else {
c9x.phases=63;
c9x.phases &= ~(1 << (phase -1));
}
@@ -863,70 +401,6 @@ t_Open9xMixData_v209::operator MixData ()
return c9x;
}
-t_Open9xMixData_v211::t_Open9xMixData_v211(MixData &c9x)
-{
- if (c9x.destCh) {
- destCh = c9x.destCh-1;
- mixWarn = c9x.mixWarn;
- swtch = open9xStockFromSwitch(c9x.swtch);
-
- if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
- srcRaw = 0;
- swtch = 0;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
- srcRaw = 1 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n";
- srcRaw = 5 + c9x.srcRaw.index; // use pots instead
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) {
- srcRaw = 8 + c9x.srcRaw.index; // use pots instead
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
- srcRaw = 12; // MAX
- }
- /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) {
- srcRaw = 13;
- } */
- else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
- srcRaw = 13 + open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index));
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
- srcRaw = 35 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
- srcRaw = 38 + c9x.srcRaw.index;
- }
- else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
- srcRaw = 46 + c9x.srcRaw.index;
- }
-
- weight = c9x.weight;
- if (c9x.curve==0) {
- curveMode = 0;
- curveParam = c9x.differential;
- }
- else {
- curveMode = 1;
- curveParam = c9x.curve;
- }
- delayUp = c9x.delayUp;
- delayDown = c9x.delayDown;
- speedUp = c9x.speedUp;
- speedDown = c9x.speedDown;
- carryTrim = c9x.carryTrim;
- noExpo = c9x.noExpo;
- mltpx = (MltpxValue)c9x.mltpx;
- phases = c9x.phases;
- sOffset = c9x.sOffset;
- }
- else {
- memset(this, 0, sizeof(t_Open9xMixData_v211));
- }
-}
-
t_Open9xMixData_v211::operator MixData ()
{
MixData c9x;
@@ -963,12 +437,14 @@ t_Open9xMixData_v211::operator MixData ()
c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-46);
}
c9x.weight = weight;
+
if (curveMode==0) {
- c9x.differential = curveParam;
- c9x.curve=0;
- } else {
- c9x.curve=curveParam;
+ c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, curveParam);
+ }
+ else {
+ // TODO c9x.curve = curve;
}
+
c9x.delayUp = delayUp;
c9x.delayDown = delayDown;
c9x.speedUp = speedUp;
@@ -983,30 +459,6 @@ t_Open9xMixData_v211::operator MixData ()
return c9x;
}
-int8_t open9x208FromSource(RawSource source)
-{
- int v1 = 0;
- if (source.type == SOURCE_TYPE_STICK)
- v1 = 1+source.index;
- else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n";
- v1 = 5+source.index;
- }
- else if (source.type == SOURCE_TYPE_MAX)
- v1 = 8;
- /* else if (source.type == SOURCE_TYPE_3POS)
- v1 = 9; */
- else if (source.type == SOURCE_TYPE_CYC)
- v1 = 10+source.index;
- else if (source.type == SOURCE_TYPE_PPM)
- v1 = 13+source.index;
- else if (source.type == SOURCE_TYPE_CH)
- v1 = 21+source.index;
- else if (source.type == SOURCE_TYPE_TELEMETRY)
- v1 = 36+source.index;
- return v1;
-}
-
RawSource open9x208ToSource(int8_t value)
{
if (value == 0) {
@@ -1035,32 +487,6 @@ RawSource open9x208ToSource(int8_t value)
}
}
-int8_t open9xStock209FromSource(RawSource source)
-{
- int v1 = 0;
- if (source.type == SOURCE_TYPE_STICK)
- v1 = 1+source.index;
- else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) {
- EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n";
- v1 = 5+source.index;
- }
- else if (source.type == SOURCE_TYPE_TRIM)
- v1 = 8+source.index;
- else if (source.type == SOURCE_TYPE_MAX)
- v1 = 12;
- /* else if (source.type == SOURCE_TYPE_3POS)
- v1 = 13; */
- else if (source.type == SOURCE_TYPE_CYC)
- v1 = 14+source.index;
- else if (source.type == SOURCE_TYPE_PPM)
- v1 = 17+source.index;
- else if (source.type == SOURCE_TYPE_CH)
- v1 = 25+source.index;
- else if (source.type == SOURCE_TYPE_TELEMETRY)
- v1 = 40+source.index;
- return v1;
-}
-
RawSource open9xStock209ToSource(int8_t value)
{
if (value == 0) {
@@ -1092,49 +518,22 @@ RawSource open9xStock209ToSource(int8_t value)
}
}
-t_Open9xCustomSwData_v208::t_Open9xCustomSwData_v208(CustomSwData &c9x)
+Open9xLogicalSwitchData_v208::operator LogicalSwitchData ()
{
- func = c9x.func;
- v1 = c9x.val1;
- v2 = c9x.val2;
-
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
- v1 = open9x208FromSource(RawSource(c9x.val1));
- }
-
- if (c9x.func >= CS_FN_EQUAL) {
- v2 = open9x208FromSource(RawSource(c9x.val2));
- }
-
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
- v1 = open9xStockFromSwitch(RawSwitch(c9x.val1));
- v2 = open9xStockFromSwitch(RawSwitch(c9x.val2));
- }
-
- if (func>O9X_MAX_CSFUNCOLD ) {
- EEPROMWarnings += ::QObject::tr("This version of open9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n";
- func=0;
- v1=0;
- v2=0;
- }
-}
-
-Open9xCustomSwData_v208::operator CustomSwData ()
-{
- CustomSwData c9x;
+ LogicalSwitchData c9x;
c9x.func = func;
c9x.val1 = v1;
c9x.val2 = v2;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
+ if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) {
c9x.val1 = open9x208ToSource(v1).toValue();
}
- if (c9x.func >= CS_FN_EQUAL) {
+ if (c9x.func >= LS_FN_EQUAL) {
c9x.val2 = open9x208ToSource(v2).toValue();
}
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
+ if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) {
c9x.val1 = open9xStockToSwitch(v1).toValue();
c9x.val2 = open9xStockToSwitch(v2).toValue();
}
@@ -1142,42 +541,22 @@ Open9xCustomSwData_v208::operator CustomSwData ()
return c9x;
}
-t_Open9xCustomSwData_v209::t_Open9xCustomSwData_v209(CustomSwData &c9x)
+Open9xLogicalSwitchData_v209::operator LogicalSwitchData ()
{
- func = c9x.func;
- v1 = c9x.val1;
- v2 = c9x.val2;
-
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
- v1 = open9xStock209FromSource(RawSource(c9x.val1));
- }
-
- if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) {
- v2 = open9xStock209FromSource(RawSource(c9x.val2));
- }
-
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
- v1 = open9xStockFromSwitch(RawSwitch(c9x.val1));
- v2 = open9xStockFromSwitch(RawSwitch(c9x.val2));
- }
-}
-
-Open9xCustomSwData_v209::operator CustomSwData ()
-{
- CustomSwData c9x;
+ LogicalSwitchData c9x;
c9x.func = func;
c9x.val1 = v1;
c9x.val2 = v2;
- if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
+ if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) {
c9x.val1 = open9xStock209ToSource(v1).toValue();
}
- if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) {
+ if (c9x.func >= LS_FN_EQUAL && c9x.func <= LS_FN_ELESS) {
c9x.val2 = open9xStock209ToSource(v2).toValue();
}
- if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
+ if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) {
c9x.val1 = open9xStockToSwitch(v1).toValue();
c9x.val2 = open9xStockToSwitch(v2).toValue();
}
@@ -1185,12 +564,6 @@ Open9xCustomSwData_v209::operator CustomSwData ()
return c9x;
}
-t_Open9xFuncSwData_v201::t_Open9xFuncSwData_v201(FuncSwData &c9x)
-{
- swtch = open9xStockFromSwitch(c9x.swtch);
- func = c9x.func - O9X_NUM_CHNOUT;
-}
-
t_Open9xFuncSwData_v201::operator FuncSwData ()
{
FuncSwData c9x;
@@ -1220,42 +593,11 @@ enum Functions {
#endif
FUNC_BACKLIGHT,
#if defined(DEBUG)
- FUNC_TEST, // should remain the last before MAX as not added in companion9x
+ FUNC_TEST, // should remain the last before MAX as not added in companion
#endif
FUNC_MAX
};
-t_Open9xFuncSwData_v203::t_Open9xFuncSwData_v203(FuncSwData &c9x)
-{
- swtch = open9xStockFromSwitch(c9x.swtch);
- if (c9x.func <= FuncSafetyCh16) {
- param = ((c9x.param>>1)<<1);
- param |=(c9x.enabled & 0x01);
- func = c9x.func;
- } else {
- param = c9x.param;;
- if (c9x.func <= FuncTrainerAIL)
- func = 16 + c9x.func - FuncTrainer;
- else if (c9x.func == FuncInstantTrim)
- func = 21;
- else if (c9x.func == FuncPlaySound)
- func = 22;
- else if (c9x.func == FuncPlayHaptic)
- func = 23;
- else if (c9x.func == FuncReset)
- func = 24;
- else if (c9x.func == FuncVario)
- func = 25;
- else if (c9x.func == FuncBacklight)
- func = 26;
- else {
- swtch = 0;
- func = 0;
- param = 0;
- }
- }
-}
-
t_Open9xFuncSwData_v203::operator FuncSwData ()
{
FuncSwData c9x;
@@ -1286,38 +628,6 @@ t_Open9xFuncSwData_v203::operator FuncSwData ()
return c9x;
}
-t_Open9xFuncSwData_v210::t_Open9xFuncSwData_v210(FuncSwData &c9x)
-{
- swtch = open9xStockFromSwitch(c9x.swtch);
- param = c9x.param;
- if (c9x.func <= FuncInstantTrim) {
- delay = c9x.enabled;
- func = (uint8_t)c9x.func;
- }
- else if (c9x.func == FuncPlaySound)
- func = 22;
- else if (c9x.func == FuncPlayHaptic)
- func = 23;
- else if (c9x.func == FuncReset)
- func = 24;
- else if (c9x.func == FuncVario)
- func = 25;
- else if (c9x.func == FuncPlayPrompt)
- func = 26;
- else if (c9x.func == FuncPlayValue) {
- func = 27;
- if (c9x.param > 7) {
- param -= 2;
- }
- } else if (c9x.func == FuncBacklight)
- func = 28;
- else {
- swtch = 0;
- func = 0;
- param = 0;
- }
-}
-
t_Open9xFuncSwData_v210::operator FuncSwData ()
{
FuncSwData c9x;
@@ -1352,30 +662,6 @@ t_Open9xFuncSwData_v210::operator FuncSwData ()
return c9x;
}
-t_Open9xSafetySwData::t_Open9xSafetySwData(SafetySwData &c9x)
-{
- swtch = open9xStockFromSwitch(c9x.swtch);
- val = c9x.val;
-}
-
-t_Open9xSafetySwData::operator SafetySwData ()
-{
- SafetySwData c9x;
- c9x.swtch = open9xStockToSwitch(swtch);
- c9x.val = val;
- return c9x;
-}
-
-t_Open9xSwashRingData_v208::t_Open9xSwashRingData_v208(SwashRingData &c9x)
-{
- invertELE = c9x.invertELE;
- invertAIL = c9x.invertAIL;
- invertCOL = c9x.invertCOL;
- type = c9x.type;
- collectiveSource = open9x208FromSource(c9x.collectiveSource);
- value = c9x.value;
-}
-
t_Open9xSwashRingData_v208::operator SwashRingData ()
{
SwashRingData c9x;
@@ -1388,16 +674,6 @@ t_Open9xSwashRingData_v208::operator SwashRingData ()
return c9x;
}
-t_Open9xSwashRingData_v209::t_Open9xSwashRingData_v209(SwashRingData &c9x)
-{
- invertELE = c9x.invertELE;
- invertAIL = c9x.invertAIL;
- invertCOL = c9x.invertCOL;
- type = c9x.type;
- collectiveSource = open9xStock209FromSource(c9x.collectiveSource);
- value = c9x.value;
-}
-
t_Open9xSwashRingData_v209::operator SwashRingData ()
{
SwashRingData c9x;
@@ -1422,23 +698,10 @@ t_Open9xPhaseData_v201::operator PhaseData ()
return c9x;
}
-t_Open9xPhaseData_v201::t_Open9xPhaseData_v201(PhaseData &c9x)
-{
- trim_ext = 0;
- for (int i=0; i> 2);
- trim_ext = (trim_ext & ~(0x03 << (2*i))) + (((c9x.trim[i] & 0x03) << (2*i)));
- }
- swtch = open9xStockFromSwitch(c9x.swtch);
- setEEPROMZString(name, c9x.name, sizeof(name));
- fadeIn = c9x.fadeIn;
- fadeOut = c9x.fadeOut;
-}
-
t_Open9xTimerData_v201::operator TimerData ()
{
TimerData c9x;
- c9x.mode = TMRMODE_OFF;
+ // c9x.mode = TMRMODE_OFF;
c9x.val = val;
c9x.persistent = persistent;
c9x.dir = dir;
@@ -1448,9 +711,9 @@ t_Open9xTimerData_v201::operator TimerData ()
t_Open9xTimerData_v202::operator TimerData ()
{
TimerData c9x;
-
+/*
if (mode <= -22)
- c9x.mode = TimerMode(TMRMODE_FIRST_NEG_MOMENT_SWITCH+(mode+22));
+ c9x.mode = TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+22));
else if (mode <= -1)
c9x.mode = TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+1));
else if (mode < 5)
@@ -1458,32 +721,14 @@ t_Open9xTimerData_v202::operator TimerData ()
else if (mode < 5+21)
c9x.mode = TimerMode(TMRMODE_FIRST_SWITCH+(mode-5));
else
- c9x.mode = TimerMode(TMRMODE_FIRST_MOMENT_SWITCH+(mode-5-21));
-
+ c9x.mode = TimerMode(TMRMODE_FIRST_SWITCH+(mode-5-21));
+*/
c9x.val = val;
c9x.persistent = false;
c9x.dir = (val == 0);
return c9x;
}
-t_Open9xTimerData_v202::t_Open9xTimerData_v202(TimerData &c9x)
-{
- val = c9x.val;
-
- if (c9x.mode >= TMRMODE_OFF && c9x.mode <= TMRMODE_THt)
- mode = 0+c9x.mode-TMRMODE_OFF;
- else if (c9x.mode >= TMRMODE_FIRST_MOMENT_SWITCH)
- mode = 26+c9x.mode-TMRMODE_FIRST_MOMENT_SWITCH;
- else if (c9x.mode >= TMRMODE_FIRST_SWITCH)
- mode = 5+c9x.mode-TMRMODE_FIRST_SWITCH;
- else if (c9x.mode <= TMRMODE_FIRST_NEG_MOMENT_SWITCH)
- mode = -22+c9x.mode-TMRMODE_FIRST_NEG_MOMENT_SWITCH;
- else if (c9x.mode <= TMRMODE_FIRST_NEG_SWITCH)
- mode = -1+c9x.mode-TMRMODE_FIRST_NEG_SWITCH;
- else
- mode = 0;
-}
-
FrSkyRSSIAlarm t_Open9xFrSkyRSSIAlarm::get(int index)
{
FrSkyRSSIAlarm c9x;
@@ -1492,25 +737,6 @@ FrSkyRSSIAlarm t_Open9xFrSkyRSSIAlarm::get(int index)
return c9x;
}
-t_Open9xFrSkyRSSIAlarm::t_Open9xFrSkyRSSIAlarm(int index, FrSkyRSSIAlarm &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyRSSIAlarm));
- level = (2+c9x.level-index) % 4;
- value = c9x.value - 50;
-}
-
-t_Open9xFrSkyChannelData_v201::t_Open9xFrSkyChannelData_v201(FrSkyChannelData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v201));
- ratio = c9x.ratio;
- alarms_value[0] = c9x.alarms[0].value;
- alarms_value[1] = c9x.alarms[1].value;
- alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level;
- alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater;
- type = c9x.type;
- offset = LIMIT(-8, c9x.offset, +7);
-}
-
t_Open9xFrSkyChannelData_v201::operator FrSkyChannelData ()
{
FrSkyChannelData c9x;
@@ -1526,18 +752,6 @@ t_Open9xFrSkyChannelData_v201::operator FrSkyChannelData ()
return c9x;
}
-t_Open9xFrSkyChannelData_v203::t_Open9xFrSkyChannelData_v203(FrSkyChannelData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v203));
- ratio = c9x.ratio;
- alarms_value[0] = c9x.alarms[0].value;
- alarms_value[1] = c9x.alarms[1].value;
- alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level;
- alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater;
- type = c9x.type;
- offset = c9x.offset;
-}
-
t_Open9xFrSkyChannelData_v203::operator FrSkyChannelData ()
{
FrSkyChannelData c9x;
@@ -1553,20 +767,6 @@ t_Open9xFrSkyChannelData_v203::operator FrSkyChannelData ()
return c9x;
}
-t_Open9xFrSkyChannelData_v204::t_Open9xFrSkyChannelData_v204(FrSkyChannelData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v204));
- ratio = c9x.ratio;
- type = c9x.type;
- multiplier = c9x.multiplier;
- alarms_value[0] = c9x.alarms[0].value;
- alarms_value[1] = c9x.alarms[1].value;
- alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level;
- alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater;
- // TODO multiplier = c9x.multiplier;
- offset = c9x.offset;
-}
-
t_Open9xFrSkyChannelData_v204::operator FrSkyChannelData ()
{
FrSkyChannelData c9x;
@@ -1584,20 +784,6 @@ t_Open9xFrSkyChannelData_v204::operator FrSkyChannelData ()
return c9x;
}
-t_Open9xFrSkyChannelData_v208::t_Open9xFrSkyChannelData_v208(FrSkyChannelData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v208));
- ratio = c9x.ratio;
- type = c9x.type;
- multiplier = c9x.multiplier;
- alarms_value[0] = c9x.alarms[0].value;
- alarms_value[1] = c9x.alarms[1].value;
- alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level;
- alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater;
- // TODO multiplier = c9x.multiplier;
- offset = c9x.offset;
-}
-
t_Open9xFrSkyChannelData_v208::operator FrSkyChannelData ()
{
FrSkyChannelData c9x;
@@ -1632,14 +818,6 @@ t_Open9xFrSkyData_v202::operator FrSkyData ()
return c9x;
}
-t_Open9xFrSkyData_v202::t_Open9xFrSkyData_v202(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyData_v202));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
- usrProto = c9x.usrProto;
-}
-
t_Open9xFrSkyData_v203::operator FrSkyData ()
{
FrSkyData c9x;
@@ -1649,14 +827,6 @@ t_Open9xFrSkyData_v203::operator FrSkyData ()
return c9x;
}
-t_Open9xFrSkyData_v203::t_Open9xFrSkyData_v203(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyData_v203));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
- usrProto = c9x.usrProto;
-}
-
t_Open9xFrSkyBarData_v204::operator FrSkyBarData ()
{
FrSkyBarData c9x;
@@ -1666,14 +836,6 @@ t_Open9xFrSkyBarData_v204::operator FrSkyBarData ()
return c9x;
}
-t_Open9xFrSkyBarData_v204::t_Open9xFrSkyBarData_v204(FrSkyBarData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyBarData_v204));
- source = c9x.source;
- barMin = c9x.barMin;
- barMax = c9x.barMax;
-}
-
t_Open9xFrSkyData_v204::operator FrSkyData ()
{
FrSkyData c9x;
@@ -1681,25 +843,13 @@ t_Open9xFrSkyData_v204::operator FrSkyData ()
c9x.channels[1] = channels[1];
c9x.usrProto = usrProto;
c9x.imperial = imperial;
- c9x.blades = blades;
+ c9x.blades = blades+2;
c9x.screens[0].type = 1;
for (int i=0; i<4; i++)
c9x.screens[0].body.bars[i] = bars[i];
return c9x;
}
-t_Open9xFrSkyData_v204::t_Open9xFrSkyData_v204(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyData_v204));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
- usrProto = c9x.usrProto;
- imperial = c9x.imperial;
- blades = c9x.blades;
- for (int i=0; i<4; i++)
- bars[i] = c9x.screens[0].body.bars[i];
-}
-
t_Open9xFrSkyData_v205::operator FrSkyData ()
{
FrSkyData c9x;
@@ -1707,7 +857,7 @@ t_Open9xFrSkyData_v205::operator FrSkyData ()
c9x.channels[1] = channels[1];
c9x.usrProto = usrProto;
c9x.imperial = imperial;
- c9x.blades = blades;
+ c9x.blades = blades+2;
c9x.screens[0].type = 1;
for (int i=0; i<4; i++)
c9x.screens[0].body.bars[i] = bars[i];
@@ -1716,21 +866,6 @@ t_Open9xFrSkyData_v205::operator FrSkyData ()
return c9x;
}
-t_Open9xFrSkyData_v205::t_Open9xFrSkyData_v205(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyData_v205));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
- usrProto = c9x.usrProto;
- imperial = c9x.imperial;
- blades = c9x.blades;
- for (int i=0; i<4; i++)
- bars[i] = c9x.screens[0].body.bars[i];
- rssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.rssiAlarms[0]);
- rssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.rssiAlarms[1]);
-}
-
-
t_Open9xFrSkyData_v208::operator FrSkyData ()
{
FrSkyData c9x;
@@ -1738,7 +873,7 @@ t_Open9xFrSkyData_v208::operator FrSkyData ()
c9x.channels[1] = channels[1];
c9x.usrProto = usrProto;
c9x.voltsSource = voltsSource;
- c9x.blades = blades;
+ c9x.blades = blades+2;
c9x.currentSource=currentSource;
c9x.screens[0].type = 1;
for (int i=0; i<4; i++)
@@ -1748,21 +883,6 @@ t_Open9xFrSkyData_v208::operator FrSkyData ()
return c9x;
}
-t_Open9xFrSkyData_v208::t_Open9xFrSkyData_v208(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyData_v208));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
- usrProto = c9x.usrProto;
- voltsSource = c9x.voltsSource;
- blades = c9x.blades;
- currentSource=c9x.currentSource;
- for (int i=0; i<4; i++)
- bars[i] = c9x.screens[0].body.bars[i];
- rssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.rssiAlarms[0]);
- rssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.rssiAlarms[1]);
-}
-
t_Open9xFrSkyData_v210::operator FrSkyData ()
{
FrSkyData c9x;
@@ -1770,7 +890,7 @@ t_Open9xFrSkyData_v210::operator FrSkyData ()
c9x.channels[1] = channels[1];
c9x.usrProto = usrProto;
c9x.voltsSource = voltsSource;
- c9x.blades = blades;
+ c9x.blades = blades+2;
c9x.currentSource=currentSource;
int lines_screen_index = 0;
@@ -1798,40 +918,6 @@ t_Open9xFrSkyData_v210::operator FrSkyData ()
return c9x;
}
-t_Open9xFrSkyData_v210::t_Open9xFrSkyData_v210(FrSkyData &c9x)
-{
- memset(this, 0, sizeof(t_Open9xFrSkyData_v210));
- channels[0] = c9x.channels[0];
- channels[1] = c9x.channels[1];
- usrProto = c9x.usrProto;
- voltsSource = c9x.voltsSource;
- blades = c9x.blades;
- currentSource=c9x.currentSource;
-
- for (int scr=0; scr<2; scr++) {
- if (c9x.screens[scr].type == 1) {
- for (int i=0; i<4; i++)
- bars[i] = c9x.screens[scr].body.bars[i];
- }
- else {
- linesXtra=0;
- for (int j=0; j<4; j++) {
- lines[j] = 0;
- for (int k=0; k<2; k++) {
- int value = c9x.screens[scr].body.lines[j].source[k];
- lines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4));
- linesXtra |= (value / 16) << (4*j+2*k);
- }
- }
- }
- }
- rssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.rssiAlarms[0]);
- rssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.rssiAlarms[1]);
- varioSource = c9x.varioSource;
- varioSpeedUpMin = c9x.varioCenterMax;
- varioSpeedDownMin = c9x.varioCenterMin;
-}
-
t_Open9xModelData_v201::operator ModelData ()
{
ModelData c9x;
@@ -1856,7 +942,7 @@ t_Open9xModelData_v201::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo;
- c9x.trimInc = trimInc;
+ c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@@ -1881,7 +967,6 @@ t_Open9xModelData_v201::operator ModelData ()
c9x.expoData[i] = expoData[i];
for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId=c9x.modelId;
- }
- else {
- memset(this, 0, sizeof(t_Open9xModelData_v202));
- }
-}
-
t_Open9xModelData_v203::operator ModelData ()
{
ModelData c9x;
@@ -2090,7 +1092,7 @@ t_Open9xModelData_v203::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
- c9x.trimInc = trimInc;
+ c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@@ -2115,7 +1117,6 @@ t_Open9xModelData_v203::operator ModelData ()
c9x.expoData[i] = expoData[i];
for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- }
- else {
- memset(this, 0, sizeof(t_Open9xModelData_v203));
- }
-}
-
t_Open9xModelData_v204::operator ModelData ()
{
ModelData c9x;
@@ -2256,7 +1166,7 @@ t_Open9xModelData_v204::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
- c9x.trimInc = trimInc;
+ c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@@ -2281,7 +1191,6 @@ t_Open9xModelData_v204::operator ModelData ()
c9x.expoData[i] = expoData[i];
for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- frskyRssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.frsky.rssiAlarms[0]);
- frskyRssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.frsky.rssiAlarms[1]);
- }
- else {
- memset(this, 0, sizeof(t_Open9xModelData_v204));
- }
-}
-
t_Open9xModelData_v205::operator ModelData ()
{
ModelData c9x;
@@ -2429,7 +1245,7 @@ t_Open9xModelData_v205::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
- c9x.trimInc = trimInc;
+ c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@@ -2454,7 +1270,6 @@ t_Open9xModelData_v205::operator ModelData ()
c9x.expoData[i] = expoData[i];
for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- frskyLinesXtra=0;
- for (int j=0; j<4; j++) {
- frskyLines[j] = 0;
- for (int k=0; k<2; k++) {
- int value = c9x.frsky.screens[1].body.lines[j].source[k];
- frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4));
- frskyLinesXtra |= (value / 16) << (4*j+2*k);
- }
- }
- }
- else {
- memset(this, 0, sizeof(t_Open9xModelData_v205));
- }
-}
-
-
t_Open9xModelData_v208::operator ModelData ()
{
ModelData c9x;
@@ -2620,7 +1331,7 @@ t_Open9xModelData_v208::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.disableThrottleWarning=disableThrottleWarning;
- c9x.trimInc = trimInc;
+ c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@@ -2645,7 +1356,6 @@ t_Open9xModelData_v208::operator ModelData ()
c9x.expoData[i] = expoData[i];
for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- varioSource = c9x.frsky.varioSource;
- varioSpeedUpMin = c9x.frsky.varioCenterMax;
- varioSpeedDownMin = c9x.frsky.varioCenterMin;
-
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- frskyLinesXtra=0;
- for (int j=0; j<4; j++) {
- frskyLines[j] = 0;
- for (int k=0; k<2; k++) {
- int value = c9x.frsky.screens[1].body.lines[j].source[k];
- frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4));
- frskyLinesXtra |= (value / 16) << (4*j+2*k);
- }
- }
-
- for (int i=0; i= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
- varioSource = c9x.frsky.varioSource;
- varioSpeedUpMin = c9x.frsky.varioCenterMax;
- varioSpeedDownMin = c9x.frsky.varioCenterMin;
- switchWarningStates = c9x.switchWarningStates;
-
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- frskyLinesXtra=0;
- for (int j=0; j<4; j++) {
- frskyLines[j] = 0;
- for (int k=0; k<2; k++) {
- int value = c9x.frsky.screens[1].body.lines[j].source[k];
- frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4));
- frskyLinesXtra |= (value / 16) << (4*j+2*k);
- }
- }
-
- for (int i=0; i O9X_NUM_POINTS - 5 * O9X_MAX_CURVES) {
- EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_NUM_POINTS) + "\n";
- break;
- }
- curves[i] = offset;
- for (int j=0; j= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
-
- switchWarningStates = c9x.switchWarningStates;
-
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
-
- for (int i=0; i O9X_NUM_POINTS - 5 * O9X_MAX_CURVES) {
- EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_NUM_POINTS) + "\n";
- break;
- }
- curves[i] = offset;
- for (int j=0; j= 0) {
- phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
- }
- else {
- phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
- }
- }
- phaseData[i] = phase;
- }
- frsky = c9x.frsky;
-
- switchWarningStates = c9x.switchWarningStates;
-
- ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
- thrTraceSrc = c9x.thrTraceSrc;
- modelId = c9x.modelId;
- }
-}
diff --git a/companion/src/firmwares/opentx/open9xStockeeprom.h b/companion/src/firmwares/opentx/open9xStockeeprom.h
index 46178281f..8f121441e 100644
--- a/companion/src/firmwares/opentx/open9xStockeeprom.h
+++ b/companion/src/firmwares/opentx/open9xStockeeprom.h
@@ -65,7 +65,6 @@ PACK(typedef struct t_Open9xFrSkyRSSIAlarm {
int8_t value:6;
FrSkyRSSIAlarm get(int index);
t_Open9xFrSkyRSSIAlarm() { memset(this, 0, sizeof(t_Open9xFrSkyRSSIAlarm)); }
- t_Open9xFrSkyRSSIAlarm(int index, FrSkyRSSIAlarm&);
}) Open9xFrSkyRSSIAlarm;
PACK(typedef struct t_Open9xExpoData_v201 {
@@ -80,8 +79,6 @@ PACK(typedef struct t_Open9xExpoData_v201 {
operator ExpoData();
t_Open9xExpoData_v201() { memset(this, 0, sizeof(t_Open9xExpoData_v201)); }
- t_Open9xExpoData_v201(ExpoData&);
-
}) Open9xExpoData_v201;
PACK(typedef struct t_Open9xExpoData_v211 {
@@ -95,8 +92,6 @@ PACK(typedef struct t_Open9xExpoData_v211 {
operator ExpoData();
t_Open9xExpoData_v211() { memset(this, 0, sizeof(t_Open9xExpoData_v211)); }
- t_Open9xExpoData_v211(ExpoData&);
-
}) Open9xExpoData_v211;
PACK(typedef struct t_Open9xLimitData_v201 {
@@ -107,8 +102,6 @@ PACK(typedef struct t_Open9xLimitData_v201 {
operator LimitData();
t_Open9xLimitData_v201() { memset(this, 0, sizeof(t_Open9xLimitData_v201)); }
- t_Open9xLimitData_v201(LimitData&);
-
}) Open9xLimitData_v201;
PACK(typedef struct t_Open9xLimitData_v211 {
@@ -121,8 +114,6 @@ PACK(typedef struct t_Open9xLimitData_v211 {
operator LimitData();
t_Open9xLimitData_v211() { memset(this, 0, sizeof(t_Open9xLimitData_v211)); }
- t_Open9xLimitData_v211(LimitData&);
-
}) Open9xLimitData_v211;
PACK(typedef struct t_Open9xMixData_v201 {
@@ -143,8 +134,6 @@ PACK(typedef struct t_Open9xMixData_v201 {
operator MixData();
t_Open9xMixData_v201() { memset(this, 0, sizeof(t_Open9xMixData_v201)); }
- t_Open9xMixData_v201(MixData&);
-
}) Open9xMixData_v201;
PACK(typedef struct t_Open9xMixData_v203 {
@@ -165,8 +154,6 @@ PACK(typedef struct t_Open9xMixData_v203 {
operator MixData();
t_Open9xMixData_v203() { memset(this, 0, sizeof(t_Open9xMixData_v203)); }
- t_Open9xMixData_v203(MixData&);
-
}) Open9xMixData_v203;
PACK(typedef struct t_Open9xMixData_v205 {
@@ -188,8 +175,6 @@ PACK(typedef struct t_Open9xMixData_v205 {
operator MixData();
t_Open9xMixData_v205() { memset(this, 0, sizeof(t_Open9xMixData_v205)); }
- t_Open9xMixData_v205(MixData&);
-
}) Open9xMixData_v205;
PACK(typedef struct t_Open9xMixData_v209 {
@@ -211,8 +196,6 @@ PACK(typedef struct t_Open9xMixData_v209 {
operator MixData();
t_Open9xMixData_v209() { memset(this, 0, sizeof(t_Open9xMixData_v209)); }
- t_Open9xMixData_v209(MixData&);
-
}) Open9xMixData_v209;
PACK(typedef struct t_Open9xMixData_v211 {
@@ -236,38 +219,32 @@ PACK(typedef struct t_Open9xMixData_v211 {
operator MixData();
t_Open9xMixData_v211() { memset(this, 0, sizeof(t_Open9xMixData_v211)); }
- t_Open9xMixData_v211(MixData&);
-
}) Open9xMixData_v211;
-PACK(typedef struct t_Open9xCustomSwData_v208 { // Custom Switches data
+PACK(typedef struct t_Open9xLogicalSwitchData_v208 { // Custom Switches data
int8_t v1; //input
int8_t v2; //offset
uint8_t func;
- operator CustomSwData();
- t_Open9xCustomSwData_v208() { memset(this, 0, sizeof(t_Open9xCustomSwData_v208)); }
- t_Open9xCustomSwData_v208(CustomSwData&);
-}) Open9xCustomSwData_v208;
+ operator LogicalSwitchData();
+ t_Open9xLogicalSwitchData_v208() { memset(this, 0, sizeof(t_Open9xLogicalSwitchData_v208)); }
+ t_Open9xLogicalSwitchData_v208(LogicalSwitchData&);
+}) Open9xLogicalSwitchData_v208;
-PACK(typedef struct t_Open9xCustomSwData_v209 { // Custom Switches data
+PACK(typedef struct t_Open9xLogicalSwitchData_v209 { // Custom Switches data
int8_t v1; //input
int8_t v2; //offset
uint8_t func;
- operator CustomSwData();
- t_Open9xCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xCustomSwData_v209)); }
- t_Open9xCustomSwData_v209(CustomSwData&);
-}) Open9xCustomSwData_v209;
+ operator LogicalSwitchData();
+ t_Open9xLogicalSwitchData_v209() { memset(this, 0, sizeof(t_Open9xLogicalSwitchData_v209)); }
+}) Open9xLogicalSwitchData_v209;
PACK(typedef struct t_Open9xSafetySwData { // Safety Switches data
int8_t swtch;
int8_t val;
- operator SafetySwData();
t_Open9xSafetySwData() { memset(this, 0, sizeof(t_Open9xSafetySwData)); }
- t_Open9xSafetySwData(SafetySwData&);
-
}) Open9xSafetySwData;
PACK(typedef struct t_Open9xFuncSwData_v201 { // Function Switches data
@@ -276,8 +253,6 @@ PACK(typedef struct t_Open9xFuncSwData_v201 { // Function Switches data
operator FuncSwData();
t_Open9xFuncSwData_v201() { memset(this, 0, sizeof(t_Open9xFuncSwData_v201)); }
- t_Open9xFuncSwData_v201(FuncSwData&);
-
}) Open9xFuncSwData_v201;
PACK(typedef struct t_Open9xFuncSwData_v203 { // Function Switches data
@@ -287,8 +262,6 @@ PACK(typedef struct t_Open9xFuncSwData_v203 { // Function Switches data
operator FuncSwData();
t_Open9xFuncSwData_v203() { memset(this, 0, sizeof(t_Open9xFuncSwData_v203)); }
- t_Open9xFuncSwData_v203(FuncSwData&);
-
}) Open9xFuncSwData_v203;
PACK(typedef struct t_Open9xFuncSwData_v210 { // Function Switches data
@@ -299,8 +272,6 @@ PACK(typedef struct t_Open9xFuncSwData_v210 { // Function Switches data
operator FuncSwData();
t_Open9xFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xFuncSwData_v210)); }
- t_Open9xFuncSwData_v210(FuncSwData&);
-
}) Open9xFuncSwData_v210;
PACK(typedef struct t_Open9xFrSkyChannelData_v201 {
@@ -316,8 +287,6 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v201 {
operator FrSkyChannelData();
t_Open9xFrSkyChannelData_v201() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v201)); }
- t_Open9xFrSkyChannelData_v201(FrSkyChannelData&);
-
}) Open9xFrSkyChannelData_v201;
PACK(typedef struct t_Open9xFrSkyChannelData_v203 {
@@ -333,8 +302,6 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v203 {
operator FrSkyChannelData();
t_Open9xFrSkyChannelData_v203() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v203)); }
- t_Open9xFrSkyChannelData_v203(FrSkyChannelData&);
-
}) Open9xFrSkyChannelData_v203;
PACK(typedef struct t_Open9xFrSkyChannelData_v204 {
@@ -348,8 +315,6 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v204 {
operator FrSkyChannelData();
t_Open9xFrSkyChannelData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v204)); }
- t_Open9xFrSkyChannelData_v204(FrSkyChannelData&);
-
}) Open9xFrSkyChannelData_v204;
PACK(typedef struct t_Open9xFrSkyChannelData_v208 {
@@ -363,37 +328,30 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v208 {
operator FrSkyChannelData();
t_Open9xFrSkyChannelData_v208() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v208)); }
- t_Open9xFrSkyChannelData_v208(FrSkyChannelData&);
-
}) Open9xFrSkyChannelData_v208;
PACK(typedef struct t_Open9xFrSkyData_v201 {
- Open9xFrSkyChannelData_v201 channels[2];
-
- operator FrSkyData();
- t_Open9xFrSkyData_v201() { memset(this, 0, sizeof(t_Open9xFrSkyData_v201)); }
+ Open9xFrSkyChannelData_v201 channels[2];
+ operator FrSkyData();
+ t_Open9xFrSkyData_v201() { memset(this, 0, sizeof(t_Open9xFrSkyData_v201)); }
}) Open9xFrSkyData_v201;
PACK(typedef struct t_Open9xFrSkyData_v202 {
- Open9xFrSkyChannelData_v201 channels[2];
- uint8_t usrProto:2; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh
- uint8_t spare:6;
-
- operator FrSkyData();
- t_Open9xFrSkyData_v202() { memset(this, 0, sizeof(t_Open9xFrSkyData_v202)); }
- t_Open9xFrSkyData_v202(FrSkyData&);
+ Open9xFrSkyChannelData_v201 channels[2];
+ uint8_t usrProto:2; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh
+ uint8_t spare:6;
+ operator FrSkyData();
+ t_Open9xFrSkyData_v202() { memset(this, 0, sizeof(t_Open9xFrSkyData_v202)); }
}) Open9xFrSkyData_v202;
PACK(typedef struct t_Open9xFrSkyData_v203 {
- Open9xFrSkyChannelData_v203 channels[2];
- uint8_t usrProto; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh
-
- operator FrSkyData();
- t_Open9xFrSkyData_v203() { memset(this, 0, sizeof(t_Open9xFrSkyData_v203)); }
- t_Open9xFrSkyData_v203(FrSkyData&);
+ Open9xFrSkyChannelData_v203 channels[2];
+ uint8_t usrProto; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh
+ operator FrSkyData();
+ t_Open9xFrSkyData_v203() { memset(this, 0, sizeof(t_Open9xFrSkyData_v203)); }
}) Open9xFrSkyData_v203;
PACK(typedef struct t_Open9xFrSkyBarData_v204 {
@@ -403,8 +361,6 @@ PACK(typedef struct t_Open9xFrSkyBarData_v204 {
operator FrSkyBarData();
t_Open9xFrSkyBarData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyBarData_v204)); }
- t_Open9xFrSkyBarData_v204(FrSkyBarData&);
-
}) Open9xFrSkyBarData_v204;
PACK(typedef struct t_Open9xFrSkyData_v204 {
@@ -417,7 +373,6 @@ PACK(typedef struct t_Open9xFrSkyData_v204 {
operator FrSkyData();
t_Open9xFrSkyData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyData_v204)); }
- t_Open9xFrSkyData_v204(FrSkyData&);
}) Open9xFrSkyData_v204;
PACK(typedef struct t_Open9xFrSkyData_v205 {
@@ -431,7 +386,6 @@ PACK(typedef struct t_Open9xFrSkyData_v205 {
operator FrSkyData();
t_Open9xFrSkyData_v205() { memset(this, 0, sizeof(t_Open9xFrSkyData_v205)); }
- t_Open9xFrSkyData_v205(FrSkyData&);
}) Open9xFrSkyData_v205;
PACK(typedef struct t_Open9xFrSkyData_v208 {
@@ -445,7 +399,6 @@ PACK(typedef struct t_Open9xFrSkyData_v208 {
operator FrSkyData();
t_Open9xFrSkyData_v208() { memset(this, 0, sizeof(t_Open9xFrSkyData_v208)); }
- t_Open9xFrSkyData_v208(FrSkyData&);
}) Open9xFrSkyData_v208;
PACK(typedef struct t_Open9xFrSkyData_v210 {
@@ -466,7 +419,6 @@ PACK(typedef struct t_Open9xFrSkyData_v210 {
operator FrSkyData();
t_Open9xFrSkyData_v210() { memset(this, 0, sizeof(t_Open9xFrSkyData_v210)); }
- t_Open9xFrSkyData_v210(FrSkyData&);
}) Open9xFrSkyData_v210;
PACK(typedef struct t_Open9xSwashRingData_v208 { // Swash Ring data
@@ -479,8 +431,6 @@ PACK(typedef struct t_Open9xSwashRingData_v208 { // Swash Ring data
operator SwashRingData();
t_Open9xSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xSwashRingData_v208)); }
- t_Open9xSwashRingData_v208(SwashRingData&);
-
}) Open9xSwashRingData_v208;
PACK(typedef struct t_Open9xSwashRingData_v209 { // Swash Ring data
@@ -493,8 +443,6 @@ PACK(typedef struct t_Open9xSwashRingData_v209 { // Swash Ring data
operator SwashRingData();
t_Open9xSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xSwashRingData_v209)); }
- t_Open9xSwashRingData_v209(SwashRingData&);
-
}) Open9xSwashRingData_v209;
PACK(typedef struct t_Open9xPhaseData_v201 {
@@ -507,7 +455,6 @@ PACK(typedef struct t_Open9xPhaseData_v201 {
operator PhaseData();
t_Open9xPhaseData_v201() { memset(this, 0, sizeof(t_Open9xPhaseData_v201)); }
- t_Open9xPhaseData_v201(PhaseData &eepe);
}) Open9xPhaseData_v201;
PACK(typedef struct t_Open9xTimerData_v201 {
@@ -526,7 +473,6 @@ PACK(typedef struct t_Open9xTimerData_v202 {
operator TimerData();
t_Open9xTimerData_v202() { memset(this, 0, sizeof(t_Open9xTimerData_v202)); }
- t_Open9xTimerData_v202(TimerData &eepe);
}) Open9xTimerData_v202;
PACK(typedef struct t_Open9xTimerDataExtra {
@@ -570,7 +516,7 @@ PACK(typedef struct t_Open9xModelData_v201 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xCustomSwData_v208 customSw[O9X_NUM_CSW];
+ Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
Open9xSafetySwData safetySw[O9X_NUM_CHNOUT];
Open9xFuncSwData_v201 funcSw[12];
Open9xSwashRingData_v208 swashR;
@@ -579,8 +525,6 @@ PACK(typedef struct t_Open9xModelData_v201 {
operator ModelData();
t_Open9xModelData_v201() { memset(this, 0, sizeof(t_Open9xModelData_v201)); }
- t_Open9xModelData_v201(ModelData&);
-
}) Open9xModelData_v201;
PACK(typedef struct t_Open9xModelData_v202 {
@@ -603,7 +547,7 @@ PACK(typedef struct t_Open9xModelData_v202 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xCustomSwData_v208 customSw[O9X_NUM_CSW];
+ Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
Open9xSafetySwData safetySw[O9X_NUM_CHNOUT];
Open9xFuncSwData_v201 funcSw[12];
Open9xSwashRingData_v208 swashR;
@@ -615,8 +559,6 @@ PACK(typedef struct t_Open9xModelData_v202 {
operator ModelData();
t_Open9xModelData_v202() { memset(this, 0, sizeof(t_Open9xModelData_v202)); }
- t_Open9xModelData_v202(ModelData&);
-
}) Open9xModelData_v202;
PACK(typedef struct t_Open9xModelData_v203 {
@@ -639,7 +581,7 @@ PACK(typedef struct t_Open9xModelData_v203 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xCustomSwData_v208 customSw[O9X_NUM_CSW];
+ Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
Open9xSwashRingData_v208 swashR;
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
@@ -650,8 +592,6 @@ PACK(typedef struct t_Open9xModelData_v203 {
operator ModelData();
t_Open9xModelData_v203() { memset(this, 0, sizeof(t_Open9xModelData_v203)); }
- t_Open9xModelData_v203(ModelData&);
-
}) Open9xModelData_v203;
PACK(typedef struct t_Open9xModelData_v204 {
@@ -674,7 +614,7 @@ PACK(typedef struct t_Open9xModelData_v204 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xCustomSwData_v208 customSw[O9X_NUM_CSW];
+ Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
Open9xSwashRingData_v208 swashR;
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
@@ -686,8 +626,6 @@ PACK(typedef struct t_Open9xModelData_v204 {
operator ModelData();
t_Open9xModelData_v204() { memset(this, 0, sizeof(t_Open9xModelData_v204)); }
- t_Open9xModelData_v204(ModelData&);
-
}) Open9xModelData_v204;
PACK(typedef struct t_Open9xModelData_v205 {
@@ -709,7 +647,7 @@ PACK(typedef struct t_Open9xModelData_v205 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xCustomSwData_v208 customSw[O9X_NUM_CSW];
+ Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
Open9xSwashRingData_v208 swashR;
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
@@ -723,8 +661,6 @@ PACK(typedef struct t_Open9xModelData_v205 {
operator ModelData();
t_Open9xModelData_v205() { memset(this, 0, sizeof(t_Open9xModelData_v205)); }
- t_Open9xModelData_v205(ModelData&);
-
}) Open9xModelData_v205;
PACK(typedef struct t_Open9xModelData_v208 {
@@ -746,7 +682,7 @@ PACK(typedef struct t_Open9xModelData_v208 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xCustomSwData_v208 customSw[O9X_NUM_CSW];
+ Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
Open9xSwashRingData_v208 swashR;
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
@@ -764,8 +700,6 @@ PACK(typedef struct t_Open9xModelData_v208 {
operator ModelData();
t_Open9xModelData_v208() { memset(this, 0, sizeof(t_Open9xModelData_v208)); }
- t_Open9xModelData_v208(ModelData&);
-
}) Open9xModelData_v208;
PACK(typedef struct t_Open9xModelData_v209 {
@@ -787,7 +721,7 @@ PACK(typedef struct t_Open9xModelData_v209 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves5[O9X_209_MAX_CURVE5][5];
int8_t curves9[O9X_209_MAX_CURVE9][9];
- Open9xCustomSwData_v209 customSw[O9X_NUM_CSW];
+ Open9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
Open9xSwashRingData_v209 swashR;
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
@@ -806,8 +740,6 @@ PACK(typedef struct t_Open9xModelData_v209 {
operator ModelData();
t_Open9xModelData_v209() { memset(this, 0, sizeof(t_Open9xModelData_v209)); }
- t_Open9xModelData_v209(ModelData&);
-
}) Open9xModelData_v209;
PACK(typedef struct t_Open9xModelData_v210 {
@@ -829,7 +761,7 @@ PACK(typedef struct t_Open9xModelData_v210 {
Open9xExpoData_v201 expoData[O9X_MAX_EXPOS];
int8_t curves[O9X_MAX_CURVES];
int8_t points[O9X_NUM_POINTS];
- Open9xCustomSwData_v209 customSw[O9X_NUM_CSW];
+ Open9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
Open9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
Open9xSwashRingData_v209 swashR;
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
@@ -846,8 +778,6 @@ PACK(typedef struct t_Open9xModelData_v210 {
operator ModelData();
t_Open9xModelData_v210() { memset(this, 0, sizeof(t_Open9xModelData_v210)); }
- t_Open9xModelData_v210(ModelData&);
-
}) Open9xModelData_v210;
PACK(typedef struct t_Open9xModelData_v211 {
@@ -869,7 +799,7 @@ PACK(typedef struct t_Open9xModelData_v211 {
Open9xExpoData_v211 expoData[O9X_MAX_EXPOS];
int8_t curves[O9X_MAX_CURVES];
int8_t points[O9X_NUM_POINTS];
- Open9xCustomSwData_v209 customSw[O9X_NUM_CSW];
+ Open9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
Open9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
Open9xSwashRingData_v209 swashR;
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
@@ -884,8 +814,6 @@ PACK(typedef struct t_Open9xModelData_v211 {
operator ModelData();
t_Open9xModelData_v211() { memset(this, 0, sizeof(t_Open9xModelData_v211)); }
- t_Open9xModelData_v211(ModelData&);
-
}) Open9xModelData_v211;
#endif
diff --git a/companion/src/firmwares/opentx/open9xeeprom.cpp b/companion/src/firmwares/opentx/open9xeeprom.cpp
deleted file mode 100644
index 9601cb35a..000000000
--- a/companion/src/firmwares/opentx/open9xeeprom.cpp
+++ /dev/null
@@ -1,1944 +0,0 @@
-#include
-#include
-#include "helpers.h"
-#include "open9xeeprom.h"
-#include
-
-#define IS_DBLEEPROM(board, version) ((board==BOARD_GRUVIN9X || board==BOARD_M128) && version >= 213)
-// Macro used for Gruvin9x board and M128 board between versions 213 and 214 (when there were stack overflows!)
-#define IS_DBLRAM(board, version) ((board==BOARD_GRUVIN9X && version >= 213) || (board==BOARD_M128 && version >= 213 && version <= 214))
-
-#define HAS_PERSISTENT_TIMERS(board) (IS_ARM(board) || board == BOARD_GRUVIN9X)
-#define HAS_LARGE_LCD(board) IS_TARANIS(board)
-#define MAX_VIEWS(board) (HAS_LARGE_LCD(board) ? 2 : 256)
-#define MAX_POTS(board) (IS_TARANIS(board) ? 4 : 3)
-#define MAX_SWITCHES(board) (IS_TARANIS(board) ? 8 : 7)
-#define MAX_SWITCHES_POSITION(board) (IS_TARANIS(board) ? 22 : 9)
-#define MAX_ROTARY_ENCODERS(board) (board==BOARD_GRUVIN9X ? 2 : (board==BOARD_SKY9X ? 1 : 0))
-#define MAX_PHASES(board, version) (IS_ARM(board) ? 9 : (IS_DBLRAM(board, version) ? 6 : 5))
-#define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32)
-#define MAX_CHANNELS(board, version) (IS_ARM(board) ? 32 : 16)
-#define MAX_EXPOS(board, version) (IS_ARM(board) ? 32 : (IS_DBLRAM(board, version) ? 16 : 14))
-#define MAX_CUSTOM_SWITCHES(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 15 : 12))
-#define MAX_CUSTOM_FUNCTIONS(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 24 : 16))
-#define MAX_CURVES(board) (IS_ARM(board) ? O9X_ARM_MAX_CURVES : O9X_MAX_CURVES)
-
-#define IS_RELEASE_21_MARCH_2013(board, version) (version >= 214 || (!IS_ARM(board) && version >= 213))
-#define IS_RELEASE_23_MARCH_2013(board, version) (version >= 214 || (board==BOARD_STOCK && version >= 213))
-
-inline int switchIndex(int i, BoardEnum board, unsigned int version)
-{
- bool release21March2013 = IS_RELEASE_21_MARCH_2013(board, version);
- if (!IS_TARANIS(board) && release21March2013)
- return (i<=3 ? i+3 : (i<=6 ? i-3 : i));
- else
- return i;
-}
-
-class SwitchesConversionTable: public ConversionTable {
-
- public:
- SwitchesConversionTable(BoardEnum board, unsigned int version, unsigned long flags=0)
- {
- int val=0;
-
- addConversion(RawSwitch(SWITCH_TYPE_NONE), val++);
-
- for (int i=1; i<=MAX_SWITCHES_POSITION(board); i++) {
- int s = switchIndex(i, board, version);
- addConversion(RawSwitch(SWITCH_TYPE_SWITCH, -s), -val);
- addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val++);
- }
-
- for (int i=1; i<=MAX_CUSTOM_SWITCHES(board, version); i++) {
- addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, -i), -val);
- addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, i), val++);
- }
-
- addConversion(RawSwitch(SWITCH_TYPE_OFF), -val);
- addConversion(RawSwitch(SWITCH_TYPE_ON), val++);
-
- for (int i=1; i<=MAX_SWITCHES_POSITION(board); i++) {
- int s = switchIndex(i, board, version);
- addConversion(RawSwitch(SWITCH_TYPE_MOMENT_SWITCH, -s), -val);
- addConversion(RawSwitch(SWITCH_TYPE_MOMENT_SWITCH, s), val++);
- }
-
- for (int i=1; i<=MAX_CUSTOM_SWITCHES(board, version); i++) {
- addConversion(RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, -i), -val);
- addConversion(RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, i), val++);
- }
-
- addConversion(RawSwitch(SWITCH_TYPE_ONM, 1 ), -val);
- addConversion(RawSwitch(SWITCH_TYPE_ONM, 0 ), val++);
- addConversion(RawSwitch(SWITCH_TYPE_TRN, 0), val++);
- addConversion(RawSwitch(SWITCH_TYPE_TRN, 1), val++);
- addConversion(RawSwitch(SWITCH_TYPE_REA, 0), val++);
- addConversion(RawSwitch(SWITCH_TYPE_REA, 1), val++);
- }
-
- protected:
-
- void addConversion(const RawSwitch & sw, const int b)
- {
- ConversionTable::addConversion(sw.toValue(), b);
- }
-
- class Cache {
- public:
- Cache(BoardEnum board, unsigned int version, unsigned long flags, SwitchesConversionTable * table):
- board(board),
- version(version),
- flags(flags),
- table(table)
- {
- }
- BoardEnum board;
- unsigned int version;
- unsigned long flags;
- SwitchesConversionTable * table;
- };
-
- public:
-
- static SwitchesConversionTable * getInstance(BoardEnum board, unsigned int version, unsigned long flags=0)
- {
- static std::list internalCache;
-
- for (std::list::iterator it=internalCache.begin(); it!=internalCache.end(); it++) {
- Cache element = *it;
- if (element.board == board && element.version == version && element.flags == flags)
- return element.table;
- }
-
- Cache element(board, version, flags, new SwitchesConversionTable(board, version, flags));
- internalCache.push_back(element);
- return element.table;
- }
-};
-
-#define FLAG_NONONE 0x01
-#define FLAG_NOSWITCHES 0x02
-#define FLAG_NOTELEMETRY 0x04
-
-class SourcesConversionTable: public ConversionTable {
-
- public:
- SourcesConversionTable(BoardEnum board, unsigned int version, unsigned int variant, unsigned long flags=0)
- {
- bool release21March2013 = IS_RELEASE_21_MARCH_2013(board, version);
-
- int val=0;
-
- if (!(flags & FLAG_NONONE)) {
- addConversion(RawSource(SOURCE_TYPE_NONE), val++);
- }
-
- for (int i=0; i<4+MAX_POTS(board); i++)
- addConversion(RawSource(SOURCE_TYPE_STICK, i), val++);
-
- for (int i=0; i=4 && i<=6)
- addConversion(RawSource(SOURCE_TYPE_SWITCH, 0), val++);
- else
- addConversion(RawSource(SOURCE_TYPE_SWITCH, i), val++);
- }
- }
- for (int i=0; i internalCache;
-
- for (std::list::iterator it=internalCache.begin(); it!=internalCache.end(); it++) {
- Cache element = *it;
- if (element.board == board && element.version == version && element.variant == variant && element.flags == flags)
- return element.table;
- }
-
- Cache element(board, version, variant, flags, new SourcesConversionTable(board, version, variant, flags));
- internalCache.push_back(element);
- return element.table;
- }
-};
-
-class TimerModeConversionTable: public ConversionTable {
-
- public:
- TimerModeConversionTable(BoardEnum board, unsigned int version, unsigned long flags=0)
- {
- int val=0;
-
- addConversion(TMRMODE_OFF, val++);
- addConversion(TMRMODE_ABS, val++);
- addConversion(TMRMODE_THs, val++);
- addConversion(TMRMODE_THp, val++);
- addConversion(TMRMODE_THt, val++);
-
- int swCount = MAX_SWITCHES_POSITION(board) + MAX_CUSTOM_SWITCHES(board, version);
-
- for (int i=0; i > {
- public:
- TimerModeField(TimerMode & mode, BoardEnum board, unsigned int version, unsigned long flags=0):
- ConversionField< SignedField<8> >(_mode, &conversionTable, "TimerMode"),
- conversionTable(board, version, flags),
- mode(mode),
- _mode(0)
- {
- }
-
- virtual void beforeExport()
- {
- _mode = mode;
- ConversionField< SignedField<8> >::beforeExport();
- }
-
- virtual void afterImport()
- {
- ConversionField< SignedField<8> >::afterImport();
- mode = (TimerMode)_mode;
- }
-
- protected:
- TimerModeConversionTable conversionTable;
- TimerMode & mode;
- int _mode;
-};
-
-template
-class SwitchField: public ConversionField< SignedField > {
- public:
- SwitchField(RawSwitch & sw, BoardEnum board, unsigned int version, unsigned long flags=0):
- ConversionField< SignedField >(_switch, SwitchesConversionTable::getInstance(board, version, flags), "Switch"),
- sw(sw),
- _switch(0)
- {
- }
-
- virtual void beforeExport()
- {
- _switch = sw.toValue();
- ConversionField< SignedField >::beforeExport();
- }
-
- virtual void afterImport()
- {
- ConversionField< SignedField >::afterImport();
- sw = RawSwitch(_switch);
- }
-
- protected:
- RawSwitch & sw;
- int _switch;
-};
-
-template
-class SourceField: public ConversionField< UnsignedField > {
- public:
- SourceField(RawSource & source, BoardEnum board, unsigned int version, unsigned int variant, unsigned long flags=0):
- ConversionField< UnsignedField >(_source, SourcesConversionTable::getInstance(board, version, variant, flags), "Source"),
- source(source),
- _source(0)
- {
- }
-
- virtual void beforeExport()
- {
- _source = source.toValue();
- ConversionField< UnsignedField >::beforeExport();
- }
-
- virtual void afterImport()
- {
- ConversionField< UnsignedField >::afterImport();
- source = RawSource(_source);
- }
-
- protected:
- RawSource & source;
- unsigned int _source;
-};
-
-class HeliField: public StructField {
- public:
- HeliField(SwashRingData & heli, BoardEnum board, unsigned int version, unsigned int variant)
- {
- Append(new BoolField<1>(heli.invertELE));
- Append(new BoolField<1>(heli.invertAIL));
- Append(new BoolField<1>(heli.invertCOL));
- Append(new UnsignedField<5>(heli.type));
- Append(new SourceField<8>(heli.collectiveSource, board, version, variant));
- //, FLAG_NOSWITCHES)); Fix shift in collective
- Append(new UnsignedField<8>(heli.value));
- }
-};
-
-class PhaseField: public TransformedField {
- public:
- PhaseField(PhaseData & phase, int index, BoardEnum board, unsigned int version):
- TransformedField(internalField),
- internalField("Phase"),
- phase(phase),
- index(index),
- board(board),
- version(version),
- rotencCount(IS_ARM(board) ? 1 : (board == BOARD_GRUVIN9X ? 2 : 0))
- {
- if (board == BOARD_STOCK || (board==BOARD_M128 && version>=215)) {
- // On stock we use 10bits per trim
- for (int i=0; i(trimBase[i]));
- for (int i=0; i(trimExt[i]));
- }
- else {
- for (int i=0; i(trimBase[i]));
- }
-
- internalField.Append(new SwitchField<8>(phase.swtch, board, version));
- if (HAS_LARGE_LCD(board))
- internalField.Append(new ZCharField<10>(phase.name));
- else
- internalField.Append(new ZCharField<6>(phase.name));
-
- if (IS_ARM(board) && version >= 214) {
- internalField.Append(new UnsignedField<8>(phase.fadeIn));
- internalField.Append(new UnsignedField<8>(phase.fadeOut));
- }
- else {
- internalField.Append(new UnsignedField<4>(phase.fadeIn));
- internalField.Append(new UnsignedField<4>(phase.fadeOut));
- }
-
- for (int i=0; i(phase.rotaryEncoders[i]));
- }
-
- if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) {
- for (int i=0; i(phase.gvars[i]));
- }
- }
- }
-
- virtual void beforeExport()
- {
- for (int i=0; i= 0) {
- trim = 501 + phase.trimRef[i] - (phase.trimRef[i] >= index ? 1 : 0);
- }
- else {
- trim = std::max(-500, std::min(500, phase.trim[i]));
- }
- if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) {
- trimBase[i] = trim >> 2;
- trimExt[i] = (trim & 0x03);
- }
- else {
- trimBase[i] = trim;
- }
- }
- }
-
- virtual void afterImport()
- {
- for (int i=0; i= 215))
- trim = ((trimBase[i]) << 2) + (trimExt[i] & 0x03);
- else
- trim = trimBase[i];
- if (trim > 500) {
- phase.trimRef[i] = trim - 501;
- if (phase.trimRef[i] >= index)
- phase.trimRef[i] += 1;
- phase.trim[i] = 0;
- }
- else {
- phase.trim[i] = trim;
- }
-
- }
- }
-
- protected:
- StructField internalField;
- PhaseData & phase;
- int index;
- BoardEnum board;
- unsigned int version;
- int rotencCount;
- int trimBase[NUM_STICKS];
- int trimExt[NUM_STICKS];
-};
-
-
-int smallGvarToEEPROM(int gvar)
-{
- if (gvar < -10000) {
- gvar = 128 + gvar + 10000;
- }
- else if (gvar > 10000) {
- gvar = -128 +gvar - 10001;
- }
- return gvar;
-}
-
-int smallGvarToC9x(int gvar)
-{
- if (gvar>110) {
- gvar = gvar-128 - 10000;
- }
- else if (gvar<-110) {
- gvar = gvar+128 + 10001;
- }
- return gvar;
-}
-
-
-void splitGvarParam(const int gvar, int & _gvar, unsigned int & _gvarParam, const BoardEnum board, const int version)
-{
- if (version >= 214 || (!IS_ARM(board) && version >= 213)) {
- if (gvar < -10000) {
- _gvarParam = 0;
- _gvar = 256 + gvar + 10000;
- }
- else if (gvar > 10000) {
- _gvarParam = 1;
- _gvar = gvar - 10001;
- }
- else {
- if (gvar < 0) _gvarParam = 1;
- else _gvarParam = 0;
- _gvar = gvar; // save routine throws away all unused bits; therefore no 2er complement compensation needed here
- }
- }
- else {
- if (gvar < -10000) {
- _gvarParam = 1;
- _gvar = gvar + 10000;
- }
- else if (gvar > 10000) {
- _gvarParam = 1;
- _gvar = gvar - 10001;
- }
- else {
- _gvarParam = 0;
- _gvar = gvar;
- }
- }
-}
-
-void concatGvarParam(int & gvar, const int _gvar, const unsigned int _gvarParam, const BoardEnum board, const int version)
-{
- if (version >= 214 || (!IS_ARM(board) && version >= 213)) {
- gvar = _gvar;
- if (gvar<0) gvar+=256; // remove 2er complement, because 8bit part is in this case unsigned
- if (_gvarParam) { // here is the real sign bit
- gvar|=-256; // set all higher bits to simulate negative value
- }
-
- if (gvar>245) {
- gvar = gvar-256 - 10000;
- } else if (gvar<-245) {
- gvar = gvar+256 + 10001;
- }
- }
- else {
- if (_gvarParam == 0) {
- gvar = _gvar;
- }
- else if (_gvar >= 0) {
- gvar = 10001 + _gvar;
- }
- else {
- gvar = -10000 + _gvar;
- }
- }
-}
-
-void exportGvarParam(const int gvar, int & _gvar)
-{
- if (gvar < -10000) {
- _gvar = 512 + gvar + 10000;
- }
- else if (gvar > 10000) {
- _gvar = 512 + gvar - 10001;
- }
- else {
- _gvar = gvar;
- }
-}
-
-void importGvarParam(int & gvar, const int _gvar)
-{
- if (_gvar >= 512) {
- gvar = 10001 + _gvar - 512;
- }
- else if (_gvar >= 512-5) {
- gvar = -10000 + _gvar - 512;
- }
- else if (_gvar < -512) {
- gvar = -10000 + _gvar + 513;
- }
- else if (_gvar < -512+5) {
- gvar = 10000 + _gvar + 513;
- }
- else {
- gvar = _gvar;
- }
-
- // qDebug() << QString("import") << _gvar << gvar;
-}
-
-class MixField: public TransformedField {
- public:
- MixField(MixData & mix, BoardEnum board, unsigned int version):
- TransformedField(internalField),
- internalField("Mix"),
- mix(mix),
- board(board),
- version(version)
- {
- if (IS_ARM(board)) {
- internalField.Append(new UnsignedField<8>(_destCh));
- internalField.Append(new UnsignedField<16>(mix.phases));
- internalField.Append(new BoolField<1>(_curveMode));
- internalField.Append(new BoolField<1>(mix.noExpo));
- internalField.Append(new SignedField<3>(mix.carryTrim));
- internalField.Append(new UnsignedField<2>((unsigned int &)mix.mltpx));
- if (version >= 214)
- internalField.Append(new SpareBitsField<1>());
- else
- internalField.Append(new UnsignedField<1>(_offsetMode));
- internalField.Append(new SignedField<16>(_weight));
- internalField.Append(new SwitchField<8>(mix.swtch, board, version));
- internalField.Append(new SignedField<8>(_curveParam));
- if (version >= 214) {
- internalField.Append(new UnsignedField<4>(mix.mixWarn));
- internalField.Append(new UnsignedField<4>(mix.srcVariant));
- }
- else {
- internalField.Append(new UnsignedField<8>(mix.mixWarn));
- }
- internalField.Append(new UnsignedField<8>(mix.delayUp));
- internalField.Append(new UnsignedField<8>(mix.delayDown));
- internalField.Append(new UnsignedField<8>(mix.speedUp));
- internalField.Append(new UnsignedField<8>(mix.speedDown));
- internalField.Append(new SourceField<8>(mix.srcRaw, board, version, FLAG_NOTELEMETRY));
- if (version >= 214)
- internalField.Append(new SignedField<16>(_offset));
- else
- internalField.Append(new SignedField<8>(_offset));
- if (HAS_LARGE_LCD(board)) {
- internalField.Append(new ZCharField<8>(mix.name));
- internalField.Append(new SpareBitsField<16>());
- }
- else {
- internalField.Append(new ZCharField<6>(mix.name));
- }
- }
- else if (IS_DBLRAM(board, version) && IS_RELEASE_23_MARCH_2013(board, version)) {
- internalField.Append(new UnsignedField<4>(_destCh));
- internalField.Append(new BoolField<1>(_curveMode));
- internalField.Append(new BoolField<1>(mix.noExpo));
- internalField.Append(new UnsignedField<1>(_weightMode));
- internalField.Append(new UnsignedField<1>(_offsetMode));
- internalField.Append(new SourceField<8>(mix.srcRaw, board, version, FLAG_NOTELEMETRY));
- internalField.Append(new SignedField<8>(_weight));
- internalField.Append(new SwitchField<8>(mix.swtch, board, version));
- internalField.Append(new UnsignedField<8>(mix.phases));
- internalField.Append(new UnsignedField<2>((unsigned int &)mix.mltpx));
- internalField.Append(new SignedField<3>(mix.carryTrim));
- internalField.Append(new UnsignedField<2>(mix.mixWarn));
- internalField.Append(new SpareBitsField<1>());
- internalField.Append(new UnsignedField<4>(mix.delayUp));
- internalField.Append(new UnsignedField<4>(mix.delayDown));
- internalField.Append(new UnsignedField<4>(mix.speedUp));
- internalField.Append(new UnsignedField<4>(mix.speedDown));
- internalField.Append(new SignedField<8>(_curveParam));
- internalField.Append(new SignedField<8>(_offset));
- }
- else {
- internalField.Append(new UnsignedField<4>(_destCh));
- internalField.Append(new BoolField<1>(_curveMode));
- internalField.Append(new BoolField<1>(mix.noExpo));
- internalField.Append(new UnsignedField<1>(_weightMode));
- internalField.Append(new UnsignedField<1>(_offsetMode));
- internalField.Append(new SignedField<8>(_weight));
- internalField.Append(new SwitchField<6>(mix.swtch, board, version));
- internalField.Append(new UnsignedField<2>((unsigned int &)mix.mltpx));
- internalField.Append(new UnsignedField<5>(mix.phases));
- internalField.Append(new SignedField<3>(mix.carryTrim));
- internalField.Append(new SourceField<6>(mix.srcRaw, board, version, FLAG_NOTELEMETRY));
- internalField.Append(new UnsignedField<2>(mix.mixWarn));
- internalField.Append(new UnsignedField<4>(mix.delayUp));
- internalField.Append(new UnsignedField<4>(mix.delayDown));
- internalField.Append(new UnsignedField<4>(mix.speedUp));
- internalField.Append(new UnsignedField<4>(mix.speedDown));
- internalField.Append(new SignedField<8>(_curveParam));
- internalField.Append(new SignedField<8>(_offset));
- }
- }
-
- virtual void beforeExport()
- {
- if (mix.destCh && mix.srcRaw.type != SOURCE_TYPE_NONE) {
- _destCh = mix.destCh - 1;
- _curveMode = mix.curve;
- _curveParam = (mix.curve ? mix.curve : smallGvarToEEPROM(mix.differential));
- }
- else {
- mix.clear();
- _destCh = 0;
- _curveMode = 0;
- _curveParam = 0;
- }
-
- if (IS_ARM(board)) {
- exportGvarParam(mix.weight, _weight);
- if (version >= 214)
- exportGvarParam(mix.sOffset, _offset);
- else
- splitGvarParam(mix.sOffset, _offset, _offsetMode, board, version);
- }
- else {
- splitGvarParam(mix.weight, _weight, _weightMode, board, version);
- splitGvarParam(mix.sOffset, _offset, _offsetMode, board, version);
- }
- }
-
- virtual void afterImport()
- {
- if (mix.srcRaw.type != SOURCE_TYPE_NONE) {
- mix.destCh = _destCh + 1;
- mix.curve = 0;
- mix.differential = 0;
- if (_curveMode)
- mix.curve = _curveParam;
- else
- mix.differential = smallGvarToC9x(_curveParam);
- }
-
- if (IS_ARM(board)) {
- importGvarParam(mix.weight, _weight);
- if (version >= 214)
- importGvarParam(mix.sOffset, _offset);
- else
- concatGvarParam(mix.sOffset, _offset, _offsetMode, board, version);
- }
- else {
- concatGvarParam(mix.weight, _weight, _weightMode, board, version);
- concatGvarParam(mix.sOffset, _offset, _offsetMode, board, version);
- }
- }
-
- protected:
- StructField internalField;
- MixData & mix;
- BoardEnum board;
- unsigned int version;
- unsigned int _destCh;
- bool _curveMode;
- int _curveParam;
- int _weight;
- int _offset;
- unsigned int _weightMode;
- unsigned int _offsetMode;
-};
-
-class ExpoField: public TransformedField {
- public:
- ExpoField(ExpoData & expo, BoardEnum board, unsigned int version):
- TransformedField(internalField),
- internalField("Expo"),
- expo(expo),
- board(board)
- {
- if (IS_ARM(board)) {
- internalField.Append(new UnsignedField<8>(expo.mode));
- internalField.Append(new UnsignedField<8>(expo.chn));
- internalField.Append(new SwitchField<8>(expo.swtch, board, version));
- internalField.Append(new UnsignedField<16>(expo.phases));
- internalField.Append(new SignedField<8>(_weight));
- internalField.Append(new BoolField<8>(_curveMode));
- if (HAS_LARGE_LCD(board)) {
- internalField.Append(new ZCharField<8>(expo.name));
- internalField.Append(new SpareBitsField<16>());
- }
- else {
- internalField.Append(new ZCharField<6>(expo.name));
- }
- internalField.Append(new SignedField<8>(_curveParam));
- }
- else if (IS_DBLRAM(board, version) && IS_RELEASE_23_MARCH_2013(board, version)) {
- internalField.Append(new UnsignedField<2>(expo.mode));
- internalField.Append(new UnsignedField<2>(expo.chn));
- internalField.Append(new BoolField<1>(_curveMode));
- internalField.Append(new SpareBitsField<3>());
- internalField.Append(new UnsignedField<8>(expo.phases));
- internalField.Append(new SwitchField<8>(expo.swtch, board, version));
- internalField.Append(new SignedField<8>(_weight));
- internalField.Append(new SignedField<8>(_curveParam));
- }
- else {
- internalField.Append(new UnsignedField<2>(expo.mode));
- internalField.Append(new SwitchField<6>(expo.swtch, board, version));
- internalField.Append(new UnsignedField<2>(expo.chn));
- internalField.Append(new UnsignedField<5>(expo.phases));
- internalField.Append(new BoolField<1>(_curveMode));
- internalField.Append(new SignedField<8>(_weight));
- internalField.Append(new SignedField<8>(_curveParam));
- }
- }
-
- virtual void beforeExport()
- {
- _curveMode = (expo.curveMode && expo.curveParam);
- _weight = smallGvarToEEPROM(expo.weight);
- _curveParam = smallGvarToEEPROM(expo.curveParam);
- }
-
- virtual void afterImport()
- {
- expo.curveMode = _curveMode;
- expo.weight = smallGvarToC9x(_weight);
- expo.curveParam = smallGvarToC9x(_curveParam);
- }
-
- protected:
- StructField internalField;
- ExpoData & expo;
- BoardEnum board;
- bool _curveMode;
- int _weight;
- int _curveParam;
-};
-
-class LimitField: public StructField {
- public:
- LimitField(LimitData & limit, BoardEnum board):
- StructField("Limit")
- {
- Append(new ConversionField< SignedField<8> >(limit.min, +100));
- Append(new ConversionField< SignedField<8> >(limit.max, -100));
- Append(new SignedField<8>(limit.ppmCenter));
- Append(new SignedField<14>(limit.offset));
- Append(new BoolField<1>(limit.symetrical));
- Append(new BoolField<1>(limit.revert));
- if (HAS_LARGE_LCD(board))
- Append(new ZCharField<6>(limit.name));
- }
-};
-
-class CurvesField: public TransformedField {
- public:
- CurvesField(CurveData * curves, BoardEnum board):
- TransformedField(internalField),
- internalField("Curves"),
- curves(curves),
- board(board),
- maxCurves(MAX_CURVES(board)),
- maxPoints(IS_ARM(board) ? O9X_ARM_NUM_POINTS : O9X_NUM_POINTS)
- {
- for (int i=0; i(_curves[i]));
- else
- internalField.Append(new SignedField<8>(_curves[i]));
- }
- for (int i=0; i(_points[i]));
- }
- }
-
- virtual void beforeExport()
- {
- memset(_points, 0, sizeof(_points));
-
- int * cur = &_points[0];
- int offset = 0;
- for (int i=0; icustom ? curve->count * 2 - 2 : curve->count) - 5;
- if (offset > maxPoints - 5 * maxCurves) {
- EEPROMWarnings += ::QObject::tr("openTx only accepts %1 points in all curves").arg(maxPoints) + "\n";
- break;
- }
- _curves[i] = offset;
- for (int j=0; jcount; j++) {
- *cur++ = curve->points[j].y;
- }
- if (curve->custom) {
- for (int j=1; jcount-1; j++) {
- *cur++ = curve->points[j].x;
- }
- }
- }
- }
-
- virtual void afterImport()
- {
- for (int i=0; icount = (size / 2) + 1;
- curve->custom = true;
- }
- else {
- curve->count = size;
- curve->custom = false;
- }
- for (int j=0; jcount; j++)
- curve->points[j].y = cur[j];
- if (curve->custom) {
- curve->points[0].x = -100;
- for (int j=1; jcount-1; j++)
- curve->points[j].x = cur[curve->count+j-1];
- curve->points[curve->count-1].x = +100;
- }
- else {
- for (int j=0; jcount; j++)
- curve->points[j].x = -100 + (200*i) / (curve->count-1);
- }
- }
- }
-
- protected:
- StructField internalField;
- CurveData *curves;
- BoardEnum board;
- int maxCurves;
- int maxPoints;
- int _curves[O9X_ARM_MAX_CURVES];
- int _points[O9X_ARM_NUM_POINTS];
-};
-
-class CustomSwitchesFunctionsTable: public ConversionTable {
-
- public:
- CustomSwitchesFunctionsTable(BoardEnum board, unsigned int version)
- {
- int val=0;
- bool release21March2013 = IS_RELEASE_21_MARCH_2013(board, version);
- addConversion(CS_FN_OFF, val++);
- if (release21March2013)
- addConversion(CS_FN_VEQUAL, val++);
- addConversion(CS_FN_VPOS, val++);
- addConversion(CS_FN_VNEG, val++);
- addConversion(CS_FN_APOS, val++);
- addConversion(CS_FN_ANEG, val++);
- addConversion(CS_FN_AND, val++);
- addConversion(CS_FN_OR, val++);
- addConversion(CS_FN_XOR, val++);
- addConversion(CS_FN_EQUAL, val++);
- if (!release21March2013)
- addConversion(CS_FN_NEQUAL, val++);
- addConversion(CS_FN_GREATER, val++);
- addConversion(CS_FN_LESS, val++);
- if (!release21March2013) {
- addConversion(CS_FN_EGREATER, val++);
- addConversion(CS_FN_ELESS, val++);
- }
- addConversion(CS_FN_DPOS, val++);
- addConversion(CS_FN_DAPOS, val++);
- addConversion(CS_FN_TIM, val++);
- }
-};
-
-class CustomSwitchesAndSwitchesConversionTable: public ConversionTable {
-
- public:
- CustomSwitchesAndSwitchesConversionTable(BoardEnum board, unsigned int version)
- {
- int val=0;
- addConversion(RawSwitch(SWITCH_TYPE_NONE), val++);
-
- if (IS_TARANIS(board)) {
- for (int i=1; i<=MAX_SWITCHES_POSITION(board); i++) {
- int s = switchIndex(i, board, version);
- addConversion(RawSwitch(SWITCH_TYPE_SWITCH, -s), -val);
- addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val++);
- }
- for (int i=1; i<=MAX_CUSTOM_SWITCHES(board, version); i++) {
- addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, -i), -val);
- addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, i), val++);
- }
- }
- else if (board == BOARD_SKY9X) {
- for (int i=1; i<=8; i++) {
- int s = switchIndex(i, board, version);
- addConversion(RawSwitch(SWITCH_TYPE_SWITCH, -s), -val);
- addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val++);
- }
- for (int i=1; i<=MAX_CUSTOM_SWITCHES(board, version); i++) {
- addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, -i), -val);
- addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, i), val++);
- }
- }
- else {
- for (int i=1; i<=9; i++) {
- int s = switchIndex(i, board, version);
- addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val++);
- }
- for (int i=1; i<=7; i++) {
- addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, i), val++);
- }
- }
- }
-
- protected:
-
- void addConversion(const RawSwitch & sw, const int b)
- {
- ConversionTable::addConversion(sw.toValue(), b);
- }
-};
-
-class CustomSwitchField: public TransformedField {
- public:
- CustomSwitchField(CustomSwData & csw, BoardEnum board, unsigned int version, unsigned int variant):
- TransformedField(internalField),
- internalField("CustomSwitch"),
- csw(csw),
- board(board),
- version(version),
- variant(variant),
- functionsConversionTable(board, version),
- sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, (version >= 214 || (!IS_ARM(board) && version >= 213)) ? 0 : FLAG_NOSWITCHES)),
- switchesConversionTable(SwitchesConversionTable::getInstance(board, version)),
- andswitchesConversionTable(board, version)
- {
- if (IS_ARM(board) && version >= 215) {
- internalField.Append(new SignedField<16>(v1));
- internalField.Append(new SignedField<16>(v2));
- }
- else {
- internalField.Append(new SignedField<8>(v1));
- internalField.Append(new SignedField<8>(v2));
- }
-
- if (IS_ARM(board)) {
- internalField.Append(new ConversionField< UnsignedField<8> >(csw.func, &functionsConversionTable, "Function"));
- internalField.Append(new UnsignedField<8>(csw.delay));
- internalField.Append(new UnsignedField<8>(csw.duration));
- if (version >= 214) {
- internalField.Append(new ConversionField< SignedField<8> >((int &)csw.andsw, &andswitchesConversionTable, "AND switch"));
- }
- }
- else {
- if (version >= 213) {
- internalField.Append(new ConversionField< UnsignedField<4> >(csw.func, &functionsConversionTable, "Function"));
- internalField.Append(new ConversionField< UnsignedField<4> >(csw.andsw, &andswitchesConversionTable, "AND switch"));
- }
- else {
- internalField.Append(new ConversionField< UnsignedField<8> >(csw.func, &functionsConversionTable, "Function"));
- }
- }
- }
-
- virtual void beforeExport()
- {
- v1 = csw.val1;
- v2 = csw.val2;
-
- if ((csw.func >= CS_FN_VPOS && csw.func <= CS_FN_ANEG) || (csw.func >= CS_FN_EQUAL && csw.func!=CS_FN_TIM)) {
- sourcesConversionTable->exportValue(csw.val1, v1);
- }
-
- if (csw.func >= CS_FN_EQUAL && csw.func <= CS_FN_ELESS) {
- sourcesConversionTable->exportValue(csw.val2, v2);
- }
-
- if (csw.func >= CS_FN_AND && csw.func <= CS_FN_XOR) {
- switchesConversionTable->exportValue(csw.val1, v1);
- switchesConversionTable->exportValue(csw.val2, v2);
- }
- }
-
- virtual void afterImport()
- {
- csw.val1 = v1;
- csw.val2 = v2;
-
- if ((csw.func >= CS_FN_VPOS && csw.func <= CS_FN_ANEG) || (csw.func >= CS_FN_EQUAL && csw.func!=CS_FN_TIM)) {
- sourcesConversionTable->importValue(v1, csw.val1);
- }
-
- if (csw.func >= CS_FN_EQUAL && csw.func <= CS_FN_ELESS) {
- sourcesConversionTable->importValue(v2, csw.val2);
- }
-
- if (csw.func >= CS_FN_AND && csw.func <= CS_FN_XOR) {
- switchesConversionTable->importValue(v1, csw.val1);
- switchesConversionTable->importValue(v2, csw.val2);
- }
- }
-
- protected:
- StructField internalField;
- CustomSwData & csw;
- BoardEnum board;
- unsigned int version;
- unsigned int variant;
- CustomSwitchesFunctionsTable functionsConversionTable;
- SourcesConversionTable * sourcesConversionTable;
- SwitchesConversionTable * switchesConversionTable;
- CustomSwitchesAndSwitchesConversionTable andswitchesConversionTable;
- int v1;
- int v2;
-};
-
-class CustomFunctionsConversionTable: public ConversionTable {
-
- public:
- CustomFunctionsConversionTable(BoardEnum board, unsigned int version)
- {
- int val=0;
-
- if (IS_ARM(board) || version < 213) {
- for (int i=0; i<16; i++) {
- addConversion(val, val);
- val++;
- }
- }
- else {
- for (int i=0; i<16; i++) {
- addConversion(i, i / 4);
- }
- val+=4;
- }
- addConversion(FuncTrainer, val++);
- addConversion(FuncTrainerRUD, val++);
- addConversion(FuncTrainerELE, val++);
- addConversion(FuncTrainerTHR, val++);
- addConversion(FuncTrainerAIL, val++);
- addConversion(FuncInstantTrim, val++);
- addConversion(FuncPlaySound, val++);
- if (!IS_TARANIS(board))
- addConversion(FuncPlayHaptic, val++);
- addConversion(FuncReset, val++);
- addConversion(FuncVario, val++);
- addConversion(FuncPlayPrompt, val++);
- if (version >= 213 && !IS_ARM(board))
- addConversion(FuncPlayBoth, val++);
- addConversion(FuncPlayValue, val++);
- if (board == BOARD_GRUVIN9X || IS_ARM(board) )
- addConversion(FuncLogs, val++);
- if (IS_ARM(board))
- addConversion(FuncVolume, val++);
- addConversion(FuncBacklight, val++);
- if (IS_ARM(board)) {
- addConversion(FuncBackgroundMusic, val++);
- addConversion(FuncBackgroundMusicPause, val++);
- }
- for (int i=0; i<5; i++)
- addConversion(FuncAdjustGV1+i, val++);
- }
-};
-
-template
-class SwitchesWarningField: public TransformedField {
- public:
- SwitchesWarningField(unsigned int & sw, BoardEnum board, unsigned int version):
- TransformedField(internalField),
- internalField(_sw, "SwitchesWarning"),
- sw(sw),
- board(board),
- version(version)
- {
- }
-
- virtual void beforeExport()
- {
- bool release21March2013 = IS_RELEASE_21_MARCH_2013(board, version);
- if (release21March2013) {
- _sw = (sw & 0xC1) + ((sw & 0x30) >> 3) + ((sw & 0x0E) << 2);
- }
- else {
- _sw = sw;
- }
- }
-
- virtual void afterImport()
- {
- bool release21March2013 = IS_RELEASE_21_MARCH_2013(board, version);
- if (release21March2013) {
- sw = (_sw & 0xC1) + ((_sw & 0x38) >> 2) + ((_sw & 0x06) << 3);
- }
- else {
- sw = _sw;
- }
- }
-
- protected:
- UnsignedField internalField;
- unsigned int &sw;
- unsigned int _sw;
- BoardEnum board;
- unsigned int version;
-};
-
-class CustomFunctionField: public TransformedField {
- public:
- CustomFunctionField(FuncSwData & fn, BoardEnum board, unsigned int version, unsigned int variant):
- TransformedField(internalField),
- internalField("CustomFunction"),
- fn(fn),
- board(board),
- version(version),
- variant(variant),
- functionsConversionTable(board, version),
- sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE)),
- _param(0),
- _delay(0),
- _union_param(0)
- {
- memset(_arm_param, 0, sizeof(_arm_param));
-
- internalField.Append(new SwitchField<8>(fn.swtch, board, version));
- if (IS_ARM(board)) {
- internalField.Append(new ConversionField< UnsignedField<8> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function")));
- if (IS_TARANIS(board))
- internalField.Append(new CharField<10>(_arm_param));
- else
- internalField.Append(new CharField<6>(_arm_param));
- if (version >= 214) {
- internalField.Append(new UnsignedField<2>(_mode));
- internalField.Append(new UnsignedField<6>(_delay));
- }
- else {
- internalField.Append(new UnsignedField<8>(_delay));
- }
- if (version < 214)
- internalField.Append(new SpareBitsField<8>());
- }
- else {
- if (version >= 213) {
- internalField.Append(new UnsignedField<3>(_union_param));
- internalField.Append(new ConversionField< UnsignedField<5> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function")));
- }
- else {
- internalField.Append(new ConversionField< UnsignedField<7> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function")));
- internalField.Append(new BoolField<1>((bool &)fn.enabled));
- }
- internalField.Append(new UnsignedField<8>(_param));
- }
- }
-
- virtual void beforeExport()
- {
- if (IS_ARM(board)) {
- _mode = 0;
- if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue)
- _delay = fn.repeatParam / 5;
- else
- _delay = (fn.enabled ? 1 : 0);
- if (fn.func <= FuncInstantTrim) {
- *((uint32_t *)_arm_param) = fn.param;
- }
- else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) {
- memcpy(_arm_param, fn.paramarm, sizeof(_arm_param));
- }
- else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGV5) {
- unsigned int value;
- if (version >= 214) {
- _mode = fn.adjustMode;
- if (fn.adjustMode == 1)
- sourcesConversionTable->exportValue(fn.param, (int &)value);
- else if (fn.adjustMode == 2)
- value = RawSource(fn.param).index;
- else
- value = fn.param;
- }
- else {
- unsigned int value;
- sourcesConversionTable->exportValue(fn.param, (int &)value);
- }
- *((uint32_t *)_arm_param) = value;
- }
- else if (fn.func == FuncPlayValue || fn.func == FuncVolume) {
- unsigned int value;
- sourcesConversionTable->exportValue(fn.param, (int &)value);
- *((uint32_t *)_arm_param) = value;
- }
- else {
- *((uint32_t *)_arm_param) = fn.param;
- }
- }
- else {
- /* the default behavior */
- _param = fn.param;
- _union_param = (fn.enabled ? 1 : 0);
- if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGV5) {
- if (version >= 213) {
- _union_param += (fn.adjustMode << 1);
- if (fn.adjustMode == 1)
- sourcesConversionTable->exportValue(fn.param, (int &)_param);
- else if (fn.adjustMode == 2)
- _param = RawSource(fn.param).index;
- }
- else {
- sourcesConversionTable->exportValue(fn.param, (int &)_param);
- }
- }
- else if (fn.func == FuncPlayValue) {
- if (version >= 213) {
- _union_param = fn.repeatParam / 10;
- sourcesConversionTable->exportValue(fn.param, (int &)_param);
- }
- else {
- SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->exportValue(fn.param, (int &)_param);
- }
- }
- else if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayBoth) {
- if (version >= 213)
- _union_param = fn.repeatParam / 10;
- }
- else if (fn.func <= FuncSafetyCh16) {
- if (version >= 213)
- _union_param += ((fn.func % 4) << 1);
- }
- }
- }
-
- virtual void afterImport()
- {
- if (IS_ARM(board)) {
- if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue)
- fn.repeatParam = _delay * 5;
- else
- fn.enabled = (_delay & 0x01);
-
- unsigned int value = *((uint32_t *)_arm_param);
- if (fn.func <= FuncTrainer) {
- fn.param = (int)value;
- }
- else if (fn.func <= FuncInstantTrim) {
- fn.param = value;
- }
- else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) {
- memcpy(fn.paramarm, _arm_param, sizeof(fn.paramarm));
- }
- else if (fn.func == FuncVolume) {
- sourcesConversionTable->importValue(value, (int &)fn.param);
- }
- else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGV5) {
- if (version >= 214) {
- fn.adjustMode = _mode;
- if (fn.adjustMode == 1)
- sourcesConversionTable->importValue(value, (int &)fn.param);
- else if (fn.adjustMode == 2)
- fn.param = RawSource(SOURCE_TYPE_GVAR, value).toValue();
- else
- fn.param = value;
- }
- else {
- sourcesConversionTable->importValue(value, (int &)fn.param);
- }
- }
- else if (fn.func == FuncPlayValue) {
- if (version >= 213)
- sourcesConversionTable->importValue(value, (int &)fn.param);
- else
- SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->importValue(value, (int &)fn.param);
- }
- else {
- fn.param = value;
- }
- }
- else {
- fn.param = _param;
- if (version >= 213) {
- fn.enabled = (_union_param & 0x01);
- }
- if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGV5) {
- if (version >= 213) {
- fn.adjustMode = ((_union_param >> 1) & 0x03);
- if (fn.adjustMode == 1)
- sourcesConversionTable->importValue(_param, (int &)fn.param);
- else if (fn.adjustMode == 2)
- fn.param = RawSource(SOURCE_TYPE_GVAR, _param).toValue();
- }
- else {
- sourcesConversionTable->importValue(_param, (int &)fn.param);
- }
- }
- else if (fn.func == FuncPlayValue) {
- if (version >= 213) {
- fn.repeatParam = _union_param * 10;
- sourcesConversionTable->importValue(_param, (int &)fn.param);
- }
- else {
- SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->importValue(_param, (int &)fn.param);
- }
- }
- else if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayBoth) {
- if (version >= 213)
- fn.repeatParam = _union_param * 10;
- }
- else if (fn.func <= FuncSafetyCh16) {
- if (version >= 213) {
- fn.func = AssignFunc(((fn.func >> 2) << 2) + ((_union_param >> 1) & 0x03));
- }
- fn.param = (int8_t)fn.param;
- }
- }
- }
-
- protected:
- StructField internalField;
- FuncSwData & fn;
- BoardEnum board;
- unsigned int version;
- unsigned int variant;
- CustomFunctionsConversionTable functionsConversionTable;
- SourcesConversionTable * sourcesConversionTable;
- char _arm_param[10];
- unsigned int _param;
- unsigned int _delay;
- unsigned int _mode;
- unsigned int _union_param;
-};
-
-class FrskyScreenField: public DataField {
- public:
- FrskyScreenField(FrSkyScreenData & screen, BoardEnum board, unsigned int version):
- DataField("Frsky Screen"),
- screen(screen),
- board(board),
- version(version)
- {
- for (int i=0; i<4; i++) {
- bars.Append(new UnsignedField<8>(_screen.body.bars[i].source));
- bars.Append(new UnsignedField<8>(_screen.body.bars[i].barMin));
- bars.Append(new UnsignedField<8>(_screen.body.bars[i].barMax));
- }
-
- int columns=(IS_TARANIS(board) ? 3:2);
- for (int i=0; i<4; i++) {
- for (int j=0; j(_screen.body.lines[i].source[j]));
- }
- }
- if (!IS_TARANIS(board)) {
- for (int i=0; i<4; i++) {
- numbers.Append(new SpareBitsField<8>());
- }
- }
- }
-
- virtual void ExportBits(QBitArray & output)
- {
- _screen = screen;
-
- bool release21March2013 = IS_RELEASE_21_MARCH_2013(board, version);
- if (!release21March2013) {
- for (int i=0; i<4; i++) {
- if (_screen.body.bars[i].source > 0)
- _screen.body.bars[i].source--;
- }
- int columns=(IS_TARANIS(board) ? 3:2);
- for (int i=0; i<4; i++) {
- for (int j=0; j 0)
- _screen.body.lines[i].source[j]--;
- }
- }
- }
-
- if (screen.type == 0)
- numbers.ExportBits(output);
- else
- bars.ExportBits(output);
- }
-
- virtual void ImportBits(QBitArray & input)
- {
- _screen = screen;
-
- bool release21March2013 = IS_RELEASE_21_MARCH_2013(board, version);
-
- // NOTA: screen.type should have been imported first!
- if (screen.type == 0) {
- numbers.ImportBits(input);
- if (!release21March2013) {
- int columns=(IS_TARANIS(board) ? 3:2);
- for (int i=0; i<4; i++) {
- for (int j=0; j 0)
- _screen.body.lines[i].source[j]++;
- }
- }
- }
- }
- else {
- bars.ImportBits(input);
- if (!release21March2013) {
- for (int i=0; i<4; i++) {
- if (_screen.body.bars[i].source > 0)
- _screen.body.bars[i].source++;
- }
- }
- }
-
- screen = _screen;
- }
-
- virtual unsigned int size()
- {
- // NOTA: screen.type should have been imported first!
- if (screen.type == 0)
- return numbers.size();
- else
- return bars.size();
- }
-
- protected:
- FrSkyScreenData & screen;
- FrSkyScreenData _screen;
- BoardEnum board;
- unsigned int version;
- StructField bars;
- StructField numbers;
-};
-
-class RSSIConversionTable: public ConversionTable
-{
- public:
- RSSIConversionTable(int index)
- {
- addConversion(0, 2-index);
- addConversion(1, 3-index);
- addConversion(2, index ? 3 : 0);
- addConversion(3, 1-index);
- }
-
- RSSIConversionTable()
- {
- }
-};
-
-class VarioConversionTable: public ConversionTable
-{
- public:
- VarioConversionTable()
- {
- addConversion(2, 0); // Vario
- addConversion(3, 1); // A1
- addConversion(4, 2); // A2
- }
-};
-
-class FrskyField: public StructField {
- public:
- FrskyField(FrSkyData & frsky, BoardEnum board, unsigned int version):
- StructField("FrSky")
- {
- rssiConversionTable[0] = RSSIConversionTable(0);
- rssiConversionTable[1] = RSSIConversionTable(1);
-
- if (IS_ARM(board)) {
- for (int i=0; i<2; i++) {
- Append(new UnsignedField<8>(frsky.channels[i].ratio, "Ratio"));
- Append(new SignedField<12>(frsky.channels[i].offset, "Offset"));
- Append(new UnsignedField<4>(frsky.channels[i].type, "Type"));
- for (int j=0; j<2; j++)
- Append(new UnsignedField<8>(frsky.channels[i].alarms[j].value, "Alarm value"));
- for (int j=0; j<2; j++)
- Append(new UnsignedField<2>(frsky.channels[i].alarms[j].level));
- for (int j=0; j<2; j++)
- Append(new UnsignedField<1>(frsky.channels[i].alarms[j].greater));
- Append(new SpareBitsField<2>());
- Append(new UnsignedField<8>(frsky.channels[i].multiplier, 0, 5, "Multiplier"));
- }
- Append(new UnsignedField<8>(frsky.usrProto));
- Append(new UnsignedField<8>(frsky.voltsSource));
- Append(new UnsignedField<8>(frsky.blades));
- Append(new UnsignedField<8>(frsky.currentSource));
-
- Append(new UnsignedField<1>(frsky.screens[0].type));
- Append(new UnsignedField<1>(frsky.screens[1].type));
- Append(new UnsignedField<1>(frsky.screens[2].type));
- Append(new SpareBitsField<5>());
-
- for (int i=0; i<3; i++) {
- Append(new FrskyScreenField(frsky.screens[i], board, version));
- }
- if (IS_TARANIS(board))
- Append(new ConversionField< UnsignedField<8> >(frsky.varioSource, &varioConversionTable, "Vario Source"));
- else
- Append(new UnsignedField<8>(frsky.varioSource));
- Append(new SignedField<8>(frsky.varioCenterMax));
- Append(new SignedField<8>(frsky.varioCenterMin));
- Append(new SignedField<8>(frsky.varioMin));
- Append(new SignedField<8>(frsky.varioMax));
- for (int i=0; i<2; i++) {
- Append(new ConversionField< UnsignedField<2> >(frsky.rssiAlarms[i].level, &rssiConversionTable[i], "RSSI"));
- Append(new ConversionField< SignedField<6> >(frsky.rssiAlarms[i].value, -45+i*3));
- }
- }
- else {
- for (int i=0; i<2; i++) {
- Append(new UnsignedField<8>(frsky.channels[i].ratio, "Ratio"));
- Append(new SignedField<12>(frsky.channels[i].offset, "Offset"));
- Append(new UnsignedField<4>(frsky.channels[i].type, "Type"));
- for (int j=0; j<2; j++)
- Append(new UnsignedField<8>(frsky.channels[i].alarms[j].value, "Alarm value"));
- for (int j=0; j<2; j++)
- Append(new UnsignedField<2>(frsky.channels[i].alarms[j].level));
- for (int j=0; j<2; j++)
- Append(new UnsignedField<1>(frsky.channels[i].alarms[j].greater));
- Append(new UnsignedField<2>(frsky.channels[i].multiplier, 0, 3, "Multiplier"));
- }
- Append(new UnsignedField<2>(frsky.usrProto));
- Append(new UnsignedField<2>(frsky.blades));
- Append(new UnsignedField<1>(frsky.screens[0].type));
- Append(new UnsignedField<1>(frsky.screens[1].type));
- Append(new UnsignedField<2>(frsky.voltsSource));
- Append(new SignedField<4>(frsky.varioMin));
- Append(new SignedField<4>(frsky.varioMax));
- for (int i=0; i<2; i++) {
- Append(new ConversionField< UnsignedField<2> >(frsky.rssiAlarms[i].level, &rssiConversionTable[i], "RSSI level"));
- Append(new ConversionField< SignedField<6> >(frsky.rssiAlarms[i].value, -45+i*3, 0, 100, "RSSI value"));
- }
- for (int i=0; i<2; i++) {
- Append(new FrskyScreenField(frsky.screens[i], board, version));
- }
- Append(new UnsignedField<3>(frsky.varioSource));
- Append(new SignedField<5>(frsky.varioCenterMin));
- Append(new UnsignedField<3>(frsky.currentSource));
- Append(new SignedField<8>(frsky.varioCenterMax));
- }
- }
-
- protected:
- RSSIConversionTable rssiConversionTable[2];
- VarioConversionTable varioConversionTable;
-};
-
-class MavlinkField: public StructField {
- public:
- MavlinkField(MavlinkData & mavlink, BoardEnum board, unsigned int version):
- StructField("MavLink")
- {
- Append(new UnsignedField<4>(mavlink.rc_rssi_scale, "Rc_rssi_scale"));
- Append(new UnsignedField<1>(mavlink.pc_rssi_en, "Pc_rssi_en"));
- Append(new SpareBitsField<3>());
- Append(new SpareBitsField<8>());
- Append(new SpareBitsField<8>());
- Append(new SpareBitsField<8>());
- }
-};
-
-int exportPpmDelay(int delay) { return (delay - 300) / 50; }
-int importPpmDelay(int delay) { return 300 + 50 * delay; }
-
-Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, unsigned int version, unsigned int variant):
- TransformedField(internalField),
- internalField("ModelData"),
- modelData(modelData),
- board(board),
- variant(variant),
- protocolsConversionTable(board)
-{
- sprintf(name, "Model %s", modelData.name);
-
- if (HAS_LARGE_LCD(board))
- internalField.Append(new ZCharField<12>(modelData.name));
- else
- internalField.Append(new ZCharField<10>(modelData.name));
-
- bool release21March2013 = IS_RELEASE_21_MARCH_2013(board, version);
-
- if (release21March2013)
- internalField.Append(new UnsignedField<8>(modelData.modelId));
-
- if (IS_TARANIS(board) && version >= 215) {
- internalField.Append(new CharField<10>(modelData.bitmap));
- }
-
- for (int i=0; i(modelData.timers[i].val));
-
- internalField.Append(new BoolField<1>(modelData.timers[i].countdownBeep));
- internalField.Append(new BoolField<1>(modelData.timers[i].minuteBeep));
- if (HAS_PERSISTENT_TIMERS(board)) {
- internalField.Append(new BoolField<1>(modelData.timers[i].persistent));
- internalField.Append(new SpareBitsField<1>());
- internalField.Append(new SignedField<16>(modelData.timers[i].pvalue));
- }
- else {
- internalField.Append(new SpareBitsField<2>());
- }
- }
- else {
- internalField.Append(new UnsignedField<16>(modelData.timers[i].val));
- if (HAS_PERSISTENT_TIMERS(board)) {
- internalField.Append(new BoolField<1>(modelData.timers[i].persistent));
- internalField.Append(new SpareBitsField<15>());
- }
- }
- }
-
- if (IS_TARANIS(board))
- internalField.Append(new SpareBitsField<3>());
- else
- internalField.Append(new ConversionField< SignedField<3> >(modelData.moduleData[0].protocol, &protocolsConversionTable, "Protocol", ::QObject::tr("OpenTX doesn't accept this protocol")));
-
- internalField.Append(new BoolField<1>(modelData.thrTrim));
-
- if (IS_TARANIS(board))
- internalField.Append(new SpareBitsField<4>());
- else
- internalField.Append(new ConversionField< SignedField<4> >(modelData.moduleData[0].channelsCount, &channelsConversionTable, "Channels number", ::QObject::tr("OpenTX doesn't allow this number of channels")));
-
- internalField.Append(new UnsignedField<3>(modelData.trimInc));
- internalField.Append(new BoolField<1>(modelData.disableThrottleWarning));
-
- if (IS_TARANIS(board))
- internalField.Append(new SpareBitsField<1>());
- else
- internalField.Append(new BoolField<1>(modelData.moduleData[0].ppmPulsePol));
-
- internalField.Append(new BoolField<1>(modelData.extendedLimits));
- internalField.Append(new BoolField<1>(modelData.extendedTrims));
- internalField.Append(new BoolField<1>(modelData.throttleReversed));
- internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[0].ppmDelay, exportPpmDelay, importPpmDelay));
-
- if (IS_ARM(board) || board==BOARD_GRUVIN9X)
- internalField.Append(new UnsignedField<16>(modelData.beepANACenter));
- else
- internalField.Append(new UnsignedField<8>(modelData.beepANACenter));
-
- for (int i=0; i(modelData.moduleData[0].ppmFrameLength));
- internalField.Append(new UnsignedField<8>(modelData.thrTraceSrc));
-
- if (!release21March2013)
- internalField.Append(new UnsignedField<8>(modelData.modelId));
-
- if (IS_TARANIS(board))
- internalField.Append(new UnsignedField<16>(modelData.switchWarningStates));
- else
- internalField.Append(new SwitchesWarningField<8>(modelData.switchWarningStates, board, version));
-
- if ((board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) && (variant & GVARS_VARIANT)) {
- for (int i=0; i(modelData.phaseData[0].gvars[i]));
- }
- }
-
- if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) {
- for (int i=0; i(modelData.gvars_names[i]));
- }
- }
-
- if ((board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) || (variant & FRSKY_VARIANT)) {
- internalField.Append(new FrskyField(modelData.frsky, board, version));
- }
- else if ((board == BOARD_STOCK || board == BOARD_M128) && (variant & MAVLINK_VARIANT)) {
- internalField.Append(new MavlinkField(modelData.mavlink, board, version));
- }
-
- if (IS_TARANIS(board) && version < 215) {
- internalField.Append(new CharField<10>(modelData.bitmap));
- }
-
- int modulesCount = 2;
-
- if (IS_TARANIS(board)) {
- modulesCount = 3;
- internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[1].protocol, &protocolsConversionTable, "Protocol", ::QObject::tr("OpenTX doesn't accept this protocol")));
- internalField.Append(new UnsignedField<8>(modelData.trainerMode));
- }
-
- if (IS_ARM(board) && version >= 215) {
- for (int module=0; module(subprotocols[module]));
- internalField.Append(new UnsignedField<8>(modelData.moduleData[module].channelsStart));
- internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[module].channelsCount, -8));
- internalField.Append(new UnsignedField<8>(modelData.moduleData[module].failsafeMode));
- for (int i=0; i<32; i++)
- internalField.Append(new SignedField<16>(modelData.moduleData[module].failsafeChannels[i]));
- internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[module].ppmDelay, exportPpmDelay, importPpmDelay));
- internalField.Append(new SignedField<8>(modelData.moduleData[module].ppmFrameLength));
- internalField.Append(new BoolField<8>(modelData.moduleData[module].ppmPulsePol));
- }
- }
-
- if (IS_TARANIS(board)) {
- for (int i=0; i(modelData.curves[i].name));
- }
- }
-}
-
-void Open9xModelDataNew::beforeExport()
-{
- // qDebug() << QString("before export model") << modelData.name;
- for (int module=0; module<3; module++) {
- if (modelData.moduleData[module].protocol >= PXX_XJT_X16 && modelData.moduleData[module].protocol <= PXX_XJT_LR12)
- subprotocols[module] = modelData.moduleData[module].protocol - PXX_XJT_X16;
- else
- subprotocols[module] = (module==0 ? -1:0);
- }
-}
-
-void Open9xModelDataNew::afterImport()
-{
- // qDebug() << QString("after import model") << modelData.name;
-
- for (int module=0; module<3; module++) {
- if (modelData.moduleData[module].protocol == PXX_XJT_X16) {
- if (subprotocols[module]>=0)
- modelData.moduleData[module].protocol = PXX_XJT_X16 + subprotocols[module];
- else
- modelData.moduleData[module].protocol = OFF;
- }
- }
-}
-
-Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardEnum board, unsigned int version, unsigned int variant):
- TransformedField(internalField),
- internalField("General Settings"),
- generalData(generalData),
- board(board),
- inputsCount(IS_TARANIS(board) ? 8 : 7)
-{
- generalData.version = version;
- generalData.variant = variant;
-
- internalField.Append(new UnsignedField<8>(generalData.version));
- if (version >= 213 || (!IS_ARM(board) && version >= 212))
- internalField.Append(new UnsignedField<16>(generalData.variant));
-
- for (int i=0; i(generalData.calibMid[i]));
- for (int i=0; i(generalData.calibSpanNeg[i]));
- for (int i=0; i(generalData.calibSpanPos[i]));
-
- internalField.Append(new UnsignedField<16>(chkSum));
- internalField.Append(new UnsignedField<8>(generalData.currModel));
- internalField.Append(new UnsignedField<8>(generalData.contrast));
- internalField.Append(new UnsignedField<8>(generalData.vBatWarn));
- internalField.Append(new SignedField<8>(generalData.vBatCalib));
- internalField.Append(new SignedField<8>(generalData.backlightMode));
-
- for (int i=0; i(generalData.trainer.calib[i]));
- for (int i=0; i(generalData.trainer.mix[i].src));
- internalField.Append(new UnsignedField<2>(generalData.trainer.mix[i].mode));
- internalField.Append(new SignedField<8>(generalData.trainer.mix[i].weight));
- }
-
- internalField.Append(new UnsignedField<8>(generalData.view, 0, MAX_VIEWS(board)-1));
-
- internalField.Append(new SpareBitsField<2>());
- internalField.Append(new BoolField<1>(generalData.fai));
- internalField.Append(new SignedField<2>((int &)generalData.beeperMode));
- internalField.Append(new BoolField<1>(generalData.flashBeep));
- internalField.Append(new BoolField<1>(generalData.disableMemoryWarning));
- internalField.Append(new BoolField<1>(generalData.disableAlarmWarning));
-
- internalField.Append(new UnsignedField<2>(generalData.stickMode));
- internalField.Append(new SignedField<5>(generalData.timezone));
- internalField.Append(new SpareBitsField<1>());
-
- internalField.Append(new UnsignedField<8>(generalData.inactivityTimer));
- if (IS_STOCK(board) && version >= 215) {
- internalField.Append(new UnsignedField<3>(generalData.mavbaud));
- } else {
- internalField.Append(new BoolField<1>(generalData.throttleReversed));
- internalField.Append(new BoolField<1>(generalData.minuteBeep));
- internalField.Append(new BoolField<1>(generalData.preBeep));
- }
- if (version >= 213 || (!IS_ARM(board) && version >= 212))
- internalField.Append(new UnsignedField<3>(generalData.splashMode)); // TODO
- else
- internalField.Append(new SpareBitsField<3>());
- internalField.Append(new SignedField<2>((int &)generalData.hapticMode));
-
- internalField.Append(new SpareBitsField<8>());
- internalField.Append(new UnsignedField<8>(generalData.backlightDelay));
- internalField.Append(new UnsignedField<8>(generalData.templateSetup));
- internalField.Append(new SignedField<8>(generalData.PPM_Multiplier));
- internalField.Append(new SignedField<8>(generalData.hapticLength));
- internalField.Append(new UnsignedField<8>(generalData.reNavigation));
-
- internalField.Append(new SignedField<3>(generalData.beeperLength));
- internalField.Append(new UnsignedField<3>(generalData.hapticStrength));
- internalField.Append(new UnsignedField<1>(generalData.gpsFormat));
- internalField.Append(new SpareBitsField<1>()); // unexpectedShutdown
-
- internalField.Append(new UnsignedField<8>(generalData.speakerPitch));
-
- if (IS_ARM(board))
- internalField.Append(new ConversionField< SignedField<8> >(generalData.speakerVolume, -12, 0, 23, "Volume"));
- else
- internalField.Append(new ConversionField< SignedField<8> >(generalData.speakerVolume, -7, 0, 7, "Volume"));
-
- if (version >= 214 || (!IS_ARM(board) && version >= 213)) {
- internalField.Append(new SignedField<8>(generalData.vBatMin));
- internalField.Append(new SignedField<8>(generalData.vBatMax));
- }
-
- if (IS_ARM(board)) {
- internalField.Append(new UnsignedField<8>(generalData.backlightBright));
- internalField.Append(new SignedField<8>(generalData.currentCalib));
- if (version >= 213) {
- internalField.Append(new SignedField<8>(generalData.temperatureWarn)); // TODO
- internalField.Append(new UnsignedField<8>(generalData.mAhWarn));
- internalField.Append(new SpareBitsField<16>()); // mAhUsed
- internalField.Append(new SpareBitsField<32>()); // globalTimer
- internalField.Append(new SignedField<8>(generalData.temperatureCalib)); // TODO
- internalField.Append(new UnsignedField<8>(generalData.btBaudrate)); // TODO
- internalField.Append(new BoolField<8>(generalData.optrexDisplay)); //TODO
- internalField.Append(new UnsignedField<8>(generalData.sticksGain)); // TODO
- }
- if (version >= 214) {
- internalField.Append(new UnsignedField<8>(generalData.rotarySteps)); // TODO
- internalField.Append(new UnsignedField<8>(generalData.countryCode));
- internalField.Append(new UnsignedField<8>(generalData.imperial));
- }
- if (version >= 215) {
- internalField.Append(new CharField<2>(generalData.ttsLanguage));
- internalField.Append(new SignedField<8>(generalData.beepVolume));
- internalField.Append(new SignedField<8>(generalData.wavVolume));
- internalField.Append(new SignedField<8>(generalData.varioVolume));
- internalField.Append(new SignedField<8>(generalData.backgroundVolume));
- }
- }
-}
-
-void Open9xGeneralDataNew::beforeExport()
-{
- uint16_t sum = 0;
- for (int i=0; i(0, g_eeGeneral.stickMode, 3);
}
}
using namespace Open9xGruvin9x;
-Open9xGruvin9xSimulator::Open9xGruvin9xSimulator(Open9xInterface * open9xInterface):
+Open9xGruvin9xSimulator::Open9xGruvin9xSimulator(OpenTxInterface * open9xInterface):
open9xInterface(open9xInterface)
{
}
@@ -128,15 +129,23 @@ bool Open9xGruvin9xSimulator::lcdChanged(bool & lightEnable)
#include "simulatorimport.h"
}
-void Open9xGruvin9xSimulator::start(RadioData &radioData, bool tests)
+void Open9xGruvin9xSimulator::start(QByteArray & eeprom, bool tests)
{
g_rotenc[0] = 0;
g_rotenc[1] = 0;
- open9xInterface->save(&eeprom[0], radioData, SIMU_GRUVIN9X_VARIANTS);
+ memcpy(Open9xGruvin9x::eeprom, eeprom.data(), std::min(sizeof(Open9xGruvin9x::eeprom), eeprom.size()));
StartEepromThread(NULL);
StartMainThread(tests);
}
+void Open9xGruvin9xSimulator::start(const char * filename, bool tests)
+{
+ g_rotenc[0] = 0;
+ g_rotenc[1] = 0;
+ StartEepromThread(filename);
+ StartMainThread(tests);
+}
+
void Open9xGruvin9xSimulator::stop()
{
StopMainThread();
@@ -160,7 +169,7 @@ void Open9xGruvin9xSimulator::setValues(TxInputs &inputs)
void Open9xGruvin9xSimulator::setTrim(unsigned int idx, int value)
{
- idx = Open9xGruvin9x::modn12x3[4*getStickMode() + idx] - 1;
+ idx = Open9xGruvin9x::modn12x3[4*getStickMode() + idx];
uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx);
setTrimValue(phase, idx, value);
}
@@ -174,7 +183,7 @@ void Open9xGruvin9xSimulator::getTrims(Trims & trims)
}
for (int i=0; i<2; i++) {
- uint8_t idx = Open9xGruvin9x::modn12x3[4*getStickMode() + i] - 1;
+ uint8_t idx = Open9xGruvin9x::modn12x3[4*getStickMode() + i];
int16_t tmp = trims.values[i];
trims.values[i] = trims.values[idx];
trims.values[idx] = tmp;
diff --git a/companion/src/firmwares/opentx/open9xGruvin9xsimulator.h b/companion/src/firmwares/opentx/opentxGruvin9xsimulator.h
similarity index 83%
rename from companion/src/firmwares/opentx/open9xGruvin9xsimulator.h
rename to companion/src/firmwares/opentx/opentxGruvin9xsimulator.h
index 8216c7a04..6fb3e320a 100644
--- a/companion/src/firmwares/opentx/open9xGruvin9xsimulator.h
+++ b/companion/src/firmwares/opentx/opentxGruvin9xsimulator.h
@@ -20,15 +20,17 @@
#include "simulatorinterface.h"
class RadioData;
-class Open9xInterface;
+class OpenTxInterface;
class Open9xGruvin9xSimulator : public SimulatorInterface {
public:
- Open9xGruvin9xSimulator(Open9xInterface *);
+ Open9xGruvin9xSimulator(OpenTxInterface *);
- virtual void start(RadioData & radioData, bool tests);
+ virtual void start(QByteArray & eeprom, bool tests=true);
+
+ virtual void start(const char * filename, bool tests=true);
virtual void stop();
@@ -54,7 +56,7 @@ class Open9xGruvin9xSimulator : public SimulatorInterface {
protected:
- Open9xInterface * open9xInterface;
+ OpenTxInterface * open9xInterface;
};
#endif
diff --git a/companion/src/firmwares/opentx/open9xM128simulator.cpp b/companion/src/firmwares/opentx/opentxM128simulator.cpp
similarity index 85%
rename from companion/src/firmwares/opentx/open9xM128simulator.cpp
rename to companion/src/firmwares/opentx/opentxM128simulator.cpp
index a82b53b0c..14100e857 100644
--- a/companion/src/firmwares/opentx/open9xM128simulator.cpp
+++ b/companion/src/firmwares/opentx/opentxM128simulator.cpp
@@ -14,9 +14,9 @@
*
*/
-#include "open9xM128simulator.h"
-#include "open9xinterface.h"
-#include "open9xeeprom.h"
+#include "opentxM128simulator.h"
+#include "opentxinterface.h"
+#include "opentxeeprom.h"
#define SIMU
#define SIMU_EXCEPTIONS
@@ -73,6 +73,7 @@ namespace Open9xM128 {
#include "radio/src/simpgmspace.cpp"
#include "radio/src/templates.cpp"
#include "radio/src/translations.cpp"
+#include "radio/src/fonts.cpp"
#include "radio/src/audio_avr.cpp"
#include "radio/src/targets/stock/voice.cpp"
#include "radio/src/telemetry/frsky.cpp"
@@ -96,14 +97,14 @@ bool hasExtendedTrims()
uint8_t getStickMode()
{
- return g_eeGeneral.stickMode;
+ return limit(0, g_eeGeneral.stickMode, 3);
}
}
using namespace Open9xM128;
-Open9xM128Simulator::Open9xM128Simulator(Open9xInterface * open9xInterface):
+Open9xM128Simulator::Open9xM128Simulator(OpenTxInterface * open9xInterface):
open9xInterface(open9xInterface)
{
}
@@ -126,13 +127,19 @@ bool Open9xM128Simulator::lcdChanged(bool & lightEnable)
#include "simulatorimport.h"
}
-void Open9xM128Simulator::start(RadioData &radioData, bool tests)
+void Open9xM128Simulator::start(QByteArray & eeprom, bool tests)
{
- open9xInterface->save(&eeprom[0], radioData, SIMU_M128_VARIANTS);
+ memcpy(Open9xM128::eeprom, eeprom.data(), std::min(sizeof(Open9xM128::eeprom), eeprom.size()));
StartEepromThread(NULL);
StartMainThread(tests);
}
+void Open9xM128Simulator::start(const char * filename, bool tests)
+{
+ StartEepromThread(filename);
+ StartMainThread(tests);
+}
+
void Open9xM128Simulator::stop()
{
StopMainThread();
@@ -154,7 +161,7 @@ void Open9xM128Simulator::setValues(TxInputs &inputs)
void Open9xM128Simulator::setTrim(unsigned int idx, int value)
{
- idx = Open9xM128::modn12x3[4*getStickMode() + idx] - 1;
+ idx = Open9xM128::modn12x3[4*getStickMode() + idx];
uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx);
setTrimValue(phase, idx, value);
}
@@ -168,7 +175,7 @@ void Open9xM128Simulator::getTrims(Trims & trims)
}
for (int i=0; i<2; i++) {
- uint8_t idx = Open9xM128::modn12x3[4*getStickMode() + i] - 1;
+ uint8_t idx = Open9xM128::modn12x3[4*getStickMode() + i];
int16_t tmp = trims.values[i];
trims.values[i] = trims.values[idx];
trims.values[idx] = tmp;
diff --git a/companion/src/firmwares/opentx/open9xM128simulator.h b/companion/src/firmwares/opentx/opentxM128simulator.h
similarity index 83%
rename from companion/src/firmwares/opentx/open9xM128simulator.h
rename to companion/src/firmwares/opentx/opentxM128simulator.h
index dc43edc5f..862c7ada9 100644
--- a/companion/src/firmwares/opentx/open9xM128simulator.h
+++ b/companion/src/firmwares/opentx/opentxM128simulator.h
@@ -20,15 +20,17 @@
#include "simulatorinterface.h"
class RadioData;
-class Open9xInterface;
+class OpenTxInterface;
class Open9xM128Simulator : public SimulatorInterface {
public:
- Open9xM128Simulator(Open9xInterface *);
+ Open9xM128Simulator(OpenTxInterface *);
- virtual void start(RadioData & radioData, bool tests);
+ virtual void start(QByteArray & eeprom, bool tests=true);
+
+ virtual void start(const char * filename, bool tests=true);
virtual void stop();
@@ -54,7 +56,7 @@ class Open9xM128Simulator : public SimulatorInterface {
protected:
- Open9xInterface * open9xInterface;
+ OpenTxInterface * open9xInterface;
};
#endif
diff --git a/companion/src/firmwares/opentx/open9xSky9xsimulator.cpp b/companion/src/firmwares/opentx/opentxSky9xsimulator.cpp
similarity index 87%
rename from companion/src/firmwares/opentx/open9xSky9xsimulator.cpp
rename to companion/src/firmwares/opentx/opentxSky9xsimulator.cpp
index d724028ec..21d9df740 100644
--- a/companion/src/firmwares/opentx/open9xSky9xsimulator.cpp
+++ b/companion/src/firmwares/opentx/opentxSky9xsimulator.cpp
@@ -14,8 +14,9 @@
*
*/
-#include "open9xSky9xsimulator.h"
-#include "open9xinterface.h"
+#include "opentxSky9xsimulator.h"
+#include "opentxinterface.h"
+#include "appdata.h"
#define SIMU
#define SIMU_EXCEPTIONS
@@ -53,6 +54,7 @@
#define GPS
#define FAI_CHOICE
+#define NUM_POTS 3
#define EEPROM_VARIANT 3
#undef min
@@ -89,6 +91,7 @@ namespace Open9xSky9x {
#include "radio/src/simpgmspace.cpp"
#include "radio/src/templates.cpp"
#include "radio/src/translations.cpp"
+#include "radio/src/fonts.cpp"
#include "radio/src/telemetry/frsky.cpp"
#include "radio/src/targets/sky9x/audio_driver.cpp"
#include "radio/src/audio_arm.cpp"
@@ -125,18 +128,17 @@ bool hasExtendedTrims()
uint8_t getStickMode()
{
- return g_eeGeneral.stickMode;
+ return limit(0, g_eeGeneral.stickMode, 3);
}
}
using namespace Open9xSky9x;
-Open9xSky9xSimulator::Open9xSky9xSimulator(Open9xInterface * open9xInterface):
+Open9xSky9xSimulator::Open9xSky9xSimulator(OpenTxInterface * open9xInterface):
open9xInterface(open9xInterface)
{
- QSettings settings("companion9x", "companion9x");
- QString path=settings.value("sdPath", ".").toString()+"/";
+ QString path=g.profile[g.id()].sdPath()+"/";
int i=0;
for (i=0; i< std::min(path.length(),1022); i++) {
simuSdDirectory[i]=path.at(i).toAscii();
@@ -162,14 +164,21 @@ bool Open9xSky9xSimulator::lcdChanged(bool & lightEnable)
#include "simulatorimport.h"
}
-void Open9xSky9xSimulator::start(RadioData &radioData, bool tests)
+void Open9xSky9xSimulator::start(QByteArray & eeprom, bool tests)
{
g_rotenc[0] = 0;
- open9xInterface->save(&eeprom[0], radioData);
+ memcpy(Open9xSky9x::eeprom, eeprom.data(), std::min(sizeof(Open9xSky9x::eeprom), eeprom.size()));
StartEepromThread(NULL);
StartMainThread(tests);
}
+void Open9xSky9xSimulator::start(const char * filename, bool tests)
+{
+ g_rotenc[0] = 0;
+ StartEepromThread(filename);
+ StartMainThread(tests);
+}
+
void Open9xSky9xSimulator::stop()
{
StopMainThread();
@@ -193,7 +202,7 @@ void Open9xSky9xSimulator::setValues(TxInputs &inputs)
void Open9xSky9xSimulator::setTrim(unsigned int idx, int value)
{
- idx = Open9xSky9x::modn12x3[4*getStickMode() + idx] - 1;
+ idx = Open9xSky9x::modn12x3[4*getStickMode() + idx];
uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx);
setTrimValue(phase, idx, value);
}
@@ -207,7 +216,7 @@ void Open9xSky9xSimulator::getTrims(Trims & trims)
}
for (int i=0; i<2; i++) {
- uint8_t idx = Open9xSky9x::modn12x3[4*getStickMode() + i] - 1;
+ uint8_t idx = Open9xSky9x::modn12x3[4*getStickMode() + i];
int16_t tmp = trims.values[i];
trims.values[i] = trims.values[idx];
trims.values[idx] = tmp;
diff --git a/companion/src/firmwares/opentx/open9xSky9xsimulator.h b/companion/src/firmwares/opentx/opentxSky9xsimulator.h
similarity index 83%
rename from companion/src/firmwares/opentx/open9xSky9xsimulator.h
rename to companion/src/firmwares/opentx/opentxSky9xsimulator.h
index 95463fbab..0489fea1d 100644
--- a/companion/src/firmwares/opentx/open9xSky9xsimulator.h
+++ b/companion/src/firmwares/opentx/opentxSky9xsimulator.h
@@ -20,15 +20,17 @@
#include "simulatorinterface.h"
class RadioData;
-class Open9xInterface;
+class OpenTxInterface;
class Open9xSky9xSimulator : public SimulatorInterface {
public:
- Open9xSky9xSimulator(Open9xInterface *);
+ Open9xSky9xSimulator(OpenTxInterface *);
- virtual void start(RadioData & radioData, bool tests);
+ virtual void start(QByteArray & eeprom, bool tests=true);
+
+ virtual void start(const char * filename, bool tests=true);
virtual void stop();
@@ -54,7 +56,7 @@ class Open9xSky9xSimulator : public SimulatorInterface {
protected:
- Open9xInterface * open9xInterface;
+ OpenTxInterface * open9xInterface;
};
#endif
diff --git a/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp b/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp
index 6f216273a..ed934036a 100644
--- a/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp
+++ b/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp
@@ -15,14 +15,14 @@
*/
#include "opentxTaranisSimulator.h"
-#include "open9xinterface.h"
+#include "opentxinterface.h"
+#include "appdata.h"
#define SIMU
#define SIMU_EXCEPTIONS
#define PCBTARANIS
#define CPUARM
#define HELI
-#define TEMPLATES
#define SPLASH
#define FLIGHT_MODES
#define FRSKY
@@ -35,6 +35,8 @@
#define AUDIO
#define VOICE
#define PXX
+#define DSM2
+#define DSM2_PPM
#define DBLKEYS
#define AUTOSWITCH
#define GRAPHICS
@@ -47,8 +49,12 @@
#define PPM_CENTER_ADJUSTABLE
#define PPM_LIMITS_SYMETRICAL
#define FAI_CHOICE
+#define LUA
+#define LUA_MODEL_SCRIPTS
#define EEPROM_VARIANT 3
+#define NUM_POTS 5
+
#undef min
#undef max
@@ -65,7 +71,7 @@ inline int geteepromsize() {
#include "radio/src/targets/taranis/board_taranis.cpp"
#include "radio/src/protocols/ppm_arm.cpp"
#include "radio/src/protocols/pxx_arm.cpp"
-#include "radio/src/targets/taranis/pwr_driver.cpp"
+#include "radio/src/protocols/dsm2_arm.cpp"
#include "radio/src/eeprom_common.cpp"
#include "radio/src/eeprom_conversions.cpp"
#include "radio/src/eeprom_rlc.cpp"
@@ -73,6 +79,7 @@ inline int geteepromsize() {
#include "radio/src/targets/taranis/pulses_driver.cpp"
#include "radio/src/targets/taranis/rtc_driver.cpp"
#include "radio/src/targets/taranis/trainer_driver.cpp"
+#include "radio/src/targets/taranis/uart3_driver.cpp"
#include "radio/src/protocols/pulses_arm.cpp"
#include "radio/src/stamp.cpp"
#include "radio/src/maths.cpp"
@@ -95,8 +102,8 @@ inline int geteepromsize() {
#undef SDCARD
#include "radio/src/simpgmspace.cpp"
#define SDCARD
-#include "radio/src/templates.cpp"
#include "radio/src/translations.cpp"
+#include "radio/src/fonts.cpp"
#include "radio/src/telemetry/frsky_sport.cpp"
#include "radio/src/targets/taranis/audio_driver.cpp"
#include "radio/src/audio_arm.cpp"
@@ -110,14 +117,41 @@ inline int geteepromsize() {
#include "radio/src/translations/tts_pt.cpp"
#include "radio/src/translations/tts_sk.cpp"
#include "radio/src/translations/tts_pl.cpp"
+
+#include "radio/src/lua.cpp"
+#include "radio/src/lua/src/lapi.c"
+#include "radio/src/lua/src/lcode.c"
+#include "radio/src/lua/src/lctype.c"
+#include "radio/src/lua/src/ldebug.c"
+#include "radio/src/lua/src/ldo.c"
+#include "radio/src/lua/src/ldump.c"
+#include "radio/src/lua/src/lfunc.c"
+#include "radio/src/lua/src/lgc.c"
+#include "radio/src/lua/src/llex.c"
+#include "radio/src/lua/src/lmem.c"
+#include "radio/src/lua/src/lobject.c"
+#include "radio/src/lua/src/lopcodes.c"
+#include "radio/src/lua/src/lparser.c"
+#include "radio/src/lua/src/lstate.c"
+#include "radio/src/lua/src/lstring.c"
+#include "radio/src/lua/src/ltable.c"
+#include "radio/src/lua/src/ltm.c"
+#include "radio/src/lua/src/lundump.c"
+#include "radio/src/lua/src/lvm.c"
+#include "radio/src/lua/src/lzio.c"
+#include "radio/src/lua/src/lbaselib.c"
+#include "radio/src/lua/src/linit.c"
+#include "radio/src/lua/src/lmathlib.c"
+#include "radio/src/lua/src/loadlib.c"
+#include "radio/src/lua/src/lauxlib.c"
+#include "radio/src/lua/src/ltablib.c"
+#include "radio/src/lua/src/lcorolib.c"
+
-int16_t g_anas[NUM_STICKS+BOARD_X9D_NUM_POTS];
+int16_t g_anas[NUM_STICKS+5];
uint16_t anaIn(uint8_t chan)
{
- if (chan == 8)
- return 1800;
- else
return g_anas[chan];
}
@@ -128,7 +162,7 @@ bool hasExtendedTrims()
uint8_t getStickMode()
{
- return g_eeGeneral.stickMode;
+ return limit(0, g_eeGeneral.stickMode, 3);
}
void resetTrims()
@@ -141,12 +175,11 @@ void resetTrims()
using namespace Open9xX9D;
-OpentxTaranisSimulator::OpentxTaranisSimulator(Open9xInterface * open9xInterface):
+OpentxTaranisSimulator::OpentxTaranisSimulator(OpenTxInterface * open9xInterface):
open9xInterface(open9xInterface)
{
taranisSimulatorBoard = GetEepromInterface()->getBoard();
- QSettings settings("companion9x", "companion9x");
- QString path=settings.value("sdPath", ".").toString()+"/";
+ QString path=g.profile[g.id()].sdPath()+"/";
int i=0;
for (i=0; i< std::min(path.length(),1022); i++) {
simuSdDirectory[i]=path.at(i).toAscii();
@@ -172,13 +205,19 @@ bool OpentxTaranisSimulator::lcdChanged(bool & lightEnable)
#include "simulatorimport.h"
}
-void OpentxTaranisSimulator::start(RadioData &radioData, bool tests)
+void OpentxTaranisSimulator::start(QByteArray & eeprom, bool tests)
{
- open9xInterface->save(Open9xX9D::eeprom, radioData);
+ memcpy(Open9xX9D::eeprom, eeprom.data(), std::min(sizeof(Open9xX9D::eeprom), eeprom.size()));
StartEepromThread(NULL);
StartMainThread(tests);
}
+void OpentxTaranisSimulator::start(const char * filename, bool tests)
+{
+ StartEepromThread(filename);
+ StartMainThread(tests);
+}
+
void OpentxTaranisSimulator::stop()
{
StopMainThread();
@@ -200,7 +239,7 @@ void OpentxTaranisSimulator::setValues(TxInputs &inputs)
void OpentxTaranisSimulator::setTrim(unsigned int idx, int value)
{
- idx = Open9xX9D::modn12x3[4*getStickMode() + idx] - 1;
+ idx = Open9xX9D::modn12x3[4*getStickMode() + idx];
uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx);
setTrimValue(phase, idx, value);
}
@@ -214,7 +253,7 @@ void OpentxTaranisSimulator::getTrims(Trims & trims)
}
for (int i=0; i<2; i++) {
- uint8_t idx = Open9xX9D::modn12x3[4*getStickMode() + i] - 1;
+ uint8_t idx = Open9xX9D::modn12x3[4*getStickMode() + i];
int16_t tmp = trims.values[i];
trims.values[i] = trims.values[idx];
trims.values[idx] = tmp;
diff --git a/companion/src/firmwares/opentx/opentxTaranisSimulator.h b/companion/src/firmwares/opentx/opentxTaranisSimulator.h
index c14f9c16c..bd2da1d2a 100644
--- a/companion/src/firmwares/opentx/opentxTaranisSimulator.h
+++ b/companion/src/firmwares/opentx/opentxTaranisSimulator.h
@@ -20,15 +20,17 @@
#include "simulatorinterface.h"
class RadioData;
-class Open9xInterface;
+class OpenTxInterface;
class OpentxTaranisSimulator : public SimulatorInterface {
public:
- OpentxTaranisSimulator(Open9xInterface *);
+ OpentxTaranisSimulator(OpenTxInterface *);
- virtual void start(RadioData & radioData, bool tests);
+ virtual void start(QByteArray & eeprom, bool tests=true);
+
+ virtual void start(const char * filename, bool tests=true);
virtual void stop();
@@ -54,7 +56,7 @@ class OpentxTaranisSimulator : public SimulatorInterface {
protected:
- Open9xInterface * open9xInterface;
+ OpenTxInterface * open9xInterface;
};
#endif
diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp
new file mode 100644
index 000000000..4135e33ca
--- /dev/null
+++ b/companion/src/firmwares/opentx/opentxeeprom.cpp
@@ -0,0 +1,2681 @@
+#include
+#include
+#include "helpers.h"
+#include "opentxeeprom.h"
+#include
+
+#define IS_DBLEEPROM(board, version) ((board==BOARD_GRUVIN9X || board==BOARD_M128) && version >= 213)
+// Macro used for Gruvin9x board and M128 board between versions 213 and 214 (when there were stack overflows!)
+#define IS_DBLRAM(board, version) ((board==BOARD_GRUVIN9X && version >= 213) || (board==BOARD_M128 && version >= 213 && version <= 214))
+
+#define HAS_PERSISTENT_TIMERS(board) (IS_ARM(board) || board == BOARD_GRUVIN9X)
+#define HAS_LARGE_LCD(board) IS_TARANIS(board)
+#define MAX_VIEWS(board) (HAS_LARGE_LCD(board) ? 2 : 256)
+#define MAX_POTS(board) (IS_TARANIS(board) ? 5 : 3)
+#define MAX_SWITCHES(board) (IS_TARANIS(board) ? 8 : 7)
+#define MAX_SWITCHES_POSITION(board) (IS_TARANIS(board) ? 22 : 9)
+#define MAX_ROTARY_ENCODERS(board) (board==BOARD_GRUVIN9X ? 2 : (board==BOARD_SKY9X ? 1 : 0))
+#define MAX_PHASES(board, version) (IS_ARM(board) ? 9 : (IS_DBLRAM(board, version) ? 6 : 5))
+#define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32)
+#define MAX_CHANNELS(board, version) (IS_ARM(board) ? 32 : 16)
+#define MAX_EXPOS(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 216) ? 64 : 32) : (IS_DBLRAM(board, version) ? 16 : 14))
+#define MAX_CUSTOM_SWITCHES(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 15 : 12))
+#define MAX_CUSTOM_FUNCTIONS(board, version) (IS_ARM(board) ? (version >= 216 ? 64 : 32) : (IS_DBLEEPROM(board, version) ? 24 : 16))
+#define MAX_CURVES(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 216) ? 32 : 16) : O9X_MAX_CURVES)
+#define MAX_GVARS(board, version) ((IS_ARM(board) && version >= 216) ? 9 : 5)
+#define NUM_PPM_INPUTS(board, version) ((IS_ARM(board) && version >= 216) ? 16 : 8)
+
+#define IS_AFTER_RELEASE_21_MARCH_2013(board, version) (version >= 214 || (!IS_ARM(board) && version >= 213))
+#define IS_AFTER_RELEASE_23_MARCH_2013(board, version) (version >= 214 || (board==BOARD_STOCK && version >= 213))
+
+inline int switchIndex(int i, BoardEnum board, unsigned int version)
+{
+ bool afterrelease21March2013 = IS_AFTER_RELEASE_21_MARCH_2013(board, version);
+ if (!IS_TARANIS(board) && afterrelease21March2013)
+ return (i<=3 ? i+3 : (i<=6 ? i-3 : i));
+ else
+ return i;
+}
+
+class SwitchesConversionTable: public ConversionTable {
+
+ public:
+ SwitchesConversionTable(BoardEnum board, unsigned int version, unsigned long flags=0)
+ {
+ int val=0;
+ int offset=0;
+ if (flags & POPULATE_TIMER_MODES) {
+ offset = 4;
+ for (int i=0; i<5; i++) {
+ addConversion(RawSwitch(SWITCH_TYPE_TIMER_MODE, i), val++);
+ }
+ }
+ else {
+ addConversion(RawSwitch(SWITCH_TYPE_NONE), val++);
+ }
+
+ for (int i=1; i<=MAX_SWITCHES_POSITION(board); i++) {
+ int s = switchIndex(i, board, version);
+ addConversion(RawSwitch(SWITCH_TYPE_SWITCH, -s), -val+offset);
+ addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val++);
+ }
+
+ if (IS_TARANIS(board) && version >= 216) {
+ for (int i=1; i<=3*6; i++) {
+ addConversion(RawSwitch(SWITCH_TYPE_MULTIPOS_POT, -i), -val+offset);
+ addConversion(RawSwitch(SWITCH_TYPE_MULTIPOS_POT, i), val++);
+ }
+ }
+
+ if (version >= 216) {
+ for (int i=1; i<=8; i++) {
+ addConversion(RawSwitch(SWITCH_TYPE_TRIM, -i), -val+offset);
+ addConversion(RawSwitch(SWITCH_TYPE_TRIM, i), val++);
+ }
+ }
+
+ if (version >= 216) {
+ for (int i=1; i<=MAX_ROTARY_ENCODERS(board); i++) {
+ addConversion(RawSwitch(SWITCH_TYPE_ROTARY_ENCODER, -i), -val+offset);
+ addConversion(RawSwitch(SWITCH_TYPE_ROTARY_ENCODER, i), val++);
+ }
+ }
+
+ for (int i=1; i<=MAX_CUSTOM_SWITCHES(board, version); i++) {
+ addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, -i), -val+offset);
+ addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, i), val++);
+ }
+
+ addConversion(RawSwitch(SWITCH_TYPE_OFF), -val+offset);
+ addConversion(RawSwitch(SWITCH_TYPE_ON), val++);
+
+ if (version < 216) {
+ // previous "moment" switches
+ for (int i=1; i<=MAX_SWITCHES_POSITION(board); i++) {
+ int s = switchIndex(i, board, version);
+ addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val++);
+ }
+
+ for (int i=1; i<=MAX_CUSTOM_SWITCHES(board, version); i++) {
+ addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, i), val++);
+ }
+
+ // previous "One" switch
+ addConversion(RawSwitch(SWITCH_TYPE_ON), val++);
+ }
+ }
+
+ protected:
+
+ void addConversion(const RawSwitch & sw, const int b)
+ {
+ ConversionTable::addConversion(sw.toValue(), b);
+ }
+
+ class Cache {
+ public:
+ Cache(BoardEnum board, unsigned int version, unsigned long flags, SwitchesConversionTable * table):
+ board(board),
+ version(version),
+ flags(flags),
+ table(table)
+ {
+ }
+ BoardEnum board;
+ unsigned int version;
+ unsigned long flags;
+ SwitchesConversionTable * table;
+ };
+
+ public:
+
+ static SwitchesConversionTable * getInstance(BoardEnum board, unsigned int version, unsigned long flags=0)
+ {
+ static std::list internalCache;
+
+ for (std::list::iterator it=internalCache.begin(); it!=internalCache.end(); it++) {
+ Cache element = *it;
+ if (element.board == board && element.version == version && element.flags == flags)
+ return element.table;
+ }
+
+ Cache element(board, version, flags, new SwitchesConversionTable(board, version, flags));
+ internalCache.push_back(element);
+ return element.table;
+ }
+};
+
+#define FLAG_NONONE 0x01
+#define FLAG_NOSWITCHES 0x02
+#define FLAG_NOTELEMETRY 0x04
+
+class SourcesConversionTable: public ConversionTable {
+
+ public:
+ SourcesConversionTable(BoardEnum board, unsigned int version, unsigned int variant, unsigned long flags=0)
+ {
+ bool afterrelease21March2013 = IS_AFTER_RELEASE_21_MARCH_2013(board, version);
+
+ int val=0;
+
+ if (!(flags & FLAG_NONONE)) {
+ addConversion(RawSource(SOURCE_TYPE_NONE), val++);
+ }
+
+ if (IS_TARANIS(board) && version >= 216) {
+ for (int i=0; i<32; i++)
+ addConversion(RawSource(SOURCE_TYPE_VIRTUAL_INPUT, i), val++);
+ for (int i=0; i<7; i++) {
+ for (int j=0; j<6; j++) {
+ addConversion(RawSource(SOURCE_TYPE_LUA_INPUT, i*16+j), val++);
+ }
+ }
+ }
+
+ for (int i=0; i<4+MAX_POTS(board); i++) {
+ if (IS_TARANIS(board) && version < 216 && i==6)
+ continue;
+ addConversion(RawSource(SOURCE_TYPE_STICK, i), val++);
+ }
+
+ for (int i=0; i=4 && i<=6)
+ addConversion(RawSource(SOURCE_TYPE_SWITCH, 0), val++);
+ else
+ addConversion(RawSource(SOURCE_TYPE_SWITCH, i), val++);
+ }
+ }
+ for (int i=0; i= 216 && IS_ARM(board)) {
+ if (i==TELEMETRY_SOURCE_DTE)
+ val += 5;
+ if (i==TELEMETRY_SOURCE_POWER_MAX)
+ val += 5;
+ }
+ }
+ }
+ }
+
+ protected:
+
+ void addConversion(const RawSource & source, const int b)
+ {
+ ConversionTable::addConversion(source.toValue(), b);
+ }
+
+ class Cache {
+ public:
+ Cache(BoardEnum board, unsigned int version, unsigned int variant, unsigned long flags, SourcesConversionTable * table):
+ board(board),
+ version(version),
+ variant(variant),
+ flags(flags),
+ table(table)
+ {
+ }
+ BoardEnum board;
+ unsigned int version;
+ unsigned int variant;
+ unsigned long flags;
+ SourcesConversionTable * table;
+ };
+
+ public:
+
+ static SourcesConversionTable * getInstance(BoardEnum board, unsigned int version, unsigned int variant, unsigned long flags=0)
+ {
+ static std::list internalCache;
+
+ for (std::list::iterator it=internalCache.begin(); it!=internalCache.end(); it++) {
+ Cache element = *it;
+ if (element.board == board && element.version == version && element.variant == variant && element.flags == flags)
+ return element.table;
+ }
+
+ Cache element(board, version, variant, flags, new SourcesConversionTable(board, version, variant, flags));
+ internalCache.push_back(element);
+ return element.table;
+ }
+};
+
+ThrottleSourceConversionTable::ThrottleSourceConversionTable(BoardEnum board, unsigned int version)
+{
+ int val=0;
+
+ addConversion(THROTTLE_SOURCE_THR, val++);
+
+ if (IS_TARANIS(board)) {
+ addConversion(THROTTLE_SOURCE_S1, val++);
+ addConversion(THROTTLE_SOURCE_S2, val++);
+ if (version >= 216)
+ addConversion(THROTTLE_SOURCE_S3, val++);
+ addConversion(THROTTLE_SOURCE_LS, val++);
+ addConversion(THROTTLE_SOURCE_RS, val++);
+ }
+ else {
+ addConversion(THROTTLE_SOURCE_P1, val++);
+ addConversion(THROTTLE_SOURCE_P2, val++);
+ addConversion(THROTTLE_SOURCE_P3, val++);
+ }
+
+ for (int i=0; i
+class SwitchField: public ConversionField< SignedField > {
+ public:
+ SwitchField(RawSwitch & sw, BoardEnum board, unsigned int version, unsigned long flags=0):
+ ConversionField< SignedField >(_switch, SwitchesConversionTable::getInstance(board, version, flags), "Switch"),
+ sw(sw),
+ _switch(0)
+ {
+ }
+
+ virtual void beforeExport()
+ {
+ _switch = sw.toValue();
+ ConversionField< SignedField >::beforeExport();
+ }
+
+ virtual void afterImport()
+ {
+ ConversionField< SignedField >::afterImport();
+ sw = RawSwitch(_switch);
+ }
+
+ protected:
+ RawSwitch & sw;
+ int _switch;
+};
+
+class TelemetrySourcesConversionTable: public ConversionTable {
+
+ public:
+ TelemetrySourcesConversionTable(BoardEnum board, unsigned int version)
+ {
+ int val = 0;
+
+ if (IS_AFTER_RELEASE_21_MARCH_2013(board, version)) {
+ addConversion(0, val++);
+ }
+
+ addConversion(1+TELEMETRY_SOURCE_TX_BATT, val++);
+ addConversion(1+TELEMETRY_SOURCE_TIMER1, val++);
+ addConversion(1+TELEMETRY_SOURCE_TIMER2, val++);
+ if (IS_ARM(board) && version >= 216)
+ addConversion(1+TELEMETRY_SOURCE_SWR, val++);
+ addConversion(1+TELEMETRY_SOURCE_RSSI_TX, val++);
+ addConversion(1+TELEMETRY_SOURCE_RSSI_RX, val++);
+ if (IS_ARM(board) && version >= 216)
+ addConversion(1+TELEMETRY_SOURCE_RX_BATT, val++);
+ addConversion(1+TELEMETRY_SOURCE_A1, val++);
+ addConversion(1+TELEMETRY_SOURCE_A2, val++);
+ if (IS_ARM(board) && version >= 216) {
+ addConversion(1+TELEMETRY_SOURCE_A3, val++);
+ addConversion(1+TELEMETRY_SOURCE_A4, val++);
+ }
+ addConversion(1+TELEMETRY_SOURCE_ALT, val++);
+ addConversion(1+TELEMETRY_SOURCE_RPM, val++);
+ addConversion(1+TELEMETRY_SOURCE_FUEL, val++);
+ addConversion(1+TELEMETRY_SOURCE_T1, val++);
+ addConversion(1+TELEMETRY_SOURCE_T2, val++);
+ addConversion(1+TELEMETRY_SOURCE_SPEED, val++);
+ addConversion(1+TELEMETRY_SOURCE_DIST, val++);
+ addConversion(1+TELEMETRY_SOURCE_GPS_ALT, val++);
+ addConversion(1+TELEMETRY_SOURCE_CELL, val++);
+ addConversion(1+TELEMETRY_SOURCE_CELLS_SUM, val++);
+ addConversion(1+TELEMETRY_SOURCE_VFAS, val++);
+ addConversion(1+TELEMETRY_SOURCE_CURRENT, val++);
+ addConversion(1+TELEMETRY_SOURCE_CONSUMPTION, val++);
+ addConversion(1+TELEMETRY_SOURCE_POWER, val++);
+ addConversion(1+TELEMETRY_SOURCE_ACCX, val++);
+ addConversion(1+TELEMETRY_SOURCE_ACCY, val++);
+ addConversion(1+TELEMETRY_SOURCE_ACCZ, val++);
+ addConversion(1+TELEMETRY_SOURCE_HDG, val++);
+ addConversion(1+TELEMETRY_SOURCE_VERTICAL_SPEED, val++);
+ if (version >= 216) {
+ addConversion(1+TELEMETRY_SOURCE_ASPD, val++);
+ addConversion(1+TELEMETRY_SOURCE_DTE, val++);
+ }
+ if (IS_ARM(board) && version >= 216) {
+ for (int i=0; i<5; i++)
+ addConversion(1+TELEMETRY_SOURCE_RESERVE, val++);
+ }
+ addConversion(1+TELEMETRY_SOURCE_A1_MIN, val++);
+ addConversion(1+TELEMETRY_SOURCE_A2_MIN, val++);
+ if (IS_ARM(board) && version >= 216) {
+ addConversion(1+TELEMETRY_SOURCE_A3_MIN, val++);
+ addConversion(1+TELEMETRY_SOURCE_A4_MIN, val++);
+ }
+ addConversion(1+TELEMETRY_SOURCE_ALT_MIN, val++);
+ addConversion(1+TELEMETRY_SOURCE_ALT_MAX, val++);
+ addConversion(1+TELEMETRY_SOURCE_RPM_MAX, val++);
+ addConversion(1+TELEMETRY_SOURCE_T1_MAX, val++);
+ addConversion(1+TELEMETRY_SOURCE_T2_MAX, val++);
+ addConversion(1+TELEMETRY_SOURCE_SPEED_MAX, val++);
+ addConversion(1+TELEMETRY_SOURCE_DIST_MAX, val++);
+ if (version >= 216) {
+ addConversion(1+TELEMETRY_SOURCE_CELL_MIN, val++);
+ addConversion(1+TELEMETRY_SOURCE_CELLS_MIN, val++);
+ addConversion(1+TELEMETRY_SOURCE_VFAS_MIN, val++);
+ }
+ addConversion(1+TELEMETRY_SOURCE_CURRENT_MAX, val++);
+ addConversion(1+TELEMETRY_SOURCE_POWER_MAX, val++);
+ if (IS_ARM(board) && version >= 216) {
+ for (int i=0; i<5; i++)
+ addConversion(1+TELEMETRY_SOURCE_RESERVE, val++);
+ }
+ addConversion(1+TELEMETRY_SOURCE_ACC, val++);
+ addConversion(1+TELEMETRY_SOURCE_GPS_TIME, val++);
+ }
+};
+
+template
+class TelemetrySourceField: public ConversionField< UnsignedField > {
+ public:
+ TelemetrySourceField(unsigned int & source, BoardEnum board, unsigned int version):
+ ConversionField< UnsignedField >(source, &conversionTable, "Telemetry source"),
+ conversionTable(board, version),
+ source(source),
+ board(board),
+ version(version)
+ {
+ }
+
+ protected:
+ TelemetrySourcesConversionTable conversionTable;
+ unsigned int & source;
+ BoardEnum board;
+ unsigned int version;
+};
+
+template
+class SourceField: public ConversionField< UnsignedField > {
+ public:
+ SourceField(RawSource & source, BoardEnum board, unsigned int version, unsigned int variant, unsigned long flags=0):
+ ConversionField< UnsignedField >(_source, SourcesConversionTable::getInstance(board, version, variant, flags), "Source"),
+ source(source),
+ _source(0)
+ {
+ }
+
+ virtual void beforeExport()
+ {
+ _source = source.toValue();
+ ConversionField< UnsignedField >::beforeExport();
+ }
+
+ virtual void afterImport()
+ {
+ ConversionField< UnsignedField >::afterImport();
+ source = RawSource(_source);
+ }
+
+ protected:
+ RawSource & source;
+ unsigned int _source;
+};
+
+class CurveReferenceField: public TransformedField {
+ public:
+ CurveReferenceField(CurveReference & curve, BoardEnum board, unsigned int version):
+ TransformedField(internalField),
+ curve(curve),
+ _curve_type(0)
+ {
+ internalField.Append(new UnsignedField<8>(_curve_type));
+ internalField.Append(new SignedField<8>(curve.value));
+ }
+
+ virtual void beforeExport()
+ {
+ if (curve.value != 0)
+ _curve_type = (unsigned int)curve.type;
+ else
+ _curve_type = 0;
+ }
+
+ virtual void afterImport()
+ {
+ curve.type = (CurveReference::CurveRefType)_curve_type;
+ }
+
+ protected:
+ StructField internalField;
+ CurveReference & curve;
+ unsigned int _curve_type;
+};
+
+class HeliField: public StructField {
+ public:
+ HeliField(SwashRingData & heli, BoardEnum board, unsigned int version, unsigned int variant)
+ {
+ Append(new BoolField<1>(heli.invertELE));
+ Append(new BoolField<1>(heli.invertAIL));
+ Append(new BoolField<1>(heli.invertCOL));
+ Append(new UnsignedField<5>(heli.type));
+ Append(new SourceField<8>(heli.collectiveSource, board, version, variant));
+ //, FLAG_NOSWITCHES)); Fix shift in collective
+ Append(new UnsignedField<8>(heli.value));
+ }
+};
+
+class PhaseField: public TransformedField {
+ public:
+ PhaseField(PhaseData & phase, int index, BoardEnum board, unsigned int version):
+ TransformedField(internalField),
+ internalField("Phase"),
+ phase(phase),
+ index(index),
+ board(board),
+ version(version),
+ rotencCount(IS_ARM(board) ? 1 : (board == BOARD_GRUVIN9X ? 2 : 0))
+ {
+ if (board == BOARD_STOCK || (board==BOARD_M128 && version>=215)) {
+ // On stock we use 10bits per trim
+ for (int i=0; i(trimBase[i]));
+ for (int i=0; i(trimExt[i]));
+ }
+ else if (board == BOARD_TARANIS && version >= 216) {
+ for (int i=0; i(phase.trim[i]));
+ internalField.Append(new UnsignedField<5>(trimMode[i]));
+ }
+ }
+ else {
+ for (int i=0; i(trimBase[i]));
+ }
+
+ internalField.Append(new SwitchField<8>(phase.swtch, board, version));
+ if (HAS_LARGE_LCD(board))
+ internalField.Append(new ZCharField<10>(phase.name));
+ else
+ internalField.Append(new ZCharField<6>(phase.name));
+
+ if (IS_ARM(board) && version >= 214) {
+ internalField.Append(new UnsignedField<8>(phase.fadeIn));
+ internalField.Append(new UnsignedField<8>(phase.fadeOut));
+ }
+ else {
+ internalField.Append(new UnsignedField<4>(phase.fadeIn));
+ internalField.Append(new UnsignedField<4>(phase.fadeOut));
+ }
+
+ for (int i=0; i(phase.rotaryEncoders[i]));
+ }
+
+ if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) {
+ for (int i=0; i(phase.gvars[i]));
+ }
+ }
+ }
+
+ virtual void beforeExport()
+ {
+ for (int i=0; i= 216) {
+ if (phase.trimMode[i] < 0)
+ trimMode[i] = TRIM_MODE_NONE;
+ else
+ trimMode[i] = 2*phase.trimRef[i] + phase.trimMode[i];
+ }
+ else {
+ int trim;
+ if (phase.trimMode[i] < 0)
+ trim = 0;
+ else if (phase.trimRef[i] != index)
+ trim = 501 + phase.trimRef[i] - (phase.trimRef[i] > index ? 1 : 0);
+ else
+ trim = std::max(-500, std::min(500, phase.trim[i]));
+ if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) {
+ trimBase[i] = trim >> 2;
+ trimExt[i] = (trim & 0x03);
+ }
+ else {
+ trimBase[i] = trim;
+ }
+ }
+ }
+ }
+
+ virtual void afterImport()
+ {
+ for (int i=0; i= 216) {
+ if (trimMode[i] == TRIM_MODE_NONE) {
+ phase.trimMode[i] = -1;
+ }
+ else {
+ phase.trimMode[i] = trimMode[i] % 2;
+ phase.trimRef[i] = trimMode[i] / 2;
+ }
+ }
+ else {
+ int trim;
+ if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215))
+ trim = ((trimBase[i]) << 2) + (trimExt[i] & 0x03);
+ else
+ trim = trimBase[i];
+ if (trim > 500) {
+ phase.trimRef[i] = trim - 501;
+ if (phase.trimRef[i] >= index)
+ phase.trimRef[i] += 1;
+ phase.trim[i] = 0;
+ }
+ else {
+ phase.trim[i] = trim;
+ }
+ }
+ }
+ }
+
+ protected:
+ StructField internalField;
+ PhaseData & phase;
+ int index;
+ BoardEnum board;
+ unsigned int version;
+ int rotencCount;
+ int trimBase[NUM_STICKS];
+ int trimExt[NUM_STICKS];
+ unsigned int trimMode[NUM_STICKS];
+};
+
+
+int smallGvarToEEPROM(int gvar)
+{
+ if (gvar < -10000) {
+ gvar = 128 + gvar + 10000;
+ }
+ else if (gvar > 10000) {
+ gvar = -128 +gvar - 10001;
+ }
+ return gvar;
+}
+
+int smallGvarToC9x(int gvar)
+{
+ if (gvar>110) {
+ gvar = gvar-128 - 10000;
+ }
+ else if (gvar<-110) {
+ gvar = gvar+128 + 10001;
+ }
+ return gvar;
+}
+
+
+void splitGvarParam(const int gvar, int & _gvar, unsigned int & _gvarParam, const BoardEnum board, const int version)
+{
+ if (version >= 214 || (!IS_ARM(board) && version >= 213)) {
+ if (gvar < -10000) {
+ _gvarParam = 0;
+ _gvar = 256 + gvar + 10000;
+ }
+ else if (gvar > 10000) {
+ _gvarParam = 1;
+ _gvar = gvar - 10001;
+ }
+ else {
+ if (gvar < 0) _gvarParam = 1;
+ else _gvarParam = 0;
+ _gvar = gvar; // save routine throws away all unused bits; therefore no 2er complement compensation needed here
+ }
+ }
+ else {
+ if (gvar < -10000) {
+ _gvarParam = 1;
+ _gvar = gvar + 10000;
+ }
+ else if (gvar > 10000) {
+ _gvarParam = 1;
+ _gvar = gvar - 10001;
+ }
+ else {
+ _gvarParam = 0;
+ _gvar = gvar;
+ }
+ }
+}
+
+void concatGvarParam(int & gvar, const int _gvar, const unsigned int _gvarParam, const BoardEnum board, const int version)
+{
+ if (version >= 214 || (!IS_ARM(board) && version >= 213)) {
+ gvar = _gvar;
+ if (gvar<0) gvar+=256; // remove 2er complement, because 8bit part is in this case unsigned
+ if (_gvarParam) { // here is the real sign bit
+ gvar|=-256; // set all higher bits to simulate negative value
+ }
+
+ if (gvar>245) {
+ gvar = gvar-256 - 10000;
+ } else if (gvar<-245) {
+ gvar = gvar+256 + 10001;
+ }
+ }
+ else {
+ if (_gvarParam == 0) {
+ gvar = _gvar;
+ }
+ else if (_gvar >= 0) {
+ gvar = 10001 + _gvar;
+ }
+ else {
+ gvar = -10000 + _gvar;
+ }
+ }
+}
+
+void exportGvarParam(const int gvar, int & _gvar, int version)
+{
+ int GV1 = (version >= 216 ? 4096 : 512);
+
+ if (gvar < -10000) {
+ _gvar = GV1 + gvar + 10000;
+ }
+ else if (gvar > 10000) {
+ _gvar = GV1 + gvar - 10001;
+ }
+ else {
+ _gvar = gvar;
+ }
+}
+
+void importGvarParam(int & gvar, const int _gvar, int version)
+{
+ int GV1 = (version >= 216 ? 4096 : 512);
+
+ if (_gvar >= GV1) {
+ gvar = 10001 + _gvar - GV1;
+ }
+ else if (_gvar >= GV1-9) {
+ gvar = -10000 + _gvar - GV1;
+ }
+ else if (_gvar < -GV1) {
+ gvar = -10000 + _gvar + GV1 + 1;
+ }
+ else if (_gvar < -GV1+9) {
+ gvar = 10000 + _gvar + GV1 + 1;
+ }
+ else {
+ gvar = _gvar;
+ }
+
+ // qDebug() << QString("import") << _gvar << gvar;
+}
+
+class MixField: public TransformedField {
+ public:
+ MixField(MixData & mix, BoardEnum board, unsigned int version, ModelData * model):
+ TransformedField(internalField),
+ internalField("Mix"),
+ mix(mix),
+ board(board),
+ version(version),
+ model(model)
+ {
+ if (IS_TARANIS(board) && version >= 216) {
+ internalField.Append(new UnsignedField<8>(_destCh));
+ internalField.Append(new UnsignedField<16>(mix.phases));
+ internalField.Append(new UnsignedField<2>((unsigned int &)mix.mltpx));
+ internalField.Append(new UnsignedField<1>((unsigned int &)mix.carryTrim));
+ internalField.Append(new SpareBitsField<5>());
+ internalField.Append(new SignedField<16>(_weight));
+ internalField.Append(new SwitchField<8>(mix.swtch, board, version));
+ internalField.Append(new CurveReferenceField(mix.curve, board, version));
+ internalField.Append(new UnsignedField<4>(mix.mixWarn));
+ internalField.Append(new SpareBitsField<4>());
+ internalField.Append(new UnsignedField<8>(mix.delayUp));
+ internalField.Append(new UnsignedField<8>(mix.delayDown));
+ internalField.Append(new UnsignedField<8>(mix.speedUp));
+ internalField.Append(new UnsignedField<8>(mix.speedDown));
+ internalField.Append(new SourceField<8>(mix.srcRaw, board, version, FLAG_NOTELEMETRY));
+ internalField.Append(new SignedField<16>(_offset));
+ internalField.Append(new ZCharField<8>(mix.name));
+ internalField.Append(new SpareBitsField<8>());
+ }
+ else if (IS_ARM(board) && version >= 216) {
+ internalField.Append(new UnsignedField<4>(_destCh));
+ internalField.Append(new UnsignedField<4>(mix.mixWarn));
+ internalField.Append(new UnsignedField<16>(mix.phases));
+ internalField.Append(new BoolField<1>(_curveMode));
+ internalField.Append(new BoolField<1>(mix.noExpo));
+ internalField.Append(new SignedField<3>(mix.carryTrim));
+ internalField.Append(new UnsignedField<2>((unsigned int &)mix.mltpx));
+ internalField.Append(new SpareBitsField<1>());
+ internalField.Append(new SignedField<16>(_weight));
+ internalField.Append(new SwitchField<8>(mix.swtch, board, version));
+ internalField.Append(new SignedField<8>(_curveParam));
+ internalField.Append(new UnsignedField<8>(mix.delayUp));
+ internalField.Append(new UnsignedField<8>(mix.delayDown));
+ internalField.Append(new UnsignedField<8>(mix.speedUp));
+ internalField.Append(new UnsignedField<8>(mix.speedDown));
+ internalField.Append(new SourceField<8>(mix.srcRaw, board, version, FLAG_NOTELEMETRY));
+ internalField.Append(new SignedField<16>(_offset));
+ internalField.Append(new ZCharField<6>(mix.name));
+ }
+ else if (IS_ARM(board)) {
+ internalField.Append(new UnsignedField<8>(_destCh));
+ internalField.Append(new UnsignedField<16>(mix.phases));
+ internalField.Append(new BoolField<1>(_curveMode));
+ internalField.Append(new BoolField<1>(mix.noExpo));
+ internalField.Append(new SignedField<3>(mix.carryTrim));
+ internalField.Append(new UnsignedField<2>((unsigned int &)mix.mltpx));
+ if (version >= 214)
+ internalField.Append(new SpareBitsField<1>());
+ else
+ internalField.Append(new UnsignedField<1>(_offsetMode));
+ internalField.Append(new SignedField<16>(_weight));
+ internalField.Append(new SwitchField<8>(mix.swtch, board, version));
+ internalField.Append(new SignedField<8>(_curveParam));
+ if (version >= 214) {
+ internalField.Append(new UnsignedField<4>(mix.mixWarn));
+ internalField.Append(new SpareBitsField<4>());
+ }
+ else {
+ internalField.Append(new UnsignedField<8>(mix.mixWarn));
+ }
+ internalField.Append(new UnsignedField<8>(mix.delayUp));
+ internalField.Append(new UnsignedField<8>(mix.delayDown));
+ internalField.Append(new UnsignedField<8>(mix.speedUp));
+ internalField.Append(new UnsignedField<8>(mix.speedDown));
+ internalField.Append(new SourceField<8>(mix.srcRaw, board, version, FLAG_NOTELEMETRY));
+ if (version >= 214)
+ internalField.Append(new SignedField<16>(_offset));
+ else
+ internalField.Append(new SignedField<8>(_offset));
+ if (HAS_LARGE_LCD(board)) {
+ internalField.Append(new ZCharField<8>(mix.name));
+ internalField.Append(new SpareBitsField<16>());
+ }
+ else {
+ internalField.Append(new ZCharField<6>(mix.name));
+ }
+ }
+ else if (IS_DBLRAM(board, version) && IS_AFTER_RELEASE_23_MARCH_2013(board, version)) {
+ internalField.Append(new UnsignedField<4>(_destCh));
+ internalField.Append(new BoolField<1>(_curveMode));
+ internalField.Append(new BoolField<1>(mix.noExpo));
+ internalField.Append(new UnsignedField<1>(_weightMode));
+ internalField.Append(new UnsignedField<1>(_offsetMode));
+ internalField.Append(new SourceField<8>(mix.srcRaw, board, version, FLAG_NOTELEMETRY));
+ internalField.Append(new SignedField<8>(_weight));
+ internalField.Append(new SwitchField<8>(mix.swtch, board, version));
+ internalField.Append(new UnsignedField<8>(mix.phases));
+ internalField.Append(new UnsignedField<2>((unsigned int &)mix.mltpx));
+ internalField.Append(new SignedField<3>(mix.carryTrim));
+ internalField.Append(new UnsignedField<2>(mix.mixWarn));
+ internalField.Append(new SpareBitsField<1>());
+ internalField.Append(new UnsignedField<4>(mix.delayUp));
+ internalField.Append(new UnsignedField<4>(mix.delayDown));
+ internalField.Append(new UnsignedField<4>(mix.speedUp));
+ internalField.Append(new UnsignedField<4>(mix.speedDown));
+ internalField.Append(new SignedField<8>(_curveParam));
+ internalField.Append(new SignedField<8>(_offset));
+ }
+ else {
+ internalField.Append(new UnsignedField<4>(_destCh));
+ internalField.Append(new BoolField<1>(_curveMode));
+ internalField.Append(new BoolField<1>(mix.noExpo));
+ internalField.Append(new UnsignedField<1>(_weightMode));
+ internalField.Append(new UnsignedField<1>(_offsetMode));
+ internalField.Append(new SignedField<8>(_weight));
+ internalField.Append(new SwitchField<6>(mix.swtch, board, version));
+ internalField.Append(new UnsignedField<2>((unsigned int &)mix.mltpx));
+ internalField.Append(new UnsignedField<5>(mix.phases));
+ internalField.Append(new SignedField<3>(mix.carryTrim));
+ internalField.Append(new SourceField<6>(mix.srcRaw, board, version, FLAG_NOTELEMETRY));
+ internalField.Append(new UnsignedField<2>(mix.mixWarn));
+ internalField.Append(new UnsignedField<4>(mix.delayUp));
+ internalField.Append(new UnsignedField<4>(mix.delayDown));
+ internalField.Append(new UnsignedField<4>(mix.speedUp));
+ internalField.Append(new UnsignedField<4>(mix.speedDown));
+ internalField.Append(new SignedField<8>(_curveParam));
+ internalField.Append(new SignedField<8>(_offset));
+ }
+ }
+
+ virtual void beforeExport()
+ {
+ if (mix.destCh && mix.srcRaw.type != SOURCE_TYPE_NONE) {
+ _destCh = mix.destCh - 1;
+ if (mix.curve.type == CurveReference::CURVE_REF_CUSTOM) {
+ _curveMode = true;
+ _curveParam = 6 + mix.curve.value;
+ }
+ else if (mix.curve.type == CurveReference::CURVE_REF_FUNC) {
+ _curveMode = true;
+ _curveParam = mix.curve.value;
+ }
+ else if (mix.curve.type == CurveReference::CURVE_REF_DIFF) {
+ _curveMode = 0;
+ _curveParam = smallGvarToEEPROM(mix.curve.value);
+ }
+ }
+ else {
+ mix.clear();
+ _destCh = 0;
+ _curveMode = 0;
+ _curveParam = 0;
+ }
+
+ if (IS_ARM(board)) {
+ exportGvarParam(mix.weight, _weight, version);
+ if (version >= 214)
+ exportGvarParam(mix.sOffset, _offset, version);
+ else
+ splitGvarParam(mix.sOffset, _offset, _offsetMode, board, version);
+ }
+ else {
+ splitGvarParam(mix.weight, _weight, _weightMode, board, version);
+ splitGvarParam(mix.sOffset, _offset, _offsetMode, board, version);
+ }
+ }
+
+ virtual void afterImport()
+ {
+ if (IS_TARANIS(board) && version < 216) {
+ if (mix.srcRaw.type == SOURCE_TYPE_STICK && mix.srcRaw.index < NUM_STICKS) {
+ if (!mix.noExpo) {
+ mix.srcRaw = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, mix.srcRaw.index, model);
+ }
+ }
+ }
+
+ if (mix.srcRaw.type != SOURCE_TYPE_NONE) {
+ mix.destCh = _destCh + 1;
+ if (!IS_ARM(board) || version < 216) {
+ if (!_curveMode)
+ mix.curve = CurveReference(CurveReference::CURVE_REF_DIFF, smallGvarToC9x(_curveParam));
+ else if (_curveParam > 6)
+ mix.curve = CurveReference(CurveReference::CURVE_REF_CUSTOM, _curveParam-6);
+ else
+ mix.curve = CurveReference(CurveReference::CURVE_REF_FUNC, _curveParam);
+ }
+ }
+
+ if (IS_ARM(board)) {
+ importGvarParam(mix.weight, _weight, version);
+ if (version >= 214)
+ importGvarParam(mix.sOffset, _offset, version);
+ else
+ concatGvarParam(mix.sOffset, _offset, _offsetMode, board, version);
+ }
+ else {
+ concatGvarParam(mix.weight, _weight, _weightMode, board, version);
+ concatGvarParam(mix.sOffset, _offset, _offsetMode, board, version);
+ }
+
+ if (IS_TARANIS(board) && version < 216) {
+ if (mix.sOffset >= -500 && mix.sOffset <= 500 && mix.weight >= -500 && mix.weight <= 500) {
+ mix.sOffset = divRoundClosest(mix.sOffset * mix.weight, 100);
+ }
+ if (mix.carryTrim < 0) mix.carryTrim = 0;
+ }
+ }
+
+ protected:
+ StructField internalField;
+ MixData & mix;
+ BoardEnum board;
+ unsigned int version;
+ ModelData * model;
+ unsigned int _destCh;
+ bool _curveMode;
+ int _curveParam;
+ int _weight;
+ int _offset;
+ unsigned int _weightMode;
+ unsigned int _offsetMode;
+};
+
+class InputField: public TransformedField {
+ public:
+ InputField(ExpoData & expo, BoardEnum board, unsigned int version):
+ TransformedField(internalField),
+ internalField("Input"),
+ expo(expo),
+ board(board),
+ version(version)
+ {
+ if (IS_TARANIS(board) && version >= 216) {
+ internalField.Append(new SourceField<8>(expo.srcRaw, board, version, 0));
+ internalField.Append(new UnsignedField<16>(expo.scale, "Scale"));
+ internalField.Append(new UnsignedField<8>(expo.chn, "Channel"));
+ internalField.Append(new SwitchField<8>(expo.swtch, board, version));
+ internalField.Append(new UnsignedField<16>(expo.phases));
+ internalField.Append(new SignedField<8>(_weight, "Weight"));
+ internalField.Append(new SignedField<6>(expo.carryTrim, "CarryTrim"));
+ internalField.Append(new UnsignedField<2>(expo.mode, "Mode"));
+ internalField.Append(new ZCharField<8>(expo.name));
+ internalField.Append(new SignedField<8>(expo.offset, "Offset"));
+ internalField.Append(new CurveReferenceField(expo.curve, board, version));
+ internalField.Append(new SpareBitsField<8>());
+ }
+ else if (IS_ARM(board) && version >= 216) {
+ internalField.Append(new UnsignedField<2>(expo.mode, "Mode"));
+ internalField.Append(new UnsignedField<4>(expo.chn, "Channel"));
+ internalField.Append(new BoolField<2>(_curveMode));
+ internalField.Append(new SwitchField<8>(expo.swtch, board, version));
+ internalField.Append(new UnsignedField<16>(expo.phases, "Phases"));
+ internalField.Append(new SignedField<8>(_weight, "Weight"));
+ internalField.Append(new ZCharField<6>(expo.name));
+ internalField.Append(new SignedField<8>(_curveParam));
+ }
+ else if (IS_ARM(board)) {
+ internalField.Append(new UnsignedField<8>(expo.mode, "Mode"));
+ internalField.Append(new UnsignedField<8>(expo.chn, "Channel"));
+ internalField.Append(new SwitchField<8>(expo.swtch, board, version));
+ internalField.Append(new UnsignedField<16>(expo.phases, "Phases"));
+ internalField.Append(new SignedField<8>(_weight, "Weight"));
+ internalField.Append(new BoolField<8>(_curveMode));
+ if (HAS_LARGE_LCD(board)) {
+ internalField.Append(new ZCharField<8>(expo.name));
+ internalField.Append(new SpareBitsField<16>());
+ }
+ else {
+ internalField.Append(new ZCharField<6>(expo.name));
+ }
+ internalField.Append(new SignedField<8>(_curveParam));
+ }
+ else if (IS_DBLRAM(board, version) && IS_AFTER_RELEASE_23_MARCH_2013(board, version)) {
+ internalField.Append(new UnsignedField<2>(expo.mode));
+ internalField.Append(new UnsignedField<2>(expo.chn));
+ internalField.Append(new BoolField<1>(_curveMode));
+ internalField.Append(new SpareBitsField<3>());
+ internalField.Append(new UnsignedField<8>(expo.phases));
+ internalField.Append(new SwitchField<8>(expo.swtch, board, version));
+ internalField.Append(new SignedField<8>(_weight));
+ internalField.Append(new SignedField<8>(_curveParam));
+ }
+ else {
+ internalField.Append(new UnsignedField<2>(expo.mode));
+ internalField.Append(new SwitchField<6>(expo.swtch, board, version));
+ internalField.Append(new UnsignedField<2>(expo.chn));
+ internalField.Append(new UnsignedField<5>(expo.phases));
+ internalField.Append(new BoolField<1>(_curveMode));
+ internalField.Append(new SignedField<8>(_weight));
+ internalField.Append(new SignedField<8>(_curveParam));
+ }
+ }
+
+ virtual void beforeExport()
+ {
+ _weight = smallGvarToEEPROM(expo.weight);
+
+ if (!IS_TARANIS(board) || version < 216) {
+ if (expo.curve.type==CurveReference::CURVE_REF_FUNC && expo.curve.value) {
+ _curveMode = true;
+ _curveParam = expo.curve.value;
+ }
+ else if (expo.curve.type==CurveReference::CURVE_REF_CUSTOM && expo.curve.value) {
+ _curveMode = true;
+ _curveParam = expo.curve.value+6;
+ }
+ else {
+ _curveMode = false;
+ _curveParam = smallGvarToEEPROM(expo.curve.value);
+ }
+ }
+ }
+
+ virtual void afterImport()
+ {
+ if (IS_TARANIS(board)) {
+ if (version < 216) {
+ if (expo.mode) {
+ expo.srcRaw = RawSource(SOURCE_TYPE_STICK, expo.chn);
+ }
+ }
+ }
+
+ expo.weight = smallGvarToC9x(_weight);
+
+ if (!IS_TARANIS(board) || version < 216) {
+ if (!_curveMode)
+ expo.curve = CurveReference(CurveReference::CURVE_REF_EXPO, smallGvarToC9x(_curveParam));
+ else if (_curveParam > 6)
+ expo.curve = CurveReference(CurveReference::CURVE_REF_CUSTOM, _curveParam-6);
+ else
+ expo.curve = CurveReference(CurveReference::CURVE_REF_FUNC, _curveParam);
+ }
+ }
+
+ protected:
+ StructField internalField;
+ ExpoData & expo;
+ BoardEnum board;
+ unsigned int version;
+ bool _curveMode;
+ int _weight;
+ int _curveParam;
+};
+
+class LimitField: public StructField {
+ public:
+ LimitField(LimitData & limit, BoardEnum board, unsigned int version):
+ StructField("Limit")
+ {
+ if (IS_TARANIS(board) && version >= 216) {
+ Append(new ConversionField< SignedField<16> >(limit.min, +1000));
+ Append(new ConversionField< SignedField<16> >(limit.max, -1000));
+ }
+ else {
+ Append(new ConversionField< SignedField<8> >(limit.min, +100, 10));
+ Append(new ConversionField< SignedField<8> >(limit.max, -100, 10));
+ }
+ Append(new SignedField<8>(limit.ppmCenter));
+ Append(new SignedField<14>(limit.offset));
+ Append(new BoolField<1>(limit.symetrical));
+ Append(new BoolField<1>(limit.revert));
+ if (HAS_LARGE_LCD(board)) {
+ Append(new ZCharField<6>(limit.name));
+ }
+ if (IS_TARANIS(board) && version >= 216) {
+ Append(new SignedField<8>(limit.curve.value));
+ }
+ }
+};
+
+class CurvesField: public TransformedField {
+ public:
+ CurvesField(CurveData * curves, BoardEnum board, unsigned int version):
+ TransformedField(internalField),
+ internalField("Curves"),
+ curves(curves),
+ board(board),
+ version(version),
+ maxCurves(MAX_CURVES(board, version)),
+ maxPoints(IS_ARM(board) ? O9X_ARM_NUM_POINTS : O9X_NUM_POINTS)
+ {
+ for (int i=0; i= 216) {
+ internalField.Append(new UnsignedField<3>((unsigned int &)curves[i].type));
+ internalField.Append(new BoolField<1>(curves[i].smooth));
+ internalField.Append(new SpareBitsField<4>());
+ internalField.Append(new ConversionField< SignedField<8> >(curves[i].count, -5));
+ }
+ else if (IS_ARM(board)) {
+ internalField.Append(new SignedField<16>(_curves[i]));
+ }
+ else {
+ internalField.Append(new SignedField<8>(_curves[i]));
+ }
+ }
+
+ for (int i=0; i(_points[i]));
+ }
+ }
+
+ virtual void beforeExport()
+ {
+ memset(_points, 0, sizeof(_points));
+
+ int * cur = &_points[0];
+ int offset = 0;
+
+ for (int i=0; itype == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count);
+ if (offset+size > maxPoints) {
+ EEPROMWarnings += ::QObject::tr("OpenTX only accepts %1 points in all curves").arg(maxPoints) + "\n";
+ break;
+ }
+ if (!IS_TARANIS(board) || version < 216) {
+ _curves[i] = offset - (5*i);
+ }
+ for (int j=0; jcount; j++) {
+ *cur++ = curve->points[j].y;
+ }
+ if (curve->type == CurveData::CURVE_TYPE_CUSTOM) {
+ for (int j=1; jcount-1; j++) {
+ *cur++ = curve->points[j].x;
+ }
+ }
+ offset += size;
+ }
+ }
+
+ virtual void afterImport()
+ {
+ int * cur = &_points[0];
+
+ for (int i=0; icount = (size / 2) + 1;
+ curve->type = CurveData::CURVE_TYPE_CUSTOM;
+ }
+ else {
+ curve->count = size;
+ curve->type = CurveData::CURVE_TYPE_STANDARD;
+ }
+ }
+
+ if (curve->count > 17) {
+ qDebug() << "Wrong points count" << curve->count;
+ curve->count = 0;
+ for (int j=0; jclear(5);
+ }
+ return;
+ }
+
+ for (int j=0; j | |