mirror of
https://github.com/opentx/opentx.git
synced 2025-07-24 08:45:24 +03:00
Merge branch 'next'
This commit is contained in:
parent
b9ee1d5dee
commit
61addd3d4e
42 changed files with 1291 additions and 1185 deletions
|
@ -133,7 +133,7 @@ Eric Burdis
|
||||||
Nigel Chippindale
|
Nigel Chippindale
|
||||||
Michael Deasy
|
Michael Deasy
|
||||||
Stephen Stough
|
Stephen Stough
|
||||||
Kenneth Lilja
|
Kenneth Lilja (monthly)
|
||||||
Robert Jero
|
Robert Jero
|
||||||
Gary Bancroft
|
Gary Bancroft
|
||||||
Robert Cotsford
|
Robert Cotsford
|
||||||
|
@ -386,3 +386,6 @@ Wilco Hijink
|
||||||
Roy Nixon
|
Roy Nixon
|
||||||
Lexington S Morley
|
Lexington S Morley
|
||||||
Daryl Dacko
|
Daryl Dacko
|
||||||
|
Beat Zurflueh
|
||||||
|
Piotr Kundu
|
||||||
|
Kevin Berkefeld
|
||||||
|
|
|
@ -76,7 +76,7 @@ void CompareDialog::printDiff()
|
||||||
{
|
{
|
||||||
te->clear();
|
te->clear();
|
||||||
printSetup();
|
printSetup();
|
||||||
if (GetCurrentFirmware()->getCapability(FlightPhases)) {
|
if (GetCurrentFirmware()->getCapability(FlightModes)) {
|
||||||
printPhases();
|
printPhases();
|
||||||
}
|
}
|
||||||
printExpos();
|
printExpos();
|
||||||
|
@ -309,7 +309,7 @@ void CompareDialog::printPhases()
|
||||||
str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getInputStr(*g_model1, i)));
|
str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getInputStr(*g_model1, i)));
|
||||||
}
|
}
|
||||||
str.append("</tr>");
|
str.append("</tr>");
|
||||||
for (i=0; i<GetCurrentFirmware()->getCapability(FlightPhases); i++) {
|
for (i=0; i<GetCurrentFirmware()->getCapability(FlightModes); i++) {
|
||||||
PhaseData *pd1=&g_model1->phaseData[i];
|
PhaseData *pd1=&g_model1->phaseData[i];
|
||||||
PhaseData *pd2=&g_model2->phaseData[i];
|
PhaseData *pd2=&g_model2->phaseData[i];
|
||||||
str.append("<tr><td><b>"+tr("FM")+QString("%1</b> ").arg(i));
|
str.append("<tr><td><b>"+tr("FM")+QString("%1</b> ").arg(i));
|
||||||
|
@ -346,10 +346,10 @@ void CompareDialog::printPhases()
|
||||||
if (gvars==1) {
|
if (gvars==1) {
|
||||||
gvarnum=GetCurrentFirmware()->getCapability(Gvars);
|
gvarnum=GetCurrentFirmware()->getCapability(Gvars);
|
||||||
}
|
}
|
||||||
if ((gvars==1 && GetCurrentFirmware()->getCapability(GvarsFlightPhases)) || GetCurrentFirmware()->getCapability(RotaryEncoders)) {
|
if ((gvars==1 && GetCurrentFirmware()->getCapability(GvarsFlightModes)) || GetCurrentFirmware()->getCapability(RotaryEncoders)) {
|
||||||
str.append("<br><table border=1 cellspacing=0 cellpadding=1 width=\"100%\">");
|
str.append("<br><table border=1 cellspacing=0 cellpadding=1 width=\"100%\">");
|
||||||
str.append("<tr><td style=\"border-style:none;\"> </td>");
|
str.append("<tr><td style=\"border-style:none;\"> </td>");
|
||||||
if (GetCurrentFirmware()->getCapability(GvarsFlightPhases)) {
|
if (GetCurrentFirmware()->getCapability(GvarsFlightModes)) {
|
||||||
|
|
||||||
str.append(QString("<td colspan=%1 align=center><b>").arg(gvarnum)+tr("Gvars")+"</td>");
|
str.append(QString("<td colspan=%1 align=center><b>").arg(gvarnum)+tr("Gvars")+"</td>");
|
||||||
}
|
}
|
||||||
|
@ -357,7 +357,7 @@ void CompareDialog::printPhases()
|
||||||
str.append(QString("<td colspan=%1 align=center><b>").arg(GetCurrentFirmware()->getCapability(RotaryEncoders))+tr("Rot. Enc.")+"</td>");
|
str.append(QString("<td colspan=%1 align=center><b>").arg(GetCurrentFirmware()->getCapability(RotaryEncoders))+tr("Rot. Enc.")+"</td>");
|
||||||
}
|
}
|
||||||
str.append("</tr><tr><td align=center><b>"+tr("Flight mode name")+"</b></td>");
|
str.append("</tr><tr><td align=center><b>"+tr("Flight mode name")+"</b></td>");
|
||||||
if (GetCurrentFirmware()->getCapability(GvarsFlightPhases)) {
|
if (GetCurrentFirmware()->getCapability(GvarsFlightModes)) {
|
||||||
for (i=0; i<gvarnum; i++) {
|
for (i=0; i<gvarnum; i++) {
|
||||||
str.append(QString("<td width=\"40\" align=\"center\"><b>GV%1</b><br>%2</td>").arg(i+1).arg(g_model1->gvars_names[i]));
|
str.append(QString("<td width=\"40\" align=\"center\"><b>GV%1</b><br>%2</td>").arg(i+1).arg(g_model1->gvars_names[i]));
|
||||||
}
|
}
|
||||||
|
@ -366,13 +366,13 @@ void CompareDialog::printPhases()
|
||||||
str.append(QString("<td align=\"center\"><b>RE%1</b></td>").arg((i==0 ? 'A': 'B')));
|
str.append(QString("<td align=\"center\"><b>RE%1</b></td>").arg((i==0 ? 'A': 'B')));
|
||||||
}
|
}
|
||||||
str.append("</tr>");
|
str.append("</tr>");
|
||||||
for (i=0; i<GetCurrentFirmware()->getCapability(FlightPhases); i++) {
|
for (i=0; i<GetCurrentFirmware()->getCapability(FlightModes); i++) {
|
||||||
PhaseData *pd1=&g_model1->phaseData[i];
|
PhaseData *pd1=&g_model1->phaseData[i];
|
||||||
PhaseData *pd2=&g_model2->phaseData[i];
|
PhaseData *pd2=&g_model2->phaseData[i];
|
||||||
str.append("<tr><td><b>"+tr("FM")+QString("%1</b> ").arg(i));
|
str.append("<tr><td><b>"+tr("FM")+QString("%1</b> ").arg(i));
|
||||||
color=getColor1(pd1->name,pd2->name);
|
color=getColor1(pd1->name,pd2->name);
|
||||||
str.append(QString("<font size=+1 face='Courier New' color=%2>%1</font></td>").arg(pd1->name).arg(color));
|
str.append(QString("<font size=+1 face='Courier New' color=%2>%1</font></td>").arg(pd1->name).arg(color));
|
||||||
if (GetCurrentFirmware()->getCapability(GvarsFlightPhases)) {
|
if (GetCurrentFirmware()->getCapability(GvarsFlightModes)) {
|
||||||
for (k=0; k<gvarnum; k++) {
|
for (k=0; k<gvarnum; k++) {
|
||||||
color=getColor1(pd1->gvars[k],pd2->gvars[k]);
|
color=getColor1(pd1->gvars[k],pd2->gvars[k]);
|
||||||
if (pd1->gvars[k]<=1024) {
|
if (pd1->gvars[k]<=1024) {
|
||||||
|
@ -411,7 +411,7 @@ void CompareDialog::printPhases()
|
||||||
str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getInputStr(*g_model1, i)));
|
str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getInputStr(*g_model1, i)));
|
||||||
}
|
}
|
||||||
str.append("</tr>");
|
str.append("</tr>");
|
||||||
for (i=0; i<GetCurrentFirmware()->getCapability(FlightPhases); i++) {
|
for (i=0; i<GetCurrentFirmware()->getCapability(FlightModes); i++) {
|
||||||
PhaseData *pd1=&g_model1->phaseData[i];
|
PhaseData *pd1=&g_model1->phaseData[i];
|
||||||
PhaseData *pd2=&g_model2->phaseData[i];
|
PhaseData *pd2=&g_model2->phaseData[i];
|
||||||
str.append("<tr><td><b>"+tr("FM")+QString("%1</b> ").arg(i));
|
str.append("<tr><td><b>"+tr("FM")+QString("%1</b> ").arg(i));
|
||||||
|
@ -436,17 +436,17 @@ void CompareDialog::printPhases()
|
||||||
}
|
}
|
||||||
str.append("</table>");
|
str.append("</table>");
|
||||||
|
|
||||||
if ((gvars==1 && GetCurrentFirmware()->getCapability(GvarsFlightPhases)) || GetCurrentFirmware()->getCapability(RotaryEncoders)) {
|
if ((gvars==1 && GetCurrentFirmware()->getCapability(GvarsFlightModes)) || GetCurrentFirmware()->getCapability(RotaryEncoders)) {
|
||||||
str.append("<br><table border=1 cellspacing=0 cellpadding=1 width=\"100%\">");
|
str.append("<br><table border=1 cellspacing=0 cellpadding=1 width=\"100%\">");
|
||||||
str.append("<tr><td style=\"border-style:none;\"> </td>");
|
str.append("<tr><td style=\"border-style:none;\"> </td>");
|
||||||
if (GetCurrentFirmware()->getCapability(GvarsFlightPhases)) {
|
if (GetCurrentFirmware()->getCapability(GvarsFlightModes)) {
|
||||||
str.append(QString("<td colspan=%1 align=center><b>").arg(gvarnum)+tr("Gvars")+"</td>");
|
str.append(QString("<td colspan=%1 align=center><b>").arg(gvarnum)+tr("Gvars")+"</td>");
|
||||||
}
|
}
|
||||||
if (GetCurrentFirmware()->getCapability(RotaryEncoders)) {
|
if (GetCurrentFirmware()->getCapability(RotaryEncoders)) {
|
||||||
str.append(QString("<td colspan=%1 align=center><b>").arg(GetCurrentFirmware()->getCapability(RotaryEncoders))+tr("Rot. Enc.")+"</td>");
|
str.append(QString("<td colspan=%1 align=center><b>").arg(GetCurrentFirmware()->getCapability(RotaryEncoders))+tr("Rot. Enc.")+"</td>");
|
||||||
}
|
}
|
||||||
str.append("</tr><tr><td align=center ><b>"+tr("Flight mode name")+"</b></td>");
|
str.append("</tr><tr><td align=center ><b>"+tr("Flight mode name")+"</b></td>");
|
||||||
if (GetCurrentFirmware()->getCapability(GvarsFlightPhases)) {
|
if (GetCurrentFirmware()->getCapability(GvarsFlightModes)) {
|
||||||
for (i=0; i<gvarnum; i++) {
|
for (i=0; i<gvarnum; i++) {
|
||||||
str.append(QString("<td width=\"40\" align=\"center\"><b>GV%1</b><br>%2</td>").arg(i+1).arg(g_model2->gvars_names[i]));
|
str.append(QString("<td width=\"40\" align=\"center\"><b>GV%1</b><br>%2</td>").arg(i+1).arg(g_model2->gvars_names[i]));
|
||||||
}
|
}
|
||||||
|
@ -455,13 +455,13 @@ void CompareDialog::printPhases()
|
||||||
str.append(QString("<td align=\"center\"><b>RE%1</b></td>").arg((i==0 ? 'A': 'B')));
|
str.append(QString("<td align=\"center\"><b>RE%1</b></td>").arg((i==0 ? 'A': 'B')));
|
||||||
}
|
}
|
||||||
str.append("</tr>");
|
str.append("</tr>");
|
||||||
for (i=0; i<GetCurrentFirmware()->getCapability(FlightPhases); i++) {
|
for (i=0; i<GetCurrentFirmware()->getCapability(FlightModes); i++) {
|
||||||
PhaseData *pd1=&g_model1->phaseData[i];
|
PhaseData *pd1=&g_model1->phaseData[i];
|
||||||
PhaseData *pd2=&g_model2->phaseData[i];
|
PhaseData *pd2=&g_model2->phaseData[i];
|
||||||
str.append("<tr><td><b>"+tr("FM")+QString("%1</b> ").arg(i));
|
str.append("<tr><td><b>"+tr("FM")+QString("%1</b> ").arg(i));
|
||||||
color=getColor1(pd1->name,pd2->name);
|
color=getColor1(pd1->name,pd2->name);
|
||||||
str.append(QString("<font size=+1 face='Courier New' color=%2>%1</font></td>").arg(pd2->name).arg(color));
|
str.append(QString("<font size=+1 face='Courier New' color=%2>%1</font></td>").arg(pd2->name).arg(color));
|
||||||
if (GetCurrentFirmware()->getCapability(GvarsFlightPhases)) {
|
if (GetCurrentFirmware()->getCapability(GvarsFlightModes)) {
|
||||||
for (k=0; k<gvarnum; k++) {
|
for (k=0; k<gvarnum; k++) {
|
||||||
color=getColor1(pd1->gvars[k],pd2->gvars[k]);
|
color=getColor1(pd1->gvars[k],pd2->gvars[k]);
|
||||||
if (pd2->gvars[k]<=1024) {
|
if (pd2->gvars[k]<=1024) {
|
||||||
|
@ -569,7 +569,7 @@ void CompareDialog::printGvars()
|
||||||
gvarnum=GetCurrentFirmware()->getCapability(Gvars);
|
gvarnum=GetCurrentFirmware()->getCapability(Gvars);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!GetCurrentFirmware()->getCapability(GvarsFlightPhases) && (gvars==1 && GetCurrentFirmware()->getCapability(Gvars))) {
|
if (!GetCurrentFirmware()->getCapability(GvarsFlightModes) && (gvars==1 && GetCurrentFirmware()->getCapability(Gvars))) {
|
||||||
QString str = "<table border=1 cellspacing=0 cellpadding=3 width=\"100%\">";
|
QString str = "<table border=1 cellspacing=0 cellpadding=3 width=\"100%\">";
|
||||||
str.append("<tr><td colspan=2><h2>"+tr("Global Variables")+"</h2></td></tr>");
|
str.append("<tr><td colspan=2><h2>"+tr("Global Variables")+"</h2></td></tr>");
|
||||||
str.append("<tr><td width=50%>");
|
str.append("<tr><td width=50%>");
|
||||||
|
@ -653,12 +653,12 @@ void CompareDialog::printExpos()
|
||||||
str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight)).rightJustified(6, ' ');
|
str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight)).rightJustified(6, ' ');
|
||||||
str += ed->curve.toString().replace("<", "<").replace(">", ">");
|
str += ed->curve.toString().replace("<", "<").replace(">", ">");
|
||||||
|
|
||||||
if (GetCurrentFirmware()->getCapability(FlightPhases)) {
|
if (GetCurrentFirmware()->getCapability(FlightModes)) {
|
||||||
if(ed->phases) {
|
if(ed->phases) {
|
||||||
if (ed->phases!=(unsigned int)(1<<GetCurrentFirmware()->getCapability(FlightPhases))-1) {
|
if (ed->phases!=(unsigned int)(1<<GetCurrentFirmware()->getCapability(FlightModes))-1) {
|
||||||
int mask=1;
|
int mask=1;
|
||||||
int first=0;
|
int first=0;
|
||||||
for (int i=0; i<GetCurrentFirmware()->getCapability(FlightPhases);i++) {
|
for (int i=0; i<GetCurrentFirmware()->getCapability(FlightModes);i++) {
|
||||||
if (!(ed->phases & mask)) {
|
if (!(ed->phases & mask)) {
|
||||||
first++;
|
first++;
|
||||||
}
|
}
|
||||||
|
@ -671,7 +671,7 @@ void CompareDialog::printExpos()
|
||||||
}
|
}
|
||||||
mask=1;
|
mask=1;
|
||||||
first=1;
|
first=1;
|
||||||
for (int j=0; j<GetCurrentFirmware()->getCapability(FlightPhases);j++) {
|
for (int j=0; j<GetCurrentFirmware()->getCapability(FlightModes);j++) {
|
||||||
if (!(ed->phases & mask)) {
|
if (!(ed->phases & mask)) {
|
||||||
PhaseData *pd = &g_model1->phaseData[j];
|
PhaseData *pd = &g_model1->phaseData[j];
|
||||||
if (!first) {
|
if (!first) {
|
||||||
|
@ -731,12 +731,12 @@ void CompareDialog::printExpos()
|
||||||
str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight)).rightJustified(6, ' ');
|
str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight)).rightJustified(6, ' ');
|
||||||
str += ed->curve.toString().replace("<", "<").replace(">", ">");
|
str += ed->curve.toString().replace("<", "<").replace(">", ">");
|
||||||
|
|
||||||
if (GetCurrentFirmware()->getCapability(FlightPhases)) {
|
if (GetCurrentFirmware()->getCapability(FlightModes)) {
|
||||||
if(ed->phases) {
|
if(ed->phases) {
|
||||||
if (ed->phases!=(unsigned int)(1<<GetCurrentFirmware()->getCapability(FlightPhases))-1) {
|
if (ed->phases!=(unsigned int)(1<<GetCurrentFirmware()->getCapability(FlightModes))-1) {
|
||||||
int mask=1;
|
int mask=1;
|
||||||
int first=0;
|
int first=0;
|
||||||
for (int i=0; i<GetCurrentFirmware()->getCapability(FlightPhases);i++) {
|
for (int i=0; i<GetCurrentFirmware()->getCapability(FlightModes);i++) {
|
||||||
if (!(ed->phases & mask)) {
|
if (!(ed->phases & mask)) {
|
||||||
first++;
|
first++;
|
||||||
}
|
}
|
||||||
|
@ -749,7 +749,7 @@ void CompareDialog::printExpos()
|
||||||
}
|
}
|
||||||
mask=1;
|
mask=1;
|
||||||
first=1;
|
first=1;
|
||||||
for (int j=0; j<GetCurrentFirmware()->getCapability(FlightPhases);j++) {
|
for (int j=0; j<GetCurrentFirmware()->getCapability(FlightModes);j++) {
|
||||||
if (!(ed->phases & mask)) {
|
if (!(ed->phases & mask)) {
|
||||||
PhaseData *pd = &g_model2->phaseData[j];
|
PhaseData *pd = &g_model2->phaseData[j];
|
||||||
if (!first) {
|
if (!first) {
|
||||||
|
@ -829,12 +829,12 @@ void CompareDialog::printMixers()
|
||||||
if (md->delayDown || md->delayUp) str += tr(" Delay(u%1:d%2)").arg(md->delayUp/scale).arg(md->delayDown/scale);
|
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->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);
|
if (md->mixWarn) str += " "+tr("Warn")+QString("(%1)").arg(md->mixWarn);
|
||||||
if (GetCurrentFirmware()->getCapability(FlightPhases)) {
|
if (GetCurrentFirmware()->getCapability(FlightModes)) {
|
||||||
if(md->phases) {
|
if(md->phases) {
|
||||||
if (md->phases!=(unsigned int)(1<<GetCurrentFirmware()->getCapability(FlightPhases))-1) {
|
if (md->phases!=(unsigned int)(1<<GetCurrentFirmware()->getCapability(FlightModes))-1) {
|
||||||
int mask=1;
|
int mask=1;
|
||||||
int first=0;
|
int first=0;
|
||||||
for (int i=0; i<GetCurrentFirmware()->getCapability(FlightPhases);i++) {
|
for (int i=0; i<GetCurrentFirmware()->getCapability(FlightModes);i++) {
|
||||||
if (!(md->phases & mask)) {
|
if (!(md->phases & mask)) {
|
||||||
first++;
|
first++;
|
||||||
}
|
}
|
||||||
|
@ -847,7 +847,7 @@ void CompareDialog::printMixers()
|
||||||
}
|
}
|
||||||
mask=1;
|
mask=1;
|
||||||
first=1;
|
first=1;
|
||||||
for (int j=0; j<GetCurrentFirmware()->getCapability(FlightPhases);j++) {
|
for (int j=0; j<GetCurrentFirmware()->getCapability(FlightModes);j++) {
|
||||||
if (!(md->phases & mask)) {
|
if (!(md->phases & mask)) {
|
||||||
PhaseData *pd = &g_model1->phaseData[j];
|
PhaseData *pd = &g_model1->phaseData[j];
|
||||||
if (!first) {
|
if (!first) {
|
||||||
|
@ -908,12 +908,12 @@ void CompareDialog::printMixers()
|
||||||
if (md->delayDown || md->delayUp) str += tr(" Delay(u%1:d%2)").arg(md->delayUp/scale).arg(md->delayDown/scale);
|
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->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);
|
if (md->mixWarn) str += " "+tr("Warn")+QString("(%1)").arg(md->mixWarn);
|
||||||
if (GetCurrentFirmware()->getCapability(FlightPhases)) {
|
if (GetCurrentFirmware()->getCapability(FlightModes)) {
|
||||||
if(md->phases) {
|
if(md->phases) {
|
||||||
if (md->phases!=(unsigned int)(1<<GetCurrentFirmware()->getCapability(FlightPhases))-1) {
|
if (md->phases!=(unsigned int)(1<<GetCurrentFirmware()->getCapability(FlightModes))-1) {
|
||||||
int mask=1;
|
int mask=1;
|
||||||
int first=0;
|
int first=0;
|
||||||
for (int i=0; i<GetCurrentFirmware()->getCapability(FlightPhases);i++) {
|
for (int i=0; i<GetCurrentFirmware()->getCapability(FlightModes);i++) {
|
||||||
if (!(md->phases & mask)) {
|
if (!(md->phases & mask)) {
|
||||||
first++;
|
first++;
|
||||||
}
|
}
|
||||||
|
@ -926,7 +926,7 @@ void CompareDialog::printMixers()
|
||||||
}
|
}
|
||||||
mask=1;
|
mask=1;
|
||||||
first=1;
|
first=1;
|
||||||
for (int j=0; j<GetCurrentFirmware()->getCapability(FlightPhases);j++) {
|
for (int j=0; j<GetCurrentFirmware()->getCapability(FlightModes);j++) {
|
||||||
if (!(md->phases & mask)) {
|
if (!(md->phases & mask)) {
|
||||||
PhaseData *pd = &g_model2->phaseData[j];
|
PhaseData *pd = &g_model2->phaseData[j];
|
||||||
if (!first) {
|
if (!first) {
|
||||||
|
|
|
@ -200,8 +200,8 @@ RawSourceRange RawSource::getRange(bool singleprec)
|
||||||
result.decimals = 1;
|
result.decimals = 1;
|
||||||
break;
|
break;
|
||||||
case TELEMETRY_SOURCE_CONSUMPTION:
|
case TELEMETRY_SOURCE_CONSUMPTION:
|
||||||
result.step = singleprec ? 20 : 1;
|
result.step = singleprec ? 100 : 1;
|
||||||
result.max = singleprec ? 5100 : 10000;
|
result.max = singleprec ? 25500 : 10000;
|
||||||
break;
|
break;
|
||||||
case TELEMETRY_SOURCE_POWER:
|
case TELEMETRY_SOURCE_POWER:
|
||||||
case TELEMETRY_SOURCE_POWER_MAX:
|
case TELEMETRY_SOURCE_POWER_MAX:
|
||||||
|
@ -272,7 +272,7 @@ QString RawSource::toString()
|
||||||
QObject::tr("ACC"), QObject::tr("Time"),
|
QObject::tr("ACC"), QObject::tr("Time"),
|
||||||
};
|
};
|
||||||
|
|
||||||
static const QString virtualSwitches[] = {
|
static const QString logicalSwitches[] = {
|
||||||
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("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("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("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"),
|
||||||
|
@ -302,7 +302,7 @@ QString RawSource::toString()
|
||||||
case SOURCE_TYPE_SWITCH:
|
case SOURCE_TYPE_SWITCH:
|
||||||
return (IS_TARANIS(GetEepromInterface()->getBoard()) ? CHECK_IN_ARRAY(switchesX9D, index) : CHECK_IN_ARRAY(switches9X, index));
|
return (IS_TARANIS(GetEepromInterface()->getBoard()) ? CHECK_IN_ARRAY(switchesX9D, index) : CHECK_IN_ARRAY(switches9X, index));
|
||||||
case SOURCE_TYPE_CUSTOM_SWITCH:
|
case SOURCE_TYPE_CUSTOM_SWITCH:
|
||||||
return virtualSwitches[index];
|
return logicalSwitches[index];
|
||||||
case SOURCE_TYPE_CYC:
|
case SOURCE_TYPE_CYC:
|
||||||
return QObject::tr("CYC%1").arg(index+1);
|
return QObject::tr("CYC%1").arg(index+1);
|
||||||
case SOURCE_TYPE_PPM:
|
case SOURCE_TYPE_PPM:
|
||||||
|
@ -349,13 +349,17 @@ QString RawSwitch::toString()
|
||||||
SwitchUp('H'), SwitchDn('H'),
|
SwitchUp('H'), SwitchDn('H'),
|
||||||
};
|
};
|
||||||
|
|
||||||
static const QString virtualSwitches[] = {
|
static const QString logicalSwitches[] = {
|
||||||
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("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("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("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")
|
QObject::tr("L31"), QObject::tr("L32")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const QString flightModes[] = {
|
||||||
|
QObject::tr("FM0"), QObject::tr("FM1"), QObject::tr("FM2"), QObject::tr("FM3"), QObject::tr("FM4"), QObject::tr("FM5"), QObject::tr("FM6"), QObject::tr("FM7"), QObject::tr("FM8")
|
||||||
|
};
|
||||||
|
|
||||||
static const QString multiposPots[] = {
|
static const QString multiposPots[] = {
|
||||||
QObject::tr("S11"), QObject::tr("S12"), QObject::tr("S13"), QObject::tr("S14"), QObject::tr("S15"), QObject::tr("S16"),
|
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("S21"), QObject::tr("S22"), QObject::tr("S23"), QObject::tr("S24"), QObject::tr("S25"), QObject::tr("S26"),
|
||||||
|
@ -389,7 +393,7 @@ QString RawSwitch::toString()
|
||||||
else
|
else
|
||||||
return CHECK_IN_ARRAY(switches9X, index-1);
|
return CHECK_IN_ARRAY(switches9X, index-1);
|
||||||
case SWITCH_TYPE_VIRTUAL:
|
case SWITCH_TYPE_VIRTUAL:
|
||||||
return CHECK_IN_ARRAY(virtualSwitches, index-1);
|
return CHECK_IN_ARRAY(logicalSwitches, index-1);
|
||||||
case SWITCH_TYPE_MULTIPOS_POT:
|
case SWITCH_TYPE_MULTIPOS_POT:
|
||||||
return CHECK_IN_ARRAY(multiposPots, index-1);
|
return CHECK_IN_ARRAY(multiposPots, index-1);
|
||||||
case SWITCH_TYPE_TRIM:
|
case SWITCH_TYPE_TRIM:
|
||||||
|
@ -400,6 +404,8 @@ QString RawSwitch::toString()
|
||||||
return QObject::tr("ON");
|
return QObject::tr("ON");
|
||||||
case SWITCH_TYPE_OFF:
|
case SWITCH_TYPE_OFF:
|
||||||
return QObject::tr("OFF");
|
return QObject::tr("OFF");
|
||||||
|
case SWITCH_TYPE_FLIGHT_MODE:
|
||||||
|
return CHECK_IN_ARRAY(flightModes, index-1);
|
||||||
case SWITCH_TYPE_NONE:
|
case SWITCH_TYPE_NONE:
|
||||||
return QObject::tr("----");
|
return QObject::tr("----");
|
||||||
case SWITCH_TYPE_TIMER_MODE:
|
case SWITCH_TYPE_TIMER_MODE:
|
||||||
|
@ -1060,7 +1066,7 @@ void ModelData::clear()
|
||||||
moduleData[0].protocol=PPM;
|
moduleData[0].protocol=PPM;
|
||||||
moduleData[1].protocol=OFF;
|
moduleData[1].protocol=OFF;
|
||||||
}
|
}
|
||||||
for (int i=0; i<C9X_MAX_PHASES; i++)
|
for (int i=0; i<C9X_MAX_FLIGHT_MODES; i++)
|
||||||
phaseData[i].clear();
|
phaseData[i].clear();
|
||||||
clearInputs();
|
clearInputs();
|
||||||
clearMixes();
|
clearMixes();
|
||||||
|
@ -1130,7 +1136,7 @@ void ModelData::setDefaultValues(unsigned int id, const GeneralSettings & settin
|
||||||
int ModelData::getTrimValue(int phaseIdx, int trimIdx)
|
int ModelData::getTrimValue(int phaseIdx, int trimIdx)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
for (int i=0; i<C9X_MAX_PHASES; i++) {
|
for (int i=0; i<C9X_MAX_FLIGHT_MODES; i++) {
|
||||||
PhaseData & phase = phaseData[phaseIdx];
|
PhaseData & phase = phaseData[phaseIdx];
|
||||||
if (phase.trimMode[trimIdx] < 0) {
|
if (phase.trimMode[trimIdx] < 0) {
|
||||||
return result;
|
return result;
|
||||||
|
@ -1153,7 +1159,7 @@ int ModelData::getTrimValue(int phaseIdx, int trimIdx)
|
||||||
|
|
||||||
void ModelData::setTrimValue(int phaseIdx, int trimIdx, int value)
|
void ModelData::setTrimValue(int phaseIdx, int trimIdx, int value)
|
||||||
{
|
{
|
||||||
for (uint8_t i=0; i<C9X_MAX_PHASES; i++) {
|
for (uint8_t i=0; i<C9X_MAX_FLIGHT_MODES; i++) {
|
||||||
PhaseData & phase = phaseData[phaseIdx];
|
PhaseData & phase = phaseData[phaseIdx];
|
||||||
int mode = phase.trimMode[trimIdx];
|
int mode = phase.trimMode[trimIdx];
|
||||||
int p = phase.trimRef[trimIdx];
|
int p = phase.trimRef[trimIdx];
|
||||||
|
|
|
@ -64,7 +64,7 @@ const uint8_t modn12x3[4][4]= {
|
||||||
{4, 3, 2, 1} };
|
{4, 3, 2, 1} };
|
||||||
|
|
||||||
#define C9X_MAX_MODELS 60
|
#define C9X_MAX_MODELS 60
|
||||||
#define C9X_MAX_PHASES 9
|
#define C9X_MAX_FLIGHT_MODES 9
|
||||||
#define C9X_MAX_MIXERS 64
|
#define C9X_MAX_MIXERS 64
|
||||||
#define C9X_MAX_INPUTS 32
|
#define C9X_MAX_INPUTS 32
|
||||||
#define C9X_MAX_EXPOS 64
|
#define C9X_MAX_EXPOS 64
|
||||||
|
@ -369,6 +369,7 @@ enum RawSwitchType {
|
||||||
SWITCH_TYPE_ROTARY_ENCODER,
|
SWITCH_TYPE_ROTARY_ENCODER,
|
||||||
SWITCH_TYPE_ON,
|
SWITCH_TYPE_ON,
|
||||||
SWITCH_TYPE_OFF,
|
SWITCH_TYPE_OFF,
|
||||||
|
SWITCH_TYPE_FLIGHT_MODE,
|
||||||
SWITCH_TYPE_TIMER_MODE
|
SWITCH_TYPE_TIMER_MODE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -955,7 +956,7 @@ class ModelData {
|
||||||
bool extendedLimits; // TODO xml
|
bool extendedLimits; // TODO xml
|
||||||
bool extendedTrims;
|
bool extendedTrims;
|
||||||
bool throttleReversed;
|
bool throttleReversed;
|
||||||
PhaseData phaseData[C9X_MAX_PHASES];
|
PhaseData phaseData[C9X_MAX_FLIGHT_MODES];
|
||||||
MixData mixData[C9X_MAX_MIXERS];
|
MixData mixData[C9X_MAX_MIXERS];
|
||||||
LimitData limitData[C9X_NUM_CHNOUT];
|
LimitData limitData[C9X_NUM_CHNOUT];
|
||||||
|
|
||||||
|
@ -1019,9 +1020,9 @@ class RadioData {
|
||||||
|
|
||||||
// TODO rename FlightPhase to FlightMode
|
// TODO rename FlightPhase to FlightMode
|
||||||
enum Capability {
|
enum Capability {
|
||||||
FlightPhases,
|
FlightModes,
|
||||||
FlightModesName,
|
FlightModesName,
|
||||||
FlightPhasesHaveFades,
|
FlightModesHaveFades,
|
||||||
Mixes,
|
Mixes,
|
||||||
MixesWithoutExpo,
|
MixesWithoutExpo,
|
||||||
Timers,
|
Timers,
|
||||||
|
@ -1077,7 +1078,7 @@ enum Capability {
|
||||||
Gvars,
|
Gvars,
|
||||||
GvarsInCS,
|
GvarsInCS,
|
||||||
GvarsAreNamed,
|
GvarsAreNamed,
|
||||||
GvarsFlightPhases,
|
GvarsFlightModes,
|
||||||
GvarsName,
|
GvarsName,
|
||||||
NoTelemetryProtocol,
|
NoTelemetryProtocol,
|
||||||
TelemetryCustomScreens,
|
TelemetryCustomScreens,
|
||||||
|
@ -1199,7 +1200,7 @@ inline void applyStickModeToModel(ModelData &model, unsigned int mode)
|
||||||
ModelData model_copy = model;
|
ModelData model_copy = model;
|
||||||
|
|
||||||
// trims
|
// trims
|
||||||
for (int p=0; p<C9X_MAX_PHASES; p++) {
|
for (int p=0; p<C9X_MAX_FLIGHT_MODES; p++) {
|
||||||
for (int i=0; i<NUM_STICKS/2; i++) {
|
for (int i=0; i<NUM_STICKS/2; i++) {
|
||||||
int converted_stick = applyStickMode(i+1, mode) - 1;
|
int converted_stick = applyStickMode(i+1, mode) - 1;
|
||||||
int tmp = model.phaseData[p].trim[i];
|
int tmp = model.phaseData[p].trim[i];
|
||||||
|
|
|
@ -455,7 +455,7 @@ t_Gruvin9xModelData_v102::operator ModelData ()
|
||||||
c9x.beepANACenter = beepANACenter;
|
c9x.beepANACenter = beepANACenter;
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
for (int i=0; i<G9X_MAX_PHASES; i++)
|
for (int i=0; i<G9X_MAX_FLIGHT_MODES; i++)
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int i=0; i<G9X_MAX_MIXERS; i++)
|
for (int i=0; i<G9X_MAX_MIXERS; i++)
|
||||||
c9x.mixData[i] = mixData[i];
|
c9x.mixData[i] = mixData[i];
|
||||||
|
@ -526,7 +526,7 @@ t_Gruvin9xModelData_v103::operator ModelData ()
|
||||||
c9x.beepANACenter = beepANACenter;
|
c9x.beepANACenter = beepANACenter;
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
for (int i=0; i<G9X_MAX_PHASES; i++)
|
for (int i=0; i<G9X_MAX_FLIGHT_MODES; i++)
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int i=0; i<G9X_MAX_MIXERS; i++)
|
for (int i=0; i<G9X_MAX_MIXERS; i++)
|
||||||
c9x.mixData[i] = mixData[i];
|
c9x.mixData[i] = mixData[i];
|
||||||
|
@ -598,7 +598,7 @@ t_Gruvin9xModelData_v105::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<G9X_MAX_PHASES; i++) {
|
for (int i=0; i<G9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (phaseData[i].trim[j] > 125) {
|
if (phaseData[i].trim[j] > 125) {
|
||||||
|
@ -689,7 +689,7 @@ t_Gruvin9xModelData_v106::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<G9X_MAX_PHASES; i++) {
|
for (int i=0; i<G9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
|
|
@ -277,7 +277,7 @@ PACK(typedef struct t_Gruvin9xTimerData {
|
||||||
t_Gruvin9xTimerData() { memset(this, 0, sizeof(t_Gruvin9xTimerData)); }
|
t_Gruvin9xTimerData() { memset(this, 0, sizeof(t_Gruvin9xTimerData)); }
|
||||||
}) Gruvin9xTimerData;
|
}) Gruvin9xTimerData;
|
||||||
|
|
||||||
#define G9X_MAX_PHASES 5
|
#define G9X_MAX_FLIGHT_MODES 5
|
||||||
#define G9X_MAX_MIXERS 32
|
#define G9X_MAX_MIXERS 32
|
||||||
#define G9X_MAX_EXPOS 14
|
#define G9X_MAX_EXPOS 14
|
||||||
#define G9X_MAX_CURVE5 8
|
#define G9X_MAX_CURVE5 8
|
||||||
|
@ -312,7 +312,7 @@ PACK(typedef struct t_Gruvin9xModelData_v102 {
|
||||||
Gruvin9xLogicalSwitchData customSw[G9X_NUM_CSW];
|
Gruvin9xLogicalSwitchData customSw[G9X_NUM_CSW];
|
||||||
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
|
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
|
||||||
Gruvin9xSwashRingData swashR;
|
Gruvin9xSwashRingData swashR;
|
||||||
Gruvin9xPhaseData_v102 phaseData[G9X_MAX_PHASES];
|
Gruvin9xPhaseData_v102 phaseData[G9X_MAX_FLIGHT_MODES];
|
||||||
Gruvin9xFrSkyData frsky;
|
Gruvin9xFrSkyData frsky;
|
||||||
|
|
||||||
operator ModelData();
|
operator ModelData();
|
||||||
|
@ -344,7 +344,7 @@ PACK(typedef struct t_Gruvin9xModelData_v103 {
|
||||||
Gruvin9xLogicalSwitchData customSw[G9X_NUM_CSW];
|
Gruvin9xLogicalSwitchData customSw[G9X_NUM_CSW];
|
||||||
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
|
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
|
||||||
Gruvin9xSwashRingData swashR;
|
Gruvin9xSwashRingData swashR;
|
||||||
Gruvin9xPhaseData_v102 phaseData[G9X_MAX_PHASES];
|
Gruvin9xPhaseData_v102 phaseData[G9X_MAX_FLIGHT_MODES];
|
||||||
Gruvin9xFrSkyData frsky;
|
Gruvin9xFrSkyData frsky;
|
||||||
|
|
||||||
operator ModelData();
|
operator ModelData();
|
||||||
|
@ -377,7 +377,7 @@ PACK(typedef struct t_Gruvin9xModelData_v105 {
|
||||||
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
|
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
|
||||||
Gruvin9xFuncSwData funcSw[G9X_NUM_FSW];
|
Gruvin9xFuncSwData funcSw[G9X_NUM_FSW];
|
||||||
Gruvin9xSwashRingData swashR;
|
Gruvin9xSwashRingData swashR;
|
||||||
Gruvin9xPhaseData_v102 phaseData[G9X_MAX_PHASES];
|
Gruvin9xPhaseData_v102 phaseData[G9X_MAX_FLIGHT_MODES];
|
||||||
int16_t subtrim[NUM_STICKS];
|
int16_t subtrim[NUM_STICKS];
|
||||||
Gruvin9xFrSkyData frsky;
|
Gruvin9xFrSkyData frsky;
|
||||||
|
|
||||||
|
@ -409,7 +409,7 @@ PACK(typedef struct t_Gruvin9xModelData_v106 {
|
||||||
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
|
Gruvin9xSafetySwData safetySw[G9X_NUM_CHNOUT];
|
||||||
Gruvin9xFuncSwData funcSw[G9X_NUM_FSW];
|
Gruvin9xFuncSwData funcSw[G9X_NUM_FSW];
|
||||||
Gruvin9xSwashRingData swashR;
|
Gruvin9xSwashRingData swashR;
|
||||||
Gruvin9xPhaseData_v106 phaseData[G9X_MAX_PHASES];
|
Gruvin9xPhaseData_v106 phaseData[G9X_MAX_FLIGHT_MODES];
|
||||||
Gruvin9xFrSkyData frsky;
|
Gruvin9xFrSkyData frsky;
|
||||||
|
|
||||||
operator ModelData();
|
operator ModelData();
|
||||||
|
|
|
@ -460,7 +460,7 @@ t_Open9xGruvin9xModelData_v207::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -545,7 +545,7 @@ t_Open9xGruvin9xModelData_v208::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -634,7 +634,7 @@ t_Open9xGruvin9xModelData_v209::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -724,7 +724,7 @@ t_Open9xGruvin9xModelData_v210::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -811,7 +811,7 @@ t_Open9xGruvin9xModelData_v211::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
|
|
@ -197,7 +197,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v207 {
|
||||||
Open9xGruvin9xLogicalSwitchData_v207 customSw[O9X_NUM_CSW];
|
Open9xGruvin9xLogicalSwitchData_v207 customSw[O9X_NUM_CSW];
|
||||||
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
||||||
Open9xGruvin9xSwashRingData_v208 swashR;
|
Open9xGruvin9xSwashRingData_v208 swashR;
|
||||||
Open9xGruvin9xPhaseData_v207 phaseData[O9X_MAX_PHASES];
|
Open9xGruvin9xPhaseData_v207 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v205 frsky;
|
Open9xFrSkyData_v205 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -231,7 +231,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v208 {
|
||||||
Open9xGruvin9xLogicalSwitchData_v207 customSw[O9X_NUM_CSW];
|
Open9xGruvin9xLogicalSwitchData_v207 customSw[O9X_NUM_CSW];
|
||||||
Open9xGruvin9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
Open9xGruvin9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
||||||
Open9xGruvin9xSwashRingData_v208 swashR;
|
Open9xGruvin9xSwashRingData_v208 swashR;
|
||||||
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES];
|
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v208 frsky;
|
Open9xFrSkyData_v208 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -270,7 +270,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v209 {
|
||||||
Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
||||||
Open9xGruvin9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
Open9xGruvin9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
||||||
Open9xGruvin9xSwashRingData_v209 swashR;
|
Open9xGruvin9xSwashRingData_v209 swashR;
|
||||||
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES];
|
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v208 frsky;
|
Open9xFrSkyData_v208 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -310,7 +310,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v210 {
|
||||||
Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
||||||
Open9xGruvin9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
|
Open9xGruvin9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
|
||||||
Open9xGruvin9xSwashRingData_v209 swashR;
|
Open9xGruvin9xSwashRingData_v209 swashR;
|
||||||
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES];
|
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
|
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -348,7 +348,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v211 {
|
||||||
Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
||||||
Open9xGruvin9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
|
Open9xGruvin9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
|
||||||
Open9xGruvin9xSwashRingData_v209 swashR;
|
Open9xGruvin9xSwashRingData_v209 swashR;
|
||||||
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES];
|
Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
|
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
|
|
@ -767,7 +767,7 @@ t_Open9xArmModelData_v208::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_ARM_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_ARM_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -856,7 +856,7 @@ t_Open9xArmModelData_v209::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_ARM_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_ARM_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -946,7 +946,7 @@ t_Open9xArmModelData_v210::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_ARM_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_ARM_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -1030,7 +1030,7 @@ t_Open9xArmModelData_v211::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_ARM_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_ARM_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -1117,7 +1117,7 @@ t_Open9xArmModelData_v212::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_ARM_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_ARM_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
#include "open9xStockeeprom.h"
|
#include "open9xStockeeprom.h"
|
||||||
|
|
||||||
#define O9X_ARM_MAX_PHASES 9
|
#define O9X_ARM_MAX_FLIGHT_MODES 9
|
||||||
#define O9X_ARM_MAX_MIXERS 64
|
#define O9X_ARM_MAX_MIXERS 64
|
||||||
#define O9X_ARM_MAX_EXPOS 32
|
#define O9X_ARM_MAX_EXPOS 32
|
||||||
#define O9X_ARM_NUM_CHNOUT 32 // number of real output channels CH1-CH16
|
#define O9X_ARM_NUM_CHNOUT 32 // number of real output channels CH1-CH16
|
||||||
|
@ -346,7 +346,7 @@ PACK(typedef struct t_Open9xArmModelData_v208 {
|
||||||
Open9xArmLogicalSwitchData_v208 customSw[O9X_ARM_NUM_CSW];
|
Open9xArmLogicalSwitchData_v208 customSw[O9X_ARM_NUM_CSW];
|
||||||
Open9xArmFuncSwData_v208 funcSw[O9X_ARM_NUM_FSW];
|
Open9xArmFuncSwData_v208 funcSw[O9X_ARM_NUM_FSW];
|
||||||
Open9xArmSwashRingData_v208 swashR;
|
Open9xArmSwashRingData_v208 swashR;
|
||||||
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES];
|
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v208 frsky;
|
Open9xFrSkyData_v208 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -385,7 +385,7 @@ PACK(typedef struct t_Open9xArmModelData_v209 {
|
||||||
Open9xArmLogicalSwitchData_v209 customSw[O9X_ARM_NUM_CSW];
|
Open9xArmLogicalSwitchData_v209 customSw[O9X_ARM_NUM_CSW];
|
||||||
Open9xArmFuncSwData_v208 funcSw[O9X_ARM_NUM_FSW];
|
Open9xArmFuncSwData_v208 funcSw[O9X_ARM_NUM_FSW];
|
||||||
Open9xArmSwashRingData_v209 swashR;
|
Open9xArmSwashRingData_v209 swashR;
|
||||||
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES];
|
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v208 frsky;
|
Open9xFrSkyData_v208 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -425,7 +425,7 @@ PACK(typedef struct t_Open9xArmModelData_v210 {
|
||||||
Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW];
|
Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW];
|
||||||
Open9xArmFuncSwData_v210 funcSw[O9X_ARM_NUM_FSW];
|
Open9xArmFuncSwData_v210 funcSw[O9X_ARM_NUM_FSW];
|
||||||
Open9xArmSwashRingData_v209 swashR;
|
Open9xArmSwashRingData_v209 swashR;
|
||||||
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES];
|
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_FLIGHT_MODES];
|
||||||
Open9xArmFrSkyData_v210 frsky;
|
Open9xArmFrSkyData_v210 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -464,7 +464,7 @@ PACK(typedef struct t_Open9xArmModelData_v211 {
|
||||||
Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW];
|
Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW];
|
||||||
Open9xArmFuncSwData_v211 funcSw[O9X_ARM_NUM_FSW];
|
Open9xArmFuncSwData_v211 funcSw[O9X_ARM_NUM_FSW];
|
||||||
Open9xArmSwashRingData_v209 swashR;
|
Open9xArmSwashRingData_v209 swashR;
|
||||||
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES];
|
Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_FLIGHT_MODES];
|
||||||
|
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -502,7 +502,7 @@ PACK(typedef struct t_Open9xArmModelData_v212 {
|
||||||
Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW];
|
Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW];
|
||||||
Open9xArmFuncSwData_v211 funcSw[O9X_ARM_NUM_FSW];
|
Open9xArmFuncSwData_v211 funcSw[O9X_ARM_NUM_FSW];
|
||||||
Open9xArmSwashRingData_v210 swashR;
|
Open9xArmSwashRingData_v210 swashR;
|
||||||
Open9xArmPhaseData_v212 phaseData[O9X_ARM_MAX_PHASES];
|
Open9xArmPhaseData_v212 phaseData[O9X_ARM_MAX_FLIGHT_MODES];
|
||||||
|
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
|
|
@ -948,7 +948,7 @@ t_Open9xModelData_v201::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -1022,7 +1022,7 @@ t_Open9xModelData_v202::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -1098,7 +1098,7 @@ t_Open9xModelData_v203::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -1172,7 +1172,7 @@ t_Open9xModelData_v204::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -1251,7 +1251,7 @@ t_Open9xModelData_v205::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -1337,7 +1337,7 @@ t_Open9xModelData_v208::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -1430,7 +1430,7 @@ t_Open9xModelData_v209::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -1524,7 +1524,7 @@ t_Open9xModelData_v210::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
@ -1612,7 +1612,7 @@ t_Open9xModelData_v211::operator ModelData ()
|
||||||
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
c9x.moduleData[0].ppmPulsePol = pulsePol;
|
||||||
c9x.extendedLimits = extendedLimits;
|
c9x.extendedLimits = extendedLimits;
|
||||||
c9x.extendedTrims = extendedTrims;
|
c9x.extendedTrims = extendedTrims;
|
||||||
for (int i=0; i<O9X_MAX_PHASES; i++) {
|
for (int i=0; i<O9X_MAX_FLIGHT_MODES; i++) {
|
||||||
c9x.phaseData[i] = phaseData[i];
|
c9x.phaseData[i] = phaseData[i];
|
||||||
for (int j=0; j<NUM_STICKS; j++) {
|
for (int j=0; j<NUM_STICKS; j++) {
|
||||||
if (c9x.phaseData[i].trim[j] > 500) {
|
if (c9x.phaseData[i].trim[j] > 500) {
|
||||||
|
|
|
@ -482,7 +482,7 @@ PACK(typedef struct t_Open9xTimerDataExtra {
|
||||||
}) Open9xTimerDataExtra;
|
}) Open9xTimerDataExtra;
|
||||||
|
|
||||||
#define O9X_MAX_TIMERS 2
|
#define O9X_MAX_TIMERS 2
|
||||||
#define O9X_MAX_PHASES 5
|
#define O9X_MAX_FLIGHT_MODES 5
|
||||||
#define O9X_MAX_MIXERS 32
|
#define O9X_MAX_MIXERS 32
|
||||||
#define O9X_MAX_EXPOS 14
|
#define O9X_MAX_EXPOS 14
|
||||||
#define O9X_NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
#define O9X_NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
||||||
|
@ -520,7 +520,7 @@ PACK(typedef struct t_Open9xModelData_v201 {
|
||||||
Open9xSafetySwData safetySw[O9X_NUM_CHNOUT];
|
Open9xSafetySwData safetySw[O9X_NUM_CHNOUT];
|
||||||
Open9xFuncSwData_v201 funcSw[12];
|
Open9xFuncSwData_v201 funcSw[12];
|
||||||
Open9xSwashRingData_v208 swashR;
|
Open9xSwashRingData_v208 swashR;
|
||||||
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
|
Open9xPhaseData_v201 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v201 frsky;
|
Open9xFrSkyData_v201 frsky;
|
||||||
|
|
||||||
operator ModelData();
|
operator ModelData();
|
||||||
|
@ -551,7 +551,7 @@ PACK(typedef struct t_Open9xModelData_v202 {
|
||||||
Open9xSafetySwData safetySw[O9X_NUM_CHNOUT];
|
Open9xSafetySwData safetySw[O9X_NUM_CHNOUT];
|
||||||
Open9xFuncSwData_v201 funcSw[12];
|
Open9xFuncSwData_v201 funcSw[12];
|
||||||
Open9xSwashRingData_v208 swashR;
|
Open9xSwashRingData_v208 swashR;
|
||||||
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
|
Open9xPhaseData_v201 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v202 frsky;
|
Open9xFrSkyData_v202 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -584,7 +584,7 @@ PACK(typedef struct t_Open9xModelData_v203 {
|
||||||
Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
|
Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
|
||||||
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
||||||
Open9xSwashRingData_v208 swashR;
|
Open9xSwashRingData_v208 swashR;
|
||||||
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
|
Open9xPhaseData_v201 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v202 frsky;
|
Open9xFrSkyData_v202 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -617,7 +617,7 @@ PACK(typedef struct t_Open9xModelData_v204 {
|
||||||
Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
|
Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
|
||||||
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
||||||
Open9xSwashRingData_v208 swashR;
|
Open9xSwashRingData_v208 swashR;
|
||||||
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
|
Open9xPhaseData_v201 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v204 frsky;
|
Open9xFrSkyData_v204 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -650,7 +650,7 @@ PACK(typedef struct t_Open9xModelData_v205 {
|
||||||
Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
|
Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
|
||||||
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
||||||
Open9xSwashRingData_v208 swashR;
|
Open9xSwashRingData_v208 swashR;
|
||||||
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
|
Open9xPhaseData_v201 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v205 frsky;
|
Open9xFrSkyData_v205 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -685,7 +685,7 @@ PACK(typedef struct t_Open9xModelData_v208 {
|
||||||
Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
|
Open9xLogicalSwitchData_v208 customSw[O9X_NUM_CSW];
|
||||||
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
||||||
Open9xSwashRingData_v208 swashR;
|
Open9xSwashRingData_v208 swashR;
|
||||||
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
|
Open9xPhaseData_v201 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v208 frsky;
|
Open9xFrSkyData_v208 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -724,7 +724,7 @@ PACK(typedef struct t_Open9xModelData_v209 {
|
||||||
Open9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
Open9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
||||||
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW];
|
||||||
Open9xSwashRingData_v209 swashR;
|
Open9xSwashRingData_v209 swashR;
|
||||||
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
|
Open9xPhaseData_v201 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
Open9xFrSkyData_v208 frsky;
|
Open9xFrSkyData_v208 frsky;
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -764,7 +764,7 @@ PACK(typedef struct t_Open9xModelData_v210 {
|
||||||
Open9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
Open9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
||||||
Open9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
|
Open9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
|
||||||
Open9xSwashRingData_v209 swashR;
|
Open9xSwashRingData_v209 swashR;
|
||||||
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
|
Open9xPhaseData_v201 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
|
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
@ -802,7 +802,7 @@ PACK(typedef struct t_Open9xModelData_v211 {
|
||||||
Open9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
Open9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW];
|
||||||
Open9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
|
Open9xFuncSwData_v210 funcSw[O9X_NUM_FSW];
|
||||||
Open9xSwashRingData_v209 swashR;
|
Open9xSwashRingData_v209 swashR;
|
||||||
Open9xPhaseData_v201 phaseData[O9X_MAX_PHASES];
|
Open9xPhaseData_v201 phaseData[O9X_MAX_FLIGHT_MODES];
|
||||||
|
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
#define MAX_SWITCHES(board) (IS_TARANIS(board) ? 8 : 7)
|
#define MAX_SWITCHES(board) (IS_TARANIS(board) ? 8 : 7)
|
||||||
#define MAX_SWITCHES_POSITION(board) (IS_TARANIS(board) ? 22 : 9)
|
#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_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_FLIGHT_MODES(board, version) (IS_ARM(board) ? 9 : (IS_DBLRAM(board, version) ? 6 : 5))
|
||||||
#define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32)
|
#define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32)
|
||||||
#define MAX_CHANNELS(board, version) (IS_ARM(board) ? 32 : 16)
|
#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_EXPOS(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 216) ? 64 : 32) : (IS_DBLRAM(board, version) ? 16 : 14))
|
||||||
|
@ -91,6 +91,13 @@ class SwitchesConversionTable: public ConversionTable {
|
||||||
addConversion(RawSwitch(SWITCH_TYPE_ON), val++);
|
addConversion(RawSwitch(SWITCH_TYPE_ON), val++);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IS_ARM(board)) {
|
||||||
|
for (int i=1; i<=MAX_FLIGHT_MODES(board, version); i++) {
|
||||||
|
addConversion(RawSwitch(SWITCH_TYPE_FLIGHT_MODE, -i), -val+offset);
|
||||||
|
addConversion(RawSwitch(SWITCH_TYPE_FLIGHT_MODE, i), val++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (version < 216) {
|
if (version < 216) {
|
||||||
// previous "moment" switches
|
// previous "moment" switches
|
||||||
for (int i=1; i<=MAX_SWITCHES_POSITION(board); i++) {
|
for (int i=1; i<=MAX_SWITCHES_POSITION(board); i++) {
|
||||||
|
@ -2401,7 +2408,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||||
internalField.Append(new AvrCustomFunctionField(modelData.funcSw[i], board, version, variant));
|
internalField.Append(new AvrCustomFunctionField(modelData.funcSw[i], board, version, variant));
|
||||||
}
|
}
|
||||||
internalField.Append(new HeliField(modelData.swashRingData, board, version, variant));
|
internalField.Append(new HeliField(modelData.swashRingData, board, version, variant));
|
||||||
for (int i=0; i<MAX_PHASES(board, version); i++)
|
for (int i=0; i<MAX_FLIGHT_MODES(board, version); i++)
|
||||||
internalField.Append(new FlightModeField(modelData.phaseData[i], i, board, version));
|
internalField.Append(new FlightModeField(modelData.phaseData[i], i, board, version));
|
||||||
|
|
||||||
if (!IS_ARM(board) || version < 216) {
|
if (!IS_ARM(board) || version < 216) {
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
#define SIMU_M128_VARIANTS (M128_VARIANT|SIMU_STOCK_VARIANTS)
|
#define SIMU_M128_VARIANTS (M128_VARIANT|SIMU_STOCK_VARIANTS)
|
||||||
|
|
||||||
#define O9X_MAX_TIMERS 2
|
#define O9X_MAX_TIMERS 2
|
||||||
#define O9X_MAX_PHASES 5
|
#define O9X_MAX_FLIGHT_MODES 5
|
||||||
#define O9X_MAX_MIXERS 32
|
#define O9X_MAX_MIXERS 32
|
||||||
#define O9X_MAX_EXPOS 14
|
#define O9X_MAX_EXPOS 14
|
||||||
#define O9X_NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
#define O9X_NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
#define O9X_MAX_CURVES 8
|
#define O9X_MAX_CURVES 8
|
||||||
#define O9X_NUM_POINTS (112-O9X_MAX_CURVES)
|
#define O9X_NUM_POINTS (112-O9X_MAX_CURVES)
|
||||||
|
|
||||||
#define O9X_ARM_MAX_PHASES 9
|
#define O9X_ARM_MAX_FLIGHT_MODES 9
|
||||||
#define O9X_ARM_MAX_MIXERS 64
|
#define O9X_ARM_MAX_MIXERS 64
|
||||||
#define O9X_ARM_MAX_EXPOS 32
|
#define O9X_ARM_MAX_EXPOS 32
|
||||||
#define O9X_ARM_NUM_CHNOUT 32 // number of real output channels CH1-CH16
|
#define O9X_ARM_NUM_CHNOUT 32 // number of real output channels CH1-CH16
|
||||||
|
|
|
@ -478,14 +478,14 @@ int OpenTxFirmware::getCapability(const Capability capability)
|
||||||
return 1;
|
return 1;
|
||||||
case PPMFrameLength:
|
case PPMFrameLength:
|
||||||
return 40;
|
return 40;
|
||||||
case FlightPhases:
|
case FlightModes:
|
||||||
if (IS_ARM(board))
|
if (IS_ARM(board))
|
||||||
return 9;
|
return 9;
|
||||||
else if (board==BOARD_GRUVIN9X)
|
else if (board==BOARD_GRUVIN9X)
|
||||||
return 6;
|
return 6;
|
||||||
else
|
else
|
||||||
return 5;
|
return 5;
|
||||||
case FlightPhasesHaveFades:
|
case FlightModesHaveFades:
|
||||||
return 1;
|
return 1;
|
||||||
case Gvars:
|
case Gvars:
|
||||||
return IS_ARM(board) ? 9 : 5;
|
return IS_ARM(board) ? 9 : 5;
|
||||||
|
@ -499,7 +499,7 @@ int OpenTxFirmware::getCapability(const Capability capability)
|
||||||
case HasFAIMode:
|
case HasFAIMode:
|
||||||
return 1;
|
return 1;
|
||||||
case GvarsAreNamed:
|
case GvarsAreNamed:
|
||||||
case GvarsFlightPhases:
|
case GvarsFlightModes:
|
||||||
return ((IS_ARM(board)||(board==BOARD_GRUVIN9X)) ? 1 : 0);
|
return ((IS_ARM(board)||(board==BOARD_GRUVIN9X)) ? 1 : 0);
|
||||||
case Mixes:
|
case Mixes:
|
||||||
return (IS_ARM(board) ? O9X_ARM_MAX_MIXERS : O9X_MAX_MIXERS);
|
return (IS_ARM(board) ? O9X_ARM_MAX_MIXERS : O9X_MAX_MIXERS);
|
||||||
|
@ -802,7 +802,7 @@ bool OpenTxEepromInterface::checkVersion(unsigned int version)
|
||||||
break;
|
break;
|
||||||
// case 206:
|
// case 206:
|
||||||
case 207:
|
case 207:
|
||||||
// V4: Rotary Encoders position in FlightPhases
|
// V4: Rotary Encoders position in FlightModes
|
||||||
break;
|
break;
|
||||||
case 208:
|
case 208:
|
||||||
// Trim value in 16bits
|
// Trim value in 16bits
|
||||||
|
|
|
@ -129,7 +129,7 @@ QString getProtocolStr(const int proto)
|
||||||
|
|
||||||
void populatePhasesCB(QComboBox *b, int value)
|
void populatePhasesCB(QComboBox *b, int value)
|
||||||
{
|
{
|
||||||
for (int i=-GetCurrentFirmware()->getCapability(FlightPhases); i<=GetCurrentFirmware()->getCapability(FlightPhases); i++) {
|
for (int i=-GetCurrentFirmware()->getCapability(FlightModes); i<=GetCurrentFirmware()->getCapability(FlightModes); i++) {
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
b->addItem(QObject::tr("!Flight mode %1").arg(-i-1), i);
|
b->addItem(QObject::tr("!Flight mode %1").arg(-i-1), i);
|
||||||
else if (i > 0)
|
else if (i > 0)
|
||||||
|
@ -137,7 +137,7 @@ void populatePhasesCB(QComboBox *b, int value)
|
||||||
else
|
else
|
||||||
b->addItem(QObject::tr("----"), 0);
|
b->addItem(QObject::tr("----"), 0);
|
||||||
}
|
}
|
||||||
b->setCurrentIndex(value + GetCurrentFirmware()->getCapability(FlightPhases));
|
b->setCurrentIndex(value + GetCurrentFirmware()->getCapability(FlightModes));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool gvarsEnabled()
|
bool gvarsEnabled()
|
||||||
|
@ -344,7 +344,7 @@ void CurveGroup::valuesChanged()
|
||||||
void populateGvarUseCB(QComboBox *b, unsigned int phase)
|
void populateGvarUseCB(QComboBox *b, unsigned int phase)
|
||||||
{
|
{
|
||||||
b->addItem(QObject::tr("Own value"));
|
b->addItem(QObject::tr("Own value"));
|
||||||
for (int i=0; i<GetCurrentFirmware()->getCapability(FlightPhases); i++) {
|
for (int i=0; i<GetCurrentFirmware()->getCapability(FlightModes); i++) {
|
||||||
if (i != (int)phase) {
|
if (i != (int)phase) {
|
||||||
b->addItem(QObject::tr("Flight mode %1 value").arg(i));
|
b->addItem(QObject::tr("Flight mode %1 value").arg(i));
|
||||||
}
|
}
|
||||||
|
@ -400,6 +400,13 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, const GeneralSettin
|
||||||
b->clear();
|
b->clear();
|
||||||
|
|
||||||
if (attr & POPULATE_ONOFF) {
|
if (attr & POPULATE_ONOFF) {
|
||||||
|
if (IS_ARM(GetCurrentFirmware()->getBoard())) {
|
||||||
|
for (int i=-GetCurrentFirmware()->getCapability(FlightModes); i<0; i++) {
|
||||||
|
item = RawSwitch(SWITCH_TYPE_FLIGHT_MODE, i);
|
||||||
|
b->addItem(item.toString(), item.toValue());
|
||||||
|
if (item == value) b->setCurrentIndex(b->count()-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
item = RawSwitch(SWITCH_TYPE_OFF);
|
item = RawSwitch(SWITCH_TYPE_OFF);
|
||||||
b->addItem(item.toString(), item.toValue());
|
b->addItem(item.toString(), item.toValue());
|
||||||
if (item == value) b->setCurrentIndex(b->count()-1);
|
if (item == value) b->setCurrentIndex(b->count()-1);
|
||||||
|
@ -490,6 +497,13 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, const GeneralSettin
|
||||||
item = RawSwitch(SWITCH_TYPE_ON);
|
item = RawSwitch(SWITCH_TYPE_ON);
|
||||||
b->addItem(item.toString(), item.toValue());
|
b->addItem(item.toString(), item.toValue());
|
||||||
if (item == value) b->setCurrentIndex(b->count()-1);
|
if (item == value) b->setCurrentIndex(b->count()-1);
|
||||||
|
if (IS_ARM(GetCurrentFirmware()->getBoard())) {
|
||||||
|
for (int i=1; i<=GetCurrentFirmware()->getCapability(FlightModes); i++) {
|
||||||
|
item = RawSwitch(SWITCH_TYPE_FLIGHT_MODE, i);
|
||||||
|
b->addItem(item.toString(), item.toValue());
|
||||||
|
if (item == value) b->setCurrentIndex(b->count()-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
b->setMaxVisibleItems(10);
|
b->setMaxVisibleItems(10);
|
||||||
|
@ -835,7 +849,7 @@ QString getProtocol(ModelData * g_model)
|
||||||
|
|
||||||
QString getPhasesStr(unsigned int phases, ModelData & model)
|
QString getPhasesStr(unsigned int phases, ModelData & model)
|
||||||
{
|
{
|
||||||
int numphases = GetCurrentFirmware()->getCapability(FlightPhases);
|
int numphases = GetCurrentFirmware()->getCapability(FlightModes);
|
||||||
|
|
||||||
if (numphases && phases) {
|
if (numphases && phases) {
|
||||||
QString str;
|
QString str;
|
||||||
|
|
|
@ -329,8 +329,14 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified)
|
||||||
if (modified) model.funcSw[i].param = fswtchParam[i]->value();
|
if (modified) model.funcSw[i].param = fswtchParam[i]->value();
|
||||||
fswtchParam[i]->setDecimals(0);
|
fswtchParam[i]->setDecimals(0);
|
||||||
fswtchParam[i]->setSingleStep(1);
|
fswtchParam[i]->setSingleStep(1);
|
||||||
fswtchParam[i]->setMinimum(-125);
|
if (IS_ARM(GetEepromInterface()->getBoard())) {
|
||||||
fswtchParam[i]->setMaximum(125);
|
fswtchParam[i]->setMinimum(-500);
|
||||||
|
fswtchParam[i]->setMaximum(500);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fswtchParam[i]->setMinimum(-125);
|
||||||
|
fswtchParam[i]->setMaximum(125);
|
||||||
|
}
|
||||||
fswtchParam[i]->setValue(model.funcSw[i].param);
|
fswtchParam[i]->setValue(model.funcSw[i].param);
|
||||||
widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM;
|
widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
||||||
|
|
||||||
ui->sideCB->setCurrentIndex(ed->mode-1);
|
ui->sideCB->setCurrentIndex(ed->mode-1);
|
||||||
|
|
||||||
if (!firmware->getCapability(FlightPhases)) {
|
if (!firmware->getCapability(FlightModes)) {
|
||||||
ui->label_phases->hide();
|
ui->label_phases->hide();
|
||||||
for (int i=0; i<9; i++) {
|
for (int i=0; i<9; i++) {
|
||||||
lb_fp[i]->hide();
|
lb_fp[i]->hide();
|
||||||
|
@ -44,7 +44,7 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
||||||
}
|
}
|
||||||
mask <<= 1;
|
mask <<= 1;
|
||||||
}
|
}
|
||||||
for (int i=firmware->getCapability(FlightPhases); i<9;i++) {
|
for (int i=firmware->getCapability(FlightModes); i<9;i++) {
|
||||||
lb_fp[i]->hide();
|
lb_fp[i]->hide();
|
||||||
cb_fp[i]->hide();
|
cb_fp[i]->hide();
|
||||||
}
|
}
|
||||||
|
@ -154,11 +154,11 @@ void ExpoDialog::valuesChanged()
|
||||||
ed->phases<<=1;
|
ed->phases<<=1;
|
||||||
}
|
}
|
||||||
ed->phases>>=1;
|
ed->phases>>=1;
|
||||||
if (firmware->getCapability(FlightPhases)) {
|
if (firmware->getCapability(FlightModes)) {
|
||||||
int zeros=0;
|
int zeros=0;
|
||||||
int ones=0;
|
int ones=0;
|
||||||
int phtemp=ed->phases;
|
int phtemp=ed->phases;
|
||||||
for (int i=0; i<firmware->getCapability(FlightPhases); i++) {
|
for (int i=0; i<firmware->getCapability(FlightModes); i++) {
|
||||||
if (phtemp & 1) {
|
if (phtemp & 1) {
|
||||||
ones++;
|
ones++;
|
||||||
}
|
}
|
||||||
|
@ -169,7 +169,7 @@ void ExpoDialog::valuesChanged()
|
||||||
}
|
}
|
||||||
if (zeros==1) {
|
if (zeros==1) {
|
||||||
phtemp=ed->phases;
|
phtemp=ed->phases;
|
||||||
for (int i=0; i<firmware->getCapability(FlightPhases); i++) {
|
for (int i=0; i<firmware->getCapability(FlightModes); i++) {
|
||||||
if ((phtemp & 1)==0) {
|
if ((phtemp & 1)==0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ void ExpoDialog::valuesChanged()
|
||||||
}
|
}
|
||||||
else if (ones==1) {
|
else if (ones==1) {
|
||||||
phtemp=ed->phases;
|
phtemp=ed->phases;
|
||||||
for (int i=0; i<firmware->getCapability(FlightPhases); i++) {
|
for (int i=0; i<firmware->getCapability(FlightModes); i++) {
|
||||||
if (phtemp & 1) {
|
if (phtemp & 1) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QGridLayout>
|
#include <QGridLayout>
|
||||||
|
|
||||||
FlightMode::FlightMode(QWidget * parent, ModelData & model, int phaseIdx, GeneralSettings & generalSettings, FirmwareInterface * firmware):
|
FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseIdx, GeneralSettings & generalSettings, FirmwareInterface * firmware):
|
||||||
ModelPanel(parent, model, generalSettings, firmware),
|
ModelPanel(parent, model, generalSettings, firmware),
|
||||||
ui(new Ui::FlightMode),
|
ui(new Ui::FlightMode),
|
||||||
phaseIdx(phaseIdx),
|
phaseIdx(phaseIdx),
|
||||||
|
@ -16,7 +16,7 @@ FlightMode::FlightMode(QWidget * parent, ModelData & model, int phaseIdx, Genera
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
int modesCount = firmware->getCapability(FlightPhases);
|
int modesCount = firmware->getCapability(FlightModes);
|
||||||
|
|
||||||
// Phase name
|
// Phase name
|
||||||
QRegExp rx(CHAR_FOR_NAMES_REGEX);
|
QRegExp rx(CHAR_FOR_NAMES_REGEX);
|
||||||
|
@ -39,7 +39,7 @@ FlightMode::FlightMode(QWidget * parent, ModelData & model, int phaseIdx, Genera
|
||||||
}
|
}
|
||||||
|
|
||||||
// FadeIn / FadeOut
|
// FadeIn / FadeOut
|
||||||
if (firmware->getCapability(FlightPhasesHaveFades)) {
|
if (firmware->getCapability(FlightModesHaveFades)) {
|
||||||
int scale = firmware->getCapability(SlowScale);
|
int scale = firmware->getCapability(SlowScale);
|
||||||
int range = firmware->getCapability(SlowRange);
|
int range = firmware->getCapability(SlowRange);
|
||||||
ui->fadeIn->setMaximum(float(range)/scale);
|
ui->fadeIn->setMaximum(float(range)/scale);
|
||||||
|
@ -174,12 +174,12 @@ FlightMode::FlightMode(QWidget * parent, ModelData & model, int phaseIdx, Genera
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
FlightMode::~FlightMode()
|
FlightModePanel::~FlightModePanel()
|
||||||
{
|
{
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::update()
|
void FlightModePanel::update()
|
||||||
{
|
{
|
||||||
ui->name->setText(phase.name);
|
ui->name->setText(phase.name);
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ void FlightMode::update()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseName_editingFinished()
|
void FlightModePanel::phaseName_editingFinished()
|
||||||
{
|
{
|
||||||
QLineEdit *lineEdit = qobject_cast<QLineEdit*>(sender());
|
QLineEdit *lineEdit = qobject_cast<QLineEdit*>(sender());
|
||||||
strcpy(phase.name, lineEdit->text().toAscii());
|
strcpy(phase.name, lineEdit->text().toAscii());
|
||||||
|
@ -240,14 +240,14 @@ void FlightMode::phaseName_editingFinished()
|
||||||
emit nameModified();
|
emit nameModified();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseSwitch_currentIndexChanged(int index)
|
void FlightModePanel::phaseSwitch_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
|
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
|
||||||
phase.swtch = RawSwitch(comboBox->itemData(index).toInt());
|
phase.swtch = RawSwitch(comboBox->itemData(index).toInt());
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseFadeIn_editingFinished()
|
void FlightModePanel::phaseFadeIn_editingFinished()
|
||||||
{
|
{
|
||||||
QDoubleSpinBox *spinBox = qobject_cast<QDoubleSpinBox*>(sender());
|
QDoubleSpinBox *spinBox = qobject_cast<QDoubleSpinBox*>(sender());
|
||||||
int scale = firmware->getCapability(SlowScale);
|
int scale = firmware->getCapability(SlowScale);
|
||||||
|
@ -255,7 +255,7 @@ void FlightMode::phaseFadeIn_editingFinished()
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseFadeOut_editingFinished()
|
void FlightModePanel::phaseFadeOut_editingFinished()
|
||||||
{
|
{
|
||||||
QDoubleSpinBox *spinBox = qobject_cast<QDoubleSpinBox*>(sender());
|
QDoubleSpinBox *spinBox = qobject_cast<QDoubleSpinBox*>(sender());
|
||||||
int scale = firmware->getCapability(SlowScale);
|
int scale = firmware->getCapability(SlowScale);
|
||||||
|
@ -263,7 +263,7 @@ void FlightMode::phaseFadeOut_editingFinished()
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::trimUpdate(unsigned int trim)
|
void FlightModePanel::trimUpdate(unsigned int trim)
|
||||||
{
|
{
|
||||||
lock = true;
|
lock = true;
|
||||||
int chn = CONVERT_MODE(trim+1)-1;
|
int chn = CONVERT_MODE(trim+1)-1;
|
||||||
|
@ -283,7 +283,7 @@ void FlightMode::trimUpdate(unsigned int trim)
|
||||||
lock = false;
|
lock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseGVValue_editingFinished()
|
void FlightModePanel::phaseGVValue_editingFinished()
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
QSpinBox *spinBox = qobject_cast<QSpinBox*>(sender());
|
QSpinBox *spinBox = qobject_cast<QSpinBox*>(sender());
|
||||||
|
@ -293,7 +293,7 @@ void FlightMode::phaseGVValue_editingFinished()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::GVName_editingFinished()
|
void FlightModePanel::GVName_editingFinished()
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
QLineEdit *lineedit = qobject_cast<QLineEdit*>(sender());
|
QLineEdit *lineedit = qobject_cast<QLineEdit*>(sender());
|
||||||
|
@ -304,7 +304,7 @@ void FlightMode::GVName_editingFinished()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::GVSource_currentIndexChanged(int index)
|
void FlightModePanel::GVSource_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
|
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
|
||||||
int gvar = comboBox->property("index").toInt();
|
int gvar = comboBox->property("index").toInt();
|
||||||
|
@ -312,7 +312,7 @@ void FlightMode::GVSource_currentIndexChanged(int index)
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseGVUse_currentIndexChanged(int index)
|
void FlightModePanel::phaseGVUse_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
lock = true;
|
lock = true;
|
||||||
|
@ -330,14 +330,14 @@ void FlightMode::phaseGVUse_currentIndexChanged(int index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseGVPopupToggled(bool checked)
|
void FlightModePanel::phaseGVPopupToggled(bool checked)
|
||||||
{
|
{
|
||||||
QCheckBox *cb = qobject_cast<QCheckBox*>(sender());
|
QCheckBox *cb = qobject_cast<QCheckBox*>(sender());
|
||||||
int gvar = cb->property("index").toInt();
|
int gvar = cb->property("index").toInt();
|
||||||
model.gvars_popups[gvar] = checked;
|
model.gvars_popups[gvar] = checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseREValue_editingFinished()
|
void FlightModePanel::phaseREValue_editingFinished()
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
QSpinBox *spinBox = qobject_cast<QSpinBox*>(sender());
|
QSpinBox *spinBox = qobject_cast<QSpinBox*>(sender());
|
||||||
|
@ -347,7 +347,7 @@ void FlightMode::phaseREValue_editingFinished()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseREUse_currentIndexChanged(int index)
|
void FlightModePanel::phaseREUse_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
lock = true;
|
lock = true;
|
||||||
|
@ -365,7 +365,7 @@ void FlightMode::phaseREUse_currentIndexChanged(int index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseTrimUse_currentIndexChanged(int index)
|
void FlightModePanel::phaseTrimUse_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
|
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
|
||||||
|
@ -387,7 +387,7 @@ void FlightMode::phaseTrimUse_currentIndexChanged(int index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseTrim_valueChanged()
|
void FlightModePanel::phaseTrim_valueChanged()
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
QSpinBox *spinBox = qobject_cast<QSpinBox*>(sender());
|
QSpinBox *spinBox = qobject_cast<QSpinBox*>(sender());
|
||||||
|
@ -402,7 +402,7 @@ void FlightMode::phaseTrim_valueChanged()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightMode::phaseTrimSlider_valueChanged()
|
void FlightModePanel::phaseTrimSlider_valueChanged()
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
QSlider *slider = qobject_cast<QSlider*>(sender());
|
QSlider *slider = qobject_cast<QSlider*>(sender());
|
||||||
|
@ -419,14 +419,14 @@ void FlightMode::phaseTrimSlider_valueChanged()
|
||||||
|
|
||||||
/**********************************************************/
|
/**********************************************************/
|
||||||
|
|
||||||
FlightModes::FlightModes(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware):
|
FlightModesPanel::FlightModesPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware):
|
||||||
ModelPanel(parent, model, generalSettings, firmware),
|
ModelPanel(parent, model, generalSettings, firmware),
|
||||||
modesCount(firmware->getCapability(FlightPhases))
|
modesCount(firmware->getCapability(FlightModes))
|
||||||
{
|
{
|
||||||
QGridLayout * gridLayout = new QGridLayout(this);
|
QGridLayout * gridLayout = new QGridLayout(this);
|
||||||
tabWidget = new QTabWidget(this);
|
tabWidget = new QTabWidget(this);
|
||||||
for (int i=0; i<modesCount; i++) {
|
for (int i=0; i<modesCount; i++) {
|
||||||
FlightMode *tab = new FlightMode(tabWidget, model, i, generalSettings, firmware);
|
FlightModePanel *tab = new FlightModePanel(tabWidget, model, i, generalSettings, firmware);
|
||||||
tab->setProperty("index", i);
|
tab->setProperty("index", i);
|
||||||
panels << tab;
|
panels << tab;
|
||||||
connect(tab, SIGNAL(modified()), this, SLOT(onPhaseModified()));
|
connect(tab, SIGNAL(modified()), this, SLOT(onPhaseModified()));
|
||||||
|
@ -437,16 +437,16 @@ FlightModes::FlightModes(QWidget * parent, ModelData & model, GeneralSettings &
|
||||||
connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(on_tabWidget_currentChanged(int)));
|
connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(on_tabWidget_currentChanged(int)));
|
||||||
}
|
}
|
||||||
|
|
||||||
FlightModes::~FlightModes()
|
FlightModesPanel::~FlightModesPanel()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightModes::onPhaseModified()
|
void FlightModesPanel::onPhaseModified()
|
||||||
{
|
{
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString FlightModes::getTabName(int index)
|
QString FlightModesPanel::getTabName(int index)
|
||||||
{
|
{
|
||||||
QString result = tr("Flight Mode %1").arg(index);
|
QString result = tr("Flight Mode %1").arg(index);
|
||||||
const char *name = model.phaseData[index].name;
|
const char *name = model.phaseData[index].name;
|
||||||
|
@ -460,18 +460,18 @@ QString FlightModes::getTabName(int index)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightModes::onPhaseNameChanged()
|
void FlightModesPanel::onPhaseNameChanged()
|
||||||
{
|
{
|
||||||
int index = sender()->property("index").toInt();
|
int index = sender()->property("index").toInt();
|
||||||
tabWidget->setTabText(index, getTabName(index));
|
tabWidget->setTabText(index, getTabName(index));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightModes::update()
|
void FlightModesPanel::update()
|
||||||
{
|
{
|
||||||
on_tabWidget_currentChanged(tabWidget->currentIndex());
|
on_tabWidget_currentChanged(tabWidget->currentIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlightModes::on_tabWidget_currentChanged(int index)
|
void FlightModesPanel::on_tabWidget_currentChanged(int index)
|
||||||
{
|
{
|
||||||
panels[index]->update();
|
panels[index]->update();
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,13 +13,13 @@ namespace Ui {
|
||||||
class FlightMode;
|
class FlightMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
class FlightMode : public ModelPanel
|
class FlightModePanel : public ModelPanel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FlightMode(QWidget *parent, ModelData &model, int modeIdx, GeneralSettings & generalSettings, FirmwareInterface * firmware);
|
FlightModePanel(QWidget *parent, ModelData &model, int modeIdx, GeneralSettings & generalSettings, FirmwareInterface * firmware);
|
||||||
virtual ~FlightMode();
|
virtual ~FlightModePanel();
|
||||||
|
|
||||||
virtual void update();
|
virtual void update();
|
||||||
|
|
||||||
|
@ -61,13 +61,13 @@ class FlightMode : public ModelPanel
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class FlightModes : public ModelPanel
|
class FlightModesPanel : public ModelPanel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FlightModes(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware);
|
FlightModesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware);
|
||||||
virtual ~FlightModes();
|
virtual ~FlightModesPanel();
|
||||||
|
|
||||||
virtual void update();
|
virtual void update();
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ class FlightModes : public ModelPanel
|
||||||
int modesCount;
|
int modesCount;
|
||||||
QTabWidget *tabWidget;
|
QTabWidget *tabWidget;
|
||||||
QString getTabName(int index);
|
QString getTabName(int index);
|
||||||
QVector<FlightMode *> panels;
|
QVector<FlightModePanel *> panels;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, G
|
||||||
ui->mixerName->setValidator(new QRegExpValidator(rx, this));
|
ui->mixerName->setValidator(new QRegExpValidator(rx, this));
|
||||||
ui->mixerName->setText(md->name);
|
ui->mixerName->setText(md->name);
|
||||||
|
|
||||||
if (!firmware->getCapability(FlightPhases)) {
|
if (!firmware->getCapability(FlightModes)) {
|
||||||
ui->label_phases->hide();
|
ui->label_phases->hide();
|
||||||
for (int i=0; i<9; i++) {
|
for (int i=0; i<9; i++) {
|
||||||
lb_fp[i]->hide();
|
lb_fp[i]->hide();
|
||||||
|
@ -70,7 +70,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, G
|
||||||
}
|
}
|
||||||
mask <<= 1;
|
mask <<= 1;
|
||||||
}
|
}
|
||||||
for (int i=firmware->getCapability(FlightPhases); i<9;i++) {
|
for (int i=firmware->getCapability(FlightModes); i<9;i++) {
|
||||||
lb_fp[i]->hide();
|
lb_fp[i]->hide();
|
||||||
cb_fp[i]->hide();
|
cb_fp[i]->hide();
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ ModelEdit::ModelEdit(QWidget * parent, RadioData & radioData, int modelId, Firmw
|
||||||
SetupPanel * setupPanel = new SetupPanel(this, model, generalSettings, firmware);
|
SetupPanel * setupPanel = new SetupPanel(this, model, generalSettings, firmware);
|
||||||
addTab(setupPanel, tr("Setup"));
|
addTab(setupPanel, tr("Setup"));
|
||||||
addTab(new HeliPanel(this, model, generalSettings, firmware), tr("Heli"));
|
addTab(new HeliPanel(this, model, generalSettings, firmware), tr("Heli"));
|
||||||
addTab(new FlightModes(this, model, generalSettings, firmware), tr("Flight Modes"));
|
addTab(new FlightModesPanel(this, model, generalSettings, firmware), tr("Flight Modes"));
|
||||||
addTab(new InputsPanel(this, model, generalSettings, firmware), tr("Inputs"));
|
addTab(new InputsPanel(this, model, generalSettings, firmware), tr("Inputs"));
|
||||||
addTab(new MixesPanel(this, model, generalSettings, firmware), tr("Mixes"));
|
addTab(new MixesPanel(this, model, generalSettings, firmware), tr("Mixes"));
|
||||||
Channels * chnPanel = new Channels(this, model, generalSettings, firmware);
|
Channels * chnPanel = new Channels(this, model, generalSettings, firmware);
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -32,7 +32,7 @@ private:
|
||||||
unsigned int gvarnum;
|
unsigned int gvarnum;
|
||||||
|
|
||||||
void printSetup();
|
void printSetup();
|
||||||
QString printPhases();
|
QString printFlightModes();
|
||||||
void printInputs();
|
void printInputs();
|
||||||
void printMixes();
|
void printMixes();
|
||||||
void printLimits();
|
void printLimits();
|
||||||
|
|
|
@ -600,7 +600,7 @@ void SimulatorDialog9X::getValues()
|
||||||
|
|
||||||
void SimulatorDialog9X::saveSwitches(void)
|
void SimulatorDialog9X::saveSwitches(void)
|
||||||
{
|
{
|
||||||
qDebug() << "SimulatorDialog9X::saveSwitches()";
|
// qDebug() << "SimulatorDialog9X::saveSwitches()";
|
||||||
switchstatus=ui->switchTHR->isChecked();
|
switchstatus=ui->switchTHR->isChecked();
|
||||||
switchstatus<<=1;
|
switchstatus<<=1;
|
||||||
switchstatus+=(ui->switchRUD->isChecked()&0x1);
|
switchstatus+=(ui->switchRUD->isChecked()&0x1);
|
||||||
|
@ -620,7 +620,7 @@ void SimulatorDialog9X::saveSwitches(void)
|
||||||
|
|
||||||
void SimulatorDialog9X::restoreSwitches(void)
|
void SimulatorDialog9X::restoreSwitches(void)
|
||||||
{
|
{
|
||||||
qDebug() << "SimulatorDialog9X::restoreSwitches()";
|
// qDebug() << "SimulatorDialog9X::restoreSwitches()";
|
||||||
ui->switchAIL->setChecked(switchstatus & 0x1);
|
ui->switchAIL->setChecked(switchstatus & 0x1);
|
||||||
switchstatus >>=1;
|
switchstatus >>=1;
|
||||||
ui->switchELE->setChecked(switchstatus & 0x1);
|
ui->switchELE->setChecked(switchstatus & 0x1);
|
||||||
|
@ -705,7 +705,7 @@ void SimulatorDialogTaranis::getValues()
|
||||||
|
|
||||||
void SimulatorDialogTaranis::saveSwitches(void)
|
void SimulatorDialogTaranis::saveSwitches(void)
|
||||||
{
|
{
|
||||||
qDebug() << "SimulatorDialogTaranis::saveSwitches()";
|
// qDebug() << "SimulatorDialogTaranis::saveSwitches()";
|
||||||
switchstatus=ui->switchA->value();
|
switchstatus=ui->switchA->value();
|
||||||
switchstatus<<=2;
|
switchstatus<<=2;
|
||||||
switchstatus+=ui->switchB->value();
|
switchstatus+=ui->switchB->value();
|
||||||
|
@ -725,7 +725,7 @@ void SimulatorDialogTaranis::saveSwitches(void)
|
||||||
|
|
||||||
void SimulatorDialogTaranis::restoreSwitches(void)
|
void SimulatorDialogTaranis::restoreSwitches(void)
|
||||||
{
|
{
|
||||||
qDebug() << "SimulatorDialogTaranis::restoreSwitches()";
|
// qDebug() << "SimulatorDialogTaranis::restoreSwitches()";
|
||||||
ui->switchH->setValue(switchstatus & 0x3);
|
ui->switchH->setValue(switchstatus & 0x3);
|
||||||
switchstatus>>=2;
|
switchstatus>>=2;
|
||||||
ui->switchG->setValue(switchstatus & 0x3);
|
ui->switchG->setValue(switchstatus & 0x3);
|
||||||
|
|
|
@ -155,7 +155,7 @@ void saveModel(ModelData & m, model & xm)
|
||||||
|
|
||||||
phases xphases;
|
phases xphases;
|
||||||
phases::phase_sequence & phases_sequence (xphases.phase());
|
phases::phase_sequence & phases_sequence (xphases.phase());
|
||||||
for (int i=0; i<C9X_MAX_PHASES; i++) {
|
for (int i=0; i<C9X_MAX_FLIGHT_MODES; i++) {
|
||||||
PhaseData & p = m.phaseData[i];
|
PhaseData & p = m.phaseData[i];
|
||||||
if (i == 0 || p.swtch.type!=SWITCH_TYPE_NONE) {
|
if (i == 0 || p.swtch.type!=SWITCH_TYPE_NONE) {
|
||||||
TrimType xtrim[4];
|
TrimType xtrim[4];
|
||||||
|
|
|
@ -1078,7 +1078,7 @@ MSG_CLEANING = Cleaning project:
|
||||||
# Combine all necessary flags and optional flags.
|
# Combine all necessary flags and optional flags.
|
||||||
# Add target processor to flags.
|
# Add target processor to flags.
|
||||||
|
|
||||||
ARMCPPFLAGS = -c -mcpu=$(MCU) -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=opentx.lst -DRUN_FROM_FLASH=1 -O$(OPT) $(CPPFLAGS) $(INCFLAGS) $(EXTRAINCFLAGS) $(GENDEPFLAGS)
|
ARMCPPFLAGS = -c -mcpu=$(MCU) -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=opentx.lst -DRUN_FROM_FLASH=1 -O$(OPT) $(CPPFLAGS) -fdata-sections -ffunction-sections $(INCFLAGS) $(EXTRAINCFLAGS) $(GENDEPFLAGS)
|
||||||
AVRCPPFLAGS = -mmcu=$(MCU) -I. -x c++ -O$(OPT) $(CPPFLAGS) $(INCFLAGS) $(EXTRAINCFLAGS) $(GENDEPFLAGS) -fwhole-program
|
AVRCPPFLAGS = -mmcu=$(MCU) -I. -x c++ -O$(OPT) $(CPPFLAGS) $(INCFLAGS) $(EXTRAINCFLAGS) $(GENDEPFLAGS) -fwhole-program
|
||||||
|
|
||||||
ifeq ($(ARCH), AVR)
|
ifeq ($(ARCH), AVR)
|
||||||
|
@ -1349,7 +1349,7 @@ OBJS = $(TMP:.s=.o)
|
||||||
@echo
|
@echo
|
||||||
@echo $(MSG_COMPILING) $@
|
@echo $(MSG_COMPILING) $@
|
||||||
$(CC) $(ARMCPPFLAGS) $< -o allsrc.o
|
$(CC) $(ARMCPPFLAGS) $< -o allsrc.o
|
||||||
$(CC) $(OBJS) allsrc.o -mcpu=cortex-m3 -mthumb -nostartfiles -lm -T$(LDSCRIPT) -Wl,-Map=$(TARGET).map,--cref,--no-warn-mismatch -o $@
|
$(CC) $(OBJS) allsrc.o -mcpu=cortex-m3 -mthumb -nostartfiles -lm -T$(LDSCRIPT) -Wl,-Map=$(TARGET).map,--cref,--no-warn-mismatch,--gc-sections -o $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Target: clean project.
|
# Target: clean project.
|
||||||
|
|
|
@ -333,7 +333,7 @@ void getLogicalSwitchAudioFile(char * filename, int index, unsigned int event)
|
||||||
{
|
{
|
||||||
char * str = getModelPath(filename);
|
char * str = getModelPath(filename);
|
||||||
int len = STR_VSWITCHES[0];
|
int len = STR_VSWITCHES[0];
|
||||||
strncpy(str, &STR_VSWITCHES[1+len*(index+SWSRC_FIRST_CSW-1)], len);
|
strncpy(str, &STR_VSWITCHES[1+len*(index+SWSRC_FIRST_LOGICAL_SWITCH-1)], len);
|
||||||
str += len;
|
str += len;
|
||||||
strcpy(str, suffixes[event]);
|
strcpy(str, suffixes[event]);
|
||||||
strcat(str, SOUNDS_EXT);
|
strcat(str, SOUNDS_EXT);
|
||||||
|
@ -369,7 +369,7 @@ void referenceModelAudioFiles()
|
||||||
if (len < 5 || strcasecmp(fn+len-4, SOUNDS_EXT) || (fno.fattrib & AM_DIR)) continue;
|
if (len < 5 || strcasecmp(fn+len-4, SOUNDS_EXT) || (fno.fattrib & AM_DIR)) continue;
|
||||||
|
|
||||||
// Phases Audio Files <phasename>-[on|off].wav
|
// Phases Audio Files <phasename>-[on|off].wav
|
||||||
for (int i=0; i<MAX_PHASES && !found; i++) {
|
for (int i=0; i<MAX_FLIGHT_MODES && !found; i++) {
|
||||||
for (int event=0; event<2; event++) {
|
for (int event=0; event<2; event++) {
|
||||||
getPhaseAudioFile(path, i, event);
|
getPhaseAudioFile(path, i, event);
|
||||||
if (!strcasecmp(filename, fn)) {
|
if (!strcasecmp(filename, fn)) {
|
||||||
|
|
|
@ -225,7 +225,7 @@ PACK(typedef struct {
|
||||||
LogicalSwitchData_v215 customSw[NUM_LOGICAL_SWITCH];
|
LogicalSwitchData_v215 customSw[NUM_LOGICAL_SWITCH];
|
||||||
CustomFnData_v215 funcSw[32];
|
CustomFnData_v215 funcSw[32];
|
||||||
SwashRingData swashR;
|
SwashRingData swashR;
|
||||||
PhaseData_v215 phaseData[MAX_PHASES];
|
PhaseData_v215 phaseData[MAX_FLIGHT_MODES];
|
||||||
|
|
||||||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5ms increments
|
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5ms increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
|
|
@ -629,13 +629,13 @@ TEST(Mixer, SlowOnPhase)
|
||||||
g_model.mixData[0].speedDown = SLOW_STEP*5;
|
g_model.mixData[0].speedDown = SLOW_STEP*5;
|
||||||
|
|
||||||
s_mixer_first_run_done = true;
|
s_mixer_first_run_done = true;
|
||||||
s_perout_flight_phase = 0;
|
s_perout_flight_mode = 0;
|
||||||
perOut(e_perout_mode_normal, 0);
|
perOut(e_perout_mode_normal, 0);
|
||||||
EXPECT_EQ(chans[0], 0);
|
EXPECT_EQ(chans[0], 0);
|
||||||
|
|
||||||
CHECK_SLOW_MOVEMENT(0, +1, 250);
|
CHECK_SLOW_MOVEMENT(0, +1, 250);
|
||||||
|
|
||||||
s_perout_flight_phase = 1;
|
s_perout_flight_mode = 1;
|
||||||
CHECK_SLOW_MOVEMENT(0, -1, 250);
|
CHECK_SLOW_MOVEMENT(0, -1, 250);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -663,11 +663,11 @@ TEST(Mixer, SlowOnSwitchAndPhase)
|
||||||
EXPECT_EQ(chans[0], 0);
|
EXPECT_EQ(chans[0], 0);
|
||||||
|
|
||||||
simuSetSwitch(0, 1);
|
simuSetSwitch(0, 1);
|
||||||
s_perout_flight_phase = 0;
|
s_perout_flight_mode = 0;
|
||||||
CHECK_SLOW_MOVEMENT(0, +1, 250);
|
CHECK_SLOW_MOVEMENT(0, +1, 250);
|
||||||
|
|
||||||
simuSetSwitch(0, -1);
|
simuSetSwitch(0, -1);
|
||||||
s_perout_flight_phase = 1;
|
s_perout_flight_mode = 1;
|
||||||
CHECK_SLOW_MOVEMENT(0, -1, 250);
|
CHECK_SLOW_MOVEMENT(0, -1, 250);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1067,7 +1067,7 @@ void menuModelSetup(uint8_t event)
|
||||||
div_t qr = div(timer->start, 60);
|
div_t qr = div(timer->start, 60);
|
||||||
switch (m_posHorz) {
|
switch (m_posHorz) {
|
||||||
case 0:
|
case 0:
|
||||||
CHECK_INCDEC_MODELVAR(event, timer->mode, SWSRC_FIRST, TMR_VAROFS+SWSRC_LAST-1/*--- which is OFF*/);
|
CHECK_INCDEC_MODELVAR(event, timer->mode, SWSRC_FIRST, TMR_VAROFS+SWSRC_LAST-1);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
CHECK_INCDEC_MODELVAR_ZERO(event, qr.quot, 59);
|
CHECK_INCDEC_MODELVAR_ZERO(event, qr.quot, 59);
|
||||||
|
@ -1108,7 +1108,7 @@ void menuModelSetup(uint8_t event)
|
||||||
s_editMode = 0;
|
s_editMode = 0;
|
||||||
if (event==EVT_KEY_LONG(KEY_ENTER)) {
|
if (event==EVT_KEY_LONG(KEY_ENTER)) {
|
||||||
s_noHi = NO_HI_LEN;
|
s_noHi = NO_HI_LEN;
|
||||||
for (uint8_t i=0; i<MAX_PHASES; i++) {
|
for (uint8_t i=0; i<MAX_FLIGHT_MODES; i++) {
|
||||||
memclear(&g_model.phaseData[i], TRIMS_ARRAY_SIZE);
|
memclear(&g_model.phaseData[i], TRIMS_ARRAY_SIZE);
|
||||||
}
|
}
|
||||||
eeDirty(EE_MODEL);
|
eeDirty(EE_MODEL);
|
||||||
|
@ -1757,7 +1757,7 @@ uint8_t editDelay(const uint8_t y, const uint8_t event, const uint8_t attr, cons
|
||||||
|
|
||||||
void displayFlightModes(uint8_t x, uint8_t y, FlightModesType value)
|
void displayFlightModes(uint8_t x, uint8_t y, FlightModesType value)
|
||||||
{
|
{
|
||||||
uint8_t p = MAX_PHASES;
|
uint8_t p = MAX_FLIGHT_MODES;
|
||||||
do {
|
do {
|
||||||
--p;
|
--p;
|
||||||
if (!(value & (1<<p)))
|
if (!(value & (1<<p)))
|
||||||
|
@ -1781,7 +1781,7 @@ FlightModesType editFlightModes(uint8_t x, uint8_t y, uint8_t event, FlightModes
|
||||||
bool expoMenu = (x==EXPO_ONE_2ND_COLUMN-5*FW);
|
bool expoMenu = (x==EXPO_ONE_2ND_COLUMN-5*FW);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (uint8_t p=0; p<MAX_PHASES; p++) {
|
for (uint8_t p=0; p<MAX_FLIGHT_MODES; p++) {
|
||||||
#if defined(CPUARM) && LCD_W < 212
|
#if defined(CPUARM) && LCD_W < 212
|
||||||
if (expoMenu && ((attr && p < posHorz-4) || (x > EXPO_ONE_2ND_COLUMN-FW)))
|
if (expoMenu && ((attr && p < posHorz-4) || (x > EXPO_ONE_2ND_COLUMN-FW)))
|
||||||
continue;
|
continue;
|
||||||
|
@ -1835,14 +1835,14 @@ bool isTrimModeAvailable(int mode)
|
||||||
|
|
||||||
void menuModelFlightModesAll(uint8_t event)
|
void menuModelFlightModesAll(uint8_t event)
|
||||||
{
|
{
|
||||||
MENU(STR_MENUFLIGHTPHASES, menuTabModel, e_FlightModesAll, 1+MAX_PHASES+1, {0, NAVIGATION_LINE_BY_LINE|(ITEM_PHASES_LAST-5), NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, 0});
|
MENU(STR_MENUFLIGHTPHASES, menuTabModel, e_FlightModesAll, 1+MAX_FLIGHT_MODES+1, {0, NAVIGATION_LINE_BY_LINE|(ITEM_PHASES_LAST-5), NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, 0});
|
||||||
|
|
||||||
int8_t sub = m_posVert - 1;
|
int8_t sub = m_posVert - 1;
|
||||||
|
|
||||||
horzpos_t posHorz = m_posHorz;
|
horzpos_t posHorz = m_posHorz;
|
||||||
if (sub==0 && posHorz > 0) { posHorz += 5; }
|
if (sub==0 && posHorz > 0) { posHorz += 5; }
|
||||||
|
|
||||||
if (sub<MAX_PHASES && posHorz>=0) {
|
if (sub<MAX_FLIGHT_MODES && posHorz>=0) {
|
||||||
displayColumnHeader(STR_PHASES_HEADERS, posHorz);
|
displayColumnHeader(STR_PHASES_HEADERS, posHorz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1850,11 +1850,11 @@ void menuModelFlightModesAll(uint8_t event)
|
||||||
uint8_t y = 1 + (i+1)*FH;
|
uint8_t y = 1 + (i+1)*FH;
|
||||||
uint8_t k = i+s_pgOfs;
|
uint8_t k = i+s_pgOfs;
|
||||||
|
|
||||||
if (k==MAX_PHASES) {
|
if (k==MAX_FLIGHT_MODES) {
|
||||||
// last line available - add the "check trims" line
|
// last line available - add the "check trims" line
|
||||||
lcd_putsLeft((LCD_LINES-1)*FH+1, STR_CHECKTRIMS);
|
lcd_putsLeft((LCD_LINES-1)*FH+1, STR_CHECKTRIMS);
|
||||||
putsFlightPhase(OFS_CHECKTRIMS, (LCD_LINES-1)*FH+1, s_perout_flight_phase+1);
|
putsFlightMode(OFS_CHECKTRIMS, (LCD_LINES-1)*FH+1, s_perout_flight_mode+1);
|
||||||
if (sub==MAX_PHASES && !trimsCheckTimer) {
|
if (sub==MAX_FLIGHT_MODES && !trimsCheckTimer) {
|
||||||
lcd_status_line();
|
lcd_status_line();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -1862,7 +1862,7 @@ void menuModelFlightModesAll(uint8_t event)
|
||||||
|
|
||||||
PhaseData *p = phaseAddress(k);
|
PhaseData *p = phaseAddress(k);
|
||||||
|
|
||||||
putsFlightPhase(0, y, k+1, (getFlightPhase()==k ? BOLD : 0) | ((sub==k && m_posHorz<0) ? INVERS : 0));
|
putsFlightMode(0, y, k+1, (getFlightPhase()==k ? BOLD : 0) | ((sub==k && m_posHorz<0) ? INVERS : 0));
|
||||||
|
|
||||||
for (uint8_t j=0; j<ITEM_PHASES_COUNT; j++) {
|
for (uint8_t j=0; j<ITEM_PHASES_COUNT; j++) {
|
||||||
uint8_t attr = ((sub==k && posHorz==j) ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
uint8_t attr = ((sub==k && posHorz==j) ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
||||||
|
@ -1878,7 +1878,7 @@ void menuModelFlightModesAll(uint8_t event)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
putsSwitches((5+LEN_FP_NAME)*FW+FW/2, y, p->swtch, attr);
|
putsSwitches((5+LEN_FP_NAME)*FW+FW/2, y, p->swtch, attr);
|
||||||
if (active) CHECK_INCDEC_MODELSWITCH(event, p->swtch, SWSRC_FIRST, SWSRC_LAST);
|
if (active) CHECK_INCDEC_MODELSWITCH(event, p->swtch, SWSRC_FIRST_SHORT_LIST, SWSRC_LAST_SHORT_LIST);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1891,7 +1891,7 @@ void menuModelFlightModesAll(uint8_t event)
|
||||||
putsTrimMode((4+LEN_FP_NAME)*FW+j*(5*FW/2), y, k, t, attr);
|
putsTrimMode((4+LEN_FP_NAME)*FW+j*(5*FW/2), y, k, t, attr);
|
||||||
if (active) {
|
if (active) {
|
||||||
trim_t & v = p->trim[t];
|
trim_t & v = p->trim[t];
|
||||||
v.mode = checkIncDec(event, v.mode==TRIM_MODE_NONE ? -1 : v.mode, -1, 2*MAX_PHASES-1, EE_MODEL, isTrimModeAvailable);
|
v.mode = checkIncDec(event, v.mode==TRIM_MODE_NONE ? -1 : v.mode, -1, 2*MAX_FLIGHT_MODES-1, EE_MODEL, isTrimModeAvailable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1933,7 +1933,7 @@ enum menuModelPhaseItems {
|
||||||
void menuModelPhaseOne(uint8_t event)
|
void menuModelPhaseOne(uint8_t event)
|
||||||
{
|
{
|
||||||
PhaseData *phase = phaseAddress(s_currIdx);
|
PhaseData *phase = phaseAddress(s_currIdx);
|
||||||
putsFlightPhase(13*FW, 0, s_currIdx+1, (getFlightPhase()==s_currIdx ? BOLD : 0));
|
putsFlightMode(13*FW, 0, s_currIdx+1, (getFlightPhase()==s_currIdx ? BOLD : 0));
|
||||||
|
|
||||||
#if defined(GVARS) && !defined(PCBSTD)
|
#if defined(GVARS) && !defined(PCBSTD)
|
||||||
static const pm_uint8_t mstate_tab_phase1[] PROGMEM = {0, 0, 0, (uint8_t)-1, 1, 1, 1, 1, 1};
|
static const pm_uint8_t mstate_tab_phase1[] PROGMEM = {0, 0, 0, (uint8_t)-1, 1, 1, 1, 1, 1};
|
||||||
|
@ -1979,7 +1979,7 @@ void menuModelPhaseOne(uint8_t event)
|
||||||
if (attr && m_posHorz==t && ((editMode>0) || p1valdiff)) {
|
if (attr && m_posHorz==t && ((editMode>0) || p1valdiff)) {
|
||||||
int16_t v = getRawTrimValue(s_currIdx, t);
|
int16_t v = getRawTrimValue(s_currIdx, t);
|
||||||
if (v < TRIM_EXTENDED_MAX) v = TRIM_EXTENDED_MAX;
|
if (v < TRIM_EXTENDED_MAX) v = TRIM_EXTENDED_MAX;
|
||||||
v = checkIncDec(event, v, TRIM_EXTENDED_MAX, TRIM_EXTENDED_MAX+MAX_PHASES-1, EE_MODEL);
|
v = checkIncDec(event, v, TRIM_EXTENDED_MAX, TRIM_EXTENDED_MAX+MAX_FLIGHT_MODES-1, EE_MODEL);
|
||||||
if (checkIncDec_Ret) {
|
if (checkIncDec_Ret) {
|
||||||
if (v == TRIM_EXTENDED_MAX) v = 0;
|
if (v == TRIM_EXTENDED_MAX) v = 0;
|
||||||
setTrimValue(s_currIdx, t, v);
|
setTrimValue(s_currIdx, t, v);
|
||||||
|
@ -2004,7 +2004,7 @@ void menuModelPhaseOne(uint8_t event)
|
||||||
int16_t v = phaseAddress(s_currIdx)->rotaryEncoders[t];
|
int16_t v = phaseAddress(s_currIdx)->rotaryEncoders[t];
|
||||||
#endif
|
#endif
|
||||||
if (v < ROTARY_ENCODER_MAX) v = ROTARY_ENCODER_MAX;
|
if (v < ROTARY_ENCODER_MAX) v = ROTARY_ENCODER_MAX;
|
||||||
v = checkIncDec(event, v, ROTARY_ENCODER_MAX, ROTARY_ENCODER_MAX+MAX_PHASES-1, EE_MODEL);
|
v = checkIncDec(event, v, ROTARY_ENCODER_MAX, ROTARY_ENCODER_MAX+MAX_FLIGHT_MODES-1, EE_MODEL);
|
||||||
if (checkIncDec_Ret) {
|
if (checkIncDec_Ret) {
|
||||||
if (v == ROTARY_ENCODER_MAX) v = 0;
|
if (v == ROTARY_ENCODER_MAX) v = 0;
|
||||||
#if ROTARY_ENCODERS > 2
|
#if ROTARY_ENCODERS > 2
|
||||||
|
@ -2048,14 +2048,14 @@ void menuModelPhaseOne(uint8_t event)
|
||||||
if (v > GVAR_MAX) {
|
if (v > GVAR_MAX) {
|
||||||
uint8_t p = v - GVAR_MAX - 1;
|
uint8_t p = v - GVAR_MAX - 1;
|
||||||
if (p >= s_currIdx) p++;
|
if (p >= s_currIdx) p++;
|
||||||
putsFlightPhase(11*FW, y, p+1, posHorz==1 ? attr : 0);
|
putsFlightMode(11*FW, y, p+1, posHorz==1 ? attr : 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
lcd_putsAtt(11*FW, y, STR_OWN, posHorz==1 ? attr : 0);
|
lcd_putsAtt(11*FW, y, STR_OWN, posHorz==1 ? attr : 0);
|
||||||
}
|
}
|
||||||
if (attr && s_currIdx>0 && posHorz==1 && (editMode>0 || p1valdiff)) {
|
if (attr && s_currIdx>0 && posHorz==1 && (editMode>0 || p1valdiff)) {
|
||||||
if (v < GVAR_MAX) v = GVAR_MAX;
|
if (v < GVAR_MAX) v = GVAR_MAX;
|
||||||
v = checkIncDec(event, v, GVAR_MAX, GVAR_MAX+MAX_PHASES-1, EE_MODEL);
|
v = checkIncDec(event, v, GVAR_MAX, GVAR_MAX+MAX_FLIGHT_MODES-1, EE_MODEL);
|
||||||
if (checkIncDec_Ret) {
|
if (checkIncDec_Ret) {
|
||||||
if (v == GVAR_MAX) v = 0;
|
if (v == GVAR_MAX) v = 0;
|
||||||
phase->gvars[idx] = v;
|
phase->gvars[idx] = v;
|
||||||
|
@ -2095,20 +2095,20 @@ void menuModelPhaseOne(uint8_t event)
|
||||||
|
|
||||||
void menuModelFlightModesAll(uint8_t event)
|
void menuModelFlightModesAll(uint8_t event)
|
||||||
{
|
{
|
||||||
SIMPLE_MENU(STR_MENUFLIGHTPHASES, menuTabModel, e_FlightModesAll, 1+MAX_PHASES+1);
|
SIMPLE_MENU(STR_MENUFLIGHTPHASES, menuTabModel, e_FlightModesAll, 1+MAX_FLIGHT_MODES+1);
|
||||||
|
|
||||||
int8_t sub = m_posVert - 1;
|
int8_t sub = m_posVert - 1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
CASE_EVT_ROTARY_BREAK
|
CASE_EVT_ROTARY_BREAK
|
||||||
case EVT_KEY_FIRST(KEY_ENTER):
|
case EVT_KEY_FIRST(KEY_ENTER):
|
||||||
if (sub == MAX_PHASES) {
|
if (sub == MAX_FLIGHT_MODES) {
|
||||||
s_editMode = 0;
|
s_editMode = 0;
|
||||||
trimsCheckTimer = 200; // 2 seconds
|
trimsCheckTimer = 200; // 2 seconds
|
||||||
}
|
}
|
||||||
// no break
|
// no break
|
||||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||||
if (sub >= 0 && sub < MAX_PHASES) {
|
if (sub >= 0 && sub < MAX_FLIGHT_MODES) {
|
||||||
s_currIdx = sub;
|
s_currIdx = sub;
|
||||||
pushMenu(menuModelPhaseOne);
|
pushMenu(menuModelPhaseOne);
|
||||||
}
|
}
|
||||||
|
@ -2116,7 +2116,7 @@ void menuModelFlightModesAll(uint8_t event)
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t att;
|
uint8_t att;
|
||||||
for (uint8_t i=0; i<MAX_PHASES; i++) {
|
for (uint8_t i=0; i<MAX_FLIGHT_MODES; i++) {
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
int8_t y = 1 + (1+i-s_pgOfs)*FH;
|
int8_t y = 1 + (1+i-s_pgOfs)*FH;
|
||||||
if (y<1*FH+1 || y>(LCD_LINES-1)*FH+1) continue;
|
if (y<1*FH+1 || y>(LCD_LINES-1)*FH+1) continue;
|
||||||
|
@ -2126,9 +2126,9 @@ void menuModelFlightModesAll(uint8_t event)
|
||||||
att = (i==sub ? INVERS : 0);
|
att = (i==sub ? INVERS : 0);
|
||||||
PhaseData *p = phaseAddress(i);
|
PhaseData *p = phaseAddress(i);
|
||||||
#if ROTARY_ENCODERS > 2
|
#if ROTARY_ENCODERS > 2
|
||||||
putsFlightPhase(0, y, i+1, att|CONDENSED|(getFlightPhase()==i ? BOLD : 0));
|
putsFlightMode(0, y, i+1, att|CONDENSED|(getFlightPhase()==i ? BOLD : 0));
|
||||||
#else
|
#else
|
||||||
putsFlightPhase(0, y, i+1, att|(getFlightPhase()==i ? BOLD : 0));
|
putsFlightMode(0, y, i+1, att|(getFlightPhase()==i ? BOLD : 0));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
lcd_putsnAtt(4*FW+NAME_OFS, y, p->name, sizeof(p->name), ZCHAR);
|
lcd_putsnAtt(4*FW+NAME_OFS, y, p->name, sizeof(p->name), ZCHAR);
|
||||||
|
@ -2153,12 +2153,12 @@ void menuModelFlightModesAll(uint8_t event)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
if (s_pgOfs != MAX_PHASES-(LCD_LINES-2)) return;
|
if (s_pgOfs != MAX_FLIGHT_MODES-(LCD_LINES-2)) return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
lcd_putsLeft((LCD_LINES-1)*FH+1, STR_CHECKTRIMS);
|
lcd_putsLeft((LCD_LINES-1)*FH+1, STR_CHECKTRIMS);
|
||||||
putsFlightPhase(OFS_CHECKTRIMS, (LCD_LINES-1)*FH+1, s_perout_flight_phase+1);
|
putsFlightMode(OFS_CHECKTRIMS, (LCD_LINES-1)*FH+1, s_perout_flight_mode+1);
|
||||||
if (sub==MAX_PHASES && !trimsCheckTimer) {
|
if (sub==MAX_FLIGHT_MODES && !trimsCheckTimer) {
|
||||||
lcd_status_line();
|
lcd_status_line();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2910,7 +2910,7 @@ void menuModelExpoOne(uint8_t event)
|
||||||
putsMixerSource(7*FW+FW/2, 0, MIXSRC_Rud+ed->chn, 0);
|
putsMixerSource(7*FW+FW/2, 0, MIXSRC_Rud+ed->chn, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SUBMENU(STR_MENUINPUTS, EXPO_FIELD_MAX, {CASE_PCBTARANIS(0) IF_CPUARM(0) CASE_PCBTARANIS(0) CASE_PCBTARANIS((ed->srcRaw >= MIXSRC_FIRST_TELEM ? (uint8_t)0 : (uint8_t)HIDDEN_ROW)) 0, CASE_PCBTARANIS(0) CASE_9X(0) IF_CURVES(CURVE_ROWS) IF_FLIGHT_MODES((MAX_PHASES-1) | NAVIGATION_LINE_BY_LINE) 0 /*, ...*/});
|
SUBMENU(STR_MENUINPUTS, EXPO_FIELD_MAX, {CASE_PCBTARANIS(0) IF_CPUARM(0) CASE_PCBTARANIS(0) CASE_PCBTARANIS((ed->srcRaw >= MIXSRC_FIRST_TELEM ? (uint8_t)0 : (uint8_t)HIDDEN_ROW)) 0, CASE_PCBTARANIS(0) CASE_9X(0) IF_CURVES(CURVE_ROWS) IF_FLIGHT_MODES((MAX_FLIGHT_MODES-1) | NAVIGATION_LINE_BY_LINE) 0 /*, ...*/});
|
||||||
|
|
||||||
SET_SCROLLBAR_X(EXPO_ONE_2ND_COLUMN+10*FW);
|
SET_SCROLLBAR_X(EXPO_ONE_2ND_COLUMN+10*FW);
|
||||||
|
|
||||||
|
@ -3111,11 +3111,11 @@ void menuModelMixOne(uint8_t event)
|
||||||
#else
|
#else
|
||||||
if (m_posVert == MIX_FIELD_TRIM && md2->srcRaw > NUM_STICKS)
|
if (m_posVert == MIX_FIELD_TRIM && md2->srcRaw > NUM_STICKS)
|
||||||
#endif
|
#endif
|
||||||
SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, CASE_9X(0) IF_CURVES(0) IF_FLIGHT_MODES((MAX_PHASES-1) | NAVIGATION_LINE_BY_LINE) 0, 0 /*, ...*/})
|
SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, CASE_9X(0) IF_CURVES(0) IF_FLIGHT_MODES((MAX_FLIGHT_MODES-1) | NAVIGATION_LINE_BY_LINE) 0, 0 /*, ...*/})
|
||||||
else
|
else
|
||||||
SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, CASE_9X(1) IF_CURVES(1) IF_FLIGHT_MODES((MAX_PHASES-1) | NAVIGATION_LINE_BY_LINE) 0, 0 /*, ...*/});
|
SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, CASE_9X(1) IF_CURVES(1) IF_FLIGHT_MODES((MAX_FLIGHT_MODES-1) | NAVIGATION_LINE_BY_LINE) 0, 0 /*, ...*/});
|
||||||
#else
|
#else
|
||||||
SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, CASE_9X(1) CASE_PCBTARANIS(0) IF_CURVES(1) IF_FLIGHT_MODES((MAX_PHASES-1) | NAVIGATION_LINE_BY_LINE) 0, 0 /*, ...*/});
|
SUBMENU_NOTITLE(MIX_FIELD_COUNT, {IF_CPUARM(0) 0, 0, 0, CASE_9X(1) CASE_PCBTARANIS(0) IF_CURVES(1) IF_FLIGHT_MODES((MAX_FLIGHT_MODES-1) | NAVIGATION_LINE_BY_LINE) 0, 0 /*, ...*/});
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if MENU_COLUMNS > 1
|
#if MENU_COLUMNS > 1
|
||||||
|
@ -3314,7 +3314,7 @@ static uint8_t s_copySrcCh;
|
||||||
#define EXPO_LINE_WEIGHT_POS 7*FW+1
|
#define EXPO_LINE_WEIGHT_POS 7*FW+1
|
||||||
#define EXPO_LINE_EXPO_POS 11*FW
|
#define EXPO_LINE_EXPO_POS 11*FW
|
||||||
#define EXPO_LINE_SWITCH_POS 11*FW+4
|
#define EXPO_LINE_SWITCH_POS 11*FW+4
|
||||||
#if MAX_PHASES == 6
|
#if MAX_FLIGHT_MODES == 6
|
||||||
#define EXPO_LINE_SIDE_POS 15*FW
|
#define EXPO_LINE_SIDE_POS 15*FW
|
||||||
#else
|
#else
|
||||||
#define EXPO_LINE_SIDE_POS 15*FW+2
|
#define EXPO_LINE_SIDE_POS 15*FW+2
|
||||||
|
@ -4102,7 +4102,7 @@ void onGVARSMenu(const char *result)
|
||||||
eeDirty(EE_MODEL);
|
eeDirty(EE_MODEL);
|
||||||
}
|
}
|
||||||
else if (result == STR_CLEAR) {
|
else if (result == STR_CLEAR) {
|
||||||
for (int i=0; i<MAX_PHASES; i++) {
|
for (int i=0; i<MAX_FLIGHT_MODES; i++) {
|
||||||
g_model.phaseData[i].gvars[sub] = 0;
|
g_model.phaseData[i].gvars[sub] = 0;
|
||||||
}
|
}
|
||||||
eeDirty(EE_MODEL);
|
eeDirty(EE_MODEL);
|
||||||
|
@ -4127,7 +4127,7 @@ void menuModelGVars(uint8_t event)
|
||||||
menuTitle = STR_MENUGLOBALVARS;
|
menuTitle = STR_MENUGLOBALVARS;
|
||||||
}
|
}
|
||||||
|
|
||||||
MENU_FLAGS(menuTitle, menuTabModel, e_GVars, first2seconds ? CHECK_FLAG_NO_SCREEN_INDEX : 0, 1+MAX_GVARS, {0, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES});
|
MENU_FLAGS(menuTitle, menuTabModel, e_GVars, first2seconds ? CHECK_FLAG_NO_SCREEN_INDEX : 0, 1+MAX_GVARS, {0, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES});
|
||||||
|
|
||||||
uint8_t sub = m_posVert - 1;
|
uint8_t sub = m_posVert - 1;
|
||||||
|
|
||||||
|
@ -4146,7 +4146,7 @@ void menuModelGVars(uint8_t event)
|
||||||
if (g_model.gvars[i].popup) lcd_putc(3*FW, y, '!');
|
if (g_model.gvars[i].popup) lcd_putc(3*FW, y, '!');
|
||||||
putsStrIdx(0, y, STR_GV, i+1, (sub==i && m_posHorz<0) ? INVERS : 0);
|
putsStrIdx(0, y, STR_GV, i+1, (sub==i && m_posHorz<0) ? INVERS : 0);
|
||||||
|
|
||||||
for (uint8_t j=0; j<1+MAX_PHASES; j++) {
|
for (uint8_t j=0; j<1+MAX_FLIGHT_MODES; j++) {
|
||||||
LcdFlags attr = ((sub==i && m_posHorz==j) ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
LcdFlags attr = ((sub==i && m_posHorz==j) ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
||||||
xcoord_t x = GVARS_FM_COLUMN(j-1);
|
xcoord_t x = GVARS_FM_COLUMN(j-1);
|
||||||
|
|
||||||
|
@ -4170,8 +4170,8 @@ void menuModelGVars(uint8_t event)
|
||||||
if (v > GVAR_MAX) {
|
if (v > GVAR_MAX) {
|
||||||
uint8_t p = v - GVAR_MAX - 1;
|
uint8_t p = v - GVAR_MAX - 1;
|
||||||
if (p >= j-1) p++;
|
if (p >= j-1) p++;
|
||||||
putsFlightPhase(x-15, y, p+1, attr|SMLSIZE);
|
putsFlightMode(x-15, y, p+1, attr|SMLSIZE);
|
||||||
vmin = GVAR_MAX+1; vmax = GVAR_MAX+MAX_PHASES-1;
|
vmin = GVAR_MAX+1; vmax = GVAR_MAX+MAX_FLIGHT_MODES-1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (abs(v) >= 100)
|
if (abs(v) >= 100)
|
||||||
|
@ -4967,10 +4967,11 @@ void menuModelCustomFunctions(uint8_t event)
|
||||||
{
|
{
|
||||||
INCDEC_DECLARE_VARS();
|
INCDEC_DECLARE_VARS();
|
||||||
int16_t val_displayed = CFN_PARAM(sd);
|
int16_t val_displayed = CFN_PARAM(sd);
|
||||||
int8_t val_min = 0;
|
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
|
int16_t val_min = 0;
|
||||||
int16_t val_max = 255;
|
int16_t val_max = 255;
|
||||||
#else
|
#else
|
||||||
|
int8_t val_min = 0;
|
||||||
uint8_t val_max = 255;
|
uint8_t val_max = 255;
|
||||||
#endif
|
#endif
|
||||||
if (func == FUNC_SAFETY_CHANNEL) {
|
if (func == FUNC_SAFETY_CHANNEL) {
|
||||||
|
@ -5084,7 +5085,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||||
switch (CFN_GVAR_MODE(sd)) {
|
switch (CFN_GVAR_MODE(sd)) {
|
||||||
case FUNC_ADJUST_GVAR_CONSTANT:
|
case FUNC_ADJUST_GVAR_CONSTANT:
|
||||||
val_displayed = (int8_t)CFN_PARAM(sd);
|
val_displayed = (int8_t)CFN_PARAM(sd);
|
||||||
val_min = -125; val_max = 125;
|
val_min = -CFN_GVAR_CST_MAX; val_max = +CFN_GVAR_CST_MAX;
|
||||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
||||||
break;
|
break;
|
||||||
case FUNC_ADJUST_GVAR_SOURCE:
|
case FUNC_ADJUST_GVAR_SOURCE:
|
||||||
|
|
|
@ -1132,7 +1132,7 @@ int8_t switchMenuItem(uint8_t x, uint8_t y, int8_t value, LcdFlags attr, uint8_t
|
||||||
{
|
{
|
||||||
lcd_putsColumnLeft(x, y, STR_SWITCH);
|
lcd_putsColumnLeft(x, y, STR_SWITCH);
|
||||||
putsSwitches(x, y, value, attr);
|
putsSwitches(x, y, value, attr);
|
||||||
if (attr) CHECK_INCDEC_MODELSWITCH(event, value, SWSRC_FIRST, SWSRC_LAST);
|
if (attr) CHECK_INCDEC_MODELSWITCH(event, value, SWSRC_FIRST_SHORT_LIST, SWSRC_LAST_SHORT_LIST);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1152,11 +1152,11 @@ int16_t gvarMenuItem(uint8_t x, uint8_t y, int16_t value, int16_t min, int16_t m
|
||||||
s_editMode = !s_editMode;
|
s_editMode = !s_editMode;
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
if (attr & PREC1)
|
if (attr & PREC1)
|
||||||
value = (GV_IS_GV_VALUE(value, min, max) ? GET_GVAR(value, min, max, s_perout_flight_phase)*10 : delta);
|
value = (GV_IS_GV_VALUE(value, min, max) ? GET_GVAR(value, min, max, s_perout_flight_mode)*10 : delta);
|
||||||
else
|
else
|
||||||
value = (GV_IS_GV_VALUE(value, min, max) ? GET_GVAR(value, min, max, s_perout_flight_phase) : delta);
|
value = (GV_IS_GV_VALUE(value, min, max) ? GET_GVAR(value, min, max, s_perout_flight_mode) : delta);
|
||||||
#else
|
#else
|
||||||
value = (GV_IS_GV_VALUE(value, min, max) ? GET_GVAR(value, min, max, s_perout_flight_phase) : delta);
|
value = (GV_IS_GV_VALUE(value, min, max) ? GET_GVAR(value, min, max, s_perout_flight_mode) : delta);
|
||||||
#endif
|
#endif
|
||||||
eeDirty(EE_MODEL);
|
eeDirty(EE_MODEL);
|
||||||
}
|
}
|
||||||
|
@ -1500,8 +1500,8 @@ bool isSwitchAvailable(int swtch)
|
||||||
swtch = -swtch;
|
swtch = -swtch;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (swtch >= SWSRC_FIRST_CSW && swtch <= SWSRC_LAST_CSW) {
|
if (swtch >= SWSRC_FIRST_LOGICAL_SWITCH && swtch <= SWSRC_LAST_LOGICAL_SWITCH) {
|
||||||
LogicalSwitchData * cs = cswAddress(swtch-SWSRC_FIRST_CSW);
|
LogicalSwitchData * cs = cswAddress(swtch-SWSRC_FIRST_LOGICAL_SWITCH);
|
||||||
return (cs->func != LS_FUNC_NONE);
|
return (cs->func != LS_FUNC_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -650,7 +650,7 @@ void menuMainView(uint8_t event)
|
||||||
|
|
||||||
{
|
{
|
||||||
// Flight Phase Name
|
// Flight Phase Name
|
||||||
uint8_t phase = s_perout_flight_phase;
|
uint8_t phase = s_perout_flight_mode;
|
||||||
lcd_putsnAtt(PHASE_X, PHASE_Y, g_model.phaseData[phase].name, sizeof(g_model.phaseData[phase].name), ZCHAR|PHASE_FLAGS);
|
lcd_putsnAtt(PHASE_X, PHASE_Y, g_model.phaseData[phase].name, sizeof(g_model.phaseData[phase].name), ZCHAR|PHASE_FLAGS);
|
||||||
|
|
||||||
// Model Name
|
// Model Name
|
||||||
|
@ -862,13 +862,13 @@ void menuMainView(uint8_t event)
|
||||||
putsStrIdx(BITMAP_X+FW, BITMAP_Y+FH-1, STR_GV, s_gvar_last+1);
|
putsStrIdx(BITMAP_X+FW, BITMAP_Y+FH-1, STR_GV, s_gvar_last+1);
|
||||||
lcd_putsnAtt(BITMAP_X+4*FW+FW/2, BITMAP_Y+FH-1, g_model.gvars[s_gvar_last].name, LEN_GVAR_NAME, ZCHAR);
|
lcd_putsnAtt(BITMAP_X+4*FW+FW/2, BITMAP_Y+FH-1, g_model.gvars[s_gvar_last].name, LEN_GVAR_NAME, ZCHAR);
|
||||||
lcd_putsAtt(BITMAP_X+FW, BITMAP_Y+2*FH+3, PSTR("[\010]"), BOLD);
|
lcd_putsAtt(BITMAP_X+FW, BITMAP_Y+2*FH+3, PSTR("[\010]"), BOLD);
|
||||||
lcd_outdezAtt(BITMAP_X+5*FW+FW/2, BITMAP_Y+2*FH+3, GVAR_VALUE(s_gvar_last, s_perout_flight_phase), BOLD);
|
lcd_outdezAtt(BITMAP_X+5*FW+FW/2, BITMAP_Y+2*FH+3, GVAR_VALUE(s_gvar_last, s_perout_flight_mode), BOLD);
|
||||||
#else
|
#else
|
||||||
s_warning = STR_GLOBAL_VAR;
|
s_warning = STR_GLOBAL_VAR;
|
||||||
displayBox();
|
displayBox();
|
||||||
lcd_putsnAtt(16, 5*FH, g_model.gvars[s_gvar_last].name, LEN_GVAR_NAME, ZCHAR);
|
lcd_putsnAtt(16, 5*FH, g_model.gvars[s_gvar_last].name, LEN_GVAR_NAME, ZCHAR);
|
||||||
lcd_putsAtt(16+7*FW, 5*FH, PSTR("[\010]"), BOLD);
|
lcd_putsAtt(16+7*FW, 5*FH, PSTR("[\010]"), BOLD);
|
||||||
lcd_outdezAtt(16+7*FW+4*FW+FW/2, 5*FH, GVAR_VALUE(s_gvar_last, s_perout_flight_phase), BOLD);
|
lcd_outdezAtt(16+7*FW+4*FW+FW/2, 5*FH, GVAR_VALUE(s_gvar_last, s_perout_flight_mode), BOLD);
|
||||||
s_warning = NULL;
|
s_warning = NULL;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -1020,11 +1020,16 @@ void putsSwitches(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att)
|
||||||
lcd_putcAtt(x-2, y, '!', att);
|
lcd_putcAtt(x-2, y, '!', att);
|
||||||
idx = -idx;
|
idx = -idx;
|
||||||
}
|
}
|
||||||
|
#if defined(CPUARM) && defined(FLIGHT_MODES)
|
||||||
|
if (idx >= SWSRC_FIRST_FLIGHT_MODE)
|
||||||
|
putsStrIdx(x, y, STR_FP, idx-SWSRC_FIRST_FLIGHT_MODE, att);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
lcd_putsiAtt(x, y, STR_VSWITCHES, idx-1, att);
|
lcd_putsiAtt(x, y, STR_VSWITCHES, idx-1, att);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(FLIGHT_MODES)
|
#if defined(FLIGHT_MODES)
|
||||||
void putsFlightPhase(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att)
|
void putsFlightMode(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att)
|
||||||
{
|
{
|
||||||
if (idx==0) { lcd_putsiAtt(x, y, STR_MMMINV, 0, att); return; }
|
if (idx==0) { lcd_putsiAtt(x, y, STR_MMMINV, 0, att); return; }
|
||||||
if (idx < 0) { lcd_putcAtt(x-2, y, '!', att); idx = -idx; }
|
if (idx < 0) { lcd_putcAtt(x-2, y, '!', att); idx = -idx; }
|
||||||
|
|
|
@ -178,7 +178,7 @@ void putsStrIdx(xcoord_t x, uint8_t y, const pm_char *str, uint8_t idx, LcdFlags
|
||||||
void putsModelName(xcoord_t x, uint8_t y, char *name, uint8_t id, LcdFlags att);
|
void putsModelName(xcoord_t x, uint8_t y, char *name, uint8_t id, LcdFlags att);
|
||||||
void putsSwitches(xcoord_t x, uint8_t y, int8_t swtch, LcdFlags att=0);
|
void putsSwitches(xcoord_t x, uint8_t y, int8_t swtch, LcdFlags att=0);
|
||||||
void putsMixerSource(xcoord_t x, uint8_t y, uint8_t idx, LcdFlags att=0);
|
void putsMixerSource(xcoord_t x, uint8_t y, uint8_t idx, LcdFlags att=0);
|
||||||
void putsFlightPhase(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att=0);
|
void putsFlightMode(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att=0);
|
||||||
#if defined(PCBTARANIS) && !defined(BOOT)
|
#if defined(PCBTARANIS) && !defined(BOOT)
|
||||||
void putsCurveRef(xcoord_t x, uint8_t y, CurveRef &curve, LcdFlags att);
|
void putsCurveRef(xcoord_t x, uint8_t y, CurveRef &curve, LcdFlags att);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -741,6 +741,29 @@ static int luaModelSetOutput(lua_State *L)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int luaModelGetGlobalVariable(lua_State *L)
|
||||||
|
{
|
||||||
|
int idx = luaL_checkunsigned(L, 1);
|
||||||
|
int phase = luaL_checkunsigned(L, 2);
|
||||||
|
if (phase < MAX_FLIGHT_MODES && idx < MAX_GVARS)
|
||||||
|
lua_pushinteger(L, g_model.phaseData[phase].gvars[idx]);
|
||||||
|
else
|
||||||
|
lua_pushnil(L);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int luaModelSetGlobalVariable(lua_State *L)
|
||||||
|
{
|
||||||
|
int idx = luaL_checkunsigned(L, 1);
|
||||||
|
int phase = luaL_checkunsigned(L, 2);
|
||||||
|
int value = luaL_checkinteger(L, 3);
|
||||||
|
if (phase < MAX_FLIGHT_MODES && idx < MAX_GVARS && value >= -GVAR_LIMIT && value <= GVAR_LIMIT) {
|
||||||
|
g_model.phaseData[phase].gvars[idx] = value;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int luaPopupInput(lua_State *L)
|
static int luaPopupInput(lua_State *L)
|
||||||
{
|
{
|
||||||
uint8_t event = luaL_checkinteger(L, 2);
|
uint8_t event = luaL_checkinteger(L, 2);
|
||||||
|
@ -849,6 +872,8 @@ static const luaL_Reg modelLib[] = {
|
||||||
{ "setCustomFunction", luaModelSetCustomFunction },
|
{ "setCustomFunction", luaModelSetCustomFunction },
|
||||||
{ "getOutput", luaModelGetOutput },
|
{ "getOutput", luaModelGetOutput },
|
||||||
{ "setOutput", luaModelSetOutput },
|
{ "setOutput", luaModelSetOutput },
|
||||||
|
{ "getGlobalVariable", luaModelGetGlobalVariable },
|
||||||
|
{ "setGlobalVariable", luaModelSetGlobalVariable },
|
||||||
{ NULL, NULL } /* sentinel */
|
{ NULL, NULL } /* sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -901,7 +926,7 @@ void luaInit()
|
||||||
lua_registerint(L, "STICK_ELEVATOR", MIXSRC_Ele);
|
lua_registerint(L, "STICK_ELEVATOR", MIXSRC_Ele);
|
||||||
lua_registerint(L, "STICK_THROTTLE", MIXSRC_Thr);
|
lua_registerint(L, "STICK_THROTTLE", MIXSRC_Thr);
|
||||||
lua_registerint(L, "STICK_AILERON", MIXSRC_Ail);
|
lua_registerint(L, "STICK_AILERON", MIXSRC_Ail);
|
||||||
lua_registerint(L, "SWITCH_LAST", SWSRC_LAST_CSW);
|
lua_registerint(L, "SWITCH_LAST", SWSRC_LAST_LOGICAL_SWITCH);
|
||||||
lua_registerint(L, "EVT_MENU_BREAK", EVT_KEY_BREAK(KEY_MENU));
|
lua_registerint(L, "EVT_MENU_BREAK", EVT_KEY_BREAK(KEY_MENU));
|
||||||
lua_registerint(L, "EVT_PAGE_BREAK", EVT_KEY_BREAK(KEY_PAGE));
|
lua_registerint(L, "EVT_PAGE_BREAK", EVT_KEY_BREAK(KEY_PAGE));
|
||||||
lua_registerint(L, "EVT_ENTER_BREAK", EVT_KEY_BREAK(KEY_ENTER));
|
lua_registerint(L, "EVT_ENTER_BREAK", EVT_KEY_BREAK(KEY_ENTER));
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
#define MAX_MODELS 60
|
#define MAX_MODELS 60
|
||||||
#define NUM_CHNOUT 32 // number of real output channels CH1-CH32
|
#define NUM_CHNOUT 32 // number of real output channels CH1-CH32
|
||||||
#define MAX_PHASES 9
|
#define MAX_FLIGHT_MODES 9
|
||||||
#define MAX_MIXERS 64
|
#define MAX_MIXERS 64
|
||||||
#define MAX_EXPOS 64
|
#define MAX_EXPOS 64
|
||||||
#define NUM_LOGICAL_SWITCH 32 // number of custom switches
|
#define NUM_LOGICAL_SWITCH 32 // number of custom switches
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
#elif defined(CPUARM)
|
#elif defined(CPUARM)
|
||||||
#define MAX_MODELS 60
|
#define MAX_MODELS 60
|
||||||
#define NUM_CHNOUT 32 // number of real output channels CH1-CH32
|
#define NUM_CHNOUT 32 // number of real output channels CH1-CH32
|
||||||
#define MAX_PHASES 9
|
#define MAX_FLIGHT_MODES 9
|
||||||
#define MAX_MIXERS 64
|
#define MAX_MIXERS 64
|
||||||
#define MAX_EXPOS 32
|
#define MAX_EXPOS 32
|
||||||
#define NUM_LOGICAL_SWITCH 32 // number of custom switches
|
#define NUM_LOGICAL_SWITCH 32 // number of custom switches
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
#elif defined(CPUM2560) || defined(CPUM2561)
|
#elif defined(CPUM2560) || defined(CPUM2561)
|
||||||
#define MAX_MODELS 30
|
#define MAX_MODELS 30
|
||||||
#define NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
#define NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
||||||
#define MAX_PHASES 6
|
#define MAX_FLIGHT_MODES 6
|
||||||
#define MAX_MIXERS 32
|
#define MAX_MIXERS 32
|
||||||
#define MAX_EXPOS 16
|
#define MAX_EXPOS 16
|
||||||
#define NUM_LOGICAL_SWITCH 15 // number of custom switches
|
#define NUM_LOGICAL_SWITCH 15 // number of custom switches
|
||||||
|
@ -108,7 +108,7 @@
|
||||||
#elif defined(CPUM128)
|
#elif defined(CPUM128)
|
||||||
#define MAX_MODELS 30
|
#define MAX_MODELS 30
|
||||||
#define NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
#define NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
||||||
#define MAX_PHASES 5
|
#define MAX_FLIGHT_MODES 5
|
||||||
#define MAX_MIXERS 32
|
#define MAX_MIXERS 32
|
||||||
#define MAX_EXPOS 14
|
#define MAX_EXPOS 14
|
||||||
#define NUM_LOGICAL_SWITCH 15 // number of custom switches
|
#define NUM_LOGICAL_SWITCH 15 // number of custom switches
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
#else
|
#else
|
||||||
#define MAX_MODELS 16
|
#define MAX_MODELS 16
|
||||||
#define NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
#define NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
||||||
#define MAX_PHASES 5
|
#define MAX_FLIGHT_MODES 5
|
||||||
#define MAX_MIXERS 32
|
#define MAX_MIXERS 32
|
||||||
#define MAX_EXPOS 14
|
#define MAX_EXPOS 14
|
||||||
#define NUM_LOGICAL_SWITCH 12 // number of custom switches
|
#define NUM_LOGICAL_SWITCH 12 // number of custom switches
|
||||||
|
@ -522,9 +522,9 @@ PACK(typedef struct t_ExpoData {
|
||||||
#define limit_min_max_t int16_t
|
#define limit_min_max_t int16_t
|
||||||
#define LIMIT_EXT_PERCENT 150
|
#define LIMIT_EXT_PERCENT 150
|
||||||
#define LIMIT_EXT_MAX (LIMIT_EXT_PERCENT*10)
|
#define LIMIT_EXT_MAX (LIMIT_EXT_PERCENT*10)
|
||||||
#define LIMIT_MAX(lim) (GV_IS_GV_VALUE(lim->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX) ? GET_GVAR(lim->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, s_perout_flight_phase)*10 : lim->max+1000)
|
#define LIMIT_MAX(lim) (GV_IS_GV_VALUE(lim->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX) ? GET_GVAR(lim->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, s_perout_flight_mode)*10 : lim->max+1000)
|
||||||
#define LIMIT_MIN(lim) (GV_IS_GV_VALUE(lim->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX) ? GET_GVAR(lim->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, s_perout_flight_phase)*10 : lim->min-1000)
|
#define LIMIT_MIN(lim) (GV_IS_GV_VALUE(lim->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX) ? GET_GVAR(lim->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, s_perout_flight_mode)*10 : lim->min-1000)
|
||||||
#define LIMIT_OFS(lim) (GV_IS_GV_VALUE(lim->offset, -1000, 1000) ? GET_GVAR(lim->offset, -1000, 1000, s_perout_flight_phase)*10 : lim->offset)
|
#define LIMIT_OFS(lim) (GV_IS_GV_VALUE(lim->offset, -1000, 1000) ? GET_GVAR(lim->offset, -1000, 1000, s_perout_flight_mode)*10 : lim->offset)
|
||||||
#define LIMIT_MAX_RESX(lim) calc1000toRESX(LIMIT_MAX(lim))
|
#define LIMIT_MAX_RESX(lim) calc1000toRESX(LIMIT_MAX(lim))
|
||||||
#define LIMIT_MIN_RESX(lim) calc1000toRESX(LIMIT_MIN(lim))
|
#define LIMIT_MIN_RESX(lim) calc1000toRESX(LIMIT_MIN(lim))
|
||||||
#define LIMIT_OFS_RESX(lim) calc1000toRESX(LIMIT_OFS(lim))
|
#define LIMIT_OFS_RESX(lim) calc1000toRESX(LIMIT_OFS(lim))
|
||||||
|
@ -692,7 +692,7 @@ PACK(typedef struct t_MixData {
|
||||||
PACK( union u_gvarint_t {
|
PACK( union u_gvarint_t {
|
||||||
struct {
|
struct {
|
||||||
int8_t lo;
|
int8_t lo;
|
||||||
uint8_t hi;
|
uint8_t hi;
|
||||||
} bytes_t;
|
} bytes_t;
|
||||||
int16_t word;
|
int16_t word;
|
||||||
|
|
||||||
|
@ -916,6 +916,7 @@ PACK(typedef struct t_CustomFnData { // Function Switches data
|
||||||
#define CFN_GVAR_MODE(p) ((p)->all.mode)
|
#define CFN_GVAR_MODE(p) ((p)->all.mode)
|
||||||
#define CFN_PARAM(p) ((p)->all.val)
|
#define CFN_PARAM(p) ((p)->all.val)
|
||||||
#define CFN_RESET(p) ((p)->active=0, (p)->clear.val1=0, (p)->clear.val2=0)
|
#define CFN_RESET(p) ((p)->active=0, (p)->clear.val1=0, (p)->clear.val2=0)
|
||||||
|
#define CFN_GVAR_CST_MAX GVAR_LIMIT
|
||||||
#else
|
#else
|
||||||
PACK(typedef struct t_CustomFnData {
|
PACK(typedef struct t_CustomFnData {
|
||||||
PACK(union {
|
PACK(union {
|
||||||
|
@ -948,6 +949,7 @@ PACK(typedef struct t_CustomFnData {
|
||||||
#define CFN_GVAR_MODE(p) ((p)->gvar.mode)
|
#define CFN_GVAR_MODE(p) ((p)->gvar.mode)
|
||||||
#define CFN_PARAM(p) ((p)->value)
|
#define CFN_PARAM(p) ((p)->value)
|
||||||
#define CFN_RESET(p) ((p)->all.active = 0, CFN_PARAM(p) = 0)
|
#define CFN_RESET(p) ((p)->all.active = 0, CFN_PARAM(p) = 0)
|
||||||
|
#define CFN_GVAR_CST_MAX 125
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum TelemetryUnit {
|
enum TelemetryUnit {
|
||||||
|
@ -1244,7 +1246,7 @@ PACK(typedef struct t_SwashRingData { // Swash Ring data
|
||||||
#define NUM_ROTARY_ENCODERS_EXTRA 2
|
#define NUM_ROTARY_ENCODERS_EXTRA 2
|
||||||
#define NUM_ROTARY_ENCODERS (2+NUM_ROTARY_ENCODERS_EXTRA)
|
#define NUM_ROTARY_ENCODERS (2+NUM_ROTARY_ENCODERS_EXTRA)
|
||||||
#define ROTARY_ENCODER_ARRAY int16_t rotaryEncoders[2];
|
#define ROTARY_ENCODER_ARRAY int16_t rotaryEncoders[2];
|
||||||
#define ROTARY_ENCODER_ARRAY_EXTRA int16_t rotaryEncodersExtra[MAX_PHASES][NUM_ROTARY_ENCODERS_EXTRA];
|
#define ROTARY_ENCODER_ARRAY_EXTRA int16_t rotaryEncodersExtra[MAX_FLIGHT_MODES][NUM_ROTARY_ENCODERS_EXTRA];
|
||||||
#elif defined(CPUM2560) && ROTARY_ENCODERS <= 2
|
#elif defined(CPUM2560) && ROTARY_ENCODERS <= 2
|
||||||
#define NUM_ROTARY_ENCODERS_EXTRA 0
|
#define NUM_ROTARY_ENCODERS_EXTRA 0
|
||||||
#define NUM_ROTARY_ENCODERS 2
|
#define NUM_ROTARY_ENCODERS 2
|
||||||
|
@ -1369,8 +1371,8 @@ enum SwitchSources {
|
||||||
SWSRC_REb,
|
SWSRC_REb,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SWSRC_FIRST_CSW,
|
SWSRC_FIRST_LOGICAL_SWITCH,
|
||||||
SWSRC_SW1 = SWSRC_FIRST_CSW,
|
SWSRC_SW1 = SWSRC_FIRST_LOGICAL_SWITCH,
|
||||||
SWSRC_SW2,
|
SWSRC_SW2,
|
||||||
SWSRC_SW3,
|
SWSRC_SW3,
|
||||||
SWSRC_SW4,
|
SWSRC_SW4,
|
||||||
|
@ -1382,13 +1384,24 @@ enum SwitchSources {
|
||||||
SWSRC_SWA,
|
SWSRC_SWA,
|
||||||
SWSRC_SWB,
|
SWSRC_SWB,
|
||||||
SWSRC_SWC,
|
SWSRC_SWC,
|
||||||
SWSRC_LAST_CSW = SWSRC_SW1+NUM_LOGICAL_SWITCH-1,
|
SWSRC_LAST_LOGICAL_SWITCH = SWSRC_FIRST_LOGICAL_SWITCH+NUM_LOGICAL_SWITCH-1,
|
||||||
|
|
||||||
SWSRC_ON,
|
SWSRC_ON,
|
||||||
|
|
||||||
|
#if defined(CPUARM)
|
||||||
|
SWSRC_FIRST_FLIGHT_MODE,
|
||||||
|
SWSRC_LAST_FLIGHT_MODE = SWSRC_FIRST_FLIGHT_MODE+MAX_FLIGHT_MODES-1,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SWSRC_COUNT,
|
||||||
|
|
||||||
SWSRC_OFF = -SWSRC_ON,
|
SWSRC_OFF = -SWSRC_ON,
|
||||||
|
|
||||||
SWSRC_FIRST = SWSRC_OFF,
|
SWSRC_LAST = SWSRC_COUNT-1,
|
||||||
SWSRC_LAST = SWSRC_ON
|
SWSRC_FIRST = -SWSRC_LAST,
|
||||||
|
|
||||||
|
SWSRC_LAST_SHORT_LIST = SWSRC_LAST_LOGICAL_SWITCH,
|
||||||
|
SWSRC_FIRST_SHORT_LIST = -SWSRC_LAST_SHORT_LIST,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum MixSources {
|
enum MixSources {
|
||||||
|
@ -1680,7 +1693,7 @@ PACK(typedef struct t_ModelData {
|
||||||
LogicalSwitchData customSw[NUM_LOGICAL_SWITCH];
|
LogicalSwitchData customSw[NUM_LOGICAL_SWITCH];
|
||||||
CustomFnData funcSw[NUM_CFN];
|
CustomFnData funcSw[NUM_CFN];
|
||||||
SwashRingData swashR;
|
SwashRingData swashR;
|
||||||
PhaseData phaseData[MAX_PHASES];
|
PhaseData phaseData[MAX_FLIGHT_MODES];
|
||||||
|
|
||||||
AVR_FIELD(int8_t ppmFrameLength) // 0=22.5ms (10ms-30ms) 0.5ms increments
|
AVR_FIELD(int8_t ppmFrameLength) // 0=22.5ms (10ms-30ms) 0.5ms increments
|
||||||
uint8_t thrTraceSrc;
|
uint8_t thrTraceSrc;
|
||||||
|
|
|
@ -319,7 +319,8 @@ void per10ms()
|
||||||
if (lightOffCounter) lightOffCounter--;
|
if (lightOffCounter) lightOffCounter--;
|
||||||
if (flashCounter) flashCounter--;
|
if (flashCounter) flashCounter--;
|
||||||
if (s_noHi) s_noHi--;
|
if (s_noHi) s_noHi--;
|
||||||
if (trimsCheckTimer) trimsCheckTimer --;
|
if (trimsCheckTimer) trimsCheckTimer--;
|
||||||
|
if (ppmInValid) ppmInValid--;
|
||||||
|
|
||||||
#if defined(RTCLOCK)
|
#if defined(RTCLOCK)
|
||||||
/* Update global Date/Time every 100 per10ms cycles */
|
/* Update global Date/Time every 100 per10ms cycles */
|
||||||
|
@ -768,7 +769,7 @@ int applyCurve(int x, CurveRef & curve)
|
||||||
switch (curve.type) {
|
switch (curve.type) {
|
||||||
case CURVE_REF_DIFF:
|
case CURVE_REF_DIFF:
|
||||||
{
|
{
|
||||||
int curveParam = calc100to256(GET_GVAR(curve.value, -100, 100, s_perout_flight_phase));
|
int curveParam = calc100to256(GET_GVAR(curve.value, -100, 100, s_perout_flight_mode));
|
||||||
if (curveParam > 0 && x < 0)
|
if (curveParam > 0 && x < 0)
|
||||||
x = (x * (256 - curveParam)) >> 8;
|
x = (x * (256 - curveParam)) >> 8;
|
||||||
else if (curveParam < 0 && x > 0)
|
else if (curveParam < 0 && x > 0)
|
||||||
|
@ -777,7 +778,7 @@ int applyCurve(int x, CurveRef & curve)
|
||||||
}
|
}
|
||||||
|
|
||||||
case CURVE_REF_EXPO:
|
case CURVE_REF_EXPO:
|
||||||
return expo(x, GET_GVAR(curve.value, -100, 100, s_perout_flight_phase));
|
return expo(x, GET_GVAR(curve.value, -100, 100, s_perout_flight_mode));
|
||||||
|
|
||||||
case CURVE_REF_FUNC:
|
case CURVE_REF_FUNC:
|
||||||
switch (curve.value) {
|
switch (curve.value) {
|
||||||
|
@ -980,7 +981,7 @@ void applyExpos(int16_t *anas, uint8_t mode APPLY_EXPOS_EXTRA_PARAMS)
|
||||||
if (!EXPO_VALID(ed)) break; // end of list
|
if (!EXPO_VALID(ed)) break; // end of list
|
||||||
if (ed->chn == cur_chn)
|
if (ed->chn == cur_chn)
|
||||||
continue;
|
continue;
|
||||||
if (ed->phases & (1<<s_perout_flight_phase))
|
if (ed->phases & (1<<s_perout_flight_mode))
|
||||||
continue;
|
continue;
|
||||||
if (getSwitch(ed->swtch)) {
|
if (getSwitch(ed->swtch)) {
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
|
@ -1019,18 +1020,18 @@ void applyExpos(int16_t *anas, uint8_t mode APPLY_EXPOS_EXTRA_PARAMS)
|
||||||
if (ed->curveMode == MODE_CURVE)
|
if (ed->curveMode == MODE_CURVE)
|
||||||
v = applyCurve(v, curveParam);
|
v = applyCurve(v, curveParam);
|
||||||
else
|
else
|
||||||
v = expo(v, GET_GVAR(curveParam, -100, 100, s_perout_flight_phase));
|
v = expo(v, GET_GVAR(curveParam, -100, 100, s_perout_flight_mode));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//========== WEIGHT ===============
|
//========== WEIGHT ===============
|
||||||
int16_t weight = GET_GVAR(ed->weight, MIN_EXPO_WEIGHT, 100, s_perout_flight_phase);
|
int16_t weight = GET_GVAR(ed->weight, MIN_EXPO_WEIGHT, 100, s_perout_flight_mode);
|
||||||
weight = calc100to256(weight);
|
weight = calc100to256(weight);
|
||||||
v = ((int32_t)v * weight) >> 8;
|
v = ((int32_t)v * weight) >> 8;
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
//========== OFFSET ===============
|
//========== OFFSET ===============
|
||||||
int16_t offset = GET_GVAR(ed->offset, -100, 100, s_perout_flight_phase);
|
int16_t offset = GET_GVAR(ed->offset, -100, 100, s_perout_flight_mode);
|
||||||
if (offset) v += calc100toRESX(offset);
|
if (offset) v += calc100toRESX(offset);
|
||||||
|
|
||||||
//========== TRIMS ================
|
//========== TRIMS ================
|
||||||
|
@ -1267,7 +1268,7 @@ getvalue_t getValue(uint8_t i)
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
else if (i<=MIXSRC_TrimAil) return calc1000toRESX((int16_t)8 * getTrimValue(s_perout_flight_phase, i-MIXSRC_TrimRud));
|
else if (i<=MIXSRC_TrimAil) return calc1000toRESX((int16_t)8 * getTrimValue(s_perout_flight_mode, i-MIXSRC_TrimRud));
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
else if (i==MIXSRC_SA) return (switchState(SW_SA0) ? -1024 : (switchState(SW_SA1) ? 0 : 1024));
|
else if (i==MIXSRC_SA) return (switchState(SW_SA0) ? -1024 : (switchState(SW_SA1) ? 0 : 1024));
|
||||||
|
@ -1278,7 +1279,7 @@ getvalue_t getValue(uint8_t i)
|
||||||
else if (i==MIXSRC_SF) return (switchState(SW_SF0) ? -1024 : 1024);
|
else if (i==MIXSRC_SF) return (switchState(SW_SF0) ? -1024 : 1024);
|
||||||
else if (i==MIXSRC_SG) return (switchState(SW_SG0) ? -1024 : (switchState(SW_SG1) ? 0 : 1024));
|
else if (i==MIXSRC_SG) return (switchState(SW_SG0) ? -1024 : (switchState(SW_SG1) ? 0 : 1024));
|
||||||
else if (i==MIXSRC_SH) return (switchState(SW_SH0) ? -1024 : 1024);
|
else if (i==MIXSRC_SH) return (switchState(SW_SH0) ? -1024 : 1024);
|
||||||
else if (i<=MIXSRC_LAST_LOGICAL_SWITCH) return getSwitch(SWSRC_FIRST_CSW+i-MIXSRC_FIRST_LOGICAL_SWITCH) ? 1024 : -1024;
|
else if (i<=MIXSRC_LAST_LOGICAL_SWITCH) return getSwitch(SWSRC_FIRST_LOGICAL_SWITCH+i-MIXSRC_FIRST_LOGICAL_SWITCH) ? 1024 : -1024;
|
||||||
#else
|
#else
|
||||||
else if (i==MIXSRC_3POS) return (getSwitch(SW_ID0-SW_BASE+1) ? -1024 : (getSwitch(SW_ID1-SW_BASE+1) ? 0 : 1024));
|
else if (i==MIXSRC_3POS) return (getSwitch(SW_ID0-SW_BASE+1) ? -1024 : (getSwitch(SW_ID1-SW_BASE+1) ? 0 : 1024));
|
||||||
// don't use switchState directly to give getSwitch possibility to hack values if needed for switch warning
|
// don't use switchState directly to give getSwitch possibility to hack values if needed for switch warning
|
||||||
|
@ -1293,7 +1294,7 @@ getvalue_t getValue(uint8_t i)
|
||||||
else if (i<=MIXSRC_LAST_CH) return ex_chans[i-MIXSRC_CH1];
|
else if (i<=MIXSRC_LAST_CH) return ex_chans[i-MIXSRC_CH1];
|
||||||
|
|
||||||
#if defined(GVARS)
|
#if defined(GVARS)
|
||||||
else if (i<=MIXSRC_LAST_GVAR) return GVAR_VALUE(i-MIXSRC_GVAR1, getGVarFlightPhase(s_perout_flight_phase, i-MIXSRC_GVAR1));
|
else if (i<=MIXSRC_LAST_GVAR) return GVAR_VALUE(i-MIXSRC_GVAR1, getGVarFlightPhase(s_perout_flight_mode, i-MIXSRC_GVAR1));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
else if (i==MIXSRC_FIRST_TELEM-1+TELEM_TX_VOLTAGE) return g_vbat100mV;
|
else if (i==MIXSRC_FIRST_TELEM-1+TELEM_TX_VOLTAGE) return g_vbat100mV;
|
||||||
|
@ -1512,9 +1513,15 @@ bool getSwitch(int8_t swtch)
|
||||||
else if (cs_idx == SWSRC_REb) {
|
else if (cs_idx == SWSRC_REb) {
|
||||||
result = REB_DOWN();
|
result = REB_DOWN();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(CPUARM) && defined(FLIGHT_MODES)
|
||||||
|
else if (cs_idx >= SWSRC_FIRST_FLIGHT_MODE) {
|
||||||
|
uint8_t idx = cs_idx - SWSRC_FIRST_FLIGHT_MODE;
|
||||||
|
result = (idx == s_perout_flight_mode);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
cs_idx -= SWSRC_FIRST_CSW;
|
cs_idx -= SWSRC_FIRST_LOGICAL_SWITCH;
|
||||||
|
|
||||||
GETSWITCH_RECURSIVE_TYPE mask = ((GETSWITCH_RECURSIVE_TYPE)1 << cs_idx);
|
GETSWITCH_RECURSIVE_TYPE mask = ((GETSWITCH_RECURSIVE_TYPE)1 << cs_idx);
|
||||||
if (s_last_switch_used & mask) {
|
if (s_last_switch_used & mask) {
|
||||||
|
@ -1800,7 +1807,7 @@ int8_t getMovedSource(GET_MOVED_SOURCE_PARAMS)
|
||||||
#if defined(FLIGHT_MODES)
|
#if defined(FLIGHT_MODES)
|
||||||
uint8_t getFlightPhase()
|
uint8_t getFlightPhase()
|
||||||
{
|
{
|
||||||
for (uint8_t i=1; i<MAX_PHASES; i++) {
|
for (uint8_t i=1; i<MAX_FLIGHT_MODES; i++) {
|
||||||
PhaseData *phase = &g_model.phaseData[i];
|
PhaseData *phase = &g_model.phaseData[i];
|
||||||
if (phase->swtch && getSwitch(phase->swtch)) {
|
if (phase->swtch && getSwitch(phase->swtch)) {
|
||||||
return i;
|
return i;
|
||||||
|
@ -1824,7 +1831,7 @@ int getTrimValue(uint8_t phase, uint8_t idx)
|
||||||
{
|
{
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
int result = 0;
|
int result = 0;
|
||||||
for (uint8_t i=0; i<MAX_PHASES; i++) {
|
for (uint8_t i=0; i<MAX_FLIGHT_MODES; i++) {
|
||||||
trim_t v = getRawTrimValue(phase, idx);
|
trim_t v = getRawTrimValue(phase, idx);
|
||||||
if (v.mode == TRIM_MODE_NONE) {
|
if (v.mode == TRIM_MODE_NONE) {
|
||||||
return result;
|
return result;
|
||||||
|
@ -1851,7 +1858,7 @@ int getTrimValue(uint8_t phase, uint8_t idx)
|
||||||
void setTrimValue(uint8_t phase, uint8_t idx, int trim)
|
void setTrimValue(uint8_t phase, uint8_t idx, int trim)
|
||||||
{
|
{
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
for (uint8_t i=0; i<MAX_PHASES; i++) {
|
for (uint8_t i=0; i<MAX_FLIGHT_MODES; i++) {
|
||||||
trim_t & v = phaseAddress(phase)->trim[idx];
|
trim_t & v = phaseAddress(phase)->trim[idx];
|
||||||
if (v.mode == TRIM_MODE_NONE)
|
if (v.mode == TRIM_MODE_NONE)
|
||||||
return;
|
return;
|
||||||
|
@ -1883,7 +1890,7 @@ void setTrimValue(uint8_t phase, uint8_t idx, int trim)
|
||||||
#if !defined(PCBTARANIS)
|
#if !defined(PCBTARANIS)
|
||||||
uint8_t getTrimFlightPhase(uint8_t phase, uint8_t idx)
|
uint8_t getTrimFlightPhase(uint8_t phase, uint8_t idx)
|
||||||
{
|
{
|
||||||
for (uint8_t i=0; i<MAX_PHASES; i++) {
|
for (uint8_t i=0; i<MAX_FLIGHT_MODES; i++) {
|
||||||
if (phase == 0) return 0;
|
if (phase == 0) return 0;
|
||||||
trim_t trim = getRawTrimValue(phase, idx);
|
trim_t trim = getRawTrimValue(phase, idx);
|
||||||
if (trim <= TRIM_EXTENDED_MAX) return phase;
|
if (trim <= TRIM_EXTENDED_MAX) return phase;
|
||||||
|
@ -1898,8 +1905,8 @@ uint8_t getTrimFlightPhase(uint8_t phase, uint8_t idx)
|
||||||
#if defined(ROTARY_ENCODERS)
|
#if defined(ROTARY_ENCODERS)
|
||||||
uint8_t getRotaryEncoderFlightPhase(uint8_t idx)
|
uint8_t getRotaryEncoderFlightPhase(uint8_t idx)
|
||||||
{
|
{
|
||||||
uint8_t phase = s_perout_flight_phase;
|
uint8_t phase = s_perout_flight_mode;
|
||||||
for (uint8_t i=0; i<MAX_PHASES; i++) {
|
for (uint8_t i=0; i<MAX_FLIGHT_MODES; i++) {
|
||||||
if (phase == 0) return 0;
|
if (phase == 0) return 0;
|
||||||
#if ROTARY_ENCODERS > 2
|
#if ROTARY_ENCODERS > 2
|
||||||
int16_t value;
|
int16_t value;
|
||||||
|
@ -1989,7 +1996,7 @@ uint8_t s_gvar_last = 0;
|
||||||
|
|
||||||
uint8_t getGVarFlightPhase(uint8_t phase, uint8_t idx)
|
uint8_t getGVarFlightPhase(uint8_t phase, uint8_t idx)
|
||||||
{
|
{
|
||||||
for (uint8_t i=0; i<MAX_PHASES; i++) {
|
for (uint8_t i=0; i<MAX_FLIGHT_MODES; i++) {
|
||||||
if (phase == 0) return 0;
|
if (phase == 0) return 0;
|
||||||
int16_t val = GVAR_VALUE(idx, phase); // TODO phase at the end everywhere to be consistent!
|
int16_t val = GVAR_VALUE(idx, phase); // TODO phase at the end everywhere to be consistent!
|
||||||
if (val <= GVAR_MAX) return phase;
|
if (val <= GVAR_MAX) return phase;
|
||||||
|
@ -2144,7 +2151,7 @@ getvalue_t convert8bitsTelemValue(uint8_t channel, ls_telemetry_value_t value)
|
||||||
result = value * 5;
|
result = value * 5;
|
||||||
break;
|
break;
|
||||||
case TELEM_CONSUMPTION:
|
case TELEM_CONSUMPTION:
|
||||||
result = value * 20;
|
result = value * 100;
|
||||||
break;
|
break;
|
||||||
case TELEM_VSPEED:
|
case TELEM_VSPEED:
|
||||||
result = ((getvalue_t)value - 125) * 10;
|
result = ((getvalue_t)value - 125) * 10;
|
||||||
|
@ -2690,13 +2697,13 @@ uint8_t checkTrim(uint8_t event)
|
||||||
#if defined(PCBSTD)
|
#if defined(PCBSTD)
|
||||||
phase = 0;
|
phase = 0;
|
||||||
#else
|
#else
|
||||||
phase = getGVarFlightPhase(s_perout_flight_phase, trimGvar[idx]);
|
phase = getGVarFlightPhase(s_perout_flight_mode, trimGvar[idx]);
|
||||||
#endif
|
#endif
|
||||||
before = GVAR_VALUE(trimGvar[idx], phase);
|
before = GVAR_VALUE(trimGvar[idx], phase);
|
||||||
thro = false;
|
thro = false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
phase = getTrimFlightPhase(s_perout_flight_phase, idx);
|
phase = getTrimFlightPhase(s_perout_flight_mode, idx);
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
before = getTrimValue(phase, idx);
|
before = getTrimValue(phase, idx);
|
||||||
#else
|
#else
|
||||||
|
@ -2705,7 +2712,7 @@ uint8_t checkTrim(uint8_t event)
|
||||||
thro = (idx==THR_STICK && g_model.thrTrim);
|
thro = (idx==THR_STICK && g_model.thrTrim);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
phase = getTrimFlightPhase(s_perout_flight_phase, idx);
|
phase = getTrimFlightPhase(s_perout_flight_mode, idx);
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
before = getTrimValue(phase, idx);
|
before = getTrimValue(phase, idx);
|
||||||
#else
|
#else
|
||||||
|
@ -3080,7 +3087,7 @@ uint16_t isqrt32(uint32_t n)
|
||||||
|
|
||||||
FORCEINLINE void evalTrims()
|
FORCEINLINE void evalTrims()
|
||||||
{
|
{
|
||||||
uint8_t phase = s_perout_flight_phase;
|
uint8_t phase = s_perout_flight_mode;
|
||||||
for (uint8_t i=0; i<NUM_STICKS; i++) {
|
for (uint8_t i=0; i<NUM_STICKS; i++) {
|
||||||
// do trim -> throttle trim if applicable
|
// do trim -> throttle trim if applicable
|
||||||
int16_t trim = getTrimValue(phase, i);
|
int16_t trim = getTrimValue(phase, i);
|
||||||
|
@ -3196,7 +3203,7 @@ void evalInputs(uint8_t mode)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (mode <= e_perout_mode_inactive_phase && isFunctionActive(FUNCTION_TRAINER+ch)) {
|
if (mode <= e_perout_mode_inactive_phase && isFunctionActive(FUNCTION_TRAINER+ch) && ppmInValid) {
|
||||||
// trainer mode
|
// trainer mode
|
||||||
TrainerMix* td = &g_eeGeneral.trainer.mix[ch];
|
TrainerMix* td = &g_eeGeneral.trainer.mix[ch];
|
||||||
if (td->mode) {
|
if (td->mode) {
|
||||||
|
@ -3530,14 +3537,14 @@ void evalFunctions()
|
||||||
#if defined(GVARS)
|
#if defined(GVARS)
|
||||||
case FUNC_ADJUST_GVAR:
|
case FUNC_ADJUST_GVAR:
|
||||||
if (CFN_GVAR_MODE(sd) == 0) {
|
if (CFN_GVAR_MODE(sd) == 0) {
|
||||||
SET_GVAR(CFN_GVAR_INDEX(sd), CFN_PARAM(sd), s_perout_flight_phase);
|
SET_GVAR(CFN_GVAR_INDEX(sd), CFN_PARAM(sd), s_perout_flight_mode);
|
||||||
}
|
}
|
||||||
else if (CFN_GVAR_MODE(sd) == 2) {
|
else if (CFN_GVAR_MODE(sd) == 2) {
|
||||||
SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_PARAM(sd), s_perout_flight_phase), s_perout_flight_phase);
|
SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_PARAM(sd), s_perout_flight_mode), s_perout_flight_mode);
|
||||||
}
|
}
|
||||||
else if (CFN_GVAR_MODE(sd) == 3) {
|
else if (CFN_GVAR_MODE(sd) == 3) {
|
||||||
if (!(activeFnSwitches & switch_mask)) {
|
if (!(activeFnSwitches & switch_mask)) {
|
||||||
SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_GVAR_INDEX(sd), getGVarFlightPhase(s_perout_flight_phase, CFN_GVAR_INDEX(sd))) + (CFN_PARAM(sd) ? +1 : -1), s_perout_flight_phase);
|
SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_GVAR_INDEX(sd), getGVarFlightPhase(s_perout_flight_mode, CFN_GVAR_INDEX(sd))) + (CFN_PARAM(sd) ? +1 : -1), s_perout_flight_mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (CFN_PARAM(sd) >= MIXSRC_TrimRud && CFN_PARAM(sd) <= MIXSRC_TrimAil) {
|
else if (CFN_PARAM(sd) >= MIXSRC_TrimRud && CFN_PARAM(sd) <= MIXSRC_TrimAil) {
|
||||||
|
@ -3547,12 +3554,12 @@ void evalFunctions()
|
||||||
else if (CFN_PARAM(sd) >= MIXSRC_REa && CFN_PARAM(sd) < MIXSRC_TrimRud) {
|
else if (CFN_PARAM(sd) >= MIXSRC_REa && CFN_PARAM(sd) < MIXSRC_TrimRud) {
|
||||||
int8_t scroll = rePreviousValues[CFN_PARAM(sd)-MIXSRC_REa] - (g_rotenc[CFN_PARAM(sd)-MIXSRC_REa] / ROTARY_ENCODER_GRANULARITY);
|
int8_t scroll = rePreviousValues[CFN_PARAM(sd)-MIXSRC_REa] - (g_rotenc[CFN_PARAM(sd)-MIXSRC_REa] / ROTARY_ENCODER_GRANULARITY);
|
||||||
if (scroll) {
|
if (scroll) {
|
||||||
SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_GVAR_INDEX(sd), getGVarFlightPhase(s_perout_flight_phase, CFN_GVAR_INDEX(sd))) + scroll, s_perout_flight_phase);
|
SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_GVAR_INDEX(sd), getGVarFlightPhase(s_perout_flight_mode, CFN_GVAR_INDEX(sd))) + scroll, s_perout_flight_mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
SET_GVAR(CFN_GVAR_INDEX(sd), limit((getvalue_t)-LIMIT_EXT_MAX, getValue(CFN_PARAM(sd)), (getvalue_t)LIMIT_EXT_MAX) / 10, s_perout_flight_phase);
|
SET_GVAR(CFN_GVAR_INDEX(sd), limit((getvalue_t)-LIMIT_EXT_MAX, getValue(CFN_PARAM(sd)), (getvalue_t)LIMIT_EXT_MAX) / 10, s_perout_flight_mode);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -3635,7 +3642,7 @@ void evalFunctions()
|
||||||
else {
|
else {
|
||||||
#if defined(GVARS)
|
#if defined(GVARS)
|
||||||
if (CFN_FUNC(sd) == FUNC_PLAY_TRACK && param > 250)
|
if (CFN_FUNC(sd) == FUNC_PLAY_TRACK && param > 250)
|
||||||
param = GVAR_VALUE(param-251, getGVarFlightPhase(s_perout_flight_phase, param-251));
|
param = GVAR_VALUE(param-251, getGVarFlightPhase(s_perout_flight_mode, param-251));
|
||||||
#endif
|
#endif
|
||||||
PUSH_CUSTOM_PROMPT(active ? param : param+1, i+1);
|
PUSH_CUSTOM_PROMPT(active ? param : param+1, i+1);
|
||||||
}
|
}
|
||||||
|
@ -3716,7 +3723,7 @@ void evalFunctions()
|
||||||
#define HELI_ANAS_ARRAY anas
|
#define HELI_ANAS_ARRAY anas
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t s_perout_flight_phase;
|
uint8_t s_perout_flight_mode;
|
||||||
void perOut(uint8_t mode, uint8_t tick10ms)
|
void perOut(uint8_t mode, uint8_t tick10ms)
|
||||||
{
|
{
|
||||||
evalInputs(mode);
|
evalInputs(mode);
|
||||||
|
@ -3821,7 +3828,11 @@ void perOut(uint8_t mode, uint8_t tick10ms)
|
||||||
|
|
||||||
//========== PHASE && SWITCH =====
|
//========== PHASE && SWITCH =====
|
||||||
bool mixCondition = (md->phases != 0 || md->swtch);
|
bool mixCondition = (md->phases != 0 || md->swtch);
|
||||||
delayval_t mixEnabled = !(md->phases & (1 << s_perout_flight_phase)) && getSwitch(md->swtch);
|
delayval_t mixEnabled = !(md->phases & (1 << s_perout_flight_mode)) && getSwitch(md->swtch);
|
||||||
|
|
||||||
|
if (mixEnabled && md->srcRaw >= MIXSRC_FIRST_TRAINER && md->srcRaw <= MIXSRC_LAST_TRAINER && !ppmInValid) {
|
||||||
|
mixEnabled = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//========== VALUE ===============
|
//========== VALUE ===============
|
||||||
getvalue_t v = 0;
|
getvalue_t v = 0;
|
||||||
|
@ -3906,14 +3917,14 @@ void perOut(uint8_t mode, uint8_t tick10ms)
|
||||||
if (apply_offset_and_curve) {
|
if (apply_offset_and_curve) {
|
||||||
#if !defined(PCBTARANIS) // OFFSET is now applied AFTER weight on Taranis
|
#if !defined(PCBTARANIS) // OFFSET is now applied AFTER weight on Taranis
|
||||||
//========== OFFSET / SOURCE ===============
|
//========== OFFSET / SOURCE ===============
|
||||||
int16_t offset = GET_GVAR(MD_OFFSET(md), GV_RANGELARGE_NEG, GV_RANGELARGE, s_perout_flight_phase);
|
int16_t offset = GET_GVAR(MD_OFFSET(md), GV_RANGELARGE_NEG, GV_RANGELARGE, s_perout_flight_mode);
|
||||||
if (offset) v += calc100toRESX_16Bits(offset);
|
if (offset) v += calc100toRESX_16Bits(offset);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//========== TRIMS ================
|
//========== TRIMS ================
|
||||||
if (!(mode & e_perout_mode_notrims)) {
|
if (!(mode & e_perout_mode_notrims)) {
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
if (!md->carryTrim) {
|
if (md->carryTrim == 0) {
|
||||||
int8_t mix_trim;
|
int8_t mix_trim;
|
||||||
if (stickIndex < NUM_STICKS)
|
if (stickIndex < NUM_STICKS)
|
||||||
mix_trim = stickIndex;
|
mix_trim = stickIndex;
|
||||||
|
@ -3921,7 +3932,13 @@ void perOut(uint8_t mode, uint8_t tick10ms)
|
||||||
mix_trim = virtualInputsTrims[md->srcRaw-1];
|
mix_trim = virtualInputsTrims[md->srcRaw-1];
|
||||||
else
|
else
|
||||||
mix_trim = -1;
|
mix_trim = -1;
|
||||||
if (mix_trim >= 0) v += trims[mix_trim];
|
if (mix_trim >= 0) {
|
||||||
|
int16_t trim = trims[mix_trim];
|
||||||
|
if (mix_trim == THR_STICK && g_model.throttleReversed)
|
||||||
|
v -= trim;
|
||||||
|
else
|
||||||
|
v += trim;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int8_t mix_trim = md->carryTrim;
|
int8_t mix_trim = md->carryTrim;
|
||||||
|
@ -3931,13 +3948,19 @@ void perOut(uint8_t mode, uint8_t tick10ms)
|
||||||
mix_trim = stickIndex;
|
mix_trim = stickIndex;
|
||||||
else
|
else
|
||||||
mix_trim = -1;
|
mix_trim = -1;
|
||||||
if (mix_trim >= 0) v += trims[mix_trim];
|
if (mix_trim >= 0) {
|
||||||
|
int16_t trim = trims[mix_trim];
|
||||||
|
if (mix_trim == THR_STICK && g_model.throttleReversed)
|
||||||
|
v -= trim;
|
||||||
|
else
|
||||||
|
v += trim;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// saves 12 bytes code if done here and not together with weight; unknown reason
|
// saves 12 bytes code if done here and not together with weight; unknown reason
|
||||||
int16_t weight = GET_GVAR(MD_WEIGHT(md), GV_RANGELARGE_NEG, GV_RANGELARGE, s_perout_flight_phase);
|
int16_t weight = GET_GVAR(MD_WEIGHT(md), GV_RANGELARGE_NEG, GV_RANGELARGE, s_perout_flight_mode);
|
||||||
weight = calc100to256_16Bits(weight);
|
weight = calc100to256_16Bits(weight);
|
||||||
|
|
||||||
//========== SPEED ===============
|
//========== SPEED ===============
|
||||||
|
@ -3998,7 +4021,7 @@ void perOut(uint8_t mode, uint8_t tick10ms)
|
||||||
//========== OFFSET / AFTER ===============
|
//========== OFFSET / AFTER ===============
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
if (apply_offset_and_curve) {
|
if (apply_offset_and_curve) {
|
||||||
int16_t offset = GET_GVAR(MD_OFFSET(md), GV_RANGELARGE_NEG, GV_RANGELARGE, s_perout_flight_phase);
|
int16_t offset = GET_GVAR(MD_OFFSET(md), GV_RANGELARGE_NEG, GV_RANGELARGE, s_perout_flight_mode);
|
||||||
if (offset) dv += calc100toRESX_16Bits(offset) << 8;
|
if (offset) dv += calc100toRESX_16Bits(offset) << 8;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -4011,7 +4034,7 @@ void perOut(uint8_t mode, uint8_t tick10ms)
|
||||||
#else
|
#else
|
||||||
if (md->curveMode == MODE_DIFFERENTIAL) {
|
if (md->curveMode == MODE_DIFFERENTIAL) {
|
||||||
// @@@2 also recalculate curveParam to a 256 basis which ease the calculation later a lot
|
// @@@2 also recalculate curveParam to a 256 basis which ease the calculation later a lot
|
||||||
int16_t curveParam = calc100to256(GET_GVAR(md->curveParam, -100, 100, s_perout_flight_phase));
|
int16_t curveParam = calc100to256(GET_GVAR(md->curveParam, -100, 100, s_perout_flight_mode));
|
||||||
if (curveParam > 0 && dv < 0)
|
if (curveParam > 0 && dv < 0)
|
||||||
dv = (dv * (256 - curveParam)) >> 8;
|
dv = (dv * (256 - curveParam)) >> 8;
|
||||||
else if (curveParam < 0 && dv > 0)
|
else if (curveParam < 0 && dv > 0)
|
||||||
|
@ -4140,7 +4163,7 @@ void doMixerCalculations()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAX_ACT 0xffff
|
#define MAX_ACT 0xffff
|
||||||
static uint16_t fp_act[MAX_PHASES] = {0};
|
static uint16_t fp_act[MAX_FLIGHT_MODES] = {0};
|
||||||
static uint16_t delta = 0;
|
static uint16_t delta = 0;
|
||||||
static ACTIVE_PHASES_TYPE s_fade_flight_phases = 0;
|
static ACTIVE_PHASES_TYPE s_fade_flight_phases = 0;
|
||||||
static uint8_t s_last_phase = 255; // TODO reinit everything here when the model changes, no???
|
static uint8_t s_last_phase = 255; // TODO reinit everything here when the model changes, no???
|
||||||
|
@ -4175,10 +4198,10 @@ void doMixerCalculations()
|
||||||
int32_t weight = 0;
|
int32_t weight = 0;
|
||||||
if (s_fade_flight_phases) {
|
if (s_fade_flight_phases) {
|
||||||
memclear(sum_chans512, sizeof(sum_chans512));
|
memclear(sum_chans512, sizeof(sum_chans512));
|
||||||
for (uint8_t p=0; p<MAX_PHASES; p++) {
|
for (uint8_t p=0; p<MAX_FLIGHT_MODES; p++) {
|
||||||
s_last_switch_used = 0;
|
s_last_switch_used = 0;
|
||||||
if (s_fade_flight_phases & ((ACTIVE_PHASES_TYPE)1 << p)) {
|
if (s_fade_flight_phases & ((ACTIVE_PHASES_TYPE)1 << p)) {
|
||||||
s_perout_flight_phase = p;
|
s_perout_flight_mode = p;
|
||||||
perOut(p==phase ? e_perout_mode_normal : e_perout_mode_inactive_phase, p==phase ? tick10ms : 0);
|
perOut(p==phase ? e_perout_mode_normal : e_perout_mode_inactive_phase, p==phase ? tick10ms : 0);
|
||||||
for (uint8_t i=0; i<NUM_CHNOUT; i++)
|
for (uint8_t i=0; i<NUM_CHNOUT; i++)
|
||||||
sum_chans512[i] += (chans[i] >> 4) * fp_act[p];
|
sum_chans512[i] += (chans[i] >> 4) * fp_act[p];
|
||||||
|
@ -4187,10 +4210,10 @@ void doMixerCalculations()
|
||||||
s_last_switch_used = 0;
|
s_last_switch_used = 0;
|
||||||
}
|
}
|
||||||
assert(weight);
|
assert(weight);
|
||||||
s_perout_flight_phase = phase;
|
s_perout_flight_mode = phase;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
s_perout_flight_phase = phase;
|
s_perout_flight_mode = phase;
|
||||||
perOut(e_perout_mode_normal, tick10ms);
|
perOut(e_perout_mode_normal, tick10ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4522,7 +4545,7 @@ void doMixerCalculations()
|
||||||
|
|
||||||
if (s_fade_flight_phases) {
|
if (s_fade_flight_phases) {
|
||||||
uint16_t tick_delta = delta * tick10ms;
|
uint16_t tick_delta = delta * tick10ms;
|
||||||
for (uint8_t p=0; p<MAX_PHASES; p++) {
|
for (uint8_t p=0; p<MAX_FLIGHT_MODES; p++) {
|
||||||
ACTIVE_PHASES_TYPE phaseMask = ((ACTIVE_PHASES_TYPE)1 << p);
|
ACTIVE_PHASES_TYPE phaseMask = ((ACTIVE_PHASES_TYPE)1 << p);
|
||||||
if (s_fade_flight_phases & phaseMask) {
|
if (s_fade_flight_phases & phaseMask) {
|
||||||
if (p == phase) {
|
if (p == phase) {
|
||||||
|
@ -5046,6 +5069,7 @@ void perMain()
|
||||||
|
|
||||||
int16_t g_ppmIns[NUM_TRAINER];
|
int16_t g_ppmIns[NUM_TRAINER];
|
||||||
uint8_t ppmInState = 0; // 0=unsync 1..8= wait for value i-1
|
uint8_t ppmInState = 0; // 0=unsync 1..8= wait for value i-1
|
||||||
|
uint8_t ppmInValid = 0;
|
||||||
|
|
||||||
#if !defined(SIMU) && !defined(CPUARM)
|
#if !defined(SIMU) && !defined(CPUARM)
|
||||||
|
|
||||||
|
@ -5132,19 +5156,18 @@ ISR(TIMER3_CAPT_vect) // G: High frequency noise can cause stack overflo with IS
|
||||||
|
|
||||||
// G: We process g_ppmIns immediately here, to make servo movement as smooth as possible
|
// G: We process g_ppmIns immediately here, to make servo movement as smooth as possible
|
||||||
// while under trainee control
|
// while under trainee control
|
||||||
if (val>4000 && val < 16000) // G: Prioritize reset pulse. (Needed when less than 8 incoming pulses)
|
if (val>4000 && val < 16000) { // G: Prioritize reset pulse. (Needed when less than 8 incoming pulses)
|
||||||
ppmInState = 1; // triggered
|
ppmInState = 1; // triggered
|
||||||
else
|
}
|
||||||
{
|
else {
|
||||||
if (ppmInState && ppmInState<=8)
|
if (ppmInState>0 && ppmInState<=8) {
|
||||||
{
|
if (val>800 && val<2200) { // if valid pulse-width range
|
||||||
if (val>800 && val<2200) // if valid pulse-width range
|
ppmInValid = 100;
|
||||||
{
|
g_ppmIns[ppmInState++ - 1] = (int16_t)(val - 1500) * (uint8_t)(g_eeGeneral.PPM_Multiplier+10)/10; //+-500 != 512, but close enough.
|
||||||
g_ppmIns[ppmInState++ - 1] =
|
|
||||||
(int16_t)(val - 1500)*(g_eeGeneral.PPM_Multiplier+10)/10; //+-500 != 512, but close enough.
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
ppmInState = 0; // not triggered
|
ppmInState = 0; // not triggered
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5215,7 +5238,7 @@ void instantTrim()
|
||||||
for (uint8_t i=0; i<NUM_STICKS; i++) {
|
for (uint8_t i=0; i<NUM_STICKS; i++) {
|
||||||
if (i!=THR_STICK) {
|
if (i!=THR_STICK) {
|
||||||
// don't instant trim the throttle stick
|
// don't instant trim the throttle stick
|
||||||
uint8_t trim_phase = getTrimFlightPhase(s_perout_flight_phase, i);
|
uint8_t trim_phase = getTrimFlightPhase(s_perout_flight_mode, i);
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
int16_t trim = limit<int16_t>(TRIM_EXTENDED_MIN, (calibratedStick[i] + trims[i]) / 2, TRIM_EXTENDED_MAX);
|
int16_t trim = limit<int16_t>(TRIM_EXTENDED_MIN, (calibratedStick[i] + trims[i]) / 2, TRIM_EXTENDED_MAX);
|
||||||
#else
|
#else
|
||||||
|
@ -5279,8 +5302,8 @@ void moveTrimsToOffsets() // copy state of 3 primary to subtrim
|
||||||
// reset all trims, except throttle (if throttle trim)
|
// reset all trims, except throttle (if throttle trim)
|
||||||
for (uint8_t i=0; i<NUM_STICKS; i++) {
|
for (uint8_t i=0; i<NUM_STICKS; i++) {
|
||||||
if (i!=THR_STICK || !g_model.thrTrim) {
|
if (i!=THR_STICK || !g_model.thrTrim) {
|
||||||
int16_t original_trim = getTrimValue(s_perout_flight_phase, i);
|
int16_t original_trim = getTrimValue(s_perout_flight_mode, i);
|
||||||
for (uint8_t phase=0; phase<MAX_PHASES; phase++) {
|
for (uint8_t phase=0; phase<MAX_FLIGHT_MODES; phase++) {
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
trim_t trim = getRawTrimValue(phase, i);
|
trim_t trim = getRawTrimValue(phase, i);
|
||||||
if (trim.mode / 2 == phase)
|
if (trim.mode / 2 == phase)
|
||||||
|
|
|
@ -647,7 +647,7 @@ enum StartupWarningStates {
|
||||||
#define FORCE_INDIRECT(ptr) __asm__ __volatile__ ("" : "=e" (ptr) : "0" (ptr))
|
#define FORCE_INDIRECT(ptr) __asm__ __volatile__ ("" : "=e" (ptr) : "0" (ptr))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern uint8_t s_perout_flight_phase;
|
extern uint8_t s_perout_flight_mode;
|
||||||
|
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
#define bitfield_channels_t uint32_t
|
#define bitfield_channels_t uint32_t
|
||||||
|
@ -1013,6 +1013,7 @@ extern uint8_t g_beepCnt;
|
||||||
extern uint8_t g_beepVal[5];
|
extern uint8_t g_beepVal[5];
|
||||||
|
|
||||||
extern uint8_t ppmInState; //0=unsync 1..8= wait for value i-1
|
extern uint8_t ppmInState; //0=unsync 1..8= wait for value i-1
|
||||||
|
extern uint8_t ppmInValid;
|
||||||
extern int16_t g_ppmIns[NUM_TRAINER];
|
extern int16_t g_ppmIns[NUM_TRAINER];
|
||||||
extern int32_t chans[NUM_CHNOUT];
|
extern int32_t chans[NUM_CHNOUT];
|
||||||
extern int16_t ex_chans[NUM_CHNOUT]; // Outputs (before LIMITS) of the last perMain
|
extern int16_t ex_chans[NUM_CHNOUT]; // Outputs (before LIMITS) of the last perMain
|
||||||
|
|
|
@ -314,15 +314,14 @@ extern "C" void TC3_IRQHandler() //capture ppm in at 2MHz
|
||||||
ppmInState = 1; // triggered
|
ppmInState = 1; // triggered
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (ppmInState && ppmInState<=16)
|
if (ppmInState>0 && ppmInState<=16) {
|
||||||
{
|
if (val>800 && val<2200) { // if valid pulse-width range
|
||||||
if (val>800 && val<2200) // if valid pulse-width range
|
ppmInValid = 100;
|
||||||
{
|
g_ppmIns[ppmInState++ - 1] = (int16_t)(val - 1500)*(g_eeGeneral.PPM_Multiplier+10)/10; //+-500 != 512, but close enough.
|
||||||
g_ppmIns[ppmInState++ - 1] =
|
|
||||||
(int16_t)(val - 1500)*(g_eeGeneral.PPM_Multiplier+10)/10; //+-500 != 512, but close enough.
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
ppmInState = 0; // not triggered
|
ppmInState = 0; // not triggered
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -126,12 +126,13 @@ extern "C" void TIM3_IRQHandler()
|
||||||
|
|
||||||
// We process g_ppmInsright here to make servo movement as smooth as possible
|
// We process g_ppmInsright here to make servo movement as smooth as possible
|
||||||
// while under trainee control
|
// while under trainee control
|
||||||
if ((val>4000) && (val < 19000)) { // G: Prioritize reset pulse. (Needed when less than 16 incoming pulses)
|
if (val>4000 && val<19000) { // G: Prioritize reset pulse. (Needed when less than 16 incoming pulses)
|
||||||
ppmInState = 1; // triggered
|
ppmInState = 1; // triggered
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (ppmInState && (ppmInState<=16)) {
|
if (ppmInState>0 && ppmInState<=16) {
|
||||||
if ((val>800) && (val<2200)) {
|
if (val>800 && val<2200) {
|
||||||
|
ppmInValid = 100;
|
||||||
g_ppmIns[ppmInState++ - 1] = (int16_t)(val - 1500)*(g_eeGeneral.PPM_Multiplier+10)/10; //+-500 != 512, but close enough.
|
g_ppmIns[ppmInState++ - 1] = (int16_t)(val - 1500)*(g_eeGeneral.PPM_Multiplier+10)/10; //+-500 != 512, but close enough.
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -294,9 +294,13 @@
|
||||||
#define TR_A3_A4_MIN
|
#define TR_A3_A4_MIN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TR_ASPD_MAX "ASp+"
|
#define TR_ASPD_MAX TR("ASp+", "ASpd+")
|
||||||
|
|
||||||
#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_SWR "Tx\0 ""Rx\0 " TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Höjd""Varv""Tank""T1\0 ""T2\0 ""Fart""Avst""GHjd""Batt""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VFrt""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0" TR_A3_A4_MIN "Hjd-""Hjd+""Rpm+""T1+\0""T2+\0""Frt+""Avs+" TR_ASPD_MAX "Cel-""Cls-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Tid\0"
|
#if LCD_W >= 212
|
||||||
|
#define TR_VTELEMCHNS "---\0 ""Batt\0""Tmr1\0""Tmr2\0" TR_SWR "Tx\0 ""Rx\0 " TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0 ""Rpm\0 ""Fuel\0""T1\0 ""T2\0 ""Spd\0 ""Dist\0""GAlt\0""Cell\0""Cells""Vfas\0""Curr\0""Cnsp\0""Powr\0""AccX\0""AccY\0""AccZ\0""Hdg\0 ""VSpd\0""ASpd\0""dTE\0 " TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0 ""A2-\0 " TR_A3_A4_MIN "Alt-\0""Alt+\0""Rpm+\0""T1+\0 ""T2+\0 ""Spd+\0""Dst+\0" TR_ASPD_MAX "Cell-""Cels-""Vfas-""Curr+""Powr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0 ""Time\0"
|
||||||
|
#else
|
||||||
|
#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_SWR "Tx\0 ""Rx\0 " TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0" TR_A3_A4_MIN "Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+" TR_ASPD_MAX "Cel-""Cls-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Time"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define LENGTH_UNIT_IMP "ft\0"
|
#define LENGTH_UNIT_IMP "ft\0"
|
||||||
#define SPEED_UNIT_IMP "mph"
|
#define SPEED_UNIT_IMP "mph"
|
||||||
|
@ -415,7 +419,7 @@
|
||||||
#define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]"
|
#define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TR_VSRCRAW "---\0""Rod\0""Hjd\0""Gas\0""Ske\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODER "MAX " TR_CYC_VSRCRAW "TrmR" "TrmH" "TrmG" "TrmS" TR_SW_VSRCRAW
|
#define TR_VSRCRAW "---\0""Rod\0""Hjd\0""Gas\0""Ske\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmR" "TrmH" "TrmG" "TrmS" TR_SW_VSRCRAW
|
||||||
|
|
||||||
#define LEN_VTMRMODES "\003"
|
#define LEN_VTMRMODES "\003"
|
||||||
#define TR_VTMRMODES "Av\0""ABS""GAs""GA%""GAt"
|
#define TR_VTMRMODES "Av\0""ABS""GAs""GA%""GAt"
|
||||||
|
@ -440,7 +444,6 @@
|
||||||
#define LEN_INDENT 1
|
#define LEN_INDENT 1
|
||||||
#define INDENT_WIDTH (FW/2)
|
#define INDENT_WIDTH (FW/2)
|
||||||
|
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
#define TR_ENTER "[ENTER]"
|
#define TR_ENTER "[ENTER]"
|
||||||
#else
|
#else
|
||||||
|
@ -475,7 +478,7 @@
|
||||||
#define TR_TTRIM TR("Gastrim", INDENT "Gastrim")
|
#define TR_TTRIM TR("Gastrim", INDENT "Gastrim")
|
||||||
#define TR_BEEPCTR TR("Cent.pip", "Centerpip")
|
#define TR_BEEPCTR TR("Cent.pip", "Centerpip")
|
||||||
#define TR_PROTO TR(INDENT "Proto", INDENT "Protokoll")
|
#define TR_PROTO TR(INDENT "Proto", INDENT "Protokoll")
|
||||||
#define TR_PPMFRAME "PPM-paket"
|
#define TR_PPMFRAME TR(INDENT "PPM-paket", INDENT "PPM-paket")
|
||||||
#define TR_MS "ms"
|
#define TR_MS "ms"
|
||||||
#define TR_SWITCH "Brytare"
|
#define TR_SWITCH "Brytare"
|
||||||
#define TR_TRIMS "Trimmar"
|
#define TR_TRIMS "Trimmar"
|
||||||
|
@ -851,7 +854,6 @@
|
||||||
#define TR_ABOUT_HARDWARE_3 ""
|
#define TR_ABOUT_HARDWARE_3 ""
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define TR_ABOUT_PARENTS_1 "Ursprungsprojekt"
|
#define TR_ABOUT_PARENTS_1 "Ursprungsprojekt"
|
||||||
#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)"
|
#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)"
|
||||||
#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)"
|
#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)"
|
||||||
|
@ -874,4 +876,4 @@
|
||||||
#define TR_VIEW_CHANNELS "Visa Kanaler"
|
#define TR_VIEW_CHANNELS "Visa Kanaler"
|
||||||
#define TR_VIEW_NOTES "Visa Noteringars"
|
#define TR_VIEW_NOTES "Visa Noteringars"
|
||||||
#define TR_MODS_FORBIDDEN "Modifikationer förbjudna!"
|
#define TR_MODS_FORBIDDEN "Modifikationer förbjudna!"
|
||||||
#define TR_UNLOCKED "Olåst"
|
#define TR_UNLOCKED "Olåst"
|
Loading…
Add table
Add a link
Reference in a new issue