1
0
Fork 0
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:
Damjan Adamic 2014-05-05 22:13:24 +02:00
parent b9ee1d5dee
commit 61addd3d4e
42 changed files with 1291 additions and 1185 deletions

View file

@ -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

View file

@ -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;\">&nbsp;</td>"); str.append("<tr><td style=\"border-style:none;\">&nbsp;</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;\">&nbsp;</td>"); str.append("<tr><td style=\"border-style:none;\">&nbsp;</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("<", "&lt;").replace(">", "&gt;"); str += ed->curve.toString().replace("<", "&lt;").replace(">", "&gt;");
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("<", "&lt;").replace(">", "&gt;"); str += ed->curve.toString().replace("<", "&lt;").replace(">", "&gt;");
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) {

View file

@ -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];

View file

@ -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];

View file

@ -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) {

View file

@ -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();

View file

@ -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) {

View file

@ -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;

View file

@ -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) {

View file

@ -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;

View file

@ -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) {

View file

@ -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;

View file

@ -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) {

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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;
} }

View file

@ -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;
} }

View file

@ -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();
} }

View file

@ -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;
}; };

View file

@ -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();
} }

View file

@ -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

View file

@ -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();

View file

@ -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);

View file

@ -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];

View file

@ -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.

View file

@ -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)) {

View file

@ -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;

View file

@ -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

View file

@ -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:

View file

@ -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);
} }

View file

@ -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
} }

View file

@ -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; }

View file

@ -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

View file

@ -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));

View file

@ -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;

View file

@ -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)

View file

@ -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

View file

@ -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
}
} }
} }

View file

@ -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 {

View file

@ -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"