feat: add precision setting for mix delay up & down (#5314)

This commit is contained in:
philmoz
2024-07-29 20:07:58 +10:00
committed by GitHub
parent e323bd6821
commit bdfb94ae83
42 changed files with 242 additions and 129 deletions
@@ -143,6 +143,7 @@ Node convert<MixData>::encode(const MixData& rhs)
node["weight"] = YamlSourceNumRefEncode(rhs.weight);
node["swtch"] = rhs.swtch;
node["curve"] = rhs.curve;
node["delayPrec"] = rhs.delayPrec;
node["delayUp"] = rhs.delayUp;
node["delayDown"] = rhs.delayDown;
node["speedPrec"] = rhs.speedPrec;
@@ -166,6 +167,7 @@ bool convert<MixData>::decode(const Node& node, MixData& rhs)
}
node["swtch"] >> rhs.swtch;
node["curve"] >> rhs.curve;
node["delayPrec"] >> rhs.delayPrec;
node["delayUp"] >> rhs.delayUp;
node["delayDown"] >> rhs.delayDown;
node["speedPrec"] >> rhs.speedPrec;
+1
View File
@@ -48,6 +48,7 @@ class MixData {
int weight;
RawSwitch swtch;
CurveReference curve;
unsigned int delayPrec;
unsigned int delayUp;
unsigned int delayDown;
unsigned int speedPrec;
+26 -5
View File
@@ -145,20 +145,23 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
ui->switchesCB->setCurrentIndex(ui->switchesCB->findData(md->swtch.toValue()));
ui->warningCB->setCurrentIndex(md->mixWarn);
ui->mltpxCB->setCurrentIndex(md->mltpx);
ui->delayPrecCB->setCurrentIndex(md->delayPrec);
ui->speedPrecCB->setCurrentIndex(md->speedPrec);
int scale=firmware->getCapability(SlowScale);
float range=firmware->getCapability(SlowRange);
float range = firmware->getCapability(SlowRange);
int scale = firmware->getCapability(SlowScale);
if (md->delayPrec) scale = scale * 10;
ui->delayDownSB->setMaximum(range / scale);
ui->delayDownSB->setSingleStep(1.0 / scale);
ui->delayDownSB->setDecimals((scale == 1 ? 0 : 1));
ui->delayDownSB->setDecimals((scale == 1 ? 0 : scale == 10 ? 1 : 2));
ui->delayDownSB->setValue((float)md->delayDown / scale);
ui->delayUpSB->setMaximum(range / scale);
ui->delayUpSB->setSingleStep(1.0 / scale);
ui->delayUpSB->setDecimals((scale == 1 ? 0 : 1));
ui->delayUpSB->setDecimals((scale == 1 ? 0 : scale == 10 ? 1 : 2));
ui->delayUpSB->setValue((float)md->delayUp / scale);
scale = firmware->getCapability(SlowScale);
if (md->speedPrec) scale = scale * 10;
ui->slowDownSB->setMaximum(range / scale);
ui->slowDownSB->setSingleStep(1.0 / scale);
@@ -178,6 +181,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
connect(ui->switchesCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged()));
connect(ui->warningCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged()));
connect(ui->mltpxCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged()));
connect(ui->delayPrecCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged()));
connect(ui->delayDownSB, SIGNAL(editingFinished()), this, SLOT(valuesChanged()));
connect(ui->delayUpSB, SIGNAL(editingFinished()), this, SLOT(valuesChanged()));
connect(ui->speedPrecCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged()));
@@ -229,18 +233,35 @@ void MixerDialog::valuesChanged()
md->mixWarn = ui->warningCB->currentIndex();
md->mltpx = (MltpxValue)ui->mltpxCB->currentIndex();
float range = firmware->getCapability(SlowRange);
// Update values based on old precision (in case it changed)
int scale = firmware->getCapability(SlowScale);
if (md->delayPrec) scale = scale * 10;
md->delayDown = round(ui->delayDownSB->value() * scale);
md->delayUp = round(ui->delayUpSB->value() * scale);
// Get new precion and update controls
md->delayPrec = ui->delayPrecCB->currentIndex();
scale = firmware->getCapability(SlowScale);
if (md->delayPrec) scale = scale * 10;
ui->delayDownSB->setMaximum(range / scale);
ui->delayDownSB->setSingleStep(1.0 / scale);
ui->delayDownSB->setDecimals((scale == 1 ? 0 : scale == 10 ? 1 : 2));
ui->delayDownSB->setValue((float)md->delayDown / scale);
ui->delayUpSB->setMaximum(range / scale);
ui->delayUpSB->setSingleStep(1.0 / scale);
ui->delayUpSB->setDecimals((scale == 1 ? 0 : scale == 10 ? 1 : 2));
ui->delayUpSB->setValue((float)md->delayUp / scale);
// Update values based on old precision (in case it changed)
scale = firmware->getCapability(SlowScale);
if (md->speedPrec) scale = scale * 10;
md->speedDown = round(ui->slowDownSB->value() * scale);
md->speedUp = round(ui->slowUpSB->value() * scale);
// Get new precion and update controls
md->speedPrec = ui->speedPrecCB->currentIndex();
float range = firmware->getCapability(SlowRange);
scale = firmware->getCapability(SlowScale);
if (md->speedPrec) scale = scale * 10;
ui->slowDownSB->setMaximum(range / scale);
+114 -97
View File
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>752</width>
<height>623</height>
<width>763</width>
<height>655</height>
</rect>
</property>
<property name="sizePolicy">
@@ -63,13 +63,6 @@
</item>
</layout>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Slow up/dn prec</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="sourceCB"/>
</item>
@@ -80,20 +73,6 @@
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QComboBox" name="speedPrecCB">
<item>
<property name="text">
<string>0.0</string>
</property>
</item>
<item>
<property name="text">
<string>0.00</string>
</property>
</item>
</widget>
</item>
<item row="8" column="1">
<widget class="QComboBox" name="switchesCB"/>
</item>
@@ -521,37 +500,8 @@
</item>
<item row="1" column="0">
<layout class="QGridLayout" name="gridLayout" columnstretch="0,0,0,0">
<item row="1" column="2">
<widget class="QDoubleSpinBox" name="slowUpSB">
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline;&quot;&gt;Delay ans Slow&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600; text-decoration: underline;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;These values control the speed and delay of the output of the mix. &lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;If Delay is not zero the actuation of the mix will be delayed by the specified amount of seconds.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;If Slow is not zero then the speed of the mix will be set by the value specified -&amp;gt; the value states the number of seconds it takes to transit from -100 to 100.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="decimals">
<number>1</number>
</property>
<property name="maximum">
<double>7.500000000000000</double>
</property>
<property name="singleStep">
<double>0.500000000000000</double>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="delayUpSB">
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="delayDownSB">
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
@@ -573,7 +523,48 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="2" column="2">
<item row="0" column="2">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Slow</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Delay</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Up</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Down</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QDoubleSpinBox" name="slowDownSB">
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@@ -602,49 +593,8 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Down</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Up</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Delay</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Slow</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="delayDownSB">
<widget class="QDoubleSpinBox" name="delayUpSB">
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
@@ -666,6 +616,73 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QDoubleSpinBox" name="slowUpSB">
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline;&quot;&gt;Delay ans Slow&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600; text-decoration: underline;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;These values control the speed and delay of the output of the mix. &lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;If Delay is not zero the actuation of the mix will be delayed by the specified amount of seconds.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;If Slow is not zero then the speed of the mix will be set by the value specified -&amp;gt; the value states the number of seconds it takes to transit from -100 to 100.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="decimals">
<number>1</number>
</property>
<property name="maximum">
<double>7.500000000000000</double>
</property>
<property name="singleStep">
<double>0.500000000000000</double>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Precision</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QComboBox" name="speedPrecCB">
<item>
<property name="text">
<string>0.0</string>
</property>
</item>
<item>
<property name="text">
<string>0.00</string>
</property>
</item>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="delayPrecCB">
<item>
<property name="text">
<string>0.0</string>
</property>
</item>
<item>
<property name="text">
<string>0.00</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
</layout>
+7 -2
View File
@@ -440,10 +440,15 @@ QString ModelPrinter::printMixerLine(const MixData & mix, bool showMultiplex, in
if (mix.curve.value)
str += " " + mix.curve.toString(&model, true, &generalSettings).toHtmlEscaped();
int scale = firmware->getCapability(SlowScale);
if (scale == 0)
scale = 1;
if (scale == 0) scale = 1;
if (mix.delayPrec) {
scale = scale * 10;
str += " " + tr("Delay precision(0.00)").toHtmlEscaped();
}
if (mix.delayDown || mix.delayUp)
str += " " + tr("Delay(u%1:d%2)").arg((double)mix.delayUp / scale).arg((double)mix.delayDown / scale).toHtmlEscaped();
scale = firmware->getCapability(SlowScale);
if (scale == 0) scale = 1;
if (mix.speedPrec) {
scale = scale * 10;
str += " " + tr("Slow precision(0.00)").toHtmlEscaped();
+2 -1
View File
@@ -93,9 +93,10 @@ PACK(struct MixData {
uint16_t carryTrim:1;
uint16_t mixWarn:2; // mixer warning
uint16_t mltpx:2 ENUM(MixerMultiplex);
uint16_t delayPrec:1;
uint16_t speedPrec:1;
uint16_t flightModes:9 CUST(r_flightModes, w_flightModes);
uint16_t spare:2 SKIP;
uint16_t spare:1 SKIP;
uint32_t weight:11 CUST(r_sourceNumVal,w_sourceNumVal);
uint32_t offset:11 CUST(r_sourceNumVal,w_sourceNumVal);
int32_t swtch:10 CUST(r_swtchSrc,w_swtchSrc);
+7 -2
View File
@@ -33,6 +33,7 @@ enum MixFields {
MIX_FIELD_SWITCH,
MIX_FIELD_WARNING,
MIX_FIELD_MLTPX,
MIX_FIELD_DELAY_PREC,
MIX_FIELD_DELAY_UP,
MIX_FIELD_DELAY_DOWN,
MIX_FIELD_SLOW_PREC,
@@ -185,12 +186,16 @@ void menuModelMixOne(event_t event)
md2->mltpx = editChoice(MIXES_2ND_COLUMN, y, STR_MULTPX, STR_VMLTPX, md2->mltpx, 0, 2, attr, event);
break;
case MIX_FIELD_DELAY_PREC:
md2->delayPrec = editChoice(MIXES_2ND_COLUMN, y, STR_MIX_DELAY_PREC, &STR_VPREC[1], md2->delayPrec, 0, 1, attr, event);
break;
case MIX_FIELD_DELAY_UP:
md2->delayUp = EDIT_DELAY(0, y, event, attr, STR_DELAYUP, md2->delayUp, PREC1);
md2->delayUp = EDIT_DELAY(0, y, event, attr, STR_DELAYUP, md2->delayUp, (md2->delayPrec ? PREC2 : PREC1));
break;
case MIX_FIELD_DELAY_DOWN:
md2->delayDown = EDIT_DELAY(0, y, event, attr, STR_DELAYDOWN, md2->delayDown, PREC1);
md2->delayDown = EDIT_DELAY(0, y, event, attr, STR_DELAYDOWN, md2->delayDown, (md2->delayPrec ? PREC2 : PREC1));
break;
case MIX_FIELD_SLOW_PREC:
+7 -2
View File
@@ -33,6 +33,7 @@ enum MixFields {
MIX_FIELD_SWITCH,
MIX_FIELD_WARNING,
MIX_FIELD_MLTPX,
MIX_FIELD_DELAY_PREC,
MIX_FIELD_DELAY_UP,
MIX_FIELD_DELAY_DOWN,
MIX_FIELD_SLOW_PREC,
@@ -181,12 +182,16 @@ void menuModelMixOne(event_t event)
md2->mltpx = editChoice(MIXES_2ND_COLUMN, y, STR_MULTPX, STR_VMLTPX, md2->mltpx, 0, 2, attr, event);
break;
case MIX_FIELD_DELAY_PREC:
md2->delayPrec = editChoice(MIXES_2ND_COLUMN, y, STR_MIX_DELAY_PREC, &STR_VPREC[1], md2->delayPrec, 0, 1, attr, event);
break;
case MIX_FIELD_DELAY_UP:
md2->delayUp = EDIT_DELAY(y, event, attr, STR_DELAYUP, md2->delayUp, PREC1);
md2->delayUp = EDIT_DELAY(y, event, attr, STR_DELAYUP, md2->delayUp, (md2->delayPrec ? PREC2 : PREC1));
break;
case MIX_FIELD_DELAY_DOWN:
md2->delayDown = EDIT_DELAY(y, event, attr, STR_DELAYDOWN, md2->delayDown, PREC1);
md2->delayDown = EDIT_DELAY(y, event, attr, STR_DELAYDOWN, md2->delayDown, (md2->delayPrec ? PREC2 : PREC1));
break;
case MIX_FIELD_SLOW_PREC:
+30 -8
View File
@@ -84,20 +84,42 @@ void MixEditAdvanced::buildBody(Window* form)
GET_SET_DEFAULT(mix->mixWarn));
edit->setZeroText(STR_OFF);
// Delay up/down precision
#if !PORTRAIT_LCD
grid.setColSpan(2);
#endif
line = form->newLine(grid);
new StaticText(line, rect_t{}, STR_MIX_DELAY_PREC);
new Choice(line, rect_t{}, &STR_VPREC[1], 0, 1,
GET_DEFAULT(mix->delayPrec),
[=](int newValue) {
mix->delayPrec = newValue;
delayUp->clearTextFlag(PREC2);
delayUp->setTextFlag(mix->delayPrec ? PREC2 : PREC1);
delayUp->update();
delayDn->clearTextFlag(PREC2);
delayDn->setTextFlag(mix->delayPrec ? PREC2 : PREC1);
delayDn->update();
SET_DIRTY();
});
#if !PORTRAIT_LCD
grid.setColSpan(1);
#endif
// Delay up
line = form->newLine(grid);
new StaticText(line, rect_t{}, STR_DELAYUP);
edit = new NumberEdit(line, rect_t{0, 0, NUM_EDIT_W, 0}, 0, DELAY_MAX,
GET_DEFAULT(mix->delayUp),
SET_VALUE(mix->delayUp, newValue), PREC1);
edit->setSuffix("s");
delayUp = new NumberEdit(line, rect_t{0, 0, NUM_EDIT_W, 0}, 0, DELAY_MAX,
GET_DEFAULT(mix->delayUp),
SET_VALUE(mix->delayUp, newValue), mix->delayPrec ? PREC2 : PREC1);
delayUp->setSuffix("s");
// Delay down
new StaticText(line, rect_t{}, STR_DELAYDOWN);
edit = new NumberEdit(line, rect_t{0, 0, NUM_EDIT_W, 0}, 0, DELAY_MAX,
GET_DEFAULT(mix->delayDown),
SET_VALUE(mix->delayDown, newValue), PREC1);
edit->setSuffix("s");
delayDn = new NumberEdit(line, rect_t{0, 0, NUM_EDIT_W, 0}, 0, DELAY_MAX,
GET_DEFAULT(mix->delayDown),
SET_VALUE(mix->delayDown, newValue), mix->delayPrec ? PREC2 : PREC1);
delayDn->setSuffix("s");
// Slow up/down precision
#if !PORTRAIT_LCD
+2
View File
@@ -38,6 +38,8 @@ class MixEditAdvanced : public Page
protected:
uint8_t channel;
uint8_t index;
NumberEdit* delayUp;
NumberEdit* delayDn;
NumberEdit* slowUp;
NumberEdit* slowDn;
+2 -1
View File
@@ -924,7 +924,8 @@ void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms)
if (mode == e_perout_mode_normal && swTog) {
if (!mixState[i].delay)
_swPrev = _swOn;
mixState[i].delay = (mixEnabled > _swOn ? md->delayUp : md->delayDown) * 10;
int32_t precMult = md->delayPrec ? 1 : 10;
mixState[i].delay = (mixEnabled > _swOn ? md->delayUp : md->delayDown) * precMult;
mixState[i].now = mixEnabled;
mixState[i].prev = _swPrev;
}
@@ -401,9 +401,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -427,9 +427,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -427,9 +427,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -429,9 +429,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -401,9 +401,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -401,9 +401,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -429,9 +429,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -429,9 +429,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -400,9 +400,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -401,9 +401,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -404,9 +404,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
+1
View File
@@ -1111,3 +1111,4 @@ const char STR_WIDGET_SIZE[] = TR_WIDGET_SIZE;
#endif
const char STR_MIX_SLOW_PREC[] = TR_MIX_SLOW_PREC;
const char STR_MIX_DELAY_PREC[] = TR_MIX_DELAY_PREC;
+1
View File
@@ -1276,3 +1276,4 @@ extern const char STR_WIDGET_SIZE[];
#endif
extern const char STR_MIX_SLOW_PREC[];
extern const char STR_MIX_DELAY_PREC[];
+1
View File
@@ -1294,6 +1294,7 @@
#define TR_CREATE_NEW "新建"
#define TR_MIX_SLOW_PREC TR("慢放精度", "慢放精度 上行/下行")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "已存在同名主题目录 !"
+1
View File
@@ -1309,6 +1309,7 @@
#define TR_CREATE_NEW "Vytvořit"
#define TR_MIX_SLOW_PREC TR("Přesnost zpomal", "Přesnost zpomalení")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Adresář vzhledu s tímto názvem již existuje."
+1
View File
@@ -1308,6 +1308,7 @@
#define TR_CREATE_NEW "Opret"
#define TR_MIX_SLOW_PREC TR("Træg præc", "Træg op/ned præcision")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Der findes allerede et katalog med samme navn."
+1
View File
@@ -1299,6 +1299,7 @@
#define TR_CREATE_NEW "Erstelle"
#define TR_MIX_SLOW_PREC TR("Langs. Vorlauf", "Langs. Vor-/Rücklauf")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Ein Theme-Verzeichnis mit demselben Namen existiert bereits"
+1
View File
@@ -1294,6 +1294,7 @@
#define TR_CREATE_NEW "Create"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "A theme directory with the same name already exists."
+1
View File
@@ -1296,6 +1296,7 @@
#define TR_CREATE_NEW "Create"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "A theme directory with the same name already exists."
+1
View File
@@ -1312,6 +1312,7 @@
#define TR_CREATE_NEW "Create"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "A theme directory with the same name already exists."
+1
View File
@@ -1311,6 +1311,7 @@
#define TR_CREATE_NEW "Créer"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Un thème avec le même nom existe déjà."
+1
View File
@@ -1295,6 +1295,7 @@
#define TR_CREATE_NEW "יצירה חדשה"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "כבר קיימת ערכת נושא עם אותו שם"
+1
View File
@@ -1290,6 +1290,7 @@
#define TR_CREATE_NEW "Crea"
#define TR_MIX_SLOW_PREC TR("Prec. lenta", "Prec. su/giù lenta")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Esiste già una cartella di temi con lo stesso nome."
+1
View File
@@ -1295,6 +1295,7 @@
#define TR_CREATE_NEW "作成"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "同じ名前のテーマディレクトリが既に存在します。"
+1
View File
@@ -1302,6 +1302,7 @@
#define TR_CREATE_NEW "Create"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "A theme directory with the same name already exists."
+1
View File
@@ -1295,6 +1295,7 @@
#define TR_CREATE_NEW "Utwórz"
#define TR_MIX_SLOW_PREC TR("Wolna prec.", "Wolna prec. góra/dół")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Folder szablonów o takiej samej nazwie już istnieje."
+1
View File
@@ -1299,6 +1299,7 @@
#define TR_CREATE_NEW "Criar"
#define TR_MIX_SLOW_PREC TR("Prec. Lento", "Prec. mais/menos lento")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Já existe um diretório de tema com o mesmo nome."
+1
View File
@@ -1298,6 +1298,7 @@
#define TR_CREATE_NEW "Создать"
#define TR_MIX_SLOW_PREC TR("Точн замедл", "Точность замедления")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Уже есть каталог с таким названием"
+1
View File
@@ -1330,6 +1330,7 @@
#define TR_CREATE_NEW "Skapa"
#define TR_MIX_SLOW_PREC TR("Dröj preci.", "Fördröj upp/ner precision")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Det finns redan ett tema med samma namn"
+1
View File
@@ -1299,6 +1299,7 @@
#define TR_CREATE_NEW "新建"
#define TR_MIX_SLOW_PREC TR("慢放精度", "慢放精度 上行/下行")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "已存在同名主題目錄 !"
+1
View File
@@ -1294,6 +1294,7 @@
#define TR_CREATE_NEW "Створити"
#define TR_MIX_SLOW_PREC TR("Точн. уповільн.", "Точність уповільнення")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "A theme directory with the same name already exists."