Open GoogleCodeExporter opened 9 years ago
yep, confirm. it doesn't happen only with 100.. try to set other values. it
gets crazy too
Original comment by joaoalve...@googlemail.com
on 24 Aug 2011 at 2:32
from generaledit.cpp remove lines 115-118:
connect(ui->weightSB_1, SIGNAL(valueChanged(int)), this,
SLOT(validateWeightSB())); connect(ui->weightSB_2, SIGNAL(valueChanged(int)),
this, SLOT(validateWeightSB())); connect(ui->weightSB_3,
SIGNAL(valueChanged(int)), this, SLOT(validateWeightSB()));
connect(ui->weightSB_4, SIGNAL(valueChanged(int)), this,
SLOT(validateWeightSB()));
and:
line 156 need to be changed from:
ui->modeCB_4->setCurrentIndex(g_eeGeneral.trainer.mix[0].mode);
to:
ui->modeCB_4->setCurrentIndex(g_eeGeneral.trainer.mix[3].mode);
Original comment by gbir...@gmail.com
on 6 Nov 2011 at 11:19
On the right track but if you change the weights, exit General Edit and then
reopen General Settings the weight variables have changed again. Try entering
100 for all the weights as per above. Exit and then reopen as above and the
weights will have changed to 97. These variables are being changed elsewhere in
the code.
Original comment by mjfl.lam...@gmail.com
on 7 Nov 2011 at 8:08
It makes some sense.... to have variable changed due to te fact that in er9x
trainer weights are represented as 6 bit signed values and scaled each time to
+/- 100. (value*13/4) considering.
If you insert 100 in the weight when saving in the eeprom it becomes 30 as
100*4/13=30,7 and trunking to integer becomes 30
When you reload from eeprom 30 convert to 97.5 and again trunking to integer
becomes 97
If you save the value back 97*4/13 it convert as 29.
And so on... Probably some rounding is missed around...
Original comment by romolo.m...@gmail.com
on 7 Nov 2011 at 11:44
[deleted comment]
[deleted comment]
Romolo thanks for nice demonstration.
then it need to be changed for (value*10/3)+1 and value*3/10
with this formula, there is always only one conversion to nearest value
and stepping by 3 looks beter replace all <number>4</number> with
<number>3</number> in genetaledit.ui
generaledit.cpp:
void GeneralEdit::updateTrianerTab()
{
on_tabWidget_selected(""); // updates channel name labels
ui->modeCB_1->setCurrentIndex(g_eeGeneral.trainer.mix[0].mode);
ui->weightSB_1->setValue((g_eeGeneral.trainer.mix[0].studWeight*10/3)+1);
ui->sourceCB_1->setCurrentIndex(g_eeGeneral.trainer.mix[0].srcChn);
populateSwitchCB(ui->swtchCB_1,g_eeGeneral.trainer.mix[0].swtch);
ui->modeCB_2->setCurrentIndex(g_eeGeneral.trainer.mix[1].mode);
ui->weightSB_2->setValue((g_eeGeneral.trainer.mix[1].studWeight*10/3)+1);
ui->sourceCB_2->setCurrentIndex(g_eeGeneral.trainer.mix[1].srcChn);
populateSwitchCB(ui->swtchCB_2,g_eeGeneral.trainer.mix[1].swtch);
ui->modeCB_3->setCurrentIndex(g_eeGeneral.trainer.mix[2].mode);
ui->weightSB_3->setValue((g_eeGeneral.trainer.mix[2].studWeight*10/3)+1);
ui->sourceCB_3->setCurrentIndex(g_eeGeneral.trainer.mix[2].srcChn);
populateSwitchCB(ui->swtchCB_3,g_eeGeneral.trainer.mix[2].swtch);
ui->modeCB_4->setCurrentIndex(g_eeGeneral.trainer.mix[3].mode);
ui->weightSB_4->setValue((g_eeGeneral.trainer.mix[3].studWeight*10/3)+1);
ui->sourceCB_4->setCurrentIndex(g_eeGeneral.trainer.mix[3].srcChn);
populateSwitchCB(ui->swtchCB_4,g_eeGeneral.trainer.mix[3].swtch);
ui->trainerCalib_1->setValue(g_eeGeneral.trainer.calib[0]);
ui->trainerCalib_2->setValue(g_eeGeneral.trainer.calib[1]);
ui->trainerCalib_3->setValue(g_eeGeneral.trainer.calib[2]);
ui->trainerCalib_4->setValue(g_eeGeneral.trainer.calib[3]);
ui->PPM_MultiplierDSB->setValue(double(g_eeGeneral.PPM_Multiplier+10)/10);
}
void GeneralEdit::trainerTabValueChanged()
{
g_eeGeneral.trainer.mix[0].mode = ui->modeCB_1->currentIndex();
g_eeGeneral.trainer.mix[0].studWeight = ui->weightSB_1->value()*3/10;
g_eeGeneral.trainer.mix[0].srcChn = ui->sourceCB_1->currentIndex();
g_eeGeneral.trainer.mix[0].swtch = ui->swtchCB_1->currentIndex()-MAX_DRSWITCH;
g_eeGeneral.trainer.mix[1].mode = ui->modeCB_2->currentIndex();
g_eeGeneral.trainer.mix[1].studWeight = ui->weightSB_2->value()*3/10;
g_eeGeneral.trainer.mix[1].srcChn = ui->sourceCB_2->currentIndex();
g_eeGeneral.trainer.mix[1].swtch = ui->swtchCB_2->currentIndex()-MAX_DRSWITCH;
g_eeGeneral.trainer.mix[2].mode = ui->modeCB_3->currentIndex();
g_eeGeneral.trainer.mix[2].studWeight = ui->weightSB_3->value()*3/10;
g_eeGeneral.trainer.mix[2].srcChn = ui->sourceCB_3->currentIndex();
g_eeGeneral.trainer.mix[2].swtch = ui->swtchCB_3->currentIndex()-MAX_DRSWITCH;
g_eeGeneral.trainer.mix[3].mode = ui->modeCB_4->currentIndex();
g_eeGeneral.trainer.mix[3].studWeight = ui->weightSB_4->value()*3/10;
g_eeGeneral.trainer.mix[3].srcChn = ui->sourceCB_4->currentIndex();
g_eeGeneral.trainer.mix[3].swtch = ui->swtchCB_4->currentIndex()-MAX_DRSWITCH;
g_eeGeneral.trainer.calib[0] = ui->trainerCalib_1->value();
g_eeGeneral.trainer.calib[1] = ui->trainerCalib_2->value();
g_eeGeneral.trainer.calib[2] = ui->trainerCalib_3->value();
g_eeGeneral.trainer.calib[3] = ui->trainerCalib_4->value();
g_eeGeneral.PPM_Multiplier = ((quint16)(ui->PPM_MultiplierDSB->value()*10))-10;
updateSettings();
}
void GeneralEdit::validateWeightSB()
{
int i;
ui->weightSB_1->blockSignals(true);
ui->weightSB_2->blockSignals(true);
ui->weightSB_3->blockSignals(true);
ui->weightSB_4->blockSignals(true);
i = ui->weightSB_1->value()*3/10;
ui->weightSB_1->setValue((i*10/3)+1);
i = ui->weightSB_2->value()*3/10;
ui->weightSB_2->setValue((i*10/3)+1);
i = ui->weightSB_3->value()*3/10;
ui->weightSB_3->setValue((i*10/3)+1);
i = ui->weightSB_4->value()*3/10;
ui->weightSB_4->setValue((i*10/3)+1);
ui->weightSB_1->blockSignals(false);
ui->weightSB_2->blockSignals(false);
ui->weightSB_3->blockSignals(false);
ui->weightSB_4->blockSignals(false);
}
Original comment by gbir...@gmail.com
on 7 Nov 2011 at 5:18
[deleted comment]
Fixed in R288, please close.
Original comment by romolo.m...@gmail.com
on 13 Nov 2011 at 2:03
Original issue reported on code.google.com by
mjfl.lam...@gmail.com
on 24 Aug 2011 at 11:15