t_Open9xArmExpoData_v210::operator ExpoData () { ExpoData c9x; c9x.mode = mode; c9x.chn = chn; if (expo!=0 && curve!=0) { EEPROMWarnings.push_back(::QObject::tr("Simultaneous usage of expo and curves is no longer supported")); } else { if (curve == 0) { c9x.curve = CurveReference(CurveReference::CURVE_REF_EXPO, expo); } else { // TODO } } c9x.swtch = open9xArmToSwitch(swtch); if (phase<0) { c9x.phases= 1 << (-phase -1); } else if (phase==0) { c9x.phases=0; } else { c9x.phases=63; c9x.phases &= ~(1 << (phase -1)); } c9x.weight = weight; getEEPROMZString(c9x.name, name, sizeof(name)); return c9x; }
t_Open9xExpoData_v201::operator ExpoData () { ExpoData c9x; c9x.mode = mode; c9x.chn = chn; if (expo!=0 && curve!=0) { EEPROMWarnings += ::QObject::tr("Simultaneous usage of expo and curves is no longer supported in OpenTX") + "\n"; } else { if (curve == 0) { c9x.curve = CurveReference(CurveReference::CURVE_REF_EXPO, expo); } else { // TODO } } c9x.swtch = open9xStockToSwitch(swtch); if (negPhase) { c9x.phases= 1 << (phase -1); } else if (phase==0) { c9x.phases=0; } else { c9x.phases=63; c9x.phases &= ~(1 << (phase -1)); } c9x.weight = weight; return c9x; }
t_Open9xArmMixData_v212::operator MixData () { MixData c9x; if (srcRaw) { c9x.destCh = destCh+1; if (srcRaw == 0) { c9x.srcRaw = RawSource(SOURCE_TYPE_NONE); } else if (srcRaw <= 7) { c9x.srcRaw = RawSource(SOURCE_TYPE_STICK, srcRaw-1); } else if (srcRaw <= 8) { c9x.srcRaw = RawSource(SOURCE_TYPE_ROTARY_ENCODER, srcRaw-8); } else if (srcRaw <= 12) { c9x.srcRaw = RawSource(SOURCE_TYPE_TRIM, srcRaw-9); } else if (srcRaw == 13) { c9x.srcRaw = RawSource(SOURCE_TYPE_MAX); } else if (srcRaw == 14) { c9x.srcRaw = RawSource(SOURCE_TYPE_SWITCH, 0); } else if (srcRaw <= 14+9+O9X_ARM_NUM_CSW) { c9x.srcRaw = RawSource(SOURCE_TYPE_SWITCH, srcRaw-14); } else if (srcRaw <= 14+9+O9X_ARM_NUM_CSW+NUM_CYC) { c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-15-9-O9X_ARM_NUM_CSW); } else if (srcRaw <= 14+9+O9X_ARM_NUM_CSW+NUM_CYC+8) { c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-15-9-O9X_ARM_NUM_CSW-NUM_CYC); } else { c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-15-9-O9X_ARM_NUM_CSW-NUM_CYC-8); } c9x.weight = weight; if (curveMode==0) { c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, curveParam); } else { // TODO } c9x.swtch = open9xArmToSwitch(swtch); c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; c9x.speedDown = speedDown; c9x.carryTrim = carryTrim; c9x.noExpo = noExpo; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; c9x.phases = phases; c9x.sOffset = sOffset; getEEPROMZString(c9x.name, name, sizeof(name)); } return c9x; }
t_Open9xMixData_v211::operator MixData () { MixData c9x; if (srcRaw) { c9x.destCh = destCh+1; c9x.swtch = open9xStockToSwitch(swtch); if (srcRaw == 0) { c9x.srcRaw = RawSource(SOURCE_TYPE_NONE); } else if (srcRaw <= 7) { c9x.srcRaw = RawSource(SOURCE_TYPE_STICK, srcRaw-1); } else if (srcRaw <= 11) { c9x.srcRaw = RawSource(SOURCE_TYPE_TRIM, srcRaw-8); } else if (srcRaw == 12) { c9x.srcRaw = RawSource(SOURCE_TYPE_MAX); } else if (srcRaw == 13) { c9x.srcRaw = RawSource(SOURCE_TYPE_SWITCH, 0); } else if (srcRaw <= 34) { c9x.srcRaw = RawSource(SOURCE_TYPE_SWITCH, srcRaw-13); } else if (srcRaw <= 37) { c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-35); } else if (srcRaw <= 45) { c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-38); } else { c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-46); } c9x.weight = weight; if (curveMode==0) { c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, curveParam); } else { // TODO c9x.curve = curve; } c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; c9x.speedDown = speedDown; c9x.carryTrim = carryTrim; c9x.noExpo = noExpo; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; c9x.phases = phases; c9x.sOffset = sOffset; } return c9x; }
Channels::Channels(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware): ModelPanel(parent, model, generalSettings, firmware) { QGridLayout * gridLayout = new QGridLayout(this); bool minimize = false; int col = 1; if (firmware->getCapability(ChannelsName)) { minimize=true; addLabel(gridLayout, tr("Name"), col++); } addLabel(gridLayout, tr("Subtrim"), col++, minimize); addLabel(gridLayout, tr("Min"), col++, minimize); addLabel(gridLayout, tr("Max"), col++, minimize); addLabel(gridLayout, tr("Direction"), col++, minimize); if (IS_TARANIS(GetEepromInterface()->getBoard())) addLabel(gridLayout, tr("Curve"), col++, minimize); if (firmware->getCapability(PPMCenter)) addLabel(gridLayout, tr("PPM Center"), col++, minimize); if (firmware->getCapability(SYMLimits)) addLabel(gridLayout, tr("Linear Subtrim"), col++, true); for (int i=0; i<firmware->getCapability(Outputs); i++) { col = 0; // Channel label QLabel *label = new QLabel(this); label->setText(tr("Channel %1").arg(i+1)); label->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); gridLayout->addWidget(label, i+1, col++, 1, 1); // Channel name int nameLen = firmware->getCapability(ChannelsName); if (nameLen > 0) { QLineEdit * name = new QLineEdit(this); name->setProperty("index", i); name->setMaxLength(nameLen); QRegExp rx(CHAR_FOR_NAMES_REGEX); name->setValidator(new QRegExpValidator(rx, this)); name->setText(model.limitData[i].name); connect(name, SIGNAL(editingFinished()), this, SLOT(nameEdited())); gridLayout->addWidget(name, i+1, col++, 1, 1); } // Channel offset limitsGroups << new LimitsGroup(firmware, gridLayout, i+1, col++, model.limitData[i].offset, -1000, 1000, 0); // Channel min limitsGroups << new LimitsGroup(firmware, gridLayout, i+1, col++, model.limitData[i].min, -model.getChannelsMax()*10, 0, -1000); // Channel max limitsGroups << new LimitsGroup(firmware, gridLayout, i+1, col++, model.limitData[i].max, 0, model.getChannelsMax()*10, 1000); // Channel inversion QComboBox * invCB = new QComboBox(this); invCB->insertItems(0, QStringList() << tr("---") << tr("INV")); invCB->setProperty("index", i); invCB->setCurrentIndex((model.limitData[i].revert) ? 1 : 0); connect(invCB, SIGNAL(currentIndexChanged(int)), this, SLOT(invEdited())); gridLayout->addWidget(invCB, i+1, col++, 1, 1); // Curve if (IS_TARANIS(GetEepromInterface()->getBoard())) { QComboBox * curveCB = new QComboBox(this); curveCB->setProperty("index", i); int numcurves = firmware->getCapability(NumCurves); for (int j=-numcurves; j<=numcurves; j++) { curveCB->addItem(CurveReference(CurveReference::CURVE_REF_CUSTOM, j).toString(), j); } curveCB->setCurrentIndex(model.limitData[i].curve.value+numcurves); connect(curveCB, SIGNAL(currentIndexChanged(int)), this, SLOT(curveEdited())); gridLayout->addWidget(curveCB, i+1, col++, 1, 1); } // PPM center if (firmware->getCapability(PPMCenter)) { QSpinBox * center = new QSpinBox(this); center->setProperty("index", i); center->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); center->setSuffix("us"); center->setMinimum(1375); center->setMaximum(1625); center->setValue(1500); center->setValue(model.limitData[i].ppmCenter + 1500); connect(center, SIGNAL(editingFinished()), this, SLOT(ppmcenterEdited())); gridLayout->addWidget(center, i+1, col++, 1, 1); } // Symetrical limits if (firmware->getCapability(SYMLimits)) { QCheckBox * symlimits = new QCheckBox(this); symlimits->setProperty("index", i); symlimits->setChecked(model.limitData[i].symetrical); connect(symlimits, SIGNAL(toggled(bool)), this, SLOT(symlimitsEdited())); gridLayout->addWidget(symlimits, i+1, col++, 1, 1); } }
t_Open9xArmMixData_v210::operator MixData () { MixData c9x; if (srcRaw) { c9x.destCh = destCh+1; if (srcRaw == 0) { c9x.srcRaw = RawSource(SOURCE_TYPE_NONE); } else if (srcRaw <= 7) { c9x.srcRaw = RawSource(SOURCE_TYPE_STICK, srcRaw-1); } else if (srcRaw <= 11) { c9x.srcRaw = RawSource(SOURCE_TYPE_TRIM, srcRaw-8); } else if (srcRaw == 12) { c9x.srcRaw = RawSource(SOURCE_TYPE_MAX); } else if (srcRaw == 13) { c9x.srcRaw = RawSource(SOURCE_TYPE_SWITCH, 0); } else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW) { c9x.srcRaw = RawSource(SOURCE_TYPE_SWITCH, srcRaw-13); } else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC) { c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-14-9-O9X_ARM_NUM_CSW); } else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC+8) { c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC); } else { c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC-8); } c9x.weight = weight; if (differential) { c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2); } else { // TODO c9x.curve = curve; } c9x.swtch = open9xArmToSwitch(swtch); c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; c9x.speedDown = speedDown; c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; if (phase<0) { c9x.phases= 1 << (-phase -1); } else if (phase==0) { c9x.phases=0; } else { c9x.phases=511; c9x.phases &= ~(1 << (phase -1)); } c9x.sOffset = sOffset; getEEPROMZString(c9x.name, name, sizeof(name)); } return c9x; }
t_Open9xArmMixData_v208::operator MixData () { MixData c9x; if (srcRaw) { c9x.destCh = destCh+1; if (srcRaw == 0) { c9x.srcRaw = RawSource(SOURCE_TYPE_NONE); } else if (srcRaw <= 7) { c9x.srcRaw = RawSource(SOURCE_TYPE_STICK, srcRaw-1); } else if (srcRaw == 8) { c9x.srcRaw = RawSource(SOURCE_TYPE_MAX); } else if (srcRaw == 9) { c9x.srcRaw = RawSource(SOURCE_TYPE_SWITCH, 0); } else if (srcRaw <= 9+9+32) { c9x.srcRaw = RawSource(SOURCE_TYPE_SWITCH, srcRaw-9); } else if (srcRaw <= 9+9+32+NUM_CYC) { c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-10-9-32); } else if (srcRaw <= 9+9+32+NUM_CYC+8) { c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-10-9-32-NUM_CYC); } else { c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-10-9-32-NUM_CYC-8); } c9x.weight = weight; c9x.swtch = open9xArmToSwitch(swtch); if (differential) { c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2); } else { // TODO c9x.curve = curve; } c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; c9x.speedDown = speedDown; c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; if (phase<0) { c9x.flightModes= 1 << (-phase -1); } else if (phase==0) { c9x.flightModes=0; } else { c9x.flightModes=511; c9x.flightModes &= ~(1 << (phase -1)); } c9x.sOffset = sOffset; } return c9x; }
t_Open9xMixData_v205::operator MixData () { MixData c9x; if (srcRaw) { c9x.destCh = destCh+1; c9x.swtch = open9xStockToSwitch(swtch); if (srcRaw == 0) { c9x.srcRaw = RawSource(SOURCE_TYPE_NONE); } else if (srcRaw <= 7) { c9x.srcRaw = RawSource(SOURCE_TYPE_STICK, srcRaw-1); } else if (srcRaw == 8) { c9x.srcRaw = RawSource(SOURCE_TYPE_MAX); } else if (srcRaw == 9) { c9x.srcRaw = RawSource(SOURCE_TYPE_SWITCH, 0); } else if (srcRaw <= 30) { c9x.srcRaw = RawSource(SOURCE_TYPE_SWITCH, srcRaw-9); } else if (srcRaw <= 33) { c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-31); } else if (srcRaw <= 41) { c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-34); } else { c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-42); } c9x.weight = weight; if (differential) { c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2); } else { // TODO c9x.curve = curve; } c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; c9x.speedDown = speedDown; c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; if (phase<0) { c9x.phases= 1 << (-phase -1); } else if (phase==0) { c9x.phases=0; } else { c9x.phases=63; c9x.phases &= ~(1 << (phase -1)); } c9x.sOffset = sOffset; } return c9x; }