Skip to content

Commit

Permalink
feat(radio): allow prec. for mix slow up/dn to be set to 10 or 100ms (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
philmoz authored Feb 12, 2024
1 parent 001854f commit 84c2d85
Show file tree
Hide file tree
Showing 47 changed files with 489 additions and 290 deletions.
2 changes: 2 additions & 0 deletions companion/src/firmwares/edgetx/yaml_mixdata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ Node convert<MixData>::encode(const MixData& rhs)
node["curve"] = rhs.curve;
node["delayUp"] = rhs.delayUp;
node["delayDown"] = rhs.delayDown;
node["speedPrec"] = rhs.speedPrec;
node["speedUp"] = rhs.speedUp;
node["speedDown"] = rhs.speedDown;
node["carryTrim"] = rhs.carryTrim;
Expand All @@ -156,6 +157,7 @@ bool convert<MixData>::decode(const Node& node, MixData& rhs)
node["curve"] >> rhs.curve;
node["delayUp"] >> rhs.delayUp;
node["delayDown"] >> rhs.delayDown;
node["speedPrec"] >> rhs.speedPrec;
node["speedUp"] >> rhs.speedUp;
node["speedDown"] >> rhs.speedDown;
node["carryTrim"] >> rhs.carryTrim;
Expand Down
1 change: 1 addition & 0 deletions companion/src/firmwares/mixdata.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ class MixData {
CurveReference curve;
unsigned int delayUp;
unsigned int delayDown;
unsigned int speedPrec;
unsigned int speedUp;
unsigned int speedDown;
int carryTrim;
Expand Down
41 changes: 33 additions & 8 deletions companion/src/modeledit/mixerdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,16 +133,11 @@ 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->speedPrecCB->setCurrentIndex(md->speedPrec);

int scale=firmware->getCapability(SlowScale);
float range=firmware->getCapability(SlowRange);
ui->slowDownSB->setMaximum(range / scale);
ui->slowDownSB->setSingleStep(1.0 / scale);
ui->slowDownSB->setDecimals((scale == 1 ? 0 : 1));
ui->slowDownSB->setValue((float)md->speedDown/scale);
ui->slowUpSB->setMaximum(range / scale);
ui->slowUpSB->setSingleStep(1.0 / scale);
ui->slowUpSB->setDecimals((scale == 1 ? 0 : 1));
ui->slowUpSB->setValue((float)md->speedUp/scale);

ui->delayDownSB->setMaximum(range / scale);
ui->delayDownSB->setSingleStep(1.0 / scale);
ui->delayDownSB->setDecimals((scale == 1 ? 0 : 1));
Expand All @@ -152,6 +147,16 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
ui->delayUpSB->setDecimals((scale == 1 ? 0 : 1));
ui->delayUpSB->setValue((float)md->delayUp / scale);

if (md->speedPrec) scale = scale * 10;
ui->slowDownSB->setMaximum(range / scale);
ui->slowDownSB->setSingleStep(1.0 / scale);
ui->slowDownSB->setDecimals((scale == 1 ? 0 : scale == 10 ? 1 : 2));
ui->slowDownSB->setValue((float)md->speedDown/scale);
ui->slowUpSB->setMaximum(range / scale);
ui->slowUpSB->setSingleStep(1.0 / scale);
ui->slowUpSB->setDecimals((scale == 1 ? 0 : scale == 10 ? 1 : 2));
ui->slowUpSB->setValue((float)md->speedUp/scale);

valuesChanged();

connect(ui->mixerName,SIGNAL(editingFinished()),this,SLOT(valuesChanged()));
Expand All @@ -163,6 +168,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
connect(ui->mltpxCB,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()));
connect(ui->slowDownSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged()));
connect(ui->slowUpSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged()));

Expand Down Expand Up @@ -209,11 +215,30 @@ void MixerDialog::valuesChanged()
md->swtch = RawSwitch(ui->switchesCB->itemData(ui->switchesCB->currentIndex()).toInt());
md->mixWarn = ui->warningCB->currentIndex();
md->mltpx = (MltpxValue)ui->mltpxCB->currentIndex();

int scale = firmware->getCapability(SlowScale);
md->delayDown = round(ui->delayDownSB->value() * scale);
md->delayUp = round(ui->delayUpSB->value() * scale);

// Update values based on old precision (in case it changed)
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);
ui->slowDownSB->setSingleStep(1.0 / scale);
ui->slowDownSB->setDecimals((scale == 1 ? 0 : scale == 10 ? 1 : 2));
ui->slowDownSB->setValue((float)md->speedDown / scale);
ui->slowUpSB->setMaximum(range / scale);
ui->slowUpSB->setSingleStep(1.0 / scale);
ui->slowUpSB->setDecimals((scale == 1 ? 0 : scale == 10 ? 1 : 2));
ui->slowUpSB->setValue((float)md->speedUp / scale);

strcpy(md->name, ui->mixerName->text().toLatin1());

md->flightModes = 0;
Expand Down
Loading

0 comments on commit 84c2d85

Please sign in to comment.