diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 375b4e7ff..0c8f7e70b 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -126,16 +126,16 @@ SET( companion9x_SRCS ${ER9X_CHECKOUT_DIRECTORY}/er9xsimulator.cpp firmwares/gruvin9x/gruvin9xeeprom.cpp firmwares/gruvin9x/gruvin9xinterface.cpp - firmwares/opentx/open9xeeprom.cpp + firmwares/opentx/opentxeeprom.cpp firmwares/opentx/open9xStockeeprom.cpp - firmwares/opentx/open9xinterface.cpp firmwares/opentx/open9xGruvin9xeeprom.cpp firmwares/opentx/open9xSky9xeeprom.cpp + firmwares/opentx/opentxinterface.cpp firmwares/opentx/opentxTaranisSimulator.cpp - firmwares/opentx/open9xSky9xsimulator.cpp - firmwares/opentx/open9xGruvin9xsimulator.cpp - firmwares/opentx/open9xM128simulator.cpp - firmwares/opentx/open9xsimulator.cpp + firmwares/opentx/opentxSky9xsimulator.cpp + firmwares/opentx/opentxGruvin9xsimulator.cpp + firmwares/opentx/opentxM128simulator.cpp + firmwares/opentx/opentxsimulator.cpp firmwares/ersky9x/ersky9xeeprom.cpp firmwares/ersky9x/ersky9xinterface.cpp ${ERSKY9X_CHECKOUT_DIRECTORY}/ersky9xsimulator.cpp diff --git a/companion/src/comparedialog.cpp b/companion/src/comparedialog.cpp index f5dd1216a..48ed3f9f5 100644 --- a/companion/src/comparedialog.cpp +++ b/companion/src/comparedialog.cpp @@ -649,7 +649,8 @@ void compareDialog::printExpos() }; str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight)).rightJustified(6, ' '); - str += " " + tr("Expo") + QString("%1").arg(getGVarString(ed->expo)).rightJustified(7, ' '); + str += ed->curve.toString().replace("<", "<").replace(">", ">"); + if (GetEepromInterface()->getCapability(FlightPhases)) { if(ed->phases) { if (ed->phases!=(unsigned int)(1<getCapability(FlightPhases))-1) { @@ -681,16 +682,14 @@ void compareDialog::printExpos() mask <<=1; } str += QString(")"); - } else { + } + else { str += tr("DISABLED")+QString(" !!!"); } } } if (ed->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(ed->swtch.toString()); - if (ed->curveMode) - if (ed->curveParam) - str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(ed->curveParam).replace("<", "<").replace(">", ">")); str += ""; } } @@ -728,7 +727,8 @@ void compareDialog::printExpos() } str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight)).rightJustified(6, ' '); - str += " " + tr("Expo") + QString("%1").arg(getGVarString(ed->expo)).rightJustified(7, ' '); + str += ed->curve.toString().replace("<", "<").replace(">", ">"); + if (GetEepromInterface()->getCapability(FlightPhases)) { if(ed->phases) { if (ed->phases!=(unsigned int)(1<getCapability(FlightPhases))-1) { @@ -767,9 +767,7 @@ void compareDialog::printExpos() } if (ed->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(ed->swtch.toString()); - if (ed->curveMode) - if (ed->curveParam) - str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(ed->curveParam).replace("<", "<").replace(">", ">")); + str += ""; } } @@ -824,13 +822,8 @@ void compareDialog::printMixers() str += md->srcRaw.toString(); if (md->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(md->swtch.toString()); if (md->carryTrim) str += " " + tr("noTrim"); - if(GetEepromInterface()->getCapability(MixFmTrim) && md->enableFmTrim==1){ - if (md->sOffset) str += " "+ tr("FMTrim") + QString(" (%1%)").arg(md->sOffset); - } else { - if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset)); - } - if (md->differential) str += " "+ tr("Diff") + QString(" (%1%)").arg(getGVarString(md->differential)); - if (md->curve) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curve).replace("<", "<").replace(">", ">")); + if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset)); + str += md->curve.toString().replace("<", "<").replace(">", ">"); 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->mixWarn) str += " "+tr("Warn")+QString("(%1)").arg(md->mixWarn); @@ -907,13 +900,9 @@ void compareDialog::printMixers() str += md->srcRaw.toString(); if (md->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(md->swtch.toString()); if (md->carryTrim) str += " " + tr("noTrim"); - if(GetEepromInterface()->getCapability(MixFmTrim) && md->enableFmTrim==1){ - if (md->sOffset) str += " "+ tr("FMTrim") + QString(" (%1%)").arg(getGVarString(md->sOffset)); - } else { - if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset)); - } - if (md->differential) str += " "+ tr("Diff") + QString(" (%1%)").arg(getGVarString(md->differential)); - if (md->curve) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curve).replace("<", "<").replace(">", ">")); + if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset)); + // TODO if (md->differential) str += " "+ tr("Diff") + QString(" (%1%)").arg(getGVarString(md->differential)); + // TODO if (md->curve) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curve).replace("<", "<").replace(">", ">")); 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->mixWarn) str += " "+tr("Warn")+QString("(%1)").arg(md->mixWarn); diff --git a/companion/src/eepromimportexport.h b/companion/src/eepromimportexport.h index 370287851..1f5c701f5 100644 --- a/companion/src/eepromimportexport.h +++ b/companion/src/eepromimportexport.h @@ -74,7 +74,10 @@ class DataField { QByteArray bytes = bitsToBytes(bits); int result = (offset+bits.count()) % 8; for (int i=0; iDump(level+1, offset); } diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index 206804e1c..28a7d813b 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -4,9 +4,10 @@ #include "firmwares/er9x/er9xinterface.h" #include "firmwares/th9x/th9xinterface.h" #include "firmwares/gruvin9x/gruvin9xinterface.h" -#include "firmwares/opentx/open9xinterface.h" +#include "firmwares/opentx/opentxinterface.h" #include "firmwares/ersky9x/ersky9xinterface.h" #include "qsettings.h" +#include "helpers.h" QString EEPROMWarnings; @@ -408,6 +409,25 @@ QString RawSwitch::toString() return QObject::tr("----"); } +QString CurveReference::toString() +{ + if (value == 0) { + return ""; + } + else { + switch(type) { + case CURVE_REF_DIFF: + return QObject::tr("Diff(%1%%)").arg(getGVarString(value)); + case CURVE_REF_EXPO: + return QObject::tr("Expo(%1%%)").arg(getGVarString(value)); + case CURVE_REF_FUNC: + return QObject::tr("Function(%1)").arg(QString("x>0" "x<0" "|x|" "f>0" "f<0" "|f|").mid(3*(value-1), 3)); + default: + return QString(value > 0 ? QObject::tr("Curve(%1)") : QObject::tr("!Curve(%1)")).arg(abs(value)); + } + } +} + GeneralSettings::GeneralSettings() { memset(this, 0, sizeof(GeneralSettings)); @@ -579,12 +599,8 @@ void ModelData::clear() expoData[i].clear(); for (int i=0; igetCapability(CustomCurves); for (int i=0; i=8) - curves[i].clear(9); - else - curves[i].clear(5); + curves[i].clear(5); } swashRingData.clear(); @@ -628,13 +644,13 @@ ModelData ModelData::removeGlobalVars() for (int i=0; i t LIMIT(t mi, t x, t ma) { return std::min(std::max(mi, x), ma enum BoardEnum { BOARD_STOCK, BOARD_M128, + BOARD_MEGA2560, BOARD_GRUVIN9X, BOARD_SKY9X, BOARD_TARANIS, BOARD_TARANIS_REV4a }; + #define IS_STOCK(board) (board==BOARD_STOCK || board==BOARD_M128) +#define IS_2560(board) (board==BOARD_GRUVIN9X || board==BOARD_MEGA2560) #define IS_ARM(board) (board==BOARD_SKY9X || board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a) #define IS_TARANIS(board) (board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a) @@ -470,17 +473,44 @@ class GeneralSettings { unsigned int switchUnlockStates; }; +class CurveReference { + public: + enum CurveRefType { + CURVE_REF_DIFF, + CURVE_REF_EXPO, + CURVE_REF_FUNC, + CURVE_REF_CUSTOM + }; + + CurveReference() { clear(); } + + CurveReference(CurveRefType type, int value): + type(type), + value(value) + { + } + + void clear() { memset(this, 0, sizeof(CurveReference)); } + + CurveRefType type; + int value; + + QString toString(); +}; + class ExpoData { public: ExpoData() { clear(); } + RawSource srcRaw; + unsigned int scale; unsigned int mode; // 0=end, 1=pos, 2=neg, 3=both unsigned int chn; RawSwitch swtch; unsigned int phases; // -5=!FP4, 0=normal, 5=FP4 int weight; - int expo; - unsigned int curveMode; - int curveParam; + int offset; + CurveReference curve; + int carryTrim; char name[10+1]; void clear() { memset(this, 0, sizeof(ExpoData)); } }; @@ -493,11 +523,19 @@ class CurvePoint { class CurveData { public: + enum CurveType { + CURVE_TYPE_STANDARD, + CURVE_TYPE_CUSTOM, + CURVE_TYPE_LAST = CURVE_TYPE_CUSTOM + }; + CurveData() { clear(5); } - bool custom; // 0=end, 1=pos, 2=neg, 3=both - uint8_t count; + + CurveType type; + bool smooth; + int count; CurvePoint points[C9X_MAX_POINTS]; - char name[6+1]; + char name[6+1]; void clear(int count) { memset(this, 0, sizeof(CurveData)); this->count = count; } }; @@ -511,6 +549,7 @@ class LimitData { int ppmCenter; bool symetrical; char name[6+1]; + CurveReference curve; void clear() { memset(this, 0, sizeof(LimitData)); min = -100; max = +100; } }; @@ -520,7 +559,6 @@ enum MltpxValue { MLTPX_REP=2 }; - class MixData { public: MixData() { clear(); } @@ -528,9 +566,8 @@ class MixData { RawSource srcRaw; unsigned int srcVariant; int weight; - int differential; RawSwitch swtch; - int curve; //0=symmetrisch + CurveReference curve; //0=symmetrisch unsigned int delayUp; unsigned int delayDown; unsigned int speedUp; // Servogeschwindigkeit aus Tabelle (10ms Cycle) @@ -539,7 +576,6 @@ class MixData { bool noExpo; MltpxValue mltpx; // multiplex method 0=+ 1=* 2=replace unsigned int mixWarn; // mixer warning - unsigned int enableFmTrim; unsigned int phases; // -5=!FP4, 0=normal, 5=FP4 unsigned int lateOffset; int sOffset; @@ -621,7 +657,7 @@ class PhaseData { unsigned int fadeIn; unsigned int fadeOut; int rotaryEncoders[2]; - int gvars[5]; + int gvars[C9X_MAX_GVARS]; void clear() { memset(this, 0, sizeof(PhaseData)); for (int i=0; i -int8_t er9xFromSwitch(const RawSwitch & sw) -{ - switch (sw.type) { - case SWITCH_TYPE_SWITCH: - return sw.index; - case SWITCH_TYPE_VIRTUAL: - return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index); - case SWITCH_TYPE_ON: - return 22; - case SWITCH_TYPE_OFF: - return -22; - case SWITCH_TYPE_MOMENT_SWITCH: - return sw.index > 0 ? (22 + sw.index) : (-22 + sw.index); - case SWITCH_TYPE_MOMENT_VIRTUAL: - return sw.index > 0 ? (31 + sw.index) : (-31 + sw.index); - default: - return 0; - } -} - RawSwitch er9xToSwitch(int8_t sw) { uint8_t swa = abs(sw); @@ -47,15 +27,6 @@ t_Er9xTrainerMix::t_Er9xTrainerMix() memset(this, 0, sizeof(t_Er9xTrainerMix)); } -t_Er9xTrainerMix::t_Er9xTrainerMix(TrainerMix &c9x) -{ - memset(this, 0, sizeof(t_Er9xTrainerMix)); - srcChn = c9x.src; - swtch = er9xFromSwitch(c9x.swtch); - studWeight = (8 * c9x.weight) / 25; - mode = c9x.mode; -} - t_Er9xTrainerMix::operator TrainerMix() { TrainerMix c9x; @@ -71,15 +42,6 @@ t_Er9xTrainerData::t_Er9xTrainerData() memset(this, 0, sizeof(t_Er9xTrainerData)); } -t_Er9xTrainerData::t_Er9xTrainerData(TrainerData &c9x) -{ - memset(this, 0, sizeof(t_Er9xTrainerData)); - for (int i=0; i125) { - if (c9x.weight>0) { - int index=abs(c9x.weight)-10000; - int gvar=125+index; - if (gvar>127) { - gvar-=256; - } - weight = gvar; - } else { - EEPROMWarnings += ::QObject::tr("er9x doesn't have negative gvars as weight") + "\n"; - weight=0; - } - } else { - weight = c9x.weight; - } - - if (abs(c9x.sOffset)>125) { - if (c9x.sOffset>0) { - int index=abs(c9x.sOffset)-10000; - int gvar=125+index; - if (gvar>127) { - gvar-=256; - } - sOffset = gvar; - } else { - EEPROMWarnings += ::QObject::tr("er9x doesn't have negative gvars as offset") + "\n"; - sOffset=0; - } - } else { - sOffset = c9x.sOffset; - } - - if (c9x.curve!=0) { - curve = c9x.curve; - differential=0; - } else { - if (c9x.differential!=0) { - curve=c9x.differential; - differential=1; - } else { - curve=0; - differential=0; - } - } - lateOffset=c9x.lateOffset; - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - if (c9x.carryTrim<0) { - EEPROMWarnings += ::QObject::tr("er9x doesn't have swappable trims") + "\n"; - carryTrim=1; - } else { - carryTrim = c9x.carryTrim; - } - mltpx = (MltpxValue)c9x.mltpx; - mixWarn = c9x.mixWarn; - enableFmTrim=c9x.enableFmTrim; - -} - t_Er9xMixData::operator MixData () { MixData c9x; @@ -432,13 +215,20 @@ t_Er9xMixData::operator MixData () else { c9x.srcRaw = RawSource(SOURCE_TYPE_GVAR, srcRaw-38); } + if (differential==1) { - c9x.differential=curve; - c9x.curve=0; - } else { - c9x.differential=0; - c9x.curve=curve; + c9x.curve.type = CurveReference::CURVE_REF_DIFF; + c9x.curve.value = differential; } + else if (curve > 6) { + c9x.curve.type = CurveReference::CURVE_REF_CUSTOM; + c9x.curve.value = curve - 6; + } + else if (curve > 0) { + c9x.curve.type = CurveReference::CURVE_REF_FUNC; + c9x.curve.value = curve; + } + c9x.lateOffset=lateOffset; c9x.delayUp = delayUp; c9x.delayDown = delayDown; @@ -447,32 +237,10 @@ t_Er9xMixData::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; - c9x.enableFmTrim=enableFmTrim; + // c9x.enableFmTrim=enableFmTrim; return c9x; } -int8_t er9xFromSource(RawSource source) -{ - int v1 = 0; - if (source.type == SOURCE_TYPE_STICK) - v1 = 1+source.index; - else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("er9x on this board doesn't have Rotary Encoders") + "\n"; - v1 = 5+source.index; - } - else if (source.type == SOURCE_TYPE_MAX) - v1 = 8; - else if (source.type == SOURCE_TYPE_CYC) - v1 = 10+source.index; - else if (source.type == SOURCE_TYPE_PPM) - v1 = 13+source.index; - else if (source.type == SOURCE_TYPE_CH) - v1 = 21+source.index; - else if (source.type == SOURCE_TYPE_TELEMETRY) - v1 = 36+source.index; - return v1; -} - RawSource er9xToSource(int8_t value) { if (value == 0) { @@ -501,33 +269,6 @@ RawSource er9xToSource(int8_t value) } } -t_Er9xCustomSwData::t_Er9xCustomSwData(CustomSwData &c9x) -{ - func = c9x.func; - v1 = c9x.val1; - v2 = c9x.val2; - - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - v1 = er9xFromSource(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL) { - v2 = er9xFromSource(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - v1 = er9xFromSwitch(RawSwitch(c9x.val1)); - v2 = er9xFromSwitch(RawSwitch(c9x.val2)); - } - - if (func>ER9X_MAX_CSFUNC ) { - EEPROMWarnings += ::QObject::tr("er9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n"; - func=0; - v1=0; - v2=0; - } -} - Er9xCustomSwData::operator CustomSwData () { CustomSwData c9x; @@ -557,13 +298,6 @@ t_Er9xSafetySwData::t_Er9xSafetySwData() memset(this, 0, sizeof(t_Er9xSafetySwData)); } -t_Er9xSafetySwData::t_Er9xSafetySwData(SafetySwData &c9x) -{ - memset(this, 0, sizeof(t_Er9xSafetySwData)); - swtch = er9xFromSwitch(c9x.swtch); - val = c9x.val; -} - t_Er9xSafetySwData::operator SafetySwData () { SafetySwData c9x; @@ -572,35 +306,11 @@ t_Er9xSafetySwData::operator SafetySwData () return c9x; } - t_Er9xFrSkyChannelData::t_Er9xFrSkyChannelData() { memset(this, 0, sizeof(t_Er9xFrSkyChannelData)); } -t_Er9xFrSkyChannelData::t_Er9xFrSkyChannelData(FrSkyChannelData &c9x) -{ - memset(this, 0, sizeof(t_Er9xFrSkyChannelData)); - ratio = c9x.ratio; - alarms_value[0] = c9x.alarms[0].value; - alarms_value[1] = c9x.alarms[1].value; - alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level; - alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater; - if (c9x.type==0) { - if (c9x.multiplier==0) { - type = 0; - } else if (c9x.multiplier==1) { - type = 2; - } else { - EEPROMWarnings += ::QObject::tr("er9x does not support this range for A1/A2") + "\n"; - } - } else if (c9x.type==1 || c9x.type==3) { - type=c9x.type; - } else { - EEPROMWarnings += ::QObject::tr("er9x does not support this telemetry units") + "\n"; - } -} - t_Er9xFrSkyChannelData::operator FrSkyChannelData () { FrSkyChannelData c9x; @@ -620,19 +330,11 @@ t_Er9xFrSkyChannelData::operator FrSkyChannelData () return c9x; } - t_Er9xFrSkyData::t_Er9xFrSkyData() { memset(this, 0, sizeof(t_Er9xFrSkyData)); } -t_Er9xFrSkyData::t_Er9xFrSkyData(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Er9xFrSkyData)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; -} - t_Er9xFrSkyData::operator FrSkyData () { FrSkyData c9x; @@ -641,24 +343,6 @@ t_Er9xFrSkyData::operator FrSkyData () return c9x; } -int setEr9xTimerMode(TimerMode mode) -{ - if (mode == TMRMODE_OFF || mode == TMRMODE_ABS) - return mode; - else if (mode == TMRMODE_THs || mode == TMRMODE_THp) - return mode + 4; - else if (mode >= TMRMODE_FIRST_MOMENT_SWITCH) - return 37+mode-TMRMODE_FIRST_MOMENT_SWITCH; - else if (mode >= TMRMODE_FIRST_SWITCH) - return 16+mode-TMRMODE_FIRST_SWITCH; - else if (mode <= TMRMODE_FIRST_NEG_MOMENT_SWITCH) - return -37+mode-TMRMODE_FIRST_NEG_MOMENT_SWITCH; - else if (mode <= TMRMODE_FIRST_NEG_SWITCH) - return -16+mode-TMRMODE_FIRST_NEG_SWITCH; - else - return 0; -} - TimerMode getEr9xTimerMode(int mode) { if (mode <= -33) @@ -673,162 +357,6 @@ TimerMode getEr9xTimerMode(int mode) return TimerMode(TMRMODE_FIRST_MOMENT_SWITCH+(mode-16-21)); } -t_Er9xModelData::t_Er9xModelData(ModelData &c9x) -{ - memset(this, 0, sizeof(t_Er9xModelData)); - - if (c9x.used) { - setEEPROMString(name, c9x.name, sizeof(name)); - modelVoice=c9x.modelVoice; - tmrMode = setEr9xTimerMode(c9x.timers[0].mode); - tmrModeB = c9x.timers[0].modeB; - tmrDir = c9x.timers[0].dir; - tmrVal = c9x.timers[0].val; - switch(c9x.moduleData[0].protocol) { - case PPM: - protocol = 0; - break; - case PXX_DJT: - protocol = 1; - break; - case DSM2: - protocol = 2; - break; - case PPM16: - protocol = 3; - break; - default: - protocol = 0; - EEPROMWarnings += QObject::tr("Er9x doesn't accept this protocol") + "\n"; - // TODO more explicit warning for each protocol - break; - } - traineron = c9x.traineron; - t2throttle = c9x.t2throttle; - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - ppmNCH = (c9x.moduleData[0].channelsCount - 8) / 2; - thrTrim = c9x.thrTrim; - thrExpo = c9x.thrExpo; - trimInc = c9x.trimInc; - ppmDelay = (c9x.moduleData[0].ppmDelay - 300) / 50; - for (unsigned int i=0; iEeFsCreate(eeprom, getEEpromSize(), BOARD_STOCK); - - Er9xGeneral er9xGeneral(radioData.generalSettings); - int sz = efile->writeRlc1(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&er9xGeneral, sizeof(Er9xGeneral)); - if(sz != sizeof(Er9xGeneral)) { - return 0; - } - - for (int i=0; iwriteRlc1(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&er9xModel, sizeof(Er9xModelData)); - if(sz != sizeof(Er9xModelData)) { - return 0; - } - } - } - - return getEEpromSize(); + return 0; } int Er9xInterface::getSize(ModelData &model) { - if (model.isempty()) - return 0; - - uint8_t tmp[2*EESIZE_STOCK]; - efile->EeFsCreate(tmp, getEEpromSize(), BOARD_STOCK); - - Er9xModelData er9xModel(model); - int sz = efile->writeRlc1(0, FILE_TYP_MODEL, (uint8_t*)&er9xModel, sizeof(Er9xModelData)); - if(sz != sizeof(Er9xModelData)) { - return -1; - } - return efile->size(0); + return 0; } int Er9xInterface::getSize(GeneralSettings &settings) { - uint8_t tmp[2*EESIZE_STOCK]; - efile->EeFsCreate(tmp, getEEpromSize(), BOARD_STOCK); - - Er9xGeneral er9xGeneral(settings); - int sz = efile->writeRlc1(0, FILE_TYP_GENERAL, (uint8_t*)&er9xGeneral, sizeof(Er9xGeneral)); - if(sz != sizeof(Er9xGeneral)) { - return -1; - } - return efile->size(0); + return 0; } int Er9xInterface::getCapability(const Capability capability) @@ -244,12 +207,6 @@ int Er9xInterface::getCapability(const Capability capability) return 4; case Mixes: return ER9X_MAX_MIXERS; - case NumCurves5: - return ER9X_MAX_CURVE5; - case NumCurves9: - return ER9X_MAX_CURVE5; - case MixFmTrim: - return 1; case PPMExtCtrl: return 1; case ModelTrainerEnable: @@ -324,8 +281,6 @@ int Er9xInterface::getCapability(const Capability capability) case HasVolume: case HasBlInvert: case ModelVoice: - case DiffMixers: - case HasNegCurves: case HasFixOffset: return 1; case Gvars: diff --git a/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp b/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp index 231e06af7..1247c795a 100644 --- a/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp +++ b/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp @@ -3,19 +3,8 @@ #include "ersky9xeeprom.h" #include -extern int8_t er9xFromSwitch(const RawSwitch & sw); extern RawSwitch er9xToSwitch(int8_t sw); -int setErSky9xTimerMode(TimerMode mode) -{ - if (mode == TMRMODE_OFF || mode == TMRMODE_ABS || mode == TMRMODE_THs || mode == TMRMODE_THp) - return mode; - else if (mode >= TMRMODE_FIRST_CHPERC) - return 4+mode-TMRMODE_FIRST_CHPERC; - else - return 0; -} - TimerMode getErSky9xTimerMode(int mode) { if (mode<4) @@ -26,26 +15,6 @@ TimerMode getErSky9xTimerMode(int mode) return TimerMode(0); } -int8_t ersky9xFromSwitch(const RawSwitch & sw) -{ - switch (sw.type) { - case SWITCH_TYPE_SWITCH: - return sw.index; - case SWITCH_TYPE_VIRTUAL: - return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index); - case SWITCH_TYPE_ON: - return 34; - case SWITCH_TYPE_OFF: - return -34; - case SWITCH_TYPE_MOMENT_SWITCH: - return sw.index > 0 ? (34 + sw.index) : (-34 + sw.index); - case SWITCH_TYPE_MOMENT_VIRTUAL: - return sw.index > 0 ? (31 + sw.index) : (-31 + sw.index); - default: - return 0; - } -} - RawSwitch ersky9xToSwitch(int8_t sw) { uint8_t swa = abs(sw); @@ -65,21 +34,11 @@ RawSwitch ersky9xToSwitch(int8_t sw) return RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, sw > 0 ? sw-34-9 : sw+34+9); } - t_Ersky9xTrainerMix::t_Ersky9xTrainerMix() { memset(this, 0, sizeof(t_Ersky9xTrainerMix)); } -t_Ersky9xTrainerMix::t_Ersky9xTrainerMix(TrainerMix &c9x) -{ - memset(this, 0, sizeof(t_Ersky9xTrainerMix)); - srcChn = c9x.src; - swtch = er9xFromSwitch(c9x.swtch); - studWeight = (8 * c9x.weight) / 25; - mode = c9x.mode; -} - t_Ersky9xTrainerMix::operator TrainerMix() { TrainerMix c9x; @@ -95,15 +54,6 @@ t_Ersky9xTrainerData::t_Ersky9xTrainerData() memset(this, 0, sizeof(t_Ersky9xTrainerData)); } -t_Ersky9xTrainerData::t_Ersky9xTrainerData(TrainerData &c9x) -{ - memset(this, 0, sizeof(t_Ersky9xTrainerData)); - for (int i=0; i 6) { + c9x.curve.type = CurveReference::CURVE_REF_CUSTOM; + c9x.curve.value = curve - 6; + } + else if (curve > 0) { + c9x.curve.type = CurveReference::CURVE_REF_FUNC; + c9x.curve.value = curve; + } + c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; @@ -396,7 +221,7 @@ t_Ersky9xMixData_v10::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; - c9x.enableFmTrim=enableFmTrim; + // c9x.enableFmTrim=enableFmTrim; c9x.sOffset = sOffset; return c9x; } @@ -407,67 +232,6 @@ t_Ersky9xMixData_v11::t_Ersky9xMixData_v11() memset(this, 0, sizeof(t_Ersky9xMixData_v11)); } -t_Ersky9xMixData_v11::t_Ersky9xMixData_v11(MixData &c9x) -{ - memset(this, 0, sizeof(t_Ersky9xMixData_v11)); - destCh = c9x.destCh; - swtch = ersky9xFromSwitch(c9x.swtch); - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("ersky9x doesn't have Rotary Encoders") + "\n"; - srcRaw = 5 + c9x.srcRaw.index; // use pots instead - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 8; // MAX - } - /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) { - srcRaw = 45; - } */ - else if (c9x.srcRaw.type == SOURCE_TYPE_GVAR) { - srcRaw = 46+c9x.srcRaw.index; // MAX - } - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 9; // FULL - swtch = ersky9xFromSwitch(RawSwitch(c9x.srcRaw.index)); - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 10 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 13 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 21 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) { - EEPROMWarnings += ::QObject::tr("ersky9x doesn't have trims as source") + "\n"; - srcRaw = 0; // use pots instead - } - - weight = c9x.weight; - curve = c9x.curve; - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - if (c9x.carryTrim<0) { - EEPROMWarnings += ::QObject::tr("er9x doesn't have swappable trims") + "\n"; - carryTrim=1; - } else { - carryTrim = c9x.carryTrim; - } - mltpx = (MltpxValue)c9x.mltpx; - mixWarn = c9x.mixWarn; - enableFmTrim=c9x.enableFmTrim; - sOffset = c9x.sOffset; -} - t_Ersky9xMixData_v11::operator MixData () { MixData c9x; @@ -514,7 +278,15 @@ t_Ersky9xMixData_v11::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-21); } - c9x.curve = curve; + if (curve > 6) { + c9x.curve.type = CurveReference::CURVE_REF_CUSTOM; + c9x.curve.value = curve - 6; + } + else if (curve > 0) { + c9x.curve.type = CurveReference::CURVE_REF_FUNC; + c9x.curve.value = curve; + } + c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; @@ -522,60 +294,11 @@ t_Ersky9xMixData_v11::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; - c9x.enableFmTrim=enableFmTrim; + // c9x.enableFmTrim=enableFmTrim; c9x.sOffset = sOffset; return c9x; } -int8_t ersky9xFromSource_v10(RawSource source) -{ - int v1 = 0; - if (source.type == SOURCE_TYPE_STICK) - v1 = 1+source.index; - else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("er9x on this board doesn't have Rotary Encoders") + "\n"; - v1 = 5+source.index; - } - else if (source.type == SOURCE_TYPE_MAX) - v1 = 8; - /* else if (source.type == SOURCE_TYPE_3POS) - v1 = 0; */ - else if (source.type == SOURCE_TYPE_CYC) - v1 = 10+source.index; - else if (source.type == SOURCE_TYPE_PPM) - v1 = 13+source.index; - else if (source.type == SOURCE_TYPE_CH) - v1 = 21+source.index; - else if (source.type == SOURCE_TYPE_TELEMETRY) - v1 = 36+source.index; - return v1; -} - -int8_t ersky9xFromSource_v11(RawSource source) -{ - int v1 = 0; - if (source.type == SOURCE_TYPE_STICK) - v1 = 1+source.index; - else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("er9x on this board doesn't have Rotary Encoders") + "\n"; - v1 = 5+source.index; - } - else if (source.type == SOURCE_TYPE_MAX) - v1 = 8; - /* else if (source.type == SOURCE_TYPE_3POS) - v1 = 0; */ - else if (source.type == SOURCE_TYPE_CYC) - v1 = 10+source.index; - else if (source.type == SOURCE_TYPE_PPM) - v1 = 13+source.index; - else if (source.type == SOURCE_TYPE_CH) - v1 = 21+source.index; - else if (source.type == SOURCE_TYPE_TELEMETRY) - v1 = 36+source.index; - return v1; -} - - RawSource ersky9xToSource_v10(int8_t value) { if (value == 0) { @@ -632,33 +355,6 @@ RawSource ersky9xToSource_v11(int8_t value) } } -t_Ersky9xCustomSwData_v10::t_Ersky9xCustomSwData_v10(CustomSwData &c9x) -{ - func = c9x.func; - v1 = c9x.val1; - v2 = c9x.val2; - - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - v1 = ersky9xFromSource_v10(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL) { - v2 = ersky9xFromSource_v10(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - v1 = er9xFromSwitch(RawSwitch(c9x.val1)); - v2 = er9xFromSwitch(RawSwitch(c9x.val2)); - } - - if (func>ERSKY9X_MAX_CSFUNC ) { - EEPROMWarnings += ::QObject::tr("ersky9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n"; - func=0; - v1=0; - v2=0; - } -} - Ersky9xCustomSwData_v10::operator CustomSwData () { CustomSwData c9x; @@ -682,33 +378,6 @@ Ersky9xCustomSwData_v10::operator CustomSwData () return c9x; } -t_Ersky9xCustomSwData_v11::t_Ersky9xCustomSwData_v11(CustomSwData &c9x) -{ - func = c9x.func; - v1 = c9x.val1; - v2 = c9x.val2; - - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - v1 = ersky9xFromSource_v11(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL) { - v2 = ersky9xFromSource_v11(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - v1 = er9xFromSwitch(RawSwitch(c9x.val1)); - v2 = er9xFromSwitch(RawSwitch(c9x.val2)); - } - - if (func>ERSKY9X_MAX_CSFUNC ) { - EEPROMWarnings += ::QObject::tr("ersky9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n"; - func=0; - v1=0; - v2=0; - } -} - Ersky9xCustomSwData_v11::operator CustomSwData () { CustomSwData c9x; @@ -737,13 +406,6 @@ t_Ersky9xSafetySwData_v10::t_Ersky9xSafetySwData_v10() memset(this, 0, sizeof(t_Ersky9xSafetySwData_v10)); } -t_Ersky9xSafetySwData_v10::t_Ersky9xSafetySwData_v10(SafetySwData &c9x) -{ - memset(this, 0, sizeof(t_Ersky9xSafetySwData_v10)); - swtch = er9xFromSwitch(c9x.swtch); - val = c9x.val; -} - t_Ersky9xSafetySwData_v10::operator SafetySwData () { SafetySwData c9x; @@ -757,13 +419,6 @@ t_Ersky9xSafetySwData_v11::t_Ersky9xSafetySwData_v11() memset(this, 0, sizeof(t_Ersky9xSafetySwData_v11)); } -t_Ersky9xSafetySwData_v11::t_Ersky9xSafetySwData_v11(SafetySwData &c9x) -{ - memset(this, 0, sizeof(t_Ersky9xSafetySwData_v11)); - opt.ss.swtch = ersky9xFromSwitch(c9x.swtch); - opt.ss.val = c9x.val; -} - t_Ersky9xSafetySwData_v11::operator SafetySwData () { SafetySwData c9x; @@ -777,29 +432,6 @@ t_Ersky9xFrSkyChannelData_v10::t_Ersky9xFrSkyChannelData_v10() memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v10)); } -t_Ersky9xFrSkyChannelData_v10::t_Ersky9xFrSkyChannelData_v10(FrSkyChannelData &c9x) -{ - memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v10)); - ratio = c9x.ratio; - alarms_value[0] = c9x.alarms[0].value; - alarms_value[1] = c9x.alarms[1].value; - alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level; - alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater; - if (c9x.type==0) { - if (c9x.multiplier==0) { - type = 0; - } else if (c9x.multiplier==1) { - type = 2; - } else { - EEPROMWarnings += ::QObject::tr("er9x does not support this range for A1/A2") + "\n"; - } - } else if (c9x.type==1 || c9x.type==3) { - type=c9x.type; - } else { - EEPROMWarnings += ::QObject::tr("er9x does not support this telemetry units") + "\n"; - } -} - t_Ersky9xFrSkyChannelData_v10::operator FrSkyChannelData () { FrSkyChannelData c9x; @@ -824,29 +456,6 @@ t_Ersky9xFrSkyChannelData_v11::t_Ersky9xFrSkyChannelData_v11() memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v11)); } -t_Ersky9xFrSkyChannelData_v11::t_Ersky9xFrSkyChannelData_v11(FrSkyChannelData &c9x) -{ - memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v11)); - ratio = c9x.ratio; - alarms_value[0] = c9x.alarms[0].value; - alarms_value[1] = c9x.alarms[1].value; - alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level; - alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater; - if (c9x.type==0) { - if (c9x.multiplier==0) { - type = 0; - } else if (c9x.multiplier==1) { - type = 2; - } else { - EEPROMWarnings += ::QObject::tr("er9x does not support this range for A1/A2") + "\n"; - } - } else if (c9x.type==1 || c9x.type==3) { - type=c9x.type; - } else { - EEPROMWarnings += ::QObject::tr("er9x does not support this telemetry units") + "\n"; - } -} - t_Ersky9xFrSkyChannelData_v11::operator FrSkyChannelData () { FrSkyChannelData c9x; @@ -871,13 +480,6 @@ t_Ersky9xFrSkyData_v10::t_Ersky9xFrSkyData_v10() memset(this, 0, sizeof(t_Ersky9xFrSkyData_v10)); } -t_Ersky9xFrSkyData_v10::t_Ersky9xFrSkyData_v10(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Ersky9xFrSkyData_v10)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; -} - t_Ersky9xFrSkyData_v10::operator FrSkyData () { FrSkyData c9x; @@ -891,13 +493,6 @@ t_Ersky9xFrSkyData_v11::t_Ersky9xFrSkyData_v11() memset(this, 0, sizeof(t_Ersky9xFrSkyData_v11)); } -t_Ersky9xFrSkyData_v11::t_Ersky9xFrSkyData_v11(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Ersky9xFrSkyData_v11)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; -} - t_Ersky9xFrSkyData_v11::operator FrSkyData () { FrSkyData c9x; @@ -906,168 +501,6 @@ t_Ersky9xFrSkyData_v11::operator FrSkyData () return c9x; } -t_Ersky9xModelData_v10::t_Ersky9xModelData_v10(ModelData &c9x) -{ - memset(this, 0, sizeof(t_Ersky9xModelData_v10)); - - if (c9x.used) { - setEEPROMString(name, c9x.name, sizeof(name)); - reserved_spare = 0; - spare21 = 0; - sparex = 0; - spare22 = 0; - for (int i=0; i<2; i++) { - timer[i].tmrModeA = setErSky9xTimerMode(c9x.timers[i].mode); - timer[i].tmrModeB = c9x.timers[i].modeB; - timer[i].tmrDir = c9x.timers[i].dir; - timer[i].tmrVal = c9x.timers[i].val; - } - switch(c9x.moduleData[0].protocol) { - case PPM: - protocol = 0; - break; - case PXX_DJT: - protocol = 1; - break; - case DSM2: - protocol = 2; - break; - case PPM16: - protocol = 3; - break; - default: - protocol = 0; - EEPROMWarnings += QObject::tr("Ersky9x doesn't accept this protocol") + "\n"; - // TODO more explicit warning for each protocol - break; - } - traineron = c9x.traineron; - // t2throttle = c9x.t2throttle; - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - ppmNCH = (c9x.moduleData[0].channelsCount - 8) / 2; - thrTrim = c9x.thrTrim; - thrExpo = c9x.thrExpo; - trimInc = c9x.trimInc; - ppmDelay = (c9x.moduleData[0].ppmDelay - 300) / 50; - for (unsigned int i=0; iEeFsCreate(eeprom, EESIZE_SKY9X, BOARD_SKY9X); - - Ersky9xGeneral ersky9xGeneral(radioData.generalSettings); - int sz = efile->writeRlc2(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&ersky9xGeneral, sizeof(Ersky9xGeneral)); - if(sz != sizeof(Ersky9xGeneral)) { - return 0; - } - - for (int i=0; iwriteRlc2(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&ersky9xModel, sizeof(Ersky9xModelData_v11)); - if(sz != sizeof(Ersky9xModelData_v11)) { - return 0; - } - } - } - - if (!EEPROMWarnings.isEmpty()) - QMessageBox::warning(NULL, - QObject::tr("Warning"), - QObject::tr("EEPROM saved with these warnings:") + "\n- " + EEPROMWarnings.remove(EEPROMWarnings.length()-1, 1).replace("\n", "\n- ")); - - return EESIZE_SKY9X; + return 0; } int Ersky9xInterface::getSize(ModelData &model) @@ -272,12 +249,6 @@ int Ersky9xInterface::getCapability(const Capability capability) switch (capability) { case Mixes: return ERSKY9X_MAX_MIXERS_V11; - case NumCurves5: - return ERSKY9X_MAX_CURVE5; - case NumCurves9: - return ERSKY9X_MAX_CURVE9; - case MixFmTrim: - return 1; case PPMExtCtrl: return 1; case ModelTrainerEnable: diff --git a/companion/src/firmwares/gruvin9x/gruvin9xeeprom.cpp b/companion/src/firmwares/gruvin9x/gruvin9xeeprom.cpp index 8f9860d9a..429899ab5 100644 --- a/companion/src/firmwares/gruvin9x/gruvin9xeeprom.cpp +++ b/companion/src/firmwares/gruvin9x/gruvin9xeeprom.cpp @@ -6,7 +6,6 @@ #define EEPROM_VER 106 -extern void setEEPROMZString(char *dst, const char *src, int size); extern void getEEPROMZString(char *dst, const char *src, int size); RawSwitch gruvin9xToSwitch(int8_t sw) @@ -19,18 +18,6 @@ RawSwitch gruvin9xToSwitch(int8_t sw) return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-9 : sw+9); } -int8_t gruvin9xFromSwitch(const RawSwitch & sw) -{ - switch (sw.type) { - case SWITCH_TYPE_SWITCH: - return sw.index; - case SWITCH_TYPE_VIRTUAL: - return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index); - default: - return 0; - } -} - t_Gruvin9xTrainerMix_v103::operator TrainerMix() { TrainerMix c9x; @@ -50,14 +37,6 @@ t_Gruvin9xTrainerMix_v104::operator TrainerMix() return c9x; } -t_Gruvin9xTrainerMix_v104::t_Gruvin9xTrainerMix_v104(TrainerMix &c9x) -{ - memset(this, 0, sizeof(t_Gruvin9xTrainerMix_v104)); - srcChn = c9x.src; - studWeight = c9x.weight; - mode = c9x.mode; -} - t_Gruvin9xTrainerData_v103::operator TrainerData () { TrainerData c9x; @@ -78,16 +57,6 @@ t_Gruvin9xTrainerData_v104::operator TrainerData () return c9x; } -t_Gruvin9xTrainerData_v104::t_Gruvin9xTrainerData_v104(TrainerData &c9x) -{ - memset(this, 0, sizeof(t_Gruvin9xTrainerData_v104)); - for (int i=0; i>=1; - } - if (zeros==G9X_MAX_PHASES || zeros==0) { - phase=0; - negPhase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - negPhase=0; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=(ph+1); - negPhase=1; - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight modes settings on expos not exported") + "\n"; - } - weight = c9x.weight; - expo = c9x.expo; -} - t_Gruvin9xExpoData::operator ExpoData () { ExpoData c9x; c9x.mode = mode; c9x.chn = chn; - c9x.curveParam = curve; - c9x.curveMode=1; c9x.swtch = gruvin9xToSwitch(swtch); if (negPhase) { c9x.phases= 1 << (phase -1); @@ -322,7 +180,18 @@ t_Gruvin9xExpoData::operator ExpoData () c9x.phases &= ~(1 << (phase -1)); } c9x.weight = weight; - c9x.expo = expo; + if (expo) { + c9x.curve.type = CurveReference::CURVE_REF_EXPO; + c9x.curve.value = expo; + } + else if (curve > 6) { + c9x.curve.type = CurveReference::CURVE_REF_CUSTOM; + c9x.curve.value = curve - 6; + } + else if (curve > 0) { + c9x.curve.type = CurveReference::CURVE_REF_FUNC; + c9x.curve.value = curve; + } return c9x; } @@ -331,14 +200,6 @@ t_Gruvin9xLimitData::t_Gruvin9xLimitData() memset(this, 0, sizeof(t_Gruvin9xLimitData)); } -t_Gruvin9xLimitData::t_Gruvin9xLimitData(LimitData &c9x) -{ - min = c9x.min+100; - max = c9x.max-100; - revert = c9x.revert; - offset = c9x.offset; -} - t_Gruvin9xLimitData::operator LimitData () { LimitData c9x; @@ -349,67 +210,11 @@ t_Gruvin9xLimitData::operator LimitData () return c9x; } - t_Gruvin9xMixData::t_Gruvin9xMixData() { memset(this, 0, sizeof(t_Gruvin9xMixData)); } -t_Gruvin9xMixData::t_Gruvin9xMixData(MixData &c9x) -{ - destCh = c9x.destCh; - mixWarn = c9x.mixWarn; - swtch = gruvin9xFromSwitch(c9x.swtch); - - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n"; - srcRaw = 5 + c9x.srcRaw.index; // use pots instead - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 8; // MAX - } - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 9; // FULL - swtch = c9x.srcRaw.index+1; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 10 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 13 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 21 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) { - EEPROMWarnings += ::QObject::tr("gruvin9x doesn't have trims as source") + "\n"; - srcRaw = 0; // use pots instead - } - - weight = c9x.weight; - curve = c9x.curve; - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - if (c9x.carryTrim<0) { - EEPROMWarnings += ::QObject::tr("gruvin9x doesn't have swappable trims") + "\n"; - carryTrim=1; - } else { - carryTrim = c9x.carryTrim; - } - mltpx = (MltpxValue)c9x.mltpx; -// phase = c9x.phase; - sOffset = c9x.sOffset; -} - t_Gruvin9xMixData::operator MixData () { MixData c9x; @@ -447,7 +252,6 @@ t_Gruvin9xMixData::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-21); } - c9x.curve = curve; c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; @@ -455,34 +259,18 @@ t_Gruvin9xMixData::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; - // c9x.phase = phase; c9x.sOffset = sOffset; - return c9x; -} - -int8_t gruvin9xFromSource(RawSource source) -{ - int v1 = 0; - if (source.type == SOURCE_TYPE_STICK) - v1 = 1+source.index; - else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("gruvin9x on this board doesn't have Rotary Encoders") + "\n"; - v1 = 5+source.index; + if (curve > 6) { + c9x.curve.type = CurveReference::CURVE_REF_CUSTOM; + c9x.curve.value = curve - 6; } - else if (source.type == SOURCE_TYPE_MAX) - v1 = 8; - /* else if (source.type == SOURCE_TYPE_3POS) - v1 = 0; */ - else if (source.type == SOURCE_TYPE_CYC) - v1 = 10+source.index; - else if (source.type == SOURCE_TYPE_PPM) - v1 = 13+source.index; - else if (source.type == SOURCE_TYPE_CH) - v1 = 21+source.index; - else if (source.type == SOURCE_TYPE_TELEMETRY) - v1 = 36+source.index; - return v1; + else if (curve > 0) { + c9x.curve.type = CurveReference::CURVE_REF_FUNC; + c9x.curve.value = curve; + } + + return c9x; } RawSource gruvin9xToSource(int8_t value) @@ -513,33 +301,6 @@ RawSource gruvin9xToSource(int8_t value) } } -t_Gruvin9xCustomSwData::t_Gruvin9xCustomSwData(CustomSwData &c9x) -{ - func = c9x.func; - v1 = c9x.val1; - v2 = c9x.val2; - - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - v1 = gruvin9xFromSource(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL) { - v2 = gruvin9xFromSource(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - v1 = gruvin9xFromSwitch(RawSwitch(c9x.val1)); - v2 = gruvin9xFromSwitch(RawSwitch(c9x.val2)); - } - - if (func>GR9X_MAX_CSFUNC ) { - EEPROMWarnings += ::QObject::tr("gruvin9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n"; - func=0; - v1=0; - v2=0; - } -} - Gruvin9xCustomSwData::operator CustomSwData () { CustomSwData c9x; @@ -563,12 +324,6 @@ Gruvin9xCustomSwData::operator CustomSwData () return c9x; } -t_Gruvin9xFuncSwData::t_Gruvin9xFuncSwData(FuncSwData &c9x) -{ - swtch = gruvin9xFromSwitch(c9x.swtch); - func = c9x.func - G9X_NUM_CHNOUT; -} - Gruvin9xFuncSwData::operator FuncSwData () { FuncSwData c9x; @@ -577,12 +332,6 @@ Gruvin9xFuncSwData::operator FuncSwData () return c9x; } -t_Gruvin9xSafetySwData::t_Gruvin9xSafetySwData(SafetySwData &c9x) -{ - swtch = gruvin9xFromSwitch(c9x.swtch); - val = c9x.val; -} - t_Gruvin9xSafetySwData::operator SafetySwData () { SafetySwData c9x; @@ -596,16 +345,6 @@ t_Gruvin9xSwashRingData::t_Gruvin9xSwashRingData() memset(this, 0, sizeof(t_Gruvin9xSwashRingData)); } -t_Gruvin9xSwashRingData::t_Gruvin9xSwashRingData(SwashRingData &c9x) -{ - invertELE = c9x.invertELE; - invertAIL = c9x.invertAIL; - invertCOL = c9x.invertCOL; - type = c9x.type; - collectiveSource = gruvin9xFromSource(c9x.collectiveSource); - value = c9x.value; -} - t_Gruvin9xSwashRingData::operator SwashRingData () { SwashRingData c9x; @@ -642,21 +381,7 @@ t_Gruvin9xPhaseData_v106::operator PhaseData () return c9x; } -t_Gruvin9xPhaseData_v106::t_Gruvin9xPhaseData_v106(PhaseData &c9x) -{ - trim_ext = 0; - for (int i=0; i> 2); - trim_ext = (trim_ext & ~(0x03 << (2*i))) + (((c9x.trim[i] & 0x03) << (2*i))); - } - swtch = gruvin9xFromSwitch(c9x.swtch); - setEEPROMZString(name, c9x.name, sizeof(name)); - fadeIn = c9x.fadeIn; - fadeOut = c9x.fadeOut; -} - extern TimerMode getEr9xTimerMode(int mode); -extern int setEr9xTimerMode(TimerMode mode); t_Gruvin9xTimerData::operator TimerData () { @@ -667,29 +392,11 @@ t_Gruvin9xTimerData::operator TimerData () return c9x; } -t_Gruvin9xTimerData::t_Gruvin9xTimerData(TimerData &c9x) -{ - mode = setEr9xTimerMode(c9x.mode); - val = c9x.val; - dir = c9x.dir; -} - t_Gruvin9xFrSkyChannelData::t_Gruvin9xFrSkyChannelData() { memset(this, 0, sizeof(t_Gruvin9xFrSkyChannelData)); } -t_Gruvin9xFrSkyChannelData::t_Gruvin9xFrSkyChannelData(FrSkyChannelData &c9x) -{ - memset(this, 0, sizeof(t_Gruvin9xFrSkyChannelData)); - ratio = c9x.ratio; - alarms_value[0] = c9x.alarms[0].value; - alarms_value[1] = c9x.alarms[1].value; - alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level; - alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater; - type = c9x.type; -} - t_Gruvin9xFrSkyChannelData::operator FrSkyChannelData () { FrSkyChannelData c9x; @@ -704,19 +411,11 @@ t_Gruvin9xFrSkyChannelData::operator FrSkyChannelData () return c9x; } - t_Gruvin9xFrSkyData::t_Gruvin9xFrSkyData() { memset(this, 0, sizeof(t_Gruvin9xFrSkyData)); } -t_Gruvin9xFrSkyData::t_Gruvin9xFrSkyData(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Gruvin9xFrSkyData)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; -} - t_Gruvin9xFrSkyData::operator FrSkyData () { FrSkyData c9x; @@ -725,7 +424,6 @@ t_Gruvin9xFrSkyData::operator FrSkyData () return c9x; } - t_Gruvin9xModelData_v102::operator ModelData () { ModelData c9x; @@ -775,7 +473,6 @@ t_Gruvin9xModelData_v102::operator ModelData () c9x.expoData[i] = expoData[i]; for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - } - else { - memset(this, 0, sizeof(t_Gruvin9xModelData_v106)); - } -} - diff --git a/companion/src/firmwares/gruvin9x/gruvin9xeeprom.h b/companion/src/firmwares/gruvin9x/gruvin9xeeprom.h index f2e0cf1e2..410e96e08 100644 --- a/companion/src/firmwares/gruvin9x/gruvin9xeeprom.h +++ b/companion/src/firmwares/gruvin9x/gruvin9xeeprom.h @@ -38,8 +38,6 @@ PACK(typedef struct t_Gruvin9xTrainerMix_v104 { operator TrainerMix(); t_Gruvin9xTrainerMix_v104() { memset(this, 0, sizeof(t_Gruvin9xTrainerMix_v104)); } - t_Gruvin9xTrainerMix_v104(TrainerMix&); - }) Gruvin9xTrainerMix_v104; // PACK(typedef struct t_Gruvin9xTrainerData_v103 { @@ -55,8 +53,6 @@ PACK(typedef struct t_Gruvin9xTrainerData_v104 { operator TrainerData(); t_Gruvin9xTrainerData_v104() { memset(this, 0, sizeof(t_Gruvin9xTrainerData_v104)); } - t_Gruvin9xTrainerData_v104(TrainerData&); - }) Gruvin9xTrainerData_v104; PACK(typedef struct t_Gruvin9xFrSkyRSSIAlarm { @@ -136,8 +132,6 @@ PACK(typedef struct t_Gruvin9xGeneral_v104 { operator GeneralSettings(); t_Gruvin9xGeneral_v104() { memset(this, 0, sizeof(t_Gruvin9xGeneral_v104)); } - t_Gruvin9xGeneral_v104(GeneralSettings&); - }) Gruvin9xGeneral_v104; typedef Gruvin9xGeneral_v104 Gruvin9xGeneral; @@ -156,8 +150,6 @@ PACK(typedef struct t_Gruvin9xExpoData { operator ExpoData(); t_Gruvin9xExpoData(); - t_Gruvin9xExpoData(ExpoData&); - }) Gruvin9xExpoData; PACK(typedef struct t_Gruvin9xLimitData { @@ -168,8 +160,6 @@ PACK(typedef struct t_Gruvin9xLimitData { operator LimitData(); t_Gruvin9xLimitData(); - t_Gruvin9xLimitData(LimitData&); - }) Gruvin9xLimitData; #define MLTPX_ADD 0 @@ -194,8 +184,6 @@ PACK(typedef struct t_Gruvin9xMixData { operator MixData(); t_Gruvin9xMixData(); - t_Gruvin9xMixData(MixData&); - }) Gruvin9xMixData; PACK(typedef struct t_Gruvin9xCustomSwData { // Custom Switches data @@ -205,8 +193,6 @@ PACK(typedef struct t_Gruvin9xCustomSwData { // Custom Switches data operator CustomSwData(); t_Gruvin9xCustomSwData() { memset(this, 0, sizeof(t_Gruvin9xCustomSwData)); } - t_Gruvin9xCustomSwData(CustomSwData&); - }) Gruvin9xCustomSwData; PACK(typedef struct t_Gruvin9xSafetySwData { // Safety Switches data @@ -215,8 +201,6 @@ PACK(typedef struct t_Gruvin9xSafetySwData { // Safety Switches data operator SafetySwData(); t_Gruvin9xSafetySwData() { memset(this, 0, sizeof(t_Gruvin9xSafetySwData)); } - t_Gruvin9xSafetySwData(SafetySwData&); - }) Gruvin9xSafetySwData; PACK(typedef struct t_Gruvin9xFuncSwData { // Function Switches data @@ -225,8 +209,6 @@ PACK(typedef struct t_Gruvin9xFuncSwData { // Function Switches data operator FuncSwData(); t_Gruvin9xFuncSwData() { memset(this, 0, sizeof(t_Gruvin9xFuncSwData)); } - t_Gruvin9xFuncSwData(FuncSwData&); - }) Gruvin9xFuncSwData; PACK(typedef struct t_Gruvin9xFrSkyChannelData { @@ -242,17 +224,13 @@ PACK(typedef struct t_Gruvin9xFrSkyChannelData { operator FrSkyChannelData(); t_Gruvin9xFrSkyChannelData(); - t_Gruvin9xFrSkyChannelData(FrSkyChannelData&); - }) Gruvin9xFrSkyChannelData; PACK(typedef struct t_Gruvin9xFrSkyData { - Gruvin9xFrSkyChannelData channels[2]; - - operator FrSkyData(); - t_Gruvin9xFrSkyData(); - t_Gruvin9xFrSkyData(FrSkyData&); + Gruvin9xFrSkyChannelData channels[2]; + operator FrSkyData(); + t_Gruvin9xFrSkyData(); }) Gruvin9xFrSkyData; PACK(typedef struct t_Gruvin9xSwashRingData { // Swash Ring data @@ -265,8 +243,6 @@ PACK(typedef struct t_Gruvin9xSwashRingData { // Swash Ring data operator SwashRingData(); t_Gruvin9xSwashRingData(); - t_Gruvin9xSwashRingData(SwashRingData&); - }) Gruvin9xSwashRingData; PACK(typedef struct t_Gruvin9xPhaseData_v102 { @@ -291,7 +267,6 @@ PACK(typedef struct t_Gruvin9xPhaseData_v106 { operator PhaseData(); t_Gruvin9xPhaseData_v106() { memset(this, 0, sizeof(t_Gruvin9xPhaseData_v106)); } - t_Gruvin9xPhaseData_v106(PhaseData &eepe); }) Gruvin9xPhaseData_v106; PACK(typedef struct t_Gruvin9xTimerData { @@ -301,7 +276,6 @@ PACK(typedef struct t_Gruvin9xTimerData { operator TimerData(); t_Gruvin9xTimerData() { memset(this, 0, sizeof(t_Gruvin9xTimerData)); } - t_Gruvin9xTimerData(TimerData &eepe); }) Gruvin9xTimerData; #define G9X_MAX_PHASES 5 @@ -410,8 +384,6 @@ PACK(typedef struct t_Gruvin9xModelData_v105 { operator ModelData(); t_Gruvin9xModelData_v105() { memset(this, 0, sizeof(t_Gruvin9xModelData_v105)); } - t_Gruvin9xModelData_v105(ModelData&); - }) Gruvin9xModelData_v105; PACK(typedef struct t_Gruvin9xModelData_v106 { @@ -443,11 +415,8 @@ PACK(typedef struct t_Gruvin9xModelData_v106 { operator ModelData(); t_Gruvin9xModelData_v106() { memset(this, 0, sizeof(t_Gruvin9xModelData_v106)); } - t_Gruvin9xModelData_v106(ModelData&); - }) Gruvin9xModelData_v106; typedef Gruvin9xModelData_v106 Gruvin9xModelData; #endif -/*eof*/ diff --git a/companion/src/firmwares/gruvin9x/gruvin9xinterface.cpp b/companion/src/firmwares/gruvin9x/gruvin9xinterface.cpp index 114fd3bee..cdb6d4124 100644 --- a/companion/src/firmwares/gruvin9x/gruvin9xinterface.cpp +++ b/companion/src/firmwares/gruvin9x/gruvin9xinterface.cpp @@ -200,62 +200,20 @@ bool Gruvin9xInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, int es int Gruvin9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version) { - EEPROMWarnings.clear(); + std::cout << "NO!\n"; + // TODO an error - int size = getEEpromSize(); - - efile->EeFsCreate(eeprom, size, BOARD_STOCK); - - Gruvin9xGeneral gruvin9xGeneral(radioData.generalSettings); - int sz = efile->writeRlc2(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&gruvin9xGeneral, sizeof(Gruvin9xGeneral)); - if(sz != sizeof(Gruvin9xGeneral)) { - return 0; - } - - for (int i=0; iwriteRlc2(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&gruvin9xModel, sizeof(Gruvin9xModelData)); - if(sz != sizeof(Gruvin9xModelData)) { - return 0; - } - } - } - - return size; + return 0; } int Gruvin9xInterface::getSize(ModelData &model) { - if (model.isempty()) - return 0; - - uint8_t tmp[EESIZE_GRUVIN9X]; - efile->EeFsCreate(tmp, EESIZE_GRUVIN9X, BOARD_STOCK); - - Gruvin9xModelData gruvin9xModel(model); - int sz = efile->writeRlc2(0, FILE_TYP_MODEL, (uint8_t*)&gruvin9xModel, sizeof(Gruvin9xModelData)); - if(sz != sizeof(Gruvin9xModelData)) { - return -1; - } - return efile->size(0); + return 0; } int Gruvin9xInterface::getSize(GeneralSettings &settings) { - uint8_t tmp[EESIZE_GRUVIN9X]; - efile->EeFsCreate(tmp, EESIZE_GRUVIN9X, BOARD_STOCK); - - Gruvin9xGeneral gruvin9xGeneral(settings); - int sz = efile->writeRlc1(0, FILE_TYP_GENERAL, (uint8_t*)&gruvin9xGeneral, sizeof(gruvin9xGeneral)); - if(sz != sizeof(gruvin9xGeneral)) { - return -1; - } - return efile->size(0); + return 0; } int Gruvin9xInterface::getCapability(const Capability capability) @@ -263,10 +221,6 @@ int Gruvin9xInterface::getCapability(const Capability capability) switch (capability) { case OwnerName: return 0; - case NumCurves5: - return G9X_MAX_CURVE5; - case NumCurves9: - return G9X_MAX_CURVE9; case Mixes: return G9X_MAX_MIXERS; case FlightPhases: @@ -297,7 +251,6 @@ int Gruvin9xInterface::getCapability(const Capability capability) return true; case OffsetWeight: return 125; - case HasExpoCurves: case HasContrast: return true; case Telemetry: diff --git a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp index 74d4d0074..d18939827 100644 --- a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp +++ b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp @@ -5,10 +5,7 @@ #include #include -extern void setEEPROMZString(char *dst, const char *src, int size); extern void getEEPROMZString(char *dst, const char *src, int size); - -extern int8_t open9xStockFromSwitch(const RawSwitch & sw); extern RawSwitch open9xStockToSwitch(int8_t sw); t_Open9xGruvin9xPhaseData_v207::operator PhaseData () @@ -25,21 +22,6 @@ t_Open9xGruvin9xPhaseData_v207::operator PhaseData () return c9x; } -t_Open9xGruvin9xPhaseData_v207::t_Open9xGruvin9xPhaseData_v207(PhaseData &c9x) -{ - trim_ext = 0; - for (int i=0; i> 2); - trim_ext = (trim_ext & ~(0x03 << (2*i))) + (((c9x.trim[i] & 0x03) << (2*i))); - } - swtch = open9xStockFromSwitch(c9x.swtch); - setEEPROMZString(name, c9x.name, sizeof(name)); - fadeIn = c9x.fadeIn; - fadeOut = c9x.fadeOut; - for (int i=0; i<2; i++) - rotaryEncoders[i] = c9x.rotaryEncoders[i]; -} - t_Open9xGruvin9xPhaseData_v208::operator PhaseData () { PhaseData c9x; @@ -54,107 +36,6 @@ t_Open9xGruvin9xPhaseData_v208::operator PhaseData () return c9x; } -t_Open9xGruvin9xPhaseData_v208::t_Open9xGruvin9xPhaseData_v208(PhaseData &c9x) -{ - for (int i=0; i>=1; - } - if (zeros==O9X_MAX_PHASES || zeros==0) { - phase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=-(ph+1); - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight mode settings on mixers not exported") + "\n"; - } - sOffset = c9x.sOffset; - } - else { - memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v207)); - } -} - t_Open9xGruvin9xMixData_v207::operator MixData () { MixData c9x; @@ -188,9 +69,15 @@ t_Open9xGruvin9xMixData_v207::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-44); } c9x.weight = weight; - c9x.differential = differential*2; + + if (differential) { + c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2); + } + else { + // TODO c9x.curve = curve; + } + c9x.swtch = open9xStockToSwitch(swtch); - c9x.curve = curve; c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; @@ -198,12 +85,14 @@ t_Open9xGruvin9xMixData_v207::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; -// c9x.phase = phase; + if (phase<0) { c9x.phases= 1 << (-phase -1); - } else if (phase==0) { + } + else if (phase==0) { c9x.phases=0; - } else { + } + else { c9x.phases=63; c9x.phases &= ~(1 << (phase -1)); } @@ -212,98 +101,6 @@ t_Open9xGruvin9xMixData_v207::operator MixData () return c9x; } -t_Open9xGruvin9xMixData_v209::t_Open9xGruvin9xMixData_v209(MixData &c9x) -{ - if (c9x.destCh) { - destCh = c9x.destCh-1; - mixWarn = c9x.mixWarn; - swtch = open9xStockFromSwitch(c9x.swtch); - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) { - srcRaw = 8 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) { - srcRaw = 10 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 14; - } - /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) { - srcRaw = 15; - } */ - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 15 + open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index)); - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 37 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 40 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 48 + c9x.srcRaw.index; - } - weight = c9x.weight; - differential = c9x.differential/2; - curve = c9x.curve; - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - carryTrim = c9x.carryTrim; - mltpx = (MltpxValue)c9x.mltpx; - int zeros=0; - int ones=0; - int phtemp=c9x.phases; - for (int i=0; i>=1; - } - if (zeros==O9X_MAX_PHASES || zeros==0) { - phase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=-(ph+1); - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight mode settings on mixers not exported") + "\n"; - } - sOffset = c9x.sOffset; - } - else { - memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v207)); - } -} - t_Open9xGruvin9xMixData_v209::operator MixData () { MixData c9x; @@ -340,9 +137,15 @@ t_Open9xGruvin9xMixData_v209::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-48); } c9x.weight = weight; - c9x.differential = differential*2; + + if (differential) { + c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2); + } + else { + // TODO c9x.curve = curve; + } + c9x.swtch = open9xStockToSwitch(swtch); - c9x.curve = curve; c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; @@ -350,12 +153,14 @@ t_Open9xGruvin9xMixData_v209::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; - // c9x.phase = phase; + if (phase<0) { c9x.phases= 1 << (-phase -1); - } else if (phase==0) { + } + else if (phase==0) { c9x.phases=0; - } else { + } + else { c9x.phases=63; c9x.phases &= ~(1 << (phase -1)); } @@ -364,66 +169,6 @@ t_Open9xGruvin9xMixData_v209::operator MixData () return c9x; } -t_Open9xGruvin9xMixData_v211::t_Open9xGruvin9xMixData_v211(MixData &c9x) -{ - if (c9x.destCh) { - destCh = c9x.destCh-1; - mixWarn = c9x.mixWarn; - swtch = open9xStockFromSwitch(c9x.swtch); - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) { - srcRaw = 8 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) { - srcRaw = 10 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 14; - } - /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) { - srcRaw = 15; - } */ - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 15 + open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index)); - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 37 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 40 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 48 + c9x.srcRaw.index; - } - weight = c9x.weight; - if (c9x.curve==0) { - curveMode=0; - curveParam=c9x.differential; - } else { - curveMode=1; - curveParam = c9x.curve; - } - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - carryTrim = c9x.carryTrim; - noExpo = c9x.noExpo; - mltpx = (MltpxValue)c9x.mltpx; - phases = c9x.phases; - sOffset = c9x.sOffset; - } - else { - memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v211)); - } -} - t_Open9xGruvin9xMixData_v211::operator MixData () { MixData c9x; @@ -461,12 +206,14 @@ t_Open9xGruvin9xMixData_v211::operator MixData () } c9x.weight = weight; c9x.swtch = open9xStockToSwitch(swtch); + if (curveMode==0) { - c9x.differential = curveParam; - c9x.curve=0; - } else { - c9x.curve=curveParam; - } + c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, curveParam); + } + else { + // TODO c9x.curve = curve; + } + c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; @@ -481,28 +228,6 @@ t_Open9xGruvin9xMixData_v211::operator MixData () return c9x; } -int8_t open9xV4207FromSource(RawSource source) -{ - int v1 = 0; - if (source.type == SOURCE_TYPE_STICK) - v1 = 1+source.index; - else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) - v1 = 8+source.index; - else if (source.type == SOURCE_TYPE_MAX) - v1 = 10; - /* else if (source.type == SOURCE_TYPE_3POS) - v1 = 11; */ - else if (source.type == SOURCE_TYPE_CYC) - v1 = 12+source.index; - else if (source.type == SOURCE_TYPE_PPM) - v1 = 15+source.index; - else if (source.type == SOURCE_TYPE_CH) - v1 = 23+source.index; - else if (source.type == SOURCE_TYPE_TELEMETRY) - v1 = 38+source.index; - return v1; -} - RawSource open9xV4207ToSource(int8_t value) { if (value == 0) { @@ -534,30 +259,6 @@ RawSource open9xV4207ToSource(int8_t value) } } -int8_t open9xV4209FromSource(RawSource source) -{ - int v1 = 0; - if (source.type == SOURCE_TYPE_STICK) - v1 = 1+source.index; - else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) - v1 = 8+source.index; - if (source.type == SOURCE_TYPE_TRIM) - v1 = 10+source.index; - else if (source.type == SOURCE_TYPE_MAX) - v1 = 14; - /* else if (source.type == SOURCE_TYPE_3POS) - v1 = 15; */ - else if (source.type == SOURCE_TYPE_CYC) - v1 = 16+source.index; - else if (source.type == SOURCE_TYPE_PPM) - v1 = 19+source.index; - else if (source.type == SOURCE_TYPE_CH) - v1 = 27+source.index; - else if (source.type == SOURCE_TYPE_TELEMETRY) - v1 = 42+source.index; - return v1; -} - RawSource open9xV4209ToSource(int8_t value) { if (value == 0) { @@ -592,33 +293,6 @@ RawSource open9xV4209ToSource(int8_t value) } } -t_Open9xGruvin9xCustomSwData_v207::t_Open9xGruvin9xCustomSwData_v207(CustomSwData &c9x) -{ - func = c9x.func; - v1 = c9x.val1; - v2 = c9x.val2; - - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - v1 = open9xV4207FromSource(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL) { - v2 = open9xV4207FromSource(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - v1 = open9xStockFromSwitch(RawSwitch(c9x.val1)); - v2 = open9xStockFromSwitch(RawSwitch(c9x.val2)); - } - - if (func>O9X_V4_MAX_CSFUNCOLD ) { - EEPROMWarnings += ::QObject::tr("This version of open9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n"; - func=0; - v1=0; - v2=0; - } -} - Open9xGruvin9xCustomSwData_v207::operator CustomSwData () { CustomSwData c9x; @@ -642,26 +316,6 @@ Open9xGruvin9xCustomSwData_v207::operator CustomSwData () return c9x; } -t_Open9xGruvin9xCustomSwData_v209::t_Open9xGruvin9xCustomSwData_v209(CustomSwData &c9x) -{ - func = c9x.func; - v1 = c9x.val1; - v2 = c9x.val2; - - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - v1 = open9xV4209FromSource(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) { - v2 = open9xV4209FromSource(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - v1 = open9xStockFromSwitch(RawSwitch(c9x.val1)); - v2 = open9xStockFromSwitch(RawSwitch(c9x.val2)); - } -} - Open9xGruvin9xCustomSwData_v209::operator CustomSwData () { CustomSwData c9x; @@ -685,45 +339,6 @@ Open9xGruvin9xCustomSwData_v209::operator CustomSwData () return c9x; } -t_Open9xGruvin9xFuncSwData_v203::t_Open9xGruvin9xFuncSwData_v203(FuncSwData &c9x) -{ - swtch = open9xStockFromSwitch(c9x.swtch); - if (c9x.func <= FuncSafetyCh16) { - param = ((c9x.param>>1)<<1); - param |=(c9x.enabled & 0x01); - func = c9x.func; - } else { - param = c9x.param; - if (c9x.func <= FuncTrainerAIL) - func = 16 + c9x.func - FuncTrainer; - else if (c9x.func == FuncInstantTrim) - func = 21; - else if (c9x.func == FuncPlaySound) - func = 22; - else if (c9x.func == FuncPlayHaptic) - func = 23; - else if (c9x.func == FuncReset) - func = 24; - else if (c9x.func == FuncVario) - func = 25; - else if (c9x.func == FuncPlayPrompt) - func = 26; - else if (c9x.func == FuncPlayValue) - func = 27; - else if (c9x.func == FuncLogs) - func = 28; - else if (c9x.func == FuncBacklight) - func = 29; - else if (c9x.func >= FuncAdjustGV1 && c9x.func <= FuncAdjustGV5) - func = 30 + c9x.func - FuncAdjustGV1; - else { - swtch = 0; - func = 0; - param = 0; - } - } -} - t_Open9xGruvin9xFuncSwData_v203::operator FuncSwData () { FuncSwData c9x; @@ -763,37 +378,6 @@ t_Open9xGruvin9xFuncSwData_v203::operator FuncSwData () return c9x; } -t_Open9xGruvin9xFuncSwData_v210::t_Open9xGruvin9xFuncSwData_v210(FuncSwData &c9x) -{ - swtch = open9xStockFromSwitch(c9x.swtch); - param = c9x.param; - if (c9x.func <= FuncInstantTrim) { - func = (uint8_t)c9x.func; - delay = c9x.enabled; - } - else if (c9x.func == FuncPlaySound) - func = 22; - else if (c9x.func == FuncPlayHaptic) - func = 23; - else if (c9x.func == FuncReset) - func = 24; - else if (c9x.func == FuncVario) - func = 25; - else if (c9x.func == FuncPlayPrompt) - func = 26; - else if (c9x.func == FuncPlayValue) - func = 27; - else if (c9x.func == FuncLogs) - func = 28; - else if (c9x.func == FuncBacklight) - func = 29; - else { - swtch = 0; - func = 0; - param = 0; - } -} - t_Open9xGruvin9xFuncSwData_v210::operator FuncSwData () { FuncSwData c9x; @@ -823,16 +407,6 @@ t_Open9xGruvin9xFuncSwData_v210::operator FuncSwData () return c9x; } -t_Open9xGruvin9xSwashRingData_v208::t_Open9xGruvin9xSwashRingData_v208(SwashRingData &c9x) -{ - invertELE = c9x.invertELE; - invertAIL = c9x.invertAIL; - invertCOL = c9x.invertCOL; - type = c9x.type; - collectiveSource = open9xV4207FromSource(c9x.collectiveSource); - value = c9x.value; -} - t_Open9xGruvin9xSwashRingData_v208::operator SwashRingData () { SwashRingData c9x; @@ -845,16 +419,6 @@ t_Open9xGruvin9xSwashRingData_v208::operator SwashRingData () return c9x; } -t_Open9xGruvin9xSwashRingData_v209::t_Open9xGruvin9xSwashRingData_v209(SwashRingData &c9x) -{ - invertELE = c9x.invertELE; - invertAIL = c9x.invertAIL; - invertCOL = c9x.invertCOL; - type = c9x.type; - collectiveSource = open9xV4209FromSource(c9x.collectiveSource); - value = c9x.value; -} - t_Open9xGruvin9xSwashRingData_v209::operator SwashRingData () { SwashRingData c9x; @@ -915,7 +479,6 @@ t_Open9xGruvin9xModelData_v207::operator ModelData () c9x.expoData[i] = expoData[i]; for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - frskyLinesXtra=0; - for (int j=0; j<4; j++) { - frskyLines[j] = 0; - for (int k=0; k<2; k++) { - int value = c9x.frsky.screens[1].body.lines[j].source[k]; - frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4)); - frskyLinesXtra |= (value / 16) << (4*j+2*k); - } - } - } - else { - memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v207)); - } -} - - t_Open9xGruvin9xModelData_v208::operator ModelData () { ModelData c9x; @@ -1104,7 +563,6 @@ t_Open9xGruvin9xModelData_v208::operator ModelData () for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - varioSource = c9x.frsky.varioSource; - varioSpeedUpMin = c9x.frsky.varioCenterMax; - varioSpeedDownMin = c9x.frsky.varioCenterMin; - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - frskyLinesXtra=0; - for (int j=0; j<4; j++) { - frskyLines[j] = 0; - for (int k=0; k<2; k++) { - int value = c9x.frsky.screens[1].body.lines[j].source[k]; - frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4)); - frskyLinesXtra |= (value / 16) << (4*j+2*k); - } - } - for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - varioSource = c9x.frsky.varioSource; - varioSpeedUpMin = c9x.frsky.varioCenterMax; - varioSpeedDownMin = c9x.frsky.varioCenterMin; - switchWarningStates = c9x.switchWarningStates; - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - frskyLinesXtra=0; - for (int j=0; j<4; j++) { - frskyLines[j] = 0; - for (int k=0; k<2; k++) { - int value = c9x.frsky.screens[1].body.lines[j].source[k]; - frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4)); - frskyLinesXtra |= (value / 16) << (4*j+2*k); - } - } - for (int i=0; i O9X_NUM_POINTS - 5 * O9X_MAX_CURVES) { - EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_NUM_POINTS) + "\n"; - break; - } - curves[i] = offset; - for (int j=0; j= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - switchWarningStates = c9x.switchWarningStates; - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - for (int i=0; i O9X_NUM_POINTS - 5 * O9X_MAX_CURVES) { - EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_NUM_POINTS) + "\n"; - break; - } - curves[i] = offset; - for (int j=0; j= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - switchWarningStates = c9x.switchWarningStates; - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - } -} - diff --git a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h index a37ed3d9d..c95dc6742 100644 --- a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h +++ b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h @@ -32,7 +32,6 @@ PACK(typedef struct t_Open9xGruvin9xPhaseData_v207 { int16_t rotaryEncoders[2]; operator PhaseData(); t_Open9xGruvin9xPhaseData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xPhaseData_v207)); } - t_Open9xGruvin9xPhaseData_v207(PhaseData &eepe); }) Open9xGruvin9xPhaseData_v207; PACK(typedef struct t_Open9xGruvin9xPhaseData_v208 { @@ -44,7 +43,6 @@ PACK(typedef struct t_Open9xGruvin9xPhaseData_v208 { int16_t rotaryEncoders[2]; operator PhaseData(); t_Open9xGruvin9xPhaseData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xPhaseData_v208)); } - t_Open9xGruvin9xPhaseData_v208(PhaseData &eepe); }) Open9xGruvin9xPhaseData_v208; PACK(typedef struct t_Open9xGruvin9xMixData_v207 { @@ -66,8 +64,6 @@ PACK(typedef struct t_Open9xGruvin9xMixData_v207 { operator MixData(); t_Open9xGruvin9xMixData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v207)); } - t_Open9xGruvin9xMixData_v207(MixData&); - }) Open9xGruvin9xMixData_v207; PACK(typedef struct t_Open9xGruvin9xMixData_v209 { @@ -89,8 +85,6 @@ PACK(typedef struct t_Open9xGruvin9xMixData_v209 { operator MixData(); t_Open9xGruvin9xMixData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v209)); } - t_Open9xGruvin9xMixData_v209(MixData&); - }) Open9xGruvin9xMixData_v209; PACK(typedef struct t_Open9xGruvin9xMixData_v211 { @@ -114,8 +108,6 @@ PACK(typedef struct t_Open9xGruvin9xMixData_v211 { operator MixData(); t_Open9xGruvin9xMixData_v211() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v211)); } - t_Open9xGruvin9xMixData_v211(MixData&); - }) Open9xGruvin9xMixData_v211; PACK(typedef struct t_Open9xGruvin9xCustomSwData_v207 { // Custom Switches data @@ -125,10 +117,8 @@ PACK(typedef struct t_Open9xGruvin9xCustomSwData_v207 { // Custom Switches data operator CustomSwData(); t_Open9xGruvin9xCustomSwData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xCustomSwData_v207)); } - t_Open9xGruvin9xCustomSwData_v207(CustomSwData&); int8_t fromSource(RawSource source); RawSource toSource(int8_t value); - }) Open9xGruvin9xCustomSwData_v207; PACK(typedef struct t_Open9xGruvin9xCustomSwData_v209 { // Custom Switches data @@ -138,10 +128,8 @@ PACK(typedef struct t_Open9xGruvin9xCustomSwData_v209 { // Custom Switches data operator CustomSwData(); t_Open9xGruvin9xCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xCustomSwData_v209)); } - t_Open9xGruvin9xCustomSwData_v209(CustomSwData&); int8_t fromSource(RawSource source); RawSource toSource(int8_t value); - }) Open9xGruvin9xCustomSwData_v209; PACK(typedef struct t_Open9xGruvin9xFuncSwData_v203 { // Function Switches data @@ -151,8 +139,6 @@ PACK(typedef struct t_Open9xGruvin9xFuncSwData_v203 { // Function Switches data operator FuncSwData(); t_Open9xGruvin9xFuncSwData_v203() { memset(this, 0, sizeof(t_Open9xGruvin9xFuncSwData_v203)); } - t_Open9xGruvin9xFuncSwData_v203(FuncSwData&); - }) Open9xGruvin9xFuncSwData_v203; PACK(typedef struct t_Open9xGruvin9xFuncSwData_v210 { // Function Switches data @@ -163,8 +149,6 @@ PACK(typedef struct t_Open9xGruvin9xFuncSwData_v210 { // Function Switches data operator FuncSwData(); t_Open9xGruvin9xFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xGruvin9xFuncSwData_v210)); } - t_Open9xGruvin9xFuncSwData_v210(FuncSwData&); - }) Open9xGruvin9xFuncSwData_v210; PACK(typedef struct t_Open9xGruvin9xSwashRingData_v208 { // Swash Ring data @@ -177,8 +161,6 @@ PACK(typedef struct t_Open9xGruvin9xSwashRingData_v208 { // Swash Ring data operator SwashRingData(); t_Open9xGruvin9xSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xSwashRingData_v208)); } - t_Open9xGruvin9xSwashRingData_v208(SwashRingData&); - }) Open9xGruvin9xSwashRingData_v208; PACK(typedef struct t_Open9xGruvin9xSwashRingData_v209 { // Swash Ring data @@ -191,8 +173,6 @@ PACK(typedef struct t_Open9xGruvin9xSwashRingData_v209 { // Swash Ring data operator SwashRingData(); t_Open9xGruvin9xSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xSwashRingData_v209)); } - t_Open9xGruvin9xSwashRingData_v209(SwashRingData&); - }) Open9xGruvin9xSwashRingData_v209; PACK(typedef struct t_Open9xGruvin9xModelData_v207 { @@ -227,8 +207,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v207 { operator ModelData(); t_Open9xGruvin9xModelData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v207)); } - t_Open9xGruvin9xModelData_v207(ModelData&); - }) Open9xGruvin9xModelData_v207; PACK(typedef struct t_Open9xGruvin9xModelData_v208 { @@ -268,8 +246,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v208 { operator ModelData(); t_Open9xGruvin9xModelData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v208)); } - t_Open9xGruvin9xModelData_v208(ModelData&); - }) Open9xGruvin9xModelData_v208; PACK(typedef struct t_Open9xGruvin9xModelData_v209 { @@ -310,8 +286,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v209 { operator ModelData(); t_Open9xGruvin9xModelData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v209)); } - t_Open9xGruvin9xModelData_v209(ModelData&); - }) Open9xGruvin9xModelData_v209; PACK(typedef struct t_Open9xGruvin9xModelData_v210 { @@ -350,8 +324,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v210 { operator ModelData(); t_Open9xGruvin9xModelData_v210() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v210)); } - t_Open9xGruvin9xModelData_v210(ModelData&); - }) Open9xGruvin9xModelData_v210; PACK(typedef struct t_Open9xGruvin9xModelData_v211 { @@ -388,8 +360,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v211 { operator ModelData(); t_Open9xGruvin9xModelData_v211() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v211)); } - t_Open9xGruvin9xModelData_v211(ModelData&); - }) Open9xGruvin9xModelData_v211; #endif diff --git a/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp b/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp index afa897700..41a7300d4 100644 --- a/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp +++ b/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp @@ -5,31 +5,8 @@ #include #include -extern void setEEPROMZString(char *dst, const char *src, int size); extern void getEEPROMZString(char *dst, const char *src, int size); -int8_t open9xArmFromSwitch(const RawSwitch & sw) -{ - switch (sw.type) { - case SWITCH_TYPE_SWITCH: - return sw.index; - case SWITCH_TYPE_VIRTUAL: - return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index); - case SWITCH_TYPE_ON: - return 42; - case SWITCH_TYPE_OFF: - return -42; - case SWITCH_TYPE_MOMENT_SWITCH: - return sw.index > 0 ? (42 + sw.index) : (-42 + sw.index); - case SWITCH_TYPE_MOMENT_VIRTUAL: - return sw.index > 0 ? (51 + sw.index) : (-51 + sw.index); - case SWITCH_TYPE_ONM: - return 84; - default: - return 0; - } -} - RawSwitch open9xArmToSwitch(int8_t sw) { uint8_t swa = abs(sw); @@ -51,30 +28,6 @@ RawSwitch open9xArmToSwitch(int8_t sw) return RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, sw > 0 ? sw-42-9 : sw+42+9); } -int8_t open9xArm208FromSource(RawSource source) -{ - int v1 = 0; - if (source.type == SOURCE_TYPE_STICK) - v1 = 1+source.index; - else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n"; - v1 = 5+source.index; - } - else if (source.type == SOURCE_TYPE_MAX) - v1 = 8; - /* else if (source.type == SOURCE_TYPE_3POS) - v1 = 9; */ - else if (source.type == SOURCE_TYPE_CYC) - v1 = 10+source.index; - else if (source.type == SOURCE_TYPE_PPM) - v1 = 13+source.index; - else if (source.type == SOURCE_TYPE_CH) - v1 = 21+source.index; - else if (source.type == SOURCE_TYPE_TELEMETRY) - v1 = 52+source.index; - return v1; -} - RawSource open9xArm208ToSource(int8_t value) { if (value == 0) { @@ -103,32 +56,6 @@ RawSource open9xArm208ToSource(int8_t value) } } -int8_t open9xArm209FromSource(RawSource source) -{ - int v1 = 0; - if (source.type == SOURCE_TYPE_STICK) - v1 = 1+source.index; - else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n"; - v1 = 5+source.index; - } - else if (source.type == SOURCE_TYPE_TRIM) - v1 = 8 + source.index; - else if (source.type == SOURCE_TYPE_MAX) - v1 = 12; - /* else if (source.type == SOURCE_TYPE_3POS) - v1 = 13; */ - else if (source.type == SOURCE_TYPE_CYC) - v1 = 14+source.index; - else if (source.type == SOURCE_TYPE_PPM) - v1 = 17+source.index; - else if (source.type == SOURCE_TYPE_CH) - v1 = 25+source.index; - else if (source.type == SOURCE_TYPE_TELEMETRY) - v1 = 56+source.index; - return v1; -} - RawSource open9xArm209ToSource(int8_t value) { if (value == 0) { @@ -160,30 +87,6 @@ RawSource open9xArm209ToSource(int8_t value) } } -int8_t open9xArm210FromSource(RawSource source) -{ - int v1 = 0; - if (source.type == SOURCE_TYPE_STICK) - v1 = 1+source.index; - else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) - v1 = 8; - else if (source.type == SOURCE_TYPE_TRIM) - v1 = 9 + source.index; - else if (source.type == SOURCE_TYPE_MAX) - v1 = 13; - /* else if (source.type == SOURCE_TYPE_3POS) - v1 = 14; */ - else if (source.type == SOURCE_TYPE_CYC) - v1 = 15+source.index; - else if (source.type == SOURCE_TYPE_PPM) - v1 = 18+source.index; - else if (source.type == SOURCE_TYPE_CH) - v1 = 26+source.index; - else if (source.type == SOURCE_TYPE_TELEMETRY) - v1 = 57+source.index; - return v1; -} - RawSource open9xArm210ToSource(int8_t value) { if (value == 0) { @@ -239,88 +142,6 @@ t_Open9xArmTimerData_v202::operator TimerData () return c9x; } -t_Open9xArmTimerData_v202::t_Open9xArmTimerData_v202(TimerData &c9x) -{ - val = c9x.val; - - if (c9x.mode >= TMRMODE_OFF && c9x.mode <= TMRMODE_THt) - mode = 0+c9x.mode-TMRMODE_OFF; - else if (c9x.mode >= TMRMODE_FIRST_MOMENT_SWITCH) - mode = 46+c9x.mode-TMRMODE_FIRST_MOMENT_SWITCH; - else if (c9x.mode >= TMRMODE_FIRST_SWITCH) - mode = 5+c9x.mode-TMRMODE_FIRST_SWITCH; - else if (c9x.mode <= TMRMODE_FIRST_NEG_MOMENT_SWITCH) - mode = -42+c9x.mode-TMRMODE_FIRST_NEG_MOMENT_SWITCH; - else if (c9x.mode <= TMRMODE_FIRST_NEG_SWITCH) - mode = -1+c9x.mode-TMRMODE_FIRST_NEG_SWITCH; - else - mode = 0; -} - -t_Open9xArmExpoData_v208::t_Open9xArmExpoData_v208(ExpoData &c9x) -{ - mode = c9x.mode; - chn = c9x.chn; - // 0=no curve, 1-6=std curves, 7-10=CV1-CV4, 11-15=CV9-CV13 - curve = 0; - expo = 0; - if (c9x.curveMode==1) { - if (c9x.curveParam >=0 && c9x.curveParam <= 10) - curve = c9x.curveParam; - else if (c9x.curveParam >= 15 && c9x.curveParam <= 19) - curve = c9x.curveParam - 4; - else - EEPROMWarnings += ::QObject::tr("Open9x doesn't allow Curve%1 in expos").arg(c9x.curveParam-6) + "\n"; - } - else { - expo=c9x.curveParam; - } - - swtch = open9xArmFromSwitch(c9x.swtch); - int zeros=0; - int ones=0; - int phtemp=c9x.phases; - for (int i=0; i>=1; - } - if (zeros==O9X_MAX_PHASES || zeros==0) { - phase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=-(ph+1); - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight modes settings on expos not exported") + "\n"; - } - - weight = c9x.weight; - expo = c9x.expo; -} - t_Open9xArmExpoData_v208::operator ExpoData () { ExpoData c9x; @@ -332,14 +153,10 @@ t_Open9xArmExpoData_v208::operator ExpoData () } else { if (curve == 0) { - c9x.curveMode=0; - c9x.curveParam=expo; - } else { - c9x.curveMode=1; - if (curve <= 10) - c9x.curveParam = curve; - else - c9x.curveParam = curve + 4; + c9x.curve = CurveReference(CurveReference::CURVE_REF_EXPO, expo); + } + else { + // TODO } } c9x.swtch = open9xArmToSwitch(swtch); @@ -355,70 +172,6 @@ t_Open9xArmExpoData_v208::operator ExpoData () return c9x; } -t_Open9xArmExpoData_v210::t_Open9xArmExpoData_v210(ExpoData &c9x) -{ - mode = c9x.mode; - chn = c9x.chn; - // 0=no curve, 1-6=std curves, 7-10=CV1-CV4, 11-15=CV9-CV13 - curve = 0; - expo = 0; - if (c9x.curveMode==1) { - if (c9x.curveParam >=0 && c9x.curveParam <= 10) - curve = c9x.curveParam; - else if (c9x.curveParam >= 15 && c9x.curveParam <= 19) - curve = c9x.curveParam - 4; - else - EEPROMWarnings += ::QObject::tr("Open9x doesn't allow Curve%1 in expos").arg(c9x.curveParam-6) + "\n"; - } - else { - expo=c9x.curveParam; - } - - swtch = open9xArmFromSwitch(c9x.swtch); - int zeros=0; - int ones=0; - int phtemp=c9x.phases; - for (int i=0; i>=1; - } - if (zeros==O9X_MAX_PHASES || zeros==0) { - phase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=-(ph+1); - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight modes settings on expos not exported") + "\n"; - } - weight = c9x.weight; - expo = c9x.expo; - setEEPROMZString(name, c9x.name, sizeof(name)); -} - t_Open9xArmExpoData_v210::operator ExpoData () { ExpoData c9x; @@ -430,53 +183,36 @@ t_Open9xArmExpoData_v210::operator ExpoData () } else { if (curve == 0) { - c9x.curveMode=0; - c9x.curveParam=expo; + c9x.curve = CurveReference(CurveReference::CURVE_REF_EXPO, expo); } else { - c9x.curveMode=1; - if (curve <= 10) - c9x.curveParam = curve; - else - c9x.curveParam = curve + 4; + // TODO } } c9x.swtch = open9xArmToSwitch(swtch); if (phase<0) { c9x.phases= 1 << (-phase -1); - } else if (phase==0) { + } + else if (phase==0) { c9x.phases=0; - } else { + } + else { c9x.phases=63; c9x.phases &= ~(1 << (phase -1)); } c9x.weight = weight; - c9x.expo = expo; getEEPROMZString(c9x.name, name, sizeof(name)); return c9x; } -t_Open9xArmExpoData_v212::t_Open9xArmExpoData_v212(ExpoData &c9x) -{ - mode = c9x.mode; - chn = c9x.chn; - // 0=no curve, 1-6=std curves, 7-10=CV1-CV4, 11-15=CV9-CV13 - curveParam=c9x.curveParam; - curveMode=c9x.curveMode; - swtch = open9xArmFromSwitch(c9x.swtch); - phases=c9x.phases; - weight = c9x.weight; - setEEPROMZString(name, c9x.name, sizeof(name)); -} - t_Open9xArmExpoData_v212::operator ExpoData () { ExpoData c9x; c9x.mode = mode; c9x.chn = chn; - c9x.curveMode=curveMode; - c9x.curveParam=curveParam; + // TODO c9x.curveMode=curveMode; + // c9x.curveParam=curveParam; c9x.swtch = open9xArmToSwitch(swtch); c9x.phases= phases; c9x.weight = weight; @@ -496,16 +232,6 @@ t_Open9xArmPhaseData_v208::operator PhaseData () return c9x; } -t_Open9xArmPhaseData_v208::t_Open9xArmPhaseData_v208(PhaseData &c9x) -{ - for (int i=0; i>=1; - } - if (zeros==O9X_ARM_MAX_PHASES || zeros==0) { - phase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=-(ph+1); - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n"; - } - sOffset = c9x.sOffset; - } - else { - memset(this, 0, sizeof(t_Open9xArmMixData_v208)); - } -} - t_Open9xArmMixData_v208::operator MixData () { MixData c9x; @@ -646,9 +275,15 @@ t_Open9xArmMixData_v208::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-10-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM); } c9x.weight = weight; - c9x.differential = differential*2; c9x.swtch = open9xArmToSwitch(swtch); - c9x.curve = curve; + + 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; @@ -656,109 +291,23 @@ t_Open9xArmMixData_v208::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; -// c9x.phase = phase; + if (phase<0) { c9x.phases= 1 << (-phase -1); - } else if (phase==0) { + } + else if (phase==0) { c9x.phases=0; - } else { + } + else { c9x.phases=511; c9x.phases &= ~(1 << (phase -1)); - } + } + c9x.sOffset = sOffset; } return c9x; } -t_Open9xArmMixData_v209::t_Open9xArmMixData_v209(MixData &c9x) -{ - if (c9x.destCh) { - destCh = c9x.destCh-1; - mixWarn = c9x.mixWarn; - swtch = open9xArmFromSwitch(c9x.swtch); - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 8; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) { - srcRaw = 9 + c9x.srcRaw.index; - } - /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) { - srcRaw = 13; - } */ - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 13 + open9xArmFromSwitch(RawSwitch(c9x.srcRaw.index)); - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 14+9+O9X_ARM_NUM_CSW + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 14+9+O9X_ARM_NUM_CSW+NUM_CYC + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 14+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM + c9x.srcRaw.index; - } - weight = c9x.weight; - differential = c9x.differential/2; - curve = c9x.curve; - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - carryTrim = c9x.carryTrim; - mltpx = (MltpxValue)c9x.mltpx; - int zeros=0; - int ones=0; - int phtemp=c9x.phases; - for (int i=0; i>=1; - } - if (zeros==O9X_ARM_MAX_PHASES || zeros==0) { - phase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=-(ph+1); - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n"; - } - sOffset = c9x.sOffset; - } - else { - memset(this, 0, sizeof(t_Open9xArmMixData_v209)); - } -} - t_Open9xArmMixData_v209::operator MixData () { MixData c9x; @@ -792,9 +341,15 @@ t_Open9xArmMixData_v209::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM); } c9x.weight = weight; - c9x.differential = differential*2; + + if (differential) { + c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2); + } + else { + // TODO c9x.curve = curve; + } + c9x.swtch = open9xArmToSwitch(swtch); - c9x.curve = curve; c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; @@ -802,110 +357,23 @@ t_Open9xArmMixData_v209::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; - // c9x.phase = phase; + if (phase<0) { c9x.phases= 1 << (-phase -1); - } else if (phase==0) { + } + else if (phase==0) { c9x.phases=0; - } else { + } + else { c9x.phases=511; c9x.phases &= ~(1 << (phase -1)); - } + } + c9x.sOffset = sOffset; } return c9x; } -t_Open9xArmMixData_v210::t_Open9xArmMixData_v210(MixData &c9x) -{ - if (c9x.destCh) { - destCh = c9x.destCh-1; - mixWarn = c9x.mixWarn; - swtch = open9xArmFromSwitch(c9x.swtch); - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) { - srcRaw = 8 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 12; - } - /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) { - srcRaw = 13; - } */ - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 13 + open9xArmFromSwitch(RawSwitch(c9x.srcRaw.index)); - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 14+9+O9X_ARM_NUM_CSW + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 14+9+O9X_ARM_NUM_CSW+NUM_CYC + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 14+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM + c9x.srcRaw.index; - } - weight = c9x.weight; - differential = c9x.differential/2; - curve = c9x.curve; - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - carryTrim = c9x.carryTrim; - mltpx = (MltpxValue)c9x.mltpx; - int zeros=0; - int ones=0; - int phtemp=c9x.phases; - for (int i=0; i>=1; - } - if (zeros==O9X_ARM_MAX_PHASES || zeros==0) { - phase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=-(ph+1); - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n"; - } - sOffset = c9x.sOffset; - setEEPROMZString(name, c9x.name, sizeof(name)); - } - else { - memset(this, 0, sizeof(t_Open9xArmMixData_v210)); - } -} - t_Open9xArmMixData_v210::operator MixData () { MixData c9x; @@ -939,9 +407,15 @@ t_Open9xArmMixData_v210::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM); } c9x.weight = weight; - c9x.differential = differential*2; + + if (differential) { + c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, differential*2); + } + else { + // TODO c9x.curve = curve; + } + c9x.swtch = open9xArmToSwitch(swtch); - c9x.curve = curve; c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; @@ -949,82 +423,24 @@ t_Open9xArmMixData_v210::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; - // c9x.phase = phase; + if (phase<0) { c9x.phases= 1 << (-phase -1); - } else if (phase==0) { + } + else if (phase==0) { c9x.phases=0; - } else { + } + else { c9x.phases=511; c9x.phases &= ~(1 << (phase -1)); } + c9x.sOffset = sOffset; getEEPROMZString(c9x.name, name, sizeof(name)); } return c9x; } -t_Open9xArmMixData_v212::t_Open9xArmMixData_v212(MixData &c9x) -{ - if (c9x.destCh) { - destCh = c9x.destCh-1; - mixWarn = c9x.mixWarn; - swtch = open9xArmFromSwitch(c9x.swtch); - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) { - srcRaw = 8; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) { - srcRaw = 9 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 13; - } - /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) { - srcRaw = 14; - } */ - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 14 + open9xArmFromSwitch(RawSwitch(c9x.srcRaw.index)); - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 15+9+O9X_ARM_NUM_CSW + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 15+9+O9X_ARM_NUM_CSW+NUM_CYC + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 15+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM + c9x.srcRaw.index; - } - weight = c9x.weight; - if (c9x.curve==0) { - curveMode=0; - curveParam=c9x.differential; - } else { - curveMode=1; - curveParam = c9x.curve; - } - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - carryTrim = c9x.carryTrim; - noExpo = c9x.noExpo; - mltpx = (MltpxValue)c9x.mltpx; - phases = c9x.phases; - sOffset = c9x.sOffset; - setEEPROMZString(name, c9x.name, sizeof(name)); - } - else { - memset(this, 0, sizeof(t_Open9xArmMixData_v210)); - } -} - t_Open9xArmMixData_v212::operator MixData () { MixData c9x; @@ -1061,12 +477,14 @@ t_Open9xArmMixData_v212::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-15-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM); } c9x.weight = weight; + if (curveMode==0) { - c9x.differential = curveParam; - c9x.curve=0; - } else { - c9x.curve=curveParam; - } + c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, curveParam); + } + else { + // TODO + } + c9x.swtch = open9xArmToSwitch(swtch); c9x.delayUp = delayUp; c9x.delayDown = delayDown; @@ -1083,33 +501,6 @@ t_Open9xArmMixData_v212::operator MixData () return c9x; } -t_Open9xArmCustomSwData_v208::t_Open9xArmCustomSwData_v208(CustomSwData &c9x) -{ - func = c9x.func; - v1 = c9x.val1; - v2 = c9x.val2; - - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - v1 = open9xArm208FromSource(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL) { - v2 = open9xArm208FromSource(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - v1 = open9xArmFromSwitch(RawSwitch(c9x.val1)); - v2 = open9xArmFromSwitch(RawSwitch(c9x.val2)); - } - - if (func>O9X_ARM_MAX_CSFUNCOLD ) { - EEPROMWarnings += ::QObject::tr("This version of open9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n"; - func=0; - v1=0; - v2=0; - } -} - t_Open9xArmCustomSwData_v208::operator CustomSwData () { CustomSwData c9x; @@ -1133,33 +524,6 @@ t_Open9xArmCustomSwData_v208::operator CustomSwData () return c9x; } -t_Open9xArmCustomSwData_v209::t_Open9xArmCustomSwData_v209(CustomSwData &c9x) -{ - func = c9x.func; - v1 = c9x.val1; - v2 = c9x.val2; - - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - v1 = open9xArm209FromSource(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL) { - v2 = open9xArm209FromSource(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - v1 = open9xArmFromSwitch(RawSwitch(c9x.val1)); - v2 = open9xArmFromSwitch(RawSwitch(c9x.val2)); - } - - if (func>O9X_ARM_MAX_CSFUNCOLD ) { - EEPROMWarnings += ::QObject::tr("This version of open9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n"; - func=0; - v1=0; - v2=0; - } -} - t_Open9xArmCustomSwData_v209::operator CustomSwData () { CustomSwData c9x; @@ -1183,28 +547,6 @@ t_Open9xArmCustomSwData_v209::operator CustomSwData () return c9x; } -t_Open9xArmCustomSwData_v210::t_Open9xArmCustomSwData_v210(CustomSwData &c9x) -{ - func = c9x.func; - v1 = c9x.val1; - v2 = c9x.val2; - - delay = c9x.delay; - duration = c9x.duration; - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - v1 = open9xArm210FromSource(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) { - v2 = open9xArm210FromSource(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - v1 = open9xArmFromSwitch(RawSwitch(c9x.val1)); - v2 = open9xArmFromSwitch(RawSwitch(c9x.val2)); - } -} - t_Open9xArmCustomSwData_v210::operator CustomSwData () { CustomSwData c9x; @@ -1230,21 +572,6 @@ t_Open9xArmCustomSwData_v210::operator CustomSwData () return c9x; } -t_Open9xArmFuncSwData_v208::t_Open9xArmFuncSwData_v208(FuncSwData &c9x) -{ - swtch = open9xArmFromSwitch(c9x.swtch); - if (c9x.func <= FuncSafetyCh16) { - param = ((c9x.param>>1)<<1); - param |=(c9x.enabled & 0x01); - } else { - param = c9x.param; - if ((c9x.func == FuncPlayValue || c9x.func == FuncVolume) && param > 7) { - param -= -2; - } - } - func = c9x.func; -} - t_Open9xArmFuncSwData_v208::operator FuncSwData () { FuncSwData c9x; @@ -1263,29 +590,6 @@ t_Open9xArmFuncSwData_v208::operator FuncSwData () return c9x; } -t_Open9xArmFuncSwData_v210::t_Open9xArmFuncSwData_v210(FuncSwData &c9x) -{ - swtch = open9xArmFromSwitch(c9x.swtch); - uint32_t value; - if (c9x.func <= FuncInstantTrim) { - value = ((c9x.param>>1)<<1); - value |=(c9x.enabled & 0x01); - } - else { - if (c9x.func == FuncPlayPrompt || c9x.func == FuncBackgroundMusic) { - memcpy(param, c9x.paramarm, sizeof(param)); - } - else { - value = c9x.param; - if ((c9x.func == FuncPlayValue || c9x.func == FuncVolume) && value > 7) { - value-=2; - } - *((uint32_t *)param) = value; - } - } - func = c9x.func; -} - t_Open9xArmFuncSwData_v210::operator FuncSwData () { FuncSwData c9x; @@ -1310,30 +614,6 @@ t_Open9xArmFuncSwData_v210::operator FuncSwData () return c9x; } -t_Open9xArmFuncSwData_v211::t_Open9xArmFuncSwData_v211(FuncSwData &c9x) -{ - swtch = open9xArmFromSwitch(c9x.swtch); - uint32_t value; - if (c9x.func <= FuncInstantTrim) { - value = c9x.param; - *((uint32_t *)param) = value; - delay=(c9x.enabled & 0x01); - } - else { - if (c9x.func == FuncPlayPrompt || c9x.func == FuncBackgroundMusic) { - memcpy(param, c9x.paramarm, sizeof(param)); - } - else { - value = c9x.param; - if ((c9x.func == FuncPlayValue || c9x.func == FuncVolume || (c9x.func >= FuncAdjustGV1 && c9x.func <= FuncAdjustGV5)) && value > 7) { - value--; - } - *((uint32_t *)param) = value; - } - } - func = c9x.func; -} - t_Open9xArmFuncSwData_v211::operator FuncSwData () { FuncSwData c9x; @@ -1358,16 +638,6 @@ t_Open9xArmFuncSwData_v211::operator FuncSwData () return c9x; } -t_Open9xArmSwashRingData_v208::t_Open9xArmSwashRingData_v208(SwashRingData &c9x) -{ - invertELE = c9x.invertELE; - invertAIL = c9x.invertAIL; - invertCOL = c9x.invertCOL; - type = c9x.type; - collectiveSource = open9xArm208FromSource(c9x.collectiveSource); - value = c9x.value; -} - t_Open9xArmSwashRingData_v208::operator SwashRingData () { SwashRingData c9x; @@ -1380,16 +650,6 @@ t_Open9xArmSwashRingData_v208::operator SwashRingData () return c9x; } -t_Open9xArmSwashRingData_v209::t_Open9xArmSwashRingData_v209(SwashRingData &c9x) -{ - invertELE = c9x.invertELE; - invertAIL = c9x.invertAIL; - invertCOL = c9x.invertCOL; - type = c9x.type; - collectiveSource = open9xArm209FromSource(c9x.collectiveSource); - value = c9x.value; -} - t_Open9xArmSwashRingData_v209::operator SwashRingData () { SwashRingData c9x; @@ -1402,16 +662,6 @@ t_Open9xArmSwashRingData_v209::operator SwashRingData () return c9x; } -t_Open9xArmSwashRingData_v210::t_Open9xArmSwashRingData_v210(SwashRingData &c9x) -{ - invertELE = c9x.invertELE; - invertAIL = c9x.invertAIL; - invertCOL = c9x.invertCOL; - type = c9x.type; - collectiveSource = open9xArm210FromSource(c9x.collectiveSource); - value = c9x.value; -} - t_Open9xArmSwashRingData_v210::operator SwashRingData () { SwashRingData c9x; @@ -1452,31 +702,6 @@ t_Open9xArmFrSkyData_v210::operator FrSkyData () return c9x; } -t_Open9xArmFrSkyData_v210::t_Open9xArmFrSkyData_v210(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Open9xArmFrSkyData_v210)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; - usrProto = c9x.usrProto; - voltsSource = c9x.voltsSource; - blades = c9x.blades; - currentSource=c9x.currentSource; - for (int i=0; i<4; i++) { - bars[i].source = c9x.screens[0].body.bars[i].source; - bars[i].barMin = c9x.screens[0].body.bars[i].barMin; - bars[i].barMax = c9x.screens[0].body.bars[i].barMax; - } - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - int i=line*2+col; - lines[i]=c9x.screens[1].body.lines[line].source[col]; - } - } - rssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.rssiAlarms[0]); - rssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.rssiAlarms[1]); -} - - t_Open9xArmFrSkyData_v211::operator FrSkyData () { FrSkyData c9x; @@ -1509,33 +734,6 @@ t_Open9xArmFrSkyData_v211::operator FrSkyData () return c9x; } -t_Open9xArmFrSkyData_v211::t_Open9xArmFrSkyData_v211(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Open9xArmFrSkyData_v211)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; - usrProto = c9x.usrProto; - voltsSource = c9x.voltsSource; - blades = c9x.blades; - currentSource=c9x.currentSource; - for (int i=0; i<4; i++) { - bars[i].source = c9x.screens[0].body.bars[i].source; - bars[i].barMin = c9x.screens[0].body.bars[i].barMin; - bars[i].barMax = c9x.screens[0].body.bars[i].barMax; - } - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - int i=line*2+col; - lines[i]=c9x.screens[1].body.lines[line].source[col]; - } - } - rssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.rssiAlarms[0]); - rssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.rssiAlarms[1]); - varioSource = c9x.varioSource; - varioSpeedUpMin = c9x.varioCenterMax; - varioSpeedDownMin = c9x.varioCenterMin; -} - t_Open9xArmModelData_v208::operator ModelData () { ModelData c9x; @@ -1587,7 +785,6 @@ t_Open9xArmModelData_v208::operator ModelData () for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - varioSource = c9x.frsky.varioSource; - varioSpeedUpMin = c9x.frsky.varioCenterMax; - varioSpeedDownMin = c9x.frsky.varioCenterMin; - - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - frskyLinesXtra=0; - for (int j=0; j<4; j++) { - frskyLines[j] = 0; - for (int k=0; k<2; k++) { - int value = c9x.frsky.screens[1].body.lines[j].source[k]; - frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4)); - frskyLinesXtra |= (value / 16) << (4*j+2*k); - } - } - for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - varioSource = c9x.frsky.varioSource; - varioSpeedUpMin = c9x.frsky.varioCenterMax; - varioSpeedDownMin = c9x.frsky.varioCenterMin; - switchWarningStates = c9x.switchWarningStates; - - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - frskyLinesXtra=0; - for (int j=0; j<4; j++) { - frskyLines[j] = 0; - for (int k=0; k<2; k++) { - int value = c9x.frsky.screens[1].body.lines[j].source[k]; - frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4)); - frskyLinesXtra |= (value / 16) << (4*j+2*k); - } - } - for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - varioSource = c9x.frsky.varioSource; - varioSpeedUpMin = c9x.frsky.varioCenterMax; - varioSpeedDownMin = c9x.frsky.varioCenterMin; - switchWarningStates = c9x.switchWarningStates; - - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - - for (int i=0; i O9X_ARM_NUM_POINTS - 5 * O9X_ARM_MAX_CURVES) { - EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_ARM_NUM_POINTS) + "\n"; - break; - } - curves[i] = offset; - for (int j=0; j= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - switchWarningStates = c9x.switchWarningStates; - - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - - for (int i=0; i O9X_ARM_NUM_POINTS - 5 * O9X_ARM_MAX_CURVES) { - EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_ARM_NUM_POINTS) + "\n"; - break; - } - curves[i] = offset; - for (int j=0; j= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - switchWarningStates = c9x.switchWarningStates; - - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - } -} diff --git a/companion/src/firmwares/opentx/open9xSky9xeeprom.h b/companion/src/firmwares/opentx/open9xSky9xeeprom.h index 1c28d6d18..b313169b8 100644 --- a/companion/src/firmwares/opentx/open9xSky9xeeprom.h +++ b/companion/src/firmwares/opentx/open9xSky9xeeprom.h @@ -36,7 +36,6 @@ PACK(typedef struct t_Open9xArmTimerData_v202 { operator TimerData(); t_Open9xArmTimerData_v202() { memset(this, 0, sizeof(t_Open9xArmTimerData_v202)); } - t_Open9xArmTimerData_v202(TimerData &eepe); }) Open9xArmTimerData_v202; PACK(typedef struct t_Open9xArmExpoData_v208 { @@ -50,8 +49,6 @@ PACK(typedef struct t_Open9xArmExpoData_v208 { operator ExpoData(); t_Open9xArmExpoData_v208() { memset(this, 0, sizeof(t_Open9xArmExpoData_v208)); } - t_Open9xArmExpoData_v208(ExpoData&); - }) Open9xArmExpoData_v208; PACK(typedef struct t_Open9xArmExpoData_v210 { @@ -67,8 +64,6 @@ PACK(typedef struct t_Open9xArmExpoData_v210 { operator ExpoData(); t_Open9xArmExpoData_v210() { memset(this, 0, sizeof(t_Open9xArmExpoData_v210)); } - t_Open9xArmExpoData_v210(ExpoData&); - }) Open9xArmExpoData_v210; PACK(typedef struct t_Open9xArmExpoData_v212 { @@ -83,8 +78,6 @@ PACK(typedef struct t_Open9xArmExpoData_v212 { operator ExpoData(); t_Open9xArmExpoData_v212() { memset(this, 0, sizeof(t_Open9xArmExpoData_v212)); } - t_Open9xArmExpoData_v212(ExpoData&); - }) Open9xArmExpoData_v212; PACK(typedef struct t_Open9xArmMixData_v208 { @@ -106,8 +99,6 @@ PACK(typedef struct t_Open9xArmMixData_v208 { operator MixData(); t_Open9xArmMixData_v208() { memset(this, 0, sizeof(t_Open9xArmMixData_v208)); } - t_Open9xArmMixData_v208(MixData&); - }) Open9xArmMixData_v208; PACK(typedef struct t_Open9xArmMixData_v209 { @@ -129,8 +120,6 @@ PACK(typedef struct t_Open9xArmMixData_v209 { operator MixData(); t_Open9xArmMixData_v209() { memset(this, 0, sizeof(t_Open9xArmMixData_v209)); } - t_Open9xArmMixData_v209(MixData&); - }) Open9xArmMixData_v209; PACK(typedef struct t_Open9xArmMixData_v210 { @@ -154,8 +143,6 @@ PACK(typedef struct t_Open9xArmMixData_v210 { operator MixData(); t_Open9xArmMixData_v210() { memset(this, 0, sizeof(t_Open9xArmMixData_v210)); } - t_Open9xArmMixData_v210(MixData&); - }) Open9xArmMixData_v210; PACK(typedef struct t_Open9xArmMixData_v212 { @@ -180,8 +167,6 @@ PACK(typedef struct t_Open9xArmMixData_v212 { operator MixData(); t_Open9xArmMixData_v212() { memset(this, 0, sizeof(t_Open9xArmMixData_v212)); } - t_Open9xArmMixData_v212(MixData&); - }) Open9xArmMixData_v212; PACK(typedef struct t_Open9xArmPhaseData_v208 { @@ -192,7 +177,6 @@ PACK(typedef struct t_Open9xArmPhaseData_v208 { uint8_t fadeOut:4; operator PhaseData(); t_Open9xArmPhaseData_v208() { memset(this, 0, sizeof(t_Open9xArmPhaseData_v208)); } - t_Open9xArmPhaseData_v208(PhaseData &eepe); }) Open9xArmPhaseData_v208; PACK(typedef struct t_Open9xArmPhaseData_v212 { @@ -204,7 +188,6 @@ PACK(typedef struct t_Open9xArmPhaseData_v212 { int16_t rotaryEncoders[1]; operator PhaseData(); t_Open9xArmPhaseData_v212() { memset(this, 0, sizeof(t_Open9xArmPhaseData_v212)); } - t_Open9xArmPhaseData_v212(PhaseData &eepe); }) Open9xArmPhaseData_v212; PACK(typedef struct t_Open9xArmCustomSwData_v208 { // Custom Switches data @@ -214,7 +197,6 @@ PACK(typedef struct t_Open9xArmCustomSwData_v208 { // Custom Switches data operator CustomSwData(); t_Open9xArmCustomSwData_v208() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v208)); } - t_Open9xArmCustomSwData_v208(CustomSwData&); }) Open9xArmCustomSwData_v208; PACK(typedef struct t_Open9xArmCustomSwData_v209 { // Custom Switches data @@ -224,7 +206,6 @@ PACK(typedef struct t_Open9xArmCustomSwData_v209 { // Custom Switches data operator CustomSwData(); t_Open9xArmCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v209)); } - t_Open9xArmCustomSwData_v209(CustomSwData&); }) Open9xArmCustomSwData_v209; PACK(typedef struct t_Open9xArmCustomSwData_v210 { // Custom Switches data @@ -236,7 +217,6 @@ PACK(typedef struct t_Open9xArmCustomSwData_v210 { // Custom Switches data operator CustomSwData(); t_Open9xArmCustomSwData_v210() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v210)); } - t_Open9xArmCustomSwData_v210(CustomSwData&); }) Open9xArmCustomSwData_v210; PACK(typedef struct t_Open9xArmFuncSwData_v208 { // Function Switches data @@ -246,8 +226,6 @@ PACK(typedef struct t_Open9xArmFuncSwData_v208 { // Function Switches data operator FuncSwData(); t_Open9xArmFuncSwData_v208() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v208)); } - t_Open9xArmFuncSwData_v208(FuncSwData&); - }) Open9xArmFuncSwData_v208; PACK(typedef struct t_Open9xArmFuncSwData_v210 { // Function Switches data @@ -257,8 +235,6 @@ PACK(typedef struct t_Open9xArmFuncSwData_v210 { // Function Switches data operator FuncSwData(); t_Open9xArmFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v210)); } - t_Open9xArmFuncSwData_v210(FuncSwData&); - }) Open9xArmFuncSwData_v210; PACK(typedef struct t_Open9xArmFuncSwData_v211 { // Function Switches data @@ -270,8 +246,6 @@ PACK(typedef struct t_Open9xArmFuncSwData_v211 { // Function Switches data operator FuncSwData(); t_Open9xArmFuncSwData_v211() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v211)); } - t_Open9xArmFuncSwData_v211(FuncSwData&); - }) Open9xArmFuncSwData_v211; PACK(typedef struct t_Open9xArmSwashRingData_v208 { // Swash Ring data @@ -284,8 +258,6 @@ PACK(typedef struct t_Open9xArmSwashRingData_v208 { // Swash Ring data operator SwashRingData(); t_Open9xArmSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v208)); } - t_Open9xArmSwashRingData_v208(SwashRingData&); - }) Open9xArmSwashRingData_v208; PACK(typedef struct t_Open9xArmSwashRingData_v209 { // Swash Ring data @@ -298,8 +270,6 @@ PACK(typedef struct t_Open9xArmSwashRingData_v209 { // Swash Ring data operator SwashRingData(); t_Open9xArmSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v209)); } - t_Open9xArmSwashRingData_v209(SwashRingData&); - }) Open9xArmSwashRingData_v209; PACK(typedef struct t_Open9xArmSwashRingData_v210 { // Swash Ring data @@ -312,8 +282,6 @@ PACK(typedef struct t_Open9xArmSwashRingData_v210 { // Swash Ring data operator SwashRingData(); t_Open9xArmSwashRingData_v210() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v210)); } - t_Open9xArmSwashRingData_v210(SwashRingData&); - }) Open9xArmSwashRingData_v210; @@ -336,7 +304,6 @@ PACK(typedef struct t_Open9xArmFrSkyData_v210 { operator FrSkyData(); t_Open9xArmFrSkyData_v210() { memset(this, 0, sizeof(t_Open9xArmFrSkyData_v210)); } - t_Open9xArmFrSkyData_v210(FrSkyData&); }) Open9xArmFrSkyData_v210; PACK(typedef struct t_Open9xArmFrSkyData_v211 { @@ -355,7 +322,6 @@ PACK(typedef struct t_Open9xArmFrSkyData_v211 { operator FrSkyData(); t_Open9xArmFrSkyData_v211() { memset(this, 0, sizeof(t_Open9xArmFrSkyData_v211)); } - t_Open9xArmFrSkyData_v211(FrSkyData&); }) Open9xArmFrSkyData_v211; PACK(typedef struct t_Open9xArmModelData_v208 { @@ -395,8 +361,6 @@ PACK(typedef struct t_Open9xArmModelData_v208 { operator ModelData(); t_Open9xArmModelData_v208() { memset(this, 0, sizeof(t_Open9xArmModelData_v208)); } - t_Open9xArmModelData_v208(ModelData&); - }) Open9xArmModelData_v208; PACK(typedef struct t_Open9xArmModelData_v209 { @@ -437,8 +401,6 @@ PACK(typedef struct t_Open9xArmModelData_v209 { operator ModelData(); t_Open9xArmModelData_v209() { memset(this, 0, sizeof(t_Open9xArmModelData_v209)); } - t_Open9xArmModelData_v209(ModelData&); - }) Open9xArmModelData_v209; PACK(typedef struct t_Open9xArmModelData_v210 { @@ -477,7 +439,6 @@ PACK(typedef struct t_Open9xArmModelData_v210 { operator ModelData(); t_Open9xArmModelData_v210() { memset(this, 0, sizeof(t_Open9xArmModelData_v210)); } - t_Open9xArmModelData_v210(ModelData&); }) Open9xArmModelData_v210; @@ -517,8 +478,6 @@ PACK(typedef struct t_Open9xArmModelData_v211 { operator ModelData(); t_Open9xArmModelData_v211() { memset(this, 0, sizeof(t_Open9xArmModelData_v211)); } - t_Open9xArmModelData_v211(ModelData&); - }) Open9xArmModelData_v211; PACK(typedef struct t_Open9xArmModelData_v212 { @@ -555,8 +514,6 @@ PACK(typedef struct t_Open9xArmModelData_v212 { operator ModelData(); t_Open9xArmModelData_v212() { memset(this, 0, sizeof(t_Open9xArmModelData_v212)); } - t_Open9xArmModelData_v212(ModelData&); - }) Open9xArmModelData_v212; #endif diff --git a/companion/src/firmwares/opentx/open9xStockeeprom.cpp b/companion/src/firmwares/opentx/open9xStockeeprom.cpp index 274e91be9..0fc602e04 100644 --- a/companion/src/firmwares/opentx/open9xStockeeprom.cpp +++ b/companion/src/firmwares/opentx/open9xStockeeprom.cpp @@ -62,28 +62,6 @@ void getEEPROMZString(char *dst, const char *src, int size) } } -int8_t open9xStockFromSwitch(const RawSwitch & sw) -{ - switch (sw.type) { - case SWITCH_TYPE_SWITCH: - return sw.index; - case SWITCH_TYPE_VIRTUAL: - return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index); - case SWITCH_TYPE_ON: - return 22; - case SWITCH_TYPE_OFF: - return -22; - case SWITCH_TYPE_MOMENT_SWITCH: - return sw.index > 0 ? (22 + sw.index) : (-22 + sw.index); - case SWITCH_TYPE_MOMENT_VIRTUAL: - return sw.index > 0 ? (31 + sw.index) : (-31 + sw.index); - case SWITCH_TYPE_ONM: - return 44; - default: - return 0; - } -} - RawSwitch open9xStockToSwitch(int8_t sw) { uint8_t swa = abs(sw); @@ -105,70 +83,6 @@ RawSwitch open9xStockToSwitch(int8_t sw) return RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, sw > 0 ? sw-22-9 : sw+22+9); } -t_Open9xExpoData_v201::t_Open9xExpoData_v201(ExpoData &c9x) -{ - mode = c9x.mode; - chn = c9x.chn; - // 0=no curve, 1-6=std curves, 7-10=CV1-CV4, 11-15=CV9-CV13 - curve = 0; - expo = 0; - if (c9x.curveMode == 1) { - if (c9x.curveParam >=0 && c9x.curveParam <= 10) - curve = c9x.curveParam; - else if (c9x.curveParam >= 15 && c9x.curveParam <= 19) - curve = c9x.curveParam - 4; - else - EEPROMWarnings += ::QObject::tr("Open9x doesn't allow Curve%1 in expos").arg(c9x.curveParam-6) + "\n"; - } - else { - expo=c9x.expo; - } - swtch = open9xStockFromSwitch(c9x.swtch); - int zeros=0; - int ones=0; - int phtemp=c9x.phases; - for (int i=0; i>=1; - } - if (zeros==O9X_MAX_PHASES || zeros==0) { - phase=0; - negPhase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - negPhase=0; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=(ph+1); - negPhase=1; - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight modes settings on expos not exported") + "\n"; - } - weight = c9x.weight; -} - t_Open9xExpoData_v201::operator ExpoData () { ExpoData c9x; @@ -179,15 +93,10 @@ t_Open9xExpoData_v201::operator ExpoData () } else { if (curve == 0) { - c9x.curveMode = 0; - c9x.curveParam = expo; + c9x.curve = CurveReference(CurveReference::CURVE_REF_EXPO, expo); } else { - c9x.curveMode = 1; - if (curve <= 10) - c9x.curveParam = curve; - else - c9x.curveParam = curve + 4; + // TODO } } c9x.swtch = open9xStockToSwitch(swtch); @@ -205,40 +114,18 @@ t_Open9xExpoData_v201::operator ExpoData () return c9x; } -t_Open9xExpoData_v211::t_Open9xExpoData_v211(ExpoData &c9x) -{ - mode = c9x.mode; - chn = c9x.chn; - // 0=no curve, 1-6=std curves, 7-10=CV1-CV4, 11-15=CV9-CV13 - - swtch = open9xStockFromSwitch(c9x.swtch); - phases = c9x.phases; - weight = c9x.weight; - curveMode = c9x.curveMode; - curveParam = c9x.curveParam; -} - t_Open9xExpoData_v211::operator ExpoData () { ExpoData c9x; c9x.mode = mode; c9x.chn = chn; - c9x.curveMode = curveMode; - c9x.curveParam = curveParam; + // TODO c9x.curve c9x.swtch = open9xStockToSwitch(swtch); c9x.phases = phases; c9x.weight = weight; return c9x; } -t_Open9xLimitData_v201::t_Open9xLimitData_v201(LimitData &c9x) -{ - min = c9x.min+100; - max = c9x.max-100; - revert = c9x.revert; - offset = c9x.offset; -} - t_Open9xLimitData_v201::operator LimitData () { LimitData c9x; @@ -249,16 +136,6 @@ t_Open9xLimitData_v201::operator LimitData () return c9x; } -t_Open9xLimitData_v211::t_Open9xLimitData_v211(LimitData &c9x) -{ - min = c9x.min+100; - max = c9x.max-100; - revert = c9x.revert; - offset = c9x.offset; - ppmCenter = c9x.ppmCenter; - symetrical = c9x.symetrical; -} - t_Open9xLimitData_v211::operator LimitData () { LimitData c9x; @@ -271,90 +148,6 @@ t_Open9xLimitData_v211::operator LimitData () return c9x; } -t_Open9xMixData_v201::t_Open9xMixData_v201(MixData &c9x) -{ - destCh = c9x.destCh; - mixWarn = c9x.mixWarn; - swtch = open9xStockFromSwitch(c9x.swtch); - - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("open9x on this board doesn't have Rotary Encoders") + "\n"; - srcRaw = 5 + c9x.srcRaw.index; // use pots instead - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 8; // MAX - } - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 9; // FULL - swtch = open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index)); - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 10 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 13 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 21 + c9x.srcRaw.index; - } - - weight = c9x.weight; - curve = c9x.curve; - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - carryTrim = c9x.carryTrim; - mltpx = (MltpxValue)c9x.mltpx; - int zeros=0; - int ones=0; - int phtemp=c9x.phases; - for (int i=0; i>=1; - } - if (zeros==O9X_MAX_PHASES || zeros==0) { - phase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=-(ph+1); - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n"; - } - sOffset = c9x.sOffset; -} - t_Open9xMixData_v201::operator MixData () { MixData c9x; @@ -395,7 +188,7 @@ t_Open9xMixData_v201::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-21); } - c9x.curve = curve; + // TODO c9x.curve = curve; c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; @@ -403,7 +196,7 @@ t_Open9xMixData_v201::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; -// c9x.phase = phase; + if (phase<0) { c9x.phases= 1 << (-phase -1); } else if (phase==0) { @@ -416,90 +209,6 @@ t_Open9xMixData_v201::operator MixData () return c9x; } -t_Open9xMixData_v203::t_Open9xMixData_v203(MixData &c9x) -{ - destCh = c9x.destCh; - mixWarn = c9x.mixWarn; - swtch = open9xStockFromSwitch(c9x.swtch); - - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("open9x on this board doesn't have Rotary Encoders") + "\n"; - srcRaw = 5 + c9x.srcRaw.index; // use pots instead - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 8; // MAX - } - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 9; // FULL - swtch = open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index)); - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 10 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 13 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 21 + c9x.srcRaw.index; - } - - weight = c9x.weight; - curve = c9x.curve; - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - carryTrim = c9x.carryTrim; - mltpx = (MltpxValue)c9x.mltpx; - int zeros=0; - int ones=0; - int phtemp=c9x.phases; - for (int i=0; i>=1; - } - if (zeros==O9X_MAX_PHASES || zeros==0) { - phase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=-(ph+1); - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n"; - } - sOffset = c9x.sOffset; -} - t_Open9xMixData_v203::operator MixData () { MixData c9x; @@ -540,7 +249,7 @@ t_Open9xMixData_v203::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-21); } - c9x.curve = curve; + // TODO c9x.curve = curve; c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; @@ -548,7 +257,7 @@ t_Open9xMixData_v203::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; - // c9x.phase = phase; + if (phase<0) { c9x.phases= 1 << (-phase -1); } else if (phase==0) { @@ -561,98 +270,6 @@ t_Open9xMixData_v203::operator MixData () return c9x; } -t_Open9xMixData_v205::t_Open9xMixData_v205(MixData &c9x) -{ - if (c9x.destCh) { - destCh = c9x.destCh-1; - mixWarn = c9x.mixWarn; - swtch = open9xStockFromSwitch(c9x.swtch); - - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n"; - srcRaw = 5 + c9x.srcRaw.index; // use pots instead - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 8; // MAX - } - /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) { - srcRaw = 9; - } */ - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 9 + open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index)); - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 31 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 34 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 42 + c9x.srcRaw.index; - } - - weight = c9x.weight; - differential = c9x.differential/2; - curve = c9x.curve; - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - carryTrim = c9x.carryTrim; - mltpx = (MltpxValue)c9x.mltpx; - int zeros=0; - int ones=0; - int phtemp=c9x.phases; - for (int i=0; i>=1; - } - if (zeros==O9X_MAX_PHASES || zeros==0) { - phase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=-(ph+1); - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n"; - } - sOffset = c9x.sOffset; - } - else { - memset(this, 0, sizeof(t_Open9xMixData_v205)); - } -} - t_Open9xMixData_v205::operator MixData () { MixData c9x; @@ -686,8 +303,14 @@ t_Open9xMixData_v205::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-42); } c9x.weight = weight; - c9x.differential = differential*2; - c9x.curve = curve; + + 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; @@ -695,12 +318,14 @@ t_Open9xMixData_v205::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; - // c9x.phase = phase; + if (phase<0) { c9x.phases= 1 << (-phase -1); - } else if (phase==0) { + } + else if (phase==0) { c9x.phases=0; - } else { + } + else { c9x.phases=63; c9x.phases &= ~(1 << (phase -1)); } @@ -709,101 +334,6 @@ t_Open9xMixData_v205::operator MixData () return c9x; } -t_Open9xMixData_v209::t_Open9xMixData_v209(MixData &c9x) -{ - if (c9x.destCh) { - destCh = c9x.destCh-1; - mixWarn = c9x.mixWarn; - swtch = open9xStockFromSwitch(c9x.swtch); - - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n"; - srcRaw = 5 + c9x.srcRaw.index; // use pots instead - } - else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) { - srcRaw = 8 + c9x.srcRaw.index; // use pots instead - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 12; // MAX - } - /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) { - srcRaw = 13; - } */ - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 13 + open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index)); - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 35 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 38 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 46 + c9x.srcRaw.index; - } - - weight = c9x.weight; - differential = c9x.differential/2; - curve = c9x.curve; - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - carryTrim = c9x.carryTrim; - mltpx = (MltpxValue)c9x.mltpx; - int zeros=0; - int ones=0; - int phtemp=c9x.phases; - for (int i=0; i>=1; - } - if (zeros==O9X_MAX_PHASES || zeros==0) { - phase=0; - } else if (zeros==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=ph+1; - } else if (ones==1) { - int phtemp=c9x.phases; - int ph=0; - for (int i=0; i>=1; - } - phase=-(ph+1); - } else { - phase=0; - EEPROMWarnings += ::QObject::tr("Flight modes settings on mixers not exported") + "\n"; - } - sOffset = c9x.sOffset; - } - else { - memset(this, 0, sizeof(t_Open9xMixData_v209)); - } -} - t_Open9xMixData_v209::operator MixData () { MixData c9x; @@ -840,8 +370,14 @@ t_Open9xMixData_v209::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-46); } c9x.weight = weight; - c9x.differential = differential*2; - c9x.curve = curve; + + 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; @@ -849,12 +385,14 @@ t_Open9xMixData_v209::operator MixData () c9x.carryTrim = carryTrim; c9x.mltpx = (MltpxValue)mltpx; c9x.mixWarn = mixWarn; - // c9x.phase = phase; + if (phase<0) { c9x.phases= 1 << (-phase -1); - } else if (phase==0) { + } + else if (phase==0) { c9x.phases=0; - } else { + } + else { c9x.phases=63; c9x.phases &= ~(1 << (phase -1)); } @@ -863,70 +401,6 @@ t_Open9xMixData_v209::operator MixData () return c9x; } -t_Open9xMixData_v211::t_Open9xMixData_v211(MixData &c9x) -{ - if (c9x.destCh) { - destCh = c9x.destCh-1; - mixWarn = c9x.mixWarn; - swtch = open9xStockFromSwitch(c9x.swtch); - - if (c9x.srcRaw.type == SOURCE_TYPE_NONE) { - srcRaw = 0; - swtch = 0; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) { - srcRaw = 1 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n"; - srcRaw = 5 + c9x.srcRaw.index; // use pots instead - } - else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) { - srcRaw = 8 + c9x.srcRaw.index; // use pots instead - } - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) { - srcRaw = 12; // MAX - } - /* else if (c9x.srcRaw.type == SOURCE_TYPE_3POS) { - srcRaw = 13; - } */ - else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) { - srcRaw = 13 + open9xStockFromSwitch(RawSwitch(c9x.srcRaw.index)); - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) { - srcRaw = 35 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) { - srcRaw = 38 + c9x.srcRaw.index; - } - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) { - srcRaw = 46 + c9x.srcRaw.index; - } - - weight = c9x.weight; - if (c9x.curve==0) { - curveMode = 0; - curveParam = c9x.differential; - } - else { - curveMode = 1; - curveParam = c9x.curve; - } - delayUp = c9x.delayUp; - delayDown = c9x.delayDown; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; - carryTrim = c9x.carryTrim; - noExpo = c9x.noExpo; - mltpx = (MltpxValue)c9x.mltpx; - phases = c9x.phases; - sOffset = c9x.sOffset; - } - else { - memset(this, 0, sizeof(t_Open9xMixData_v211)); - } -} - t_Open9xMixData_v211::operator MixData () { MixData c9x; @@ -963,12 +437,14 @@ t_Open9xMixData_v211::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-46); } c9x.weight = weight; + if (curveMode==0) { - c9x.differential = curveParam; - c9x.curve=0; - } else { - c9x.curve=curveParam; + c9x.curve = CurveReference(CurveReference::CURVE_REF_DIFF, curveParam); + } + else { + // TODO c9x.curve = curve; } + c9x.delayUp = delayUp; c9x.delayDown = delayDown; c9x.speedUp = speedUp; @@ -983,30 +459,6 @@ t_Open9xMixData_v211::operator MixData () return c9x; } -int8_t open9x208FromSource(RawSource source) -{ - int v1 = 0; - if (source.type == SOURCE_TYPE_STICK) - v1 = 1+source.index; - else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n"; - v1 = 5+source.index; - } - else if (source.type == SOURCE_TYPE_MAX) - v1 = 8; - /* else if (source.type == SOURCE_TYPE_3POS) - v1 = 9; */ - else if (source.type == SOURCE_TYPE_CYC) - v1 = 10+source.index; - else if (source.type == SOURCE_TYPE_PPM) - v1 = 13+source.index; - else if (source.type == SOURCE_TYPE_CH) - v1 = 21+source.index; - else if (source.type == SOURCE_TYPE_TELEMETRY) - v1 = 36+source.index; - return v1; -} - RawSource open9x208ToSource(int8_t value) { if (value == 0) { @@ -1035,32 +487,6 @@ RawSource open9x208ToSource(int8_t value) } } -int8_t open9xStock209FromSource(RawSource source) -{ - int v1 = 0; - if (source.type == SOURCE_TYPE_STICK) - v1 = 1+source.index; - else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) { - EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n"; - v1 = 5+source.index; - } - else if (source.type == SOURCE_TYPE_TRIM) - v1 = 8+source.index; - else if (source.type == SOURCE_TYPE_MAX) - v1 = 12; - /* else if (source.type == SOURCE_TYPE_3POS) - v1 = 13; */ - else if (source.type == SOURCE_TYPE_CYC) - v1 = 14+source.index; - else if (source.type == SOURCE_TYPE_PPM) - v1 = 17+source.index; - else if (source.type == SOURCE_TYPE_CH) - v1 = 25+source.index; - else if (source.type == SOURCE_TYPE_TELEMETRY) - v1 = 40+source.index; - return v1; -} - RawSource open9xStock209ToSource(int8_t value) { if (value == 0) { @@ -1092,33 +518,6 @@ RawSource open9xStock209ToSource(int8_t value) } } -t_Open9xCustomSwData_v208::t_Open9xCustomSwData_v208(CustomSwData &c9x) -{ - func = c9x.func; - v1 = c9x.val1; - v2 = c9x.val2; - - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - v1 = open9x208FromSource(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL) { - v2 = open9x208FromSource(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - v1 = open9xStockFromSwitch(RawSwitch(c9x.val1)); - v2 = open9xStockFromSwitch(RawSwitch(c9x.val2)); - } - - if (func>O9X_MAX_CSFUNCOLD ) { - EEPROMWarnings += ::QObject::tr("This version of open9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n"; - func=0; - v1=0; - v2=0; - } -} - Open9xCustomSwData_v208::operator CustomSwData () { CustomSwData c9x; @@ -1142,26 +541,6 @@ Open9xCustomSwData_v208::operator CustomSwData () return c9x; } -t_Open9xCustomSwData_v209::t_Open9xCustomSwData_v209(CustomSwData &c9x) -{ - func = c9x.func; - v1 = c9x.val1; - v2 = c9x.val2; - - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - v1 = open9xStock209FromSource(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) { - v2 = open9xStock209FromSource(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - v1 = open9xStockFromSwitch(RawSwitch(c9x.val1)); - v2 = open9xStockFromSwitch(RawSwitch(c9x.val2)); - } -} - Open9xCustomSwData_v209::operator CustomSwData () { CustomSwData c9x; @@ -1185,12 +564,6 @@ Open9xCustomSwData_v209::operator CustomSwData () return c9x; } -t_Open9xFuncSwData_v201::t_Open9xFuncSwData_v201(FuncSwData &c9x) -{ - swtch = open9xStockFromSwitch(c9x.swtch); - func = c9x.func - O9X_NUM_CHNOUT; -} - t_Open9xFuncSwData_v201::operator FuncSwData () { FuncSwData c9x; @@ -1225,37 +598,6 @@ enum Functions { FUNC_MAX }; -t_Open9xFuncSwData_v203::t_Open9xFuncSwData_v203(FuncSwData &c9x) -{ - swtch = open9xStockFromSwitch(c9x.swtch); - if (c9x.func <= FuncSafetyCh16) { - param = ((c9x.param>>1)<<1); - param |=(c9x.enabled & 0x01); - func = c9x.func; - } else { - param = c9x.param;; - if (c9x.func <= FuncTrainerAIL) - func = 16 + c9x.func - FuncTrainer; - else if (c9x.func == FuncInstantTrim) - func = 21; - else if (c9x.func == FuncPlaySound) - func = 22; - else if (c9x.func == FuncPlayHaptic) - func = 23; - else if (c9x.func == FuncReset) - func = 24; - else if (c9x.func == FuncVario) - func = 25; - else if (c9x.func == FuncBacklight) - func = 26; - else { - swtch = 0; - func = 0; - param = 0; - } - } -} - t_Open9xFuncSwData_v203::operator FuncSwData () { FuncSwData c9x; @@ -1286,38 +628,6 @@ t_Open9xFuncSwData_v203::operator FuncSwData () return c9x; } -t_Open9xFuncSwData_v210::t_Open9xFuncSwData_v210(FuncSwData &c9x) -{ - swtch = open9xStockFromSwitch(c9x.swtch); - param = c9x.param; - if (c9x.func <= FuncInstantTrim) { - delay = c9x.enabled; - func = (uint8_t)c9x.func; - } - else if (c9x.func == FuncPlaySound) - func = 22; - else if (c9x.func == FuncPlayHaptic) - func = 23; - else if (c9x.func == FuncReset) - func = 24; - else if (c9x.func == FuncVario) - func = 25; - else if (c9x.func == FuncPlayPrompt) - func = 26; - else if (c9x.func == FuncPlayValue) { - func = 27; - if (c9x.param > 7) { - param -= 2; - } - } else if (c9x.func == FuncBacklight) - func = 28; - else { - swtch = 0; - func = 0; - param = 0; - } -} - t_Open9xFuncSwData_v210::operator FuncSwData () { FuncSwData c9x; @@ -1352,12 +662,6 @@ t_Open9xFuncSwData_v210::operator FuncSwData () return c9x; } -t_Open9xSafetySwData::t_Open9xSafetySwData(SafetySwData &c9x) -{ - swtch = open9xStockFromSwitch(c9x.swtch); - val = c9x.val; -} - t_Open9xSafetySwData::operator SafetySwData () { SafetySwData c9x; @@ -1366,16 +670,6 @@ t_Open9xSafetySwData::operator SafetySwData () return c9x; } -t_Open9xSwashRingData_v208::t_Open9xSwashRingData_v208(SwashRingData &c9x) -{ - invertELE = c9x.invertELE; - invertAIL = c9x.invertAIL; - invertCOL = c9x.invertCOL; - type = c9x.type; - collectiveSource = open9x208FromSource(c9x.collectiveSource); - value = c9x.value; -} - t_Open9xSwashRingData_v208::operator SwashRingData () { SwashRingData c9x; @@ -1388,16 +682,6 @@ t_Open9xSwashRingData_v208::operator SwashRingData () return c9x; } -t_Open9xSwashRingData_v209::t_Open9xSwashRingData_v209(SwashRingData &c9x) -{ - invertELE = c9x.invertELE; - invertAIL = c9x.invertAIL; - invertCOL = c9x.invertCOL; - type = c9x.type; - collectiveSource = open9xStock209FromSource(c9x.collectiveSource); - value = c9x.value; -} - t_Open9xSwashRingData_v209::operator SwashRingData () { SwashRingData c9x; @@ -1422,19 +706,6 @@ t_Open9xPhaseData_v201::operator PhaseData () return c9x; } -t_Open9xPhaseData_v201::t_Open9xPhaseData_v201(PhaseData &c9x) -{ - trim_ext = 0; - for (int i=0; i> 2); - trim_ext = (trim_ext & ~(0x03 << (2*i))) + (((c9x.trim[i] & 0x03) << (2*i))); - } - swtch = open9xStockFromSwitch(c9x.swtch); - setEEPROMZString(name, c9x.name, sizeof(name)); - fadeIn = c9x.fadeIn; - fadeOut = c9x.fadeOut; -} - t_Open9xTimerData_v201::operator TimerData () { TimerData c9x; @@ -1466,24 +737,6 @@ t_Open9xTimerData_v202::operator TimerData () return c9x; } -t_Open9xTimerData_v202::t_Open9xTimerData_v202(TimerData &c9x) -{ - val = c9x.val; - - if (c9x.mode >= TMRMODE_OFF && c9x.mode <= TMRMODE_THt) - mode = 0+c9x.mode-TMRMODE_OFF; - else if (c9x.mode >= TMRMODE_FIRST_MOMENT_SWITCH) - mode = 26+c9x.mode-TMRMODE_FIRST_MOMENT_SWITCH; - else if (c9x.mode >= TMRMODE_FIRST_SWITCH) - mode = 5+c9x.mode-TMRMODE_FIRST_SWITCH; - else if (c9x.mode <= TMRMODE_FIRST_NEG_MOMENT_SWITCH) - mode = -22+c9x.mode-TMRMODE_FIRST_NEG_MOMENT_SWITCH; - else if (c9x.mode <= TMRMODE_FIRST_NEG_SWITCH) - mode = -1+c9x.mode-TMRMODE_FIRST_NEG_SWITCH; - else - mode = 0; -} - FrSkyRSSIAlarm t_Open9xFrSkyRSSIAlarm::get(int index) { FrSkyRSSIAlarm c9x; @@ -1492,25 +745,6 @@ FrSkyRSSIAlarm t_Open9xFrSkyRSSIAlarm::get(int index) return c9x; } -t_Open9xFrSkyRSSIAlarm::t_Open9xFrSkyRSSIAlarm(int index, FrSkyRSSIAlarm &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyRSSIAlarm)); - level = (2+c9x.level-index) % 4; - value = c9x.value - 50; -} - -t_Open9xFrSkyChannelData_v201::t_Open9xFrSkyChannelData_v201(FrSkyChannelData &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v201)); - ratio = c9x.ratio; - alarms_value[0] = c9x.alarms[0].value; - alarms_value[1] = c9x.alarms[1].value; - alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level; - alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater; - type = c9x.type; - offset = LIMIT(-8, c9x.offset, +7); -} - t_Open9xFrSkyChannelData_v201::operator FrSkyChannelData () { FrSkyChannelData c9x; @@ -1526,18 +760,6 @@ t_Open9xFrSkyChannelData_v201::operator FrSkyChannelData () return c9x; } -t_Open9xFrSkyChannelData_v203::t_Open9xFrSkyChannelData_v203(FrSkyChannelData &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v203)); - ratio = c9x.ratio; - alarms_value[0] = c9x.alarms[0].value; - alarms_value[1] = c9x.alarms[1].value; - alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level; - alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater; - type = c9x.type; - offset = c9x.offset; -} - t_Open9xFrSkyChannelData_v203::operator FrSkyChannelData () { FrSkyChannelData c9x; @@ -1553,20 +775,6 @@ t_Open9xFrSkyChannelData_v203::operator FrSkyChannelData () return c9x; } -t_Open9xFrSkyChannelData_v204::t_Open9xFrSkyChannelData_v204(FrSkyChannelData &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v204)); - ratio = c9x.ratio; - type = c9x.type; - multiplier = c9x.multiplier; - alarms_value[0] = c9x.alarms[0].value; - alarms_value[1] = c9x.alarms[1].value; - alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level; - alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater; - // TODO multiplier = c9x.multiplier; - offset = c9x.offset; -} - t_Open9xFrSkyChannelData_v204::operator FrSkyChannelData () { FrSkyChannelData c9x; @@ -1584,20 +792,6 @@ t_Open9xFrSkyChannelData_v204::operator FrSkyChannelData () return c9x; } -t_Open9xFrSkyChannelData_v208::t_Open9xFrSkyChannelData_v208(FrSkyChannelData &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v208)); - ratio = c9x.ratio; - type = c9x.type; - multiplier = c9x.multiplier; - alarms_value[0] = c9x.alarms[0].value; - alarms_value[1] = c9x.alarms[1].value; - alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level; - alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater; - // TODO multiplier = c9x.multiplier; - offset = c9x.offset; -} - t_Open9xFrSkyChannelData_v208::operator FrSkyChannelData () { FrSkyChannelData c9x; @@ -1632,14 +826,6 @@ t_Open9xFrSkyData_v202::operator FrSkyData () return c9x; } -t_Open9xFrSkyData_v202::t_Open9xFrSkyData_v202(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyData_v202)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; - usrProto = c9x.usrProto; -} - t_Open9xFrSkyData_v203::operator FrSkyData () { FrSkyData c9x; @@ -1649,14 +835,6 @@ t_Open9xFrSkyData_v203::operator FrSkyData () return c9x; } -t_Open9xFrSkyData_v203::t_Open9xFrSkyData_v203(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyData_v203)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; - usrProto = c9x.usrProto; -} - t_Open9xFrSkyBarData_v204::operator FrSkyBarData () { FrSkyBarData c9x; @@ -1666,14 +844,6 @@ t_Open9xFrSkyBarData_v204::operator FrSkyBarData () return c9x; } -t_Open9xFrSkyBarData_v204::t_Open9xFrSkyBarData_v204(FrSkyBarData &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyBarData_v204)); - source = c9x.source; - barMin = c9x.barMin; - barMax = c9x.barMax; -} - t_Open9xFrSkyData_v204::operator FrSkyData () { FrSkyData c9x; @@ -1688,18 +858,6 @@ t_Open9xFrSkyData_v204::operator FrSkyData () return c9x; } -t_Open9xFrSkyData_v204::t_Open9xFrSkyData_v204(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyData_v204)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; - usrProto = c9x.usrProto; - imperial = c9x.imperial; - blades = c9x.blades; - for (int i=0; i<4; i++) - bars[i] = c9x.screens[0].body.bars[i]; -} - t_Open9xFrSkyData_v205::operator FrSkyData () { FrSkyData c9x; @@ -1716,21 +874,6 @@ t_Open9xFrSkyData_v205::operator FrSkyData () return c9x; } -t_Open9xFrSkyData_v205::t_Open9xFrSkyData_v205(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyData_v205)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; - usrProto = c9x.usrProto; - imperial = c9x.imperial; - blades = c9x.blades; - for (int i=0; i<4; i++) - bars[i] = c9x.screens[0].body.bars[i]; - rssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.rssiAlarms[0]); - rssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.rssiAlarms[1]); -} - - t_Open9xFrSkyData_v208::operator FrSkyData () { FrSkyData c9x; @@ -1748,21 +891,6 @@ t_Open9xFrSkyData_v208::operator FrSkyData () return c9x; } -t_Open9xFrSkyData_v208::t_Open9xFrSkyData_v208(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyData_v208)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; - usrProto = c9x.usrProto; - voltsSource = c9x.voltsSource; - blades = c9x.blades; - currentSource=c9x.currentSource; - for (int i=0; i<4; i++) - bars[i] = c9x.screens[0].body.bars[i]; - rssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.rssiAlarms[0]); - rssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.rssiAlarms[1]); -} - t_Open9xFrSkyData_v210::operator FrSkyData () { FrSkyData c9x; @@ -1798,40 +926,6 @@ t_Open9xFrSkyData_v210::operator FrSkyData () return c9x; } -t_Open9xFrSkyData_v210::t_Open9xFrSkyData_v210(FrSkyData &c9x) -{ - memset(this, 0, sizeof(t_Open9xFrSkyData_v210)); - channels[0] = c9x.channels[0]; - channels[1] = c9x.channels[1]; - usrProto = c9x.usrProto; - voltsSource = c9x.voltsSource; - blades = c9x.blades; - currentSource=c9x.currentSource; - - for (int scr=0; scr<2; scr++) { - if (c9x.screens[scr].type == 1) { - for (int i=0; i<4; i++) - bars[i] = c9x.screens[scr].body.bars[i]; - } - else { - linesXtra=0; - for (int j=0; j<4; j++) { - lines[j] = 0; - for (int k=0; k<2; k++) { - int value = c9x.screens[scr].body.lines[j].source[k]; - lines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4)); - linesXtra |= (value / 16) << (4*j+2*k); - } - } - } - } - rssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.rssiAlarms[0]); - rssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.rssiAlarms[1]); - varioSource = c9x.varioSource; - varioSpeedUpMin = c9x.varioCenterMax; - varioSpeedDownMin = c9x.varioCenterMin; -} - t_Open9xModelData_v201::operator ModelData () { ModelData c9x; @@ -1881,7 +975,6 @@ t_Open9xModelData_v201::operator ModelData () c9x.expoData[i] = expoData[i]; for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId=c9x.modelId; - } - else { - memset(this, 0, sizeof(t_Open9xModelData_v202)); - } -} - t_Open9xModelData_v203::operator ModelData () { ModelData c9x; @@ -2115,7 +1125,6 @@ t_Open9xModelData_v203::operator ModelData () c9x.expoData[i] = expoData[i]; for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - } - else { - memset(this, 0, sizeof(t_Open9xModelData_v203)); - } -} - t_Open9xModelData_v204::operator ModelData () { ModelData c9x; @@ -2281,7 +1199,6 @@ t_Open9xModelData_v204::operator ModelData () c9x.expoData[i] = expoData[i]; for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - frskyRssiAlarms[0] = Open9xFrSkyRSSIAlarm(0, c9x.frsky.rssiAlarms[0]); - frskyRssiAlarms[1] = Open9xFrSkyRSSIAlarm(1, c9x.frsky.rssiAlarms[1]); - } - else { - memset(this, 0, sizeof(t_Open9xModelData_v204)); - } -} - t_Open9xModelData_v205::operator ModelData () { ModelData c9x; @@ -2454,7 +1278,6 @@ t_Open9xModelData_v205::operator ModelData () c9x.expoData[i] = expoData[i]; for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - frskyLinesXtra=0; - for (int j=0; j<4; j++) { - frskyLines[j] = 0; - for (int k=0; k<2; k++) { - int value = c9x.frsky.screens[1].body.lines[j].source[k]; - frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4)); - frskyLinesXtra |= (value / 16) << (4*j+2*k); - } - } - } - else { - memset(this, 0, sizeof(t_Open9xModelData_v205)); - } -} - - t_Open9xModelData_v208::operator ModelData () { ModelData c9x; @@ -2645,7 +1364,6 @@ t_Open9xModelData_v208::operator ModelData () c9x.expoData[i] = expoData[i]; for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - varioSource = c9x.frsky.varioSource; - varioSpeedUpMin = c9x.frsky.varioCenterMax; - varioSpeedDownMin = c9x.frsky.varioCenterMin; - - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - frskyLinesXtra=0; - for (int j=0; j<4; j++) { - frskyLines[j] = 0; - for (int k=0; k<2; k++) { - int value = c9x.frsky.screens[1].body.lines[j].source[k]; - frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4)); - frskyLinesXtra |= (value / 16) << (4*j+2*k); - } - } - - for (int i=0; i= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - varioSource = c9x.frsky.varioSource; - varioSpeedUpMin = c9x.frsky.varioCenterMax; - varioSpeedDownMin = c9x.frsky.varioCenterMin; - switchWarningStates = c9x.switchWarningStates; - - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - frskyLinesXtra=0; - for (int j=0; j<4; j++) { - frskyLines[j] = 0; - for (int k=0; k<2; k++) { - int value = c9x.frsky.screens[1].body.lines[j].source[k]; - frskyLines[j] |= (k==0 ? (value & 0x0f) : ((value & 0x0f) << 4)); - frskyLinesXtra |= (value / 16) << (4*j+2*k); - } - } - - for (int i=0; i O9X_NUM_POINTS - 5 * O9X_MAX_CURVES) { - EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_NUM_POINTS) + "\n"; - break; - } - curves[i] = offset; - for (int j=0; j= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - - switchWarningStates = c9x.switchWarningStates; - - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - - for (int i=0; i O9X_NUM_POINTS - 5 * O9X_MAX_CURVES) { - EEPROMWarnings += ::QObject::tr("open9x only accepts %1 points in all curves").arg(O9X_NUM_POINTS) + "\n"; - break; - } - curves[i] = offset; - for (int j=0; j= 0) { - phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0); - } - else { - phase.trim[j] = std::max(-500, std::min(500, phase.trim[j])); - } - } - phaseData[i] = phase; - } - frsky = c9x.frsky; - - switchWarningStates = c9x.switchWarningStates; - - ppmFrameLength = c9x.moduleData[0].ppmFrameLength; - thrTraceSrc = c9x.thrTraceSrc; - modelId = c9x.modelId; - } -} diff --git a/companion/src/firmwares/opentx/open9xStockeeprom.h b/companion/src/firmwares/opentx/open9xStockeeprom.h index 46178281f..59bee09a9 100644 --- a/companion/src/firmwares/opentx/open9xStockeeprom.h +++ b/companion/src/firmwares/opentx/open9xStockeeprom.h @@ -65,7 +65,6 @@ PACK(typedef struct t_Open9xFrSkyRSSIAlarm { int8_t value:6; FrSkyRSSIAlarm get(int index); t_Open9xFrSkyRSSIAlarm() { memset(this, 0, sizeof(t_Open9xFrSkyRSSIAlarm)); } - t_Open9xFrSkyRSSIAlarm(int index, FrSkyRSSIAlarm&); }) Open9xFrSkyRSSIAlarm; PACK(typedef struct t_Open9xExpoData_v201 { @@ -80,8 +79,6 @@ PACK(typedef struct t_Open9xExpoData_v201 { operator ExpoData(); t_Open9xExpoData_v201() { memset(this, 0, sizeof(t_Open9xExpoData_v201)); } - t_Open9xExpoData_v201(ExpoData&); - }) Open9xExpoData_v201; PACK(typedef struct t_Open9xExpoData_v211 { @@ -95,8 +92,6 @@ PACK(typedef struct t_Open9xExpoData_v211 { operator ExpoData(); t_Open9xExpoData_v211() { memset(this, 0, sizeof(t_Open9xExpoData_v211)); } - t_Open9xExpoData_v211(ExpoData&); - }) Open9xExpoData_v211; PACK(typedef struct t_Open9xLimitData_v201 { @@ -107,8 +102,6 @@ PACK(typedef struct t_Open9xLimitData_v201 { operator LimitData(); t_Open9xLimitData_v201() { memset(this, 0, sizeof(t_Open9xLimitData_v201)); } - t_Open9xLimitData_v201(LimitData&); - }) Open9xLimitData_v201; PACK(typedef struct t_Open9xLimitData_v211 { @@ -121,8 +114,6 @@ PACK(typedef struct t_Open9xLimitData_v211 { operator LimitData(); t_Open9xLimitData_v211() { memset(this, 0, sizeof(t_Open9xLimitData_v211)); } - t_Open9xLimitData_v211(LimitData&); - }) Open9xLimitData_v211; PACK(typedef struct t_Open9xMixData_v201 { @@ -143,8 +134,6 @@ PACK(typedef struct t_Open9xMixData_v201 { operator MixData(); t_Open9xMixData_v201() { memset(this, 0, sizeof(t_Open9xMixData_v201)); } - t_Open9xMixData_v201(MixData&); - }) Open9xMixData_v201; PACK(typedef struct t_Open9xMixData_v203 { @@ -165,8 +154,6 @@ PACK(typedef struct t_Open9xMixData_v203 { operator MixData(); t_Open9xMixData_v203() { memset(this, 0, sizeof(t_Open9xMixData_v203)); } - t_Open9xMixData_v203(MixData&); - }) Open9xMixData_v203; PACK(typedef struct t_Open9xMixData_v205 { @@ -188,8 +175,6 @@ PACK(typedef struct t_Open9xMixData_v205 { operator MixData(); t_Open9xMixData_v205() { memset(this, 0, sizeof(t_Open9xMixData_v205)); } - t_Open9xMixData_v205(MixData&); - }) Open9xMixData_v205; PACK(typedef struct t_Open9xMixData_v209 { @@ -211,8 +196,6 @@ PACK(typedef struct t_Open9xMixData_v209 { operator MixData(); t_Open9xMixData_v209() { memset(this, 0, sizeof(t_Open9xMixData_v209)); } - t_Open9xMixData_v209(MixData&); - }) Open9xMixData_v209; PACK(typedef struct t_Open9xMixData_v211 { @@ -236,8 +219,6 @@ PACK(typedef struct t_Open9xMixData_v211 { operator MixData(); t_Open9xMixData_v211() { memset(this, 0, sizeof(t_Open9xMixData_v211)); } - t_Open9xMixData_v211(MixData&); - }) Open9xMixData_v211; PACK(typedef struct t_Open9xCustomSwData_v208 { // Custom Switches data @@ -257,7 +238,6 @@ PACK(typedef struct t_Open9xCustomSwData_v209 { // Custom Switches data operator CustomSwData(); t_Open9xCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xCustomSwData_v209)); } - t_Open9xCustomSwData_v209(CustomSwData&); }) Open9xCustomSwData_v209; PACK(typedef struct t_Open9xSafetySwData { // Safety Switches data @@ -266,8 +246,6 @@ PACK(typedef struct t_Open9xSafetySwData { // Safety Switches data operator SafetySwData(); t_Open9xSafetySwData() { memset(this, 0, sizeof(t_Open9xSafetySwData)); } - t_Open9xSafetySwData(SafetySwData&); - }) Open9xSafetySwData; PACK(typedef struct t_Open9xFuncSwData_v201 { // Function Switches data @@ -276,8 +254,6 @@ PACK(typedef struct t_Open9xFuncSwData_v201 { // Function Switches data operator FuncSwData(); t_Open9xFuncSwData_v201() { memset(this, 0, sizeof(t_Open9xFuncSwData_v201)); } - t_Open9xFuncSwData_v201(FuncSwData&); - }) Open9xFuncSwData_v201; PACK(typedef struct t_Open9xFuncSwData_v203 { // Function Switches data @@ -287,8 +263,6 @@ PACK(typedef struct t_Open9xFuncSwData_v203 { // Function Switches data operator FuncSwData(); t_Open9xFuncSwData_v203() { memset(this, 0, sizeof(t_Open9xFuncSwData_v203)); } - t_Open9xFuncSwData_v203(FuncSwData&); - }) Open9xFuncSwData_v203; PACK(typedef struct t_Open9xFuncSwData_v210 { // Function Switches data @@ -299,8 +273,6 @@ PACK(typedef struct t_Open9xFuncSwData_v210 { // Function Switches data operator FuncSwData(); t_Open9xFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xFuncSwData_v210)); } - t_Open9xFuncSwData_v210(FuncSwData&); - }) Open9xFuncSwData_v210; PACK(typedef struct t_Open9xFrSkyChannelData_v201 { @@ -316,8 +288,6 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v201 { operator FrSkyChannelData(); t_Open9xFrSkyChannelData_v201() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v201)); } - t_Open9xFrSkyChannelData_v201(FrSkyChannelData&); - }) Open9xFrSkyChannelData_v201; PACK(typedef struct t_Open9xFrSkyChannelData_v203 { @@ -333,8 +303,6 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v203 { operator FrSkyChannelData(); t_Open9xFrSkyChannelData_v203() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v203)); } - t_Open9xFrSkyChannelData_v203(FrSkyChannelData&); - }) Open9xFrSkyChannelData_v203; PACK(typedef struct t_Open9xFrSkyChannelData_v204 { @@ -348,8 +316,6 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v204 { operator FrSkyChannelData(); t_Open9xFrSkyChannelData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v204)); } - t_Open9xFrSkyChannelData_v204(FrSkyChannelData&); - }) Open9xFrSkyChannelData_v204; PACK(typedef struct t_Open9xFrSkyChannelData_v208 { @@ -363,37 +329,30 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v208 { operator FrSkyChannelData(); t_Open9xFrSkyChannelData_v208() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v208)); } - t_Open9xFrSkyChannelData_v208(FrSkyChannelData&); - }) Open9xFrSkyChannelData_v208; PACK(typedef struct t_Open9xFrSkyData_v201 { - Open9xFrSkyChannelData_v201 channels[2]; - - operator FrSkyData(); - t_Open9xFrSkyData_v201() { memset(this, 0, sizeof(t_Open9xFrSkyData_v201)); } + Open9xFrSkyChannelData_v201 channels[2]; + operator FrSkyData(); + t_Open9xFrSkyData_v201() { memset(this, 0, sizeof(t_Open9xFrSkyData_v201)); } }) Open9xFrSkyData_v201; PACK(typedef struct t_Open9xFrSkyData_v202 { - Open9xFrSkyChannelData_v201 channels[2]; - uint8_t usrProto:2; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh - uint8_t spare:6; - - operator FrSkyData(); - t_Open9xFrSkyData_v202() { memset(this, 0, sizeof(t_Open9xFrSkyData_v202)); } - t_Open9xFrSkyData_v202(FrSkyData&); + Open9xFrSkyChannelData_v201 channels[2]; + uint8_t usrProto:2; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh + uint8_t spare:6; + operator FrSkyData(); + t_Open9xFrSkyData_v202() { memset(this, 0, sizeof(t_Open9xFrSkyData_v202)); } }) Open9xFrSkyData_v202; PACK(typedef struct t_Open9xFrSkyData_v203 { - Open9xFrSkyChannelData_v203 channels[2]; - uint8_t usrProto; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh - - operator FrSkyData(); - t_Open9xFrSkyData_v203() { memset(this, 0, sizeof(t_Open9xFrSkyData_v203)); } - t_Open9xFrSkyData_v203(FrSkyData&); + Open9xFrSkyChannelData_v203 channels[2]; + uint8_t usrProto; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh + operator FrSkyData(); + t_Open9xFrSkyData_v203() { memset(this, 0, sizeof(t_Open9xFrSkyData_v203)); } }) Open9xFrSkyData_v203; PACK(typedef struct t_Open9xFrSkyBarData_v204 { @@ -403,8 +362,6 @@ PACK(typedef struct t_Open9xFrSkyBarData_v204 { operator FrSkyBarData(); t_Open9xFrSkyBarData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyBarData_v204)); } - t_Open9xFrSkyBarData_v204(FrSkyBarData&); - }) Open9xFrSkyBarData_v204; PACK(typedef struct t_Open9xFrSkyData_v204 { @@ -417,7 +374,6 @@ PACK(typedef struct t_Open9xFrSkyData_v204 { operator FrSkyData(); t_Open9xFrSkyData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyData_v204)); } - t_Open9xFrSkyData_v204(FrSkyData&); }) Open9xFrSkyData_v204; PACK(typedef struct t_Open9xFrSkyData_v205 { @@ -431,7 +387,6 @@ PACK(typedef struct t_Open9xFrSkyData_v205 { operator FrSkyData(); t_Open9xFrSkyData_v205() { memset(this, 0, sizeof(t_Open9xFrSkyData_v205)); } - t_Open9xFrSkyData_v205(FrSkyData&); }) Open9xFrSkyData_v205; PACK(typedef struct t_Open9xFrSkyData_v208 { @@ -445,7 +400,6 @@ PACK(typedef struct t_Open9xFrSkyData_v208 { operator FrSkyData(); t_Open9xFrSkyData_v208() { memset(this, 0, sizeof(t_Open9xFrSkyData_v208)); } - t_Open9xFrSkyData_v208(FrSkyData&); }) Open9xFrSkyData_v208; PACK(typedef struct t_Open9xFrSkyData_v210 { @@ -466,7 +420,6 @@ PACK(typedef struct t_Open9xFrSkyData_v210 { operator FrSkyData(); t_Open9xFrSkyData_v210() { memset(this, 0, sizeof(t_Open9xFrSkyData_v210)); } - t_Open9xFrSkyData_v210(FrSkyData&); }) Open9xFrSkyData_v210; PACK(typedef struct t_Open9xSwashRingData_v208 { // Swash Ring data @@ -479,8 +432,6 @@ PACK(typedef struct t_Open9xSwashRingData_v208 { // Swash Ring data operator SwashRingData(); t_Open9xSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xSwashRingData_v208)); } - t_Open9xSwashRingData_v208(SwashRingData&); - }) Open9xSwashRingData_v208; PACK(typedef struct t_Open9xSwashRingData_v209 { // Swash Ring data @@ -493,8 +444,6 @@ PACK(typedef struct t_Open9xSwashRingData_v209 { // Swash Ring data operator SwashRingData(); t_Open9xSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xSwashRingData_v209)); } - t_Open9xSwashRingData_v209(SwashRingData&); - }) Open9xSwashRingData_v209; PACK(typedef struct t_Open9xPhaseData_v201 { @@ -507,7 +456,6 @@ PACK(typedef struct t_Open9xPhaseData_v201 { operator PhaseData(); t_Open9xPhaseData_v201() { memset(this, 0, sizeof(t_Open9xPhaseData_v201)); } - t_Open9xPhaseData_v201(PhaseData &eepe); }) Open9xPhaseData_v201; PACK(typedef struct t_Open9xTimerData_v201 { @@ -526,7 +474,6 @@ PACK(typedef struct t_Open9xTimerData_v202 { operator TimerData(); t_Open9xTimerData_v202() { memset(this, 0, sizeof(t_Open9xTimerData_v202)); } - t_Open9xTimerData_v202(TimerData &eepe); }) Open9xTimerData_v202; PACK(typedef struct t_Open9xTimerDataExtra { @@ -579,8 +526,6 @@ PACK(typedef struct t_Open9xModelData_v201 { operator ModelData(); t_Open9xModelData_v201() { memset(this, 0, sizeof(t_Open9xModelData_v201)); } - t_Open9xModelData_v201(ModelData&); - }) Open9xModelData_v201; PACK(typedef struct t_Open9xModelData_v202 { @@ -615,8 +560,6 @@ PACK(typedef struct t_Open9xModelData_v202 { operator ModelData(); t_Open9xModelData_v202() { memset(this, 0, sizeof(t_Open9xModelData_v202)); } - t_Open9xModelData_v202(ModelData&); - }) Open9xModelData_v202; PACK(typedef struct t_Open9xModelData_v203 { @@ -650,8 +593,6 @@ PACK(typedef struct t_Open9xModelData_v203 { operator ModelData(); t_Open9xModelData_v203() { memset(this, 0, sizeof(t_Open9xModelData_v203)); } - t_Open9xModelData_v203(ModelData&); - }) Open9xModelData_v203; PACK(typedef struct t_Open9xModelData_v204 { @@ -686,8 +627,6 @@ PACK(typedef struct t_Open9xModelData_v204 { operator ModelData(); t_Open9xModelData_v204() { memset(this, 0, sizeof(t_Open9xModelData_v204)); } - t_Open9xModelData_v204(ModelData&); - }) Open9xModelData_v204; PACK(typedef struct t_Open9xModelData_v205 { @@ -723,8 +662,6 @@ PACK(typedef struct t_Open9xModelData_v205 { operator ModelData(); t_Open9xModelData_v205() { memset(this, 0, sizeof(t_Open9xModelData_v205)); } - t_Open9xModelData_v205(ModelData&); - }) Open9xModelData_v205; PACK(typedef struct t_Open9xModelData_v208 { @@ -764,8 +701,6 @@ PACK(typedef struct t_Open9xModelData_v208 { operator ModelData(); t_Open9xModelData_v208() { memset(this, 0, sizeof(t_Open9xModelData_v208)); } - t_Open9xModelData_v208(ModelData&); - }) Open9xModelData_v208; PACK(typedef struct t_Open9xModelData_v209 { @@ -806,8 +741,6 @@ PACK(typedef struct t_Open9xModelData_v209 { operator ModelData(); t_Open9xModelData_v209() { memset(this, 0, sizeof(t_Open9xModelData_v209)); } - t_Open9xModelData_v209(ModelData&); - }) Open9xModelData_v209; PACK(typedef struct t_Open9xModelData_v210 { @@ -846,8 +779,6 @@ PACK(typedef struct t_Open9xModelData_v210 { operator ModelData(); t_Open9xModelData_v210() { memset(this, 0, sizeof(t_Open9xModelData_v210)); } - t_Open9xModelData_v210(ModelData&); - }) Open9xModelData_v210; PACK(typedef struct t_Open9xModelData_v211 { @@ -884,8 +815,6 @@ PACK(typedef struct t_Open9xModelData_v211 { operator ModelData(); t_Open9xModelData_v211() { memset(this, 0, sizeof(t_Open9xModelData_v211)); } - t_Open9xModelData_v211(ModelData&); - }) Open9xModelData_v211; #endif diff --git a/companion/src/firmwares/opentx/open9xGruvin9xsimulator.cpp b/companion/src/firmwares/opentx/opentxGruvin9xsimulator.cpp similarity index 97% rename from companion/src/firmwares/opentx/open9xGruvin9xsimulator.cpp rename to companion/src/firmwares/opentx/opentxGruvin9xsimulator.cpp index 9cb478b16..646043839 100644 --- a/companion/src/firmwares/opentx/open9xGruvin9xsimulator.cpp +++ b/companion/src/firmwares/opentx/opentxGruvin9xsimulator.cpp @@ -14,9 +14,9 @@ * */ -#include "open9xGruvin9xsimulator.h" -#include "open9xinterface.h" -#include "open9xeeprom.h" +#include "opentxGruvin9xsimulator.h" +#include "opentxinterface.h" +#include "opentxeeprom.h" #define SIMU #define SIMU_EXCEPTIONS diff --git a/companion/src/firmwares/opentx/open9xGruvin9xsimulator.h b/companion/src/firmwares/opentx/opentxGruvin9xsimulator.h similarity index 100% rename from companion/src/firmwares/opentx/open9xGruvin9xsimulator.h rename to companion/src/firmwares/opentx/opentxGruvin9xsimulator.h diff --git a/companion/src/firmwares/opentx/open9xM128simulator.cpp b/companion/src/firmwares/opentx/opentxM128simulator.cpp similarity index 97% rename from companion/src/firmwares/opentx/open9xM128simulator.cpp rename to companion/src/firmwares/opentx/opentxM128simulator.cpp index a82b53b0c..505c05fe3 100644 --- a/companion/src/firmwares/opentx/open9xM128simulator.cpp +++ b/companion/src/firmwares/opentx/opentxM128simulator.cpp @@ -14,9 +14,9 @@ * */ -#include "open9xM128simulator.h" -#include "open9xinterface.h" -#include "open9xeeprom.h" +#include "opentxM128simulator.h" +#include "opentxinterface.h" +#include "opentxeeprom.h" #define SIMU #define SIMU_EXCEPTIONS diff --git a/companion/src/firmwares/opentx/open9xM128simulator.h b/companion/src/firmwares/opentx/opentxM128simulator.h similarity index 100% rename from companion/src/firmwares/opentx/open9xM128simulator.h rename to companion/src/firmwares/opentx/opentxM128simulator.h diff --git a/companion/src/firmwares/opentx/open9xSky9xsimulator.cpp b/companion/src/firmwares/opentx/opentxSky9xsimulator.cpp similarity index 98% rename from companion/src/firmwares/opentx/open9xSky9xsimulator.cpp rename to companion/src/firmwares/opentx/opentxSky9xsimulator.cpp index d724028ec..1b4d42793 100644 --- a/companion/src/firmwares/opentx/open9xSky9xsimulator.cpp +++ b/companion/src/firmwares/opentx/opentxSky9xsimulator.cpp @@ -14,8 +14,8 @@ * */ -#include "open9xSky9xsimulator.h" -#include "open9xinterface.h" +#include "opentxSky9xsimulator.h" +#include "opentxinterface.h" #define SIMU #define SIMU_EXCEPTIONS diff --git a/companion/src/firmwares/opentx/open9xSky9xsimulator.h b/companion/src/firmwares/opentx/opentxSky9xsimulator.h similarity index 100% rename from companion/src/firmwares/opentx/open9xSky9xsimulator.h rename to companion/src/firmwares/opentx/opentxSky9xsimulator.h diff --git a/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp b/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp index 6f216273a..e48cbf9af 100644 --- a/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp +++ b/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp @@ -15,7 +15,7 @@ */ #include "opentxTaranisSimulator.h" -#include "open9xinterface.h" +#include "opentxinterface.h" #define SIMU #define SIMU_EXCEPTIONS diff --git a/companion/src/firmwares/opentx/open9xeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp similarity index 88% rename from companion/src/firmwares/opentx/open9xeeprom.cpp rename to companion/src/firmwares/opentx/opentxeeprom.cpp index 1fc5db454..b97be920c 100644 --- a/companion/src/firmwares/opentx/open9xeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -1,7 +1,7 @@ #include #include #include "helpers.h" -#include "open9xeeprom.h" +#include "opentxeeprom.h" #include #define IS_DBLEEPROM(board, version) ((board==BOARD_GRUVIN9X || board==BOARD_M128) && version >= 213) @@ -18,10 +18,11 @@ #define MAX_PHASES(board, version) (IS_ARM(board) ? 9 : (IS_DBLRAM(board, version) ? 6 : 5)) #define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32) #define MAX_CHANNELS(board, version) (IS_ARM(board) ? 32 : 16) -#define MAX_EXPOS(board, version) (IS_ARM(board) ? 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)) #define MAX_CUSTOM_SWITCHES(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 15 : 12)) #define MAX_CUSTOM_FUNCTIONS(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 24 : 16)) -#define MAX_CURVES(board) (IS_ARM(board) ? O9X_ARM_MAX_CURVES : O9X_MAX_CURVES) +#define MAX_CURVES(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 216) ? 32 : 16) : O9X_MAX_CURVES) +#define MAX_GVARS(board, version) ((IS_ARM(board) && version >= 216) ? 9 : 5) #define IS_RELEASE_21_MARCH_2013(board, version) (version >= 214 || (!IS_ARM(board) && version >= 213)) #define IS_RELEASE_23_MARCH_2013(board, version) (version >= 214 || (board==BOARD_STOCK && version >= 213)) @@ -352,6 +353,15 @@ class SourceField: public ConversionField< UnsignedField > { unsigned int _source; }; +class CurveReferenceField: public StructField { + public: + CurveReferenceField(CurveReference & curve, BoardEnum board, unsigned int version) + { + Append(new UnsignedField<8>((unsigned int &)curve.type)); + Append(new SignedField<8>(curve.value)); + } +}; + class HeliField: public StructField { public: HeliField(SwashRingData & heli, BoardEnum board, unsigned int version, unsigned int variant) @@ -409,7 +419,7 @@ class PhaseField: public TransformedField { } if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) { - for (int i=0; i(phase.gvars[i])); } } @@ -595,7 +605,25 @@ class MixField: public TransformedField { board(board), version(version) { - if (IS_ARM(board)) { + if (IS_TARANIS(board) && version >= 216) { + internalField.Append(new UnsignedField<8>(_destCh)); + internalField.Append(new UnsignedField<16>(mix.phases)); + internalField.Append(new UnsignedField<8>((unsigned int &)mix.mltpx)); + internalField.Append(new SignedField<16>(_weight)); + internalField.Append(new SwitchField<8>(mix.swtch, board, version)); + internalField.Append(new CurveReferenceField(mix.curve, board, version)); + internalField.Append(new UnsignedField<4>(mix.mixWarn)); + internalField.Append(new UnsignedField<4>(mix.srcVariant)); + internalField.Append(new UnsignedField<8>(mix.delayUp)); + internalField.Append(new UnsignedField<8>(mix.delayDown)); + internalField.Append(new UnsignedField<8>(mix.speedUp)); + internalField.Append(new UnsignedField<8>(mix.speedDown)); + internalField.Append(new SourceField<8>(mix.srcRaw, board, version, FLAG_NOTELEMETRY)); + internalField.Append(new SignedField<16>(_offset)); + internalField.Append(new ZCharField<8>(mix.name)); + internalField.Append(new SpareBitsField<8>()); + } + else if (IS_ARM(board)) { internalField.Append(new UnsignedField<8>(_destCh)); internalField.Append(new UnsignedField<16>(mix.phases)); internalField.Append(new BoolField<1>(_curveMode)); @@ -680,8 +708,18 @@ class MixField: public TransformedField { { if (mix.destCh && mix.srcRaw.type != SOURCE_TYPE_NONE) { _destCh = mix.destCh - 1; - _curveMode = mix.curve; - _curveParam = (mix.curve ? mix.curve : smallGvarToEEPROM(mix.differential)); + if (mix.curve.type == CurveReference::CURVE_REF_CUSTOM) { + _curveMode = true; + _curveParam = 6 + mix.curve.value; + } + else if (mix.curve.type == CurveReference::CURVE_REF_FUNC) { + _curveMode = true; + _curveParam = mix.curve.value; + } + else if (mix.curve.type == CurveReference::CURVE_REF_DIFF) { + _curveMode = 0; + _curveParam = smallGvarToEEPROM(mix.curve.value); + } } else { mix.clear(); @@ -707,12 +745,14 @@ class MixField: public TransformedField { { if (mix.srcRaw.type != SOURCE_TYPE_NONE) { mix.destCh = _destCh + 1; - mix.curve = 0; - mix.differential = 0; - if (_curveMode) - mix.curve = _curveParam; - else - mix.differential = smallGvarToC9x(_curveParam); + if (!IS_ARM(board) || version < 216) { + if (!_curveMode) + mix.curve = CurveReference(CurveReference::CURVE_REF_DIFF, smallGvarToC9x(_curveParam)); + else if (_curveParam > 6) + mix.curve = CurveReference(CurveReference::CURVE_REF_CUSTOM, _curveParam-6); + else + mix.curve = CurveReference(CurveReference::CURVE_REF_FUNC, _curveParam); + } } if (IS_ARM(board)) { @@ -748,22 +788,30 @@ class ExpoField: public TransformedField { TransformedField(internalField), internalField("Expo"), expo(expo), - board(board) + board(board), + version(version) { - if (IS_ARM(board)) { + if (IS_TARANIS(board) && version >= 216) { + internalField.Append(new SourceField<8>(expo.srcRaw, board, version, 0)); + internalField.Append(new UnsignedField<16>(expo.scale)); + internalField.Append(new UnsignedField<8>(expo.chn)); + internalField.Append(new SwitchField<8>(expo.swtch, board, version)); + internalField.Append(new UnsignedField<16>(expo.phases)); + internalField.Append(new SignedField<8>(_weight)); + internalField.Append(new SignedField<8>(expo.carryTrim)); + internalField.Append(new ZCharField<8>(expo.name)); + internalField.Append(new SignedField<8>(expo.offset)); + internalField.Append(new CurveReferenceField(expo.curve, board, version)); + internalField.Append(new SpareBitsField<8>()); + } + else if (IS_ARM(board)) { internalField.Append(new UnsignedField<8>(expo.mode)); internalField.Append(new UnsignedField<8>(expo.chn)); internalField.Append(new SwitchField<8>(expo.swtch, board, version)); internalField.Append(new UnsignedField<16>(expo.phases)); internalField.Append(new SignedField<8>(_weight)); internalField.Append(new BoolField<8>(_curveMode)); - if (HAS_LARGE_LCD(board)) { - internalField.Append(new ZCharField<8>(expo.name)); - internalField.Append(new SpareBitsField<16>()); - } - else { - internalField.Append(new ZCharField<6>(expo.name)); - } + internalField.Append(new ZCharField<6>(expo.name)); internalField.Append(new SignedField<8>(_curveParam)); } else if (IS_DBLRAM(board, version) && IS_RELEASE_23_MARCH_2013(board, version)) { @@ -789,22 +837,41 @@ class ExpoField: public TransformedField { virtual void beforeExport() { - _curveMode = (expo.curveMode && expo.curveParam); _weight = smallGvarToEEPROM(expo.weight); - _curveParam = smallGvarToEEPROM(expo.curveParam); + if (!IS_TARANIS(board) || version < 216) { + if (expo.curve.type==CurveReference::CURVE_REF_FUNC && expo.curve.value) { + _curveMode = true; + _curveParam = expo.curve.value; + } + else if (expo.curve.type==CurveReference::CURVE_REF_CUSTOM && expo.curve.value) { + _curveMode = true; + _curveParam = expo.curve.value+6; + } + else { + _curveMode = false; + _curveParam = smallGvarToEEPROM(expo.curve.value); + } + } } virtual void afterImport() { - expo.curveMode = _curveMode; expo.weight = smallGvarToC9x(_weight); - expo.curveParam = smallGvarToC9x(_curveParam); + if (!IS_TARANIS(board) || version < 216) { + if (!_curveMode) + expo.curve = CurveReference(CurveReference::CURVE_REF_EXPO, smallGvarToC9x(_curveParam)); + else if (_curveParam > 6) + expo.curve = CurveReference(CurveReference::CURVE_REF_CUSTOM, _curveParam-6); + else + expo.curve = CurveReference(CurveReference::CURVE_REF_FUNC, _curveParam); + } } protected: StructField internalField; ExpoData & expo; BoardEnum board; + unsigned int version; bool _curveMode; int _weight; int _curveParam; @@ -812,36 +879,55 @@ class ExpoField: public TransformedField { class LimitField: public StructField { public: - LimitField(LimitData & limit, BoardEnum board): + LimitField(LimitData & limit, BoardEnum board, unsigned int version): StructField("Limit") { - Append(new ConversionField< SignedField<8> >(limit.min, +100)); - Append(new ConversionField< SignedField<8> >(limit.max, -100)); + if (IS_ARM(board) && version >= 216) { + Append(new ConversionField< SignedField<16> >(limit.min, +1000)); + Append(new ConversionField< SignedField<16> >(limit.max, -1000)); + } + else { + Append(new ConversionField< SignedField<8> >(limit.min, +100)); + Append(new ConversionField< SignedField<8> >(limit.max, -100)); + } Append(new SignedField<8>(limit.ppmCenter)); Append(new SignedField<14>(limit.offset)); Append(new BoolField<1>(limit.symetrical)); Append(new BoolField<1>(limit.revert)); - if (HAS_LARGE_LCD(board)) + if (HAS_LARGE_LCD(board)) { Append(new ZCharField<6>(limit.name)); + } + if (IS_TARANIS(board) && version >= 216) { + Append(new SignedField<8>(limit.curve.value)); + } } }; class CurvesField: public TransformedField { public: - CurvesField(CurveData * curves, BoardEnum board): + CurvesField(CurveData * curves, BoardEnum board, unsigned int version): TransformedField(internalField), internalField("Curves"), curves(curves), board(board), - maxCurves(MAX_CURVES(board)), + maxCurves(MAX_CURVES(board, version)), maxPoints(IS_ARM(board) ? O9X_ARM_NUM_POINTS : O9X_NUM_POINTS) { for (int i=0; i= 216) { + internalField.Append(new UnsignedField<3>((unsigned int &)curves[i].type)); + internalField.Append(new BoolField<1>(curves[i].smooth)); + internalField.Append(new SpareBitsField<4>()); + internalField.Append(new ConversionField< SignedField<8> >(curves[i].count, -5)); + } + else if (IS_ARM(board)) { internalField.Append(new SignedField<16>(_curves[i])); - else + } + else { internalField.Append(new SignedField<8>(_curves[i])); + } } + for (int i=0; i(_points[i])); } @@ -855,7 +941,7 @@ class CurvesField: public TransformedField { int offset = 0; for (int i=0; icustom ? curve->count * 2 - 2 : curve->count) - 5; + offset += (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count) - 5; if (offset > maxPoints - 5 * maxCurves) { EEPROMWarnings += ::QObject::tr("openTx only accepts %1 points in all curves").arg(maxPoints) + "\n"; break; @@ -864,7 +950,7 @@ class CurvesField: public TransformedField { for (int j=0; jcount; j++) { *cur++ = curve->points[j].y; } - if (curve->custom) { + if (curve->type == CurveData::CURVE_TYPE_CUSTOM) { for (int j=1; jcount-1; j++) { *cur++ = curve->points[j].x; } @@ -881,15 +967,15 @@ class CurvesField: public TransformedField { int size = next - cur; if (size % 2 == 0) { curve->count = (size / 2) + 1; - curve->custom = true; + curve->type = CurveData::CURVE_TYPE_CUSTOM; } else { curve->count = size; - curve->custom = false; + curve->type = CurveData::CURVE_TYPE_STANDARD; } for (int j=0; jcount; j++) curve->points[j].y = cur[j]; - if (curve->custom) { + if (curve->type == CurveData::CURVE_TYPE_CUSTOM) { curve->points[0].x = -100; for (int j=1; jcount-1; j++) curve->points[j].x = cur[curve->count+j-1]; @@ -908,8 +994,8 @@ class CurvesField: public TransformedField { BoardEnum board; int maxCurves; int maxPoints; - int _curves[O9X_ARM_MAX_CURVES]; - int _points[O9X_ARM_NUM_POINTS]; + int _curves[C9X_MAX_CURVES]; + int _points[C9X_MAX_CURVES*C9X_MAX_POINTS*2]; }; class CustomSwitchesFunctionsTable: public ConversionTable { @@ -1551,7 +1637,14 @@ class FrskyField: public StructField { Append(new UnsignedField<8>(frsky.channels[i].multiplier, 0, 5, "Multiplier")); } Append(new UnsignedField<8>(frsky.usrProto)); - Append(new UnsignedField<8>(frsky.voltsSource)); + if (version >= 216) { + Append(new UnsignedField<7>(frsky.voltsSource)); + // TODO altitude displayed + Append(new SpareBitsField<1>()); + } + else { + Append(new UnsignedField<8>(frsky.voltsSource)); + } Append(new UnsignedField<8>(frsky.blades)); Append(new UnsignedField<8>(frsky.currentSource)); @@ -1575,6 +1668,12 @@ class FrskyField: public StructField { Append(new ConversionField< UnsignedField<2> >(frsky.rssiAlarms[i].level, &rssiConversionTable[i], "RSSI")); Append(new ConversionField< SignedField<6> >(frsky.rssiAlarms[i].value, -45+i*3)); } + if (version >= 216) { + // TODO uint16_t mAhPersistent:1; + // uint16_t storedMah:15; + // int8_t fasOffset; + Append(new SpareBitsField<24>()); + } } else { for (int i=0; i<2; i++) { @@ -1607,6 +1706,10 @@ class FrskyField: public StructField { Append(new SignedField<5>(frsky.varioCenterMin)); Append(new UnsignedField<3>(frsky.currentSource)); Append(new SignedField<8>(frsky.varioCenterMax)); + if (version >= 216) { + // TODO int8_t fasOffset; + Append(new SpareBitsField<8>()); + } } } @@ -1658,9 +1761,16 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u for (int i=0; i= 216) { + internalField.Append(new UnsignedField<16>(modelData.timers[i].val)); + internalField.Append(new BoolField<2>(modelData.timers[i].countdownBeep)); + internalField.Append(new BoolField<1>(modelData.timers[i].minuteBeep)); + internalField.Append(new BoolField<1>(modelData.timers[i].persistent)); + internalField.Append(new SpareBitsField<4>()); + internalField.Append(new SignedField<16>(modelData.timers[i].pvalue)); + } + else if (release21March2013) { internalField.Append(new UnsignedField<12>(modelData.timers[i].val)); - internalField.Append(new BoolField<1>(modelData.timers[i].countdownBeep)); internalField.Append(new BoolField<1>(modelData.timers[i].minuteBeep)); if (HAS_PERSISTENT_TIMERS(board)) { @@ -1688,7 +1798,7 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u internalField.Append(new BoolField<1>(modelData.thrTrim)); - if (IS_TARANIS(board)) + if (IS_TARANIS(board) || (IS_ARM(board) && version >= 216)) internalField.Append(new SpareBitsField<4>()); else internalField.Append(new ConversionField< SignedField<4> >(modelData.moduleData[0].channelsCount, &channelsConversionTable, "Channels number", ::QObject::tr("OpenTX doesn't allow this number of channels"))); @@ -1696,7 +1806,7 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u internalField.Append(new UnsignedField<3>(modelData.trimInc)); internalField.Append(new BoolField<1>(modelData.disableThrottleWarning)); - if (IS_TARANIS(board)) + if (IS_TARANIS(board) || (IS_ARM(board) && version >= 216)) internalField.Append(new SpareBitsField<1>()); else internalField.Append(new BoolField<1>(modelData.moduleData[0].ppmPulsePol)); @@ -1704,7 +1814,10 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u internalField.Append(new BoolField<1>(modelData.extendedLimits)); internalField.Append(new BoolField<1>(modelData.extendedTrims)); internalField.Append(new BoolField<1>(modelData.throttleReversed)); - internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[0].ppmDelay, exportPpmDelay, importPpmDelay)); + + if (!IS_ARM(board) || version < 216) { + internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[0].ppmDelay, exportPpmDelay, importPpmDelay)); + } if (IS_ARM(board) || board==BOARD_GRUVIN9X) internalField.Append(new UnsignedField<16>(modelData.beepANACenter)); @@ -1714,10 +1827,10 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u for (int i=0; i(modelData.moduleData[0].ppmFrameLength)); + + if (!IS_ARM(board) || version < 216) { + internalField.Append(new SignedField<8>(modelData.moduleData[0].ppmFrameLength)); + } + internalField.Append(new UnsignedField<8>(modelData.thrTraceSrc)); - if (!release21March2013) + if (!release21March2013) { internalField.Append(new UnsignedField<8>(modelData.modelId)); + } if (IS_TARANIS(board)) internalField.Append(new UnsignedField<16>(modelData.switchWarningStates)); @@ -1737,15 +1855,19 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u internalField.Append(new SwitchesWarningField<8>(modelData.switchWarningStates, board, version)); if ((board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) && (variant & GVARS_VARIANT)) { - for (int i=0; i(modelData.phaseData[0].gvars[i])); } } if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) { - for (int i=0; i(modelData.gvars_names[i])); + if (version >= 216) { + internalField.Append(new BoolField<1>(modelData.gvars_popups[i])); + internalField.Append(new SpareBitsField<7>()); + } } } @@ -1783,10 +1905,17 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u } if (IS_TARANIS(board)) { - for (int i=0; i(modelData.curves[i].name)); } } + + if (IS_TARANIS(board) && version >= 216) { + // TODO ScriptData scriptsData[MAX_SCRIPTS]; + internalField.Append(new SpareBitsField<720>()); + // TODO char inputNames[MAX_INPUTS][4]; + internalField.Append(new SpareBitsField<1024>()); + } } void Open9xModelDataNew::beforeExport() diff --git a/companion/src/firmwares/opentx/open9xeeprom.h b/companion/src/firmwares/opentx/opentxeeprom.h similarity index 98% rename from companion/src/firmwares/opentx/open9xeeprom.h rename to companion/src/firmwares/opentx/opentxeeprom.h index 29385f66b..363c46677 100644 --- a/companion/src/firmwares/opentx/open9xeeprom.h +++ b/companion/src/firmwares/opentx/opentxeeprom.h @@ -42,7 +42,6 @@ #define O9X_NUM_FSW 16 // number of functions assigned to switches #define O9X_MAX_CURVES 8 #define O9X_NUM_POINTS (112-O9X_MAX_CURVES) -#define O9X_MAX_GVARS 5 #define O9X_ARM_MAX_PHASES 9 #define O9X_ARM_MAX_MIXERS 64 @@ -50,7 +49,6 @@ #define O9X_ARM_NUM_CHNOUT 32 // number of real output channels CH1-CH16 #define O9X_ARM_NUM_CSW 32 // number of custom switches #define O9X_ARM_NUM_FSW 32 // number of functions assigned to switches -#define O9X_ARM_MAX_CURVES 16 #define O9X_ARM_NUM_POINTS 512 #define O9X_ARM_MAX_CSFUNCOLD 13 #define O9X_ARM_MAX_CSFUNC 15 diff --git a/companion/src/firmwares/opentx/open9xinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp similarity index 92% rename from companion/src/firmwares/opentx/open9xinterface.cpp rename to companion/src/firmwares/opentx/opentxinterface.cpp index 2e8b00565..1b201945c 100644 --- a/companion/src/firmwares/opentx/open9xinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -16,14 +16,14 @@ #include #include -#include "open9xinterface.h" -#include "open9xeeprom.h" +#include "opentxinterface.h" +#include "opentxeeprom.h" #include "open9xGruvin9xeeprom.h" #include "open9xSky9xeeprom.h" -#include "open9xsimulator.h" -#include "open9xM128simulator.h" -#include "open9xGruvin9xsimulator.h" -#include "open9xSky9xsimulator.h" +#include "opentxsimulator.h" +#include "opentxM128simulator.h" +#include "opentxGruvin9xsimulator.h" +#include "opentxSky9xsimulator.h" #include "opentxTaranisSimulator.h" #include "file.h" @@ -278,15 +278,7 @@ bool Open9xInterface::saveGeneral(GeneralSettings &settings, BoardEnum board, ui } template -bool Open9xInterface::saveModel(unsigned int index, ModelData &model) -{ - T open9xModel(model); - int sz = efile->writeRlc2(FILE_MODEL(index), FILE_TYP_MODEL, (uint8_t*)&open9xModel, sizeof(T)); - return (sz == sizeof(T)); -} - -template -bool Open9xInterface::saveModelVariant(unsigned int index, ModelData &model, unsigned int version, unsigned int variant) +bool Open9xInterface::saveModel(unsigned int index, ModelData &model, unsigned int version, unsigned int variant) { T open9xModel(model, board, version, variant); // open9xModel.Dump(); @@ -371,16 +363,16 @@ int Open9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t varian case BOARD_TARANIS: case BOARD_TARANIS_REV4a: case BOARD_SKY9X: - version = 215; + version = 216; break; case BOARD_GRUVIN9X: - version = 214; + version = 216; break; case BOARD_M128: - version = 215; + version = 216; break; case BOARD_STOCK: - version = 213; + version = 216; break; } } @@ -389,81 +381,21 @@ int Open9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t varian efile->EeFsCreate(eeprom, size, board); - int result = 0; - if (board == BOARD_M128) { variant |= M128_VARIANT; } - result = saveGeneral(radioData.generalSettings, board, version, variant); - - if (!result) + int result = saveGeneral(radioData.generalSettings, board, version, variant); + if (!result) { return 0; + } for (int i=0; i(i, radioData.models[i]); - break; - case 203: - result = saveModel(i, radioData.models[i]); - break; - case 204: - result = saveModel(i, radioData.models[i]); - break; - case 205: - result = saveModel(i, radioData.models[i]); - break; - case 207: - if (board == BOARD_GRUVIN9X) - result = saveModel(i, radioData.models[i]); - break; - case 208: - if (board == BOARD_GRUVIN9X) - result = saveModel(i, radioData.models[i]); - else if (board == BOARD_SKY9X) - result = saveModel(i, radioData.models[i]); - else - result = saveModel(i, radioData.models[i]); - break; - case 209: - if (board == BOARD_GRUVIN9X) - result = saveModel(i, radioData.models[i]); - else if (board == BOARD_SKY9X) - result = saveModel(i, radioData.models[i]); - else - result = saveModel(i, radioData.models[i]); - break; - case 210: - if (board == BOARD_GRUVIN9X) - result = saveModel(i, radioData.models[i]); - else if (board == BOARD_SKY9X) - result = saveModel(i, radioData.models[i]); - else - result = saveModel(i, radioData.models[i]); - break; - case 211: - if (board == BOARD_GRUVIN9X) - result = saveModel(i, radioData.models[i]); - else if (board == BOARD_SKY9X) - result = saveModel(i, radioData.models[i]); - else - result = saveModel(i, radioData.models[i]); - break; - case 212: - if (board == BOARD_SKY9X) - result = saveModel(i, radioData.models[i]); - else - result = saveModelVariant(i, radioData.models[i], version, variant); - break; - default: - result = saveModelVariant(i, radioData.models[i], version, variant); - break; + result = saveModel(i, radioData.models[i], version, variant); + if (!result) { + return 0; } - if (!result) - return false; } } @@ -565,13 +497,12 @@ int Open9xInterface::getCapability(const Capability capability) case FlightPhasesHaveFades: return 1; case Gvars: - return 5; + return IS_ARM(board) ? 9 : 5; case FlightModesName: case GvarsName: return (IS_TARANIS(board) ? 10 : 6); case GvarsInCS: case GvarsAsWeight: - case ExpoIsCurve: case HasFAIMode: return 1; case GvarsAreNamed: @@ -667,13 +598,6 @@ int Open9xInterface::getCapability(const Capability capability) return 0; case ExtraInputs: return 1; - case HasNegCurves: - return 1; - case HasExpoCurves: - return true; - case ExpoCurve5: - case ExpoCurve9: - return 4; case ExtendedTrims: return 500; case ExtraTrims: @@ -684,8 +608,6 @@ int Open9xInterface::getCapability(const Capability capability) return 1; case FSSwitch: return 1; - case CustomCurves: - return 1; case MixesWithoutExpo: return 1; case NumCurves: @@ -732,8 +654,6 @@ int Open9xInterface::getCapability(const Capability capability) return 1; case TelemetryMaxMultiplier: return (IS_ARM(board) ? 32 : 8); - case DiffMixers: - return 1; case PPMCenter: return 1; case SYMLimits: diff --git a/companion/src/firmwares/opentx/open9xinterface.h b/companion/src/firmwares/opentx/opentxinterface.h similarity index 95% rename from companion/src/firmwares/opentx/open9xinterface.h rename to companion/src/firmwares/opentx/opentxinterface.h index 351b1ba53..82e8c7671 100644 --- a/companion/src/firmwares/opentx/open9xinterface.h +++ b/companion/src/firmwares/opentx/opentxinterface.h @@ -67,10 +67,7 @@ class Open9xInterface : public EEPROMInterface bool loadModel(uint8_t version, ModelData &model, uint8_t *data, int index, unsigned int variant, unsigned int stickMode=0); template - bool saveModel(unsigned int index, ModelData &model); - - template - bool saveModelVariant(unsigned int index, ModelData &model, unsigned int version, unsigned int variant); + bool saveModel(unsigned int index, ModelData &model, unsigned int version, unsigned int variant); template bool loadGeneral(GeneralSettings &settings, unsigned int version); diff --git a/companion/src/firmwares/opentx/open9xsimulator.cpp b/companion/src/firmwares/opentx/opentxsimulator.cpp similarity index 98% rename from companion/src/firmwares/opentx/open9xsimulator.cpp rename to companion/src/firmwares/opentx/opentxsimulator.cpp index 252ee6ecc..a406305b2 100644 --- a/companion/src/firmwares/opentx/open9xsimulator.cpp +++ b/companion/src/firmwares/opentx/opentxsimulator.cpp @@ -14,9 +14,9 @@ * */ -#include "open9xsimulator.h" -#include "open9xinterface.h" -#include "open9xeeprom.h" +#include "opentxsimulator.h" +#include "opentxinterface.h" +#include "opentxeeprom.h" #define HELI #define SIMU diff --git a/companion/src/firmwares/opentx/open9xsimulator.h b/companion/src/firmwares/opentx/opentxsimulator.h similarity index 100% rename from companion/src/firmwares/opentx/open9xsimulator.h rename to companion/src/firmwares/opentx/opentxsimulator.h diff --git a/companion/src/firmwares/th9x/th9xeeprom.cpp b/companion/src/firmwares/th9x/th9xeeprom.cpp index 2e5ad8a2f..8df98e04b 100644 --- a/companion/src/firmwares/th9x/th9xeeprom.cpp +++ b/companion/src/firmwares/th9x/th9xeeprom.cpp @@ -29,15 +29,6 @@ t_Th9xTrainerMix::t_Th9xTrainerMix() memset(this, 0, sizeof(t_Th9xTrainerMix)); } -t_Th9xTrainerMix::t_Th9xTrainerMix(TrainerMix &c9x) -{ - memset(this, 0, sizeof(t_Th9xTrainerMix)); - srcChn = c9x.src; - swtch = th9xFromSwitch(c9x.swtch); - studWeight = (8 * c9x.weight) / 25; - mode = c9x.mode; -} - t_Th9xTrainerMix::operator TrainerMix() { TrainerMix c9x; @@ -53,15 +44,6 @@ t_Th9xTrainerData::t_Th9xTrainerData() memset(this, 0, sizeof(t_Th9xTrainerData)); } -t_Th9xTrainerData::t_Th9xTrainerData(TrainerData &c9x) -{ - memset(this, 0, sizeof(t_Th9xTrainerData)); - for (int i=0; i 6) { + c9x.curve.type = CurveReference::CURVE_REF_CUSTOM; + c9x.curve.value = curve - 6; + } + else if (curve > 0) { + c9x.curve.type = CurveReference::CURVE_REF_FUNC; + c9x.curve.value = curve; + } c9x.mode = mode3; c9x.weight = weight6; c9x.chn = chn; c9x.swtch = th9xToSwitch(drSw); - if (curve) { - c9x.curveMode=1; - c9x.curveParam = curve; - } else { - c9x.curveMode = 0; - c9x.curveParam = exp5; - } return c9x; } @@ -204,15 +134,6 @@ t_Th9xLimitData::t_Th9xLimitData() memset(this, 0, sizeof(t_Th9xLimitData)); } -t_Th9xLimitData::t_Th9xLimitData(LimitData &c9x) -{ - memset(this, 0, sizeof(t_Th9xLimitData)); - min = c9x.min+100; - max = c9x.max-100; - revert = c9x.revert; - offset = c9x.offset; -} - t_Th9xLimitData::operator LimitData () { LimitData c9x; @@ -223,36 +144,11 @@ t_Th9xLimitData::operator LimitData () return c9x; } - t_Th9xMixData::t_Th9xMixData() { memset(this, 0, sizeof(t_Th9xMixData)); } -t_Th9xMixData::t_Th9xMixData(MixData &c9x) -{ - memset(this, 0, sizeof(t_Th9xMixData)); - destCh = c9x.destCh; - mixMode = c9x.mltpx; - if (c9x.srcRaw.type == SOURCE_TYPE_STICK) - srcRaw = c9x.srcRaw.index; - else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) - srcRaw = 10; - else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) - srcRaw = 24 + c9x.srcRaw.index; - else if (c9x.srcRaw.type == SOURCE_TYPE_CH) - srcRaw = 12 + c9x.srcRaw.index; - else - srcRaw = 0; // TODO - switchMode = 1; - curveNeg = 0; - weight = c9x.weight; - swtch = th9xFromSwitch(c9x.swtch); - curve = c9x.curve; - speedUp = c9x.speedUp; - speedDown = c9x.speedDown; -} - t_Th9xMixData::operator MixData () { MixData c9x; @@ -271,41 +167,20 @@ t_Th9xMixData::operator MixData () c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-24); c9x.weight = weight; c9x.swtch = th9xToSwitch(swtch); - c9x.curve = curve; + if (curve > 6) { + c9x.curve.type = CurveReference::CURVE_REF_CUSTOM; + c9x.curve.value = curve - 6; + } + else if (curve > 0) { + c9x.curve.type = CurveReference::CURVE_REF_FUNC; + c9x.curve.value = curve; + } c9x.speedUp = speedUp; c9x.speedDown = speedDown; c9x.mltpx = (MltpxValue)mixMode; return c9x; } - -t_Th9xCustomSwData::t_Th9xCustomSwData(CustomSwData &c9x) -{ - opCmp = c9x.func; - val1 = c9x.val1; - val2 = c9x.val2; - - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { - val1 = fromSource(RawSource(c9x.val1)); - } - - if (c9x.func >= CS_FN_EQUAL) { - val2 = fromSource(RawSource(c9x.val2)); - } - - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { - val1 = th9xFromSwitch(RawSwitch(c9x.val1)); - val2 = th9xFromSwitch(RawSwitch(c9x.val2)); - } - - if (opCmp>TH9X_MAX_CSFUNC ) { - EEPROMWarnings += ::QObject::tr("th9x does not support Custom Switch function %1").arg(getFuncName(opCmp)) + "\n"; - opCmp=0; - val1=0; - val2=0; - } -} - t_Th9xCustomSwData::operator CustomSwData () { CustomSwData c9x; @@ -386,76 +261,6 @@ t_Th9xModelData::t_Th9xModelData() memset(this, 0, sizeof(t_Th9xModelData)); } -t_Th9xModelData::t_Th9xModelData(ModelData &c9x) -{ - memset(this, 0, sizeof(t_Th9xModelData)); - - if (c9x.used) { - setEEPROMString(name, c9x.name, sizeof(name)); - mdVers = MDVERS; - if (c9x.timers[0].mode == TMRMODE_ABS) - tmrMode = 1; - if (c9x.timers[0].mode == TMRMODE_THs) - tmrMode = 2; - if (c9x.timers[0].mode == TMRMODE_THp) - tmrMode = 3; - else - tmrMode = 0; - - // TODO tmrDir = c9x.timers[0].dir; - tmrVal = c9x.timers[0].val; - //protocol = c9x.protocol; - /* - ppmNCH = (c9x.moduleData[0].channelsCount - 8) / 2; - thrTrim = c9x.thrTrim; - thrExpo = c9x.thrExpo; - trimInc = c9x.trimInc; - ppmDelay = (c9x.moduleData[0].ppmDelay - 300) / 50; - for (unsigned int i=0; i 1*4 operator ModelData(); t_Th9xModelData(); - t_Th9xModelData(ModelData&); }) Th9xModelData; - #endif -/*eof*/ diff --git a/companion/src/firmwares/th9x/th9xinterface.cpp b/companion/src/firmwares/th9x/th9xinterface.cpp index 624b077a8..d86065ddb 100644 --- a/companion/src/firmwares/th9x/th9xinterface.cpp +++ b/companion/src/firmwares/th9x/th9xinterface.cpp @@ -124,56 +124,20 @@ bool Th9xInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, int esize, int Th9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version) { - EEPROMWarnings.clear(); + std::cout << "NO!\n"; + // TODO a warning - efile->EeFsCreate(eeprom, getEEpromSize(), BOARD_STOCK); - - Th9xGeneral th9xGeneral(radioData.generalSettings); - int sz = efile->writeRlc2(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&th9xGeneral, sizeof(Th9xGeneral)); - if(sz != sizeof(Th9xGeneral)) { - return 0; - } - - for (int i=0; iwriteRlc2(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&th9xModel, sizeof(Th9xModelData)); - if(sz != sizeof(Th9xModelData)) { - return 0; - } - } - } - - return getEEpromSize(); + return 0; } int Th9xInterface::getSize(ModelData &model) { - if (model.isempty()) - return 0; - - uint8_t tmp[2*EESIZE_STOCK]; - efile->EeFsCreate(tmp, getEEpromSize(), BOARD_STOCK); - - Th9xModelData th9xModel(model); - int sz = efile->writeRlc2(0, FILE_TYP_MODEL, (uint8_t*)&th9xModel, sizeof(Th9xModelData)); - if(sz != sizeof(Th9xModelData)) { - return -1; - } - return efile->size(0); + return 0; } int Th9xInterface::getSize(GeneralSettings &settings) { - uint8_t tmp[2*EESIZE_STOCK]; - efile->EeFsCreate(tmp, getEEpromSize(), BOARD_STOCK); - - Th9xGeneral th9xGeneral(settings); - int sz = efile->writeRlc2(0, FILE_TYP_GENERAL, (uint8_t*)&th9xGeneral, sizeof(Th9xGeneral)); - if(sz != sizeof(th9xGeneral)) { - return -1; - } - return efile->size(0); + return 0; } int Th9xInterface::getCapability(const Capability capability) @@ -181,12 +145,6 @@ int Th9xInterface::getCapability(const Capability capability) switch (capability) { case Mixes: return TH9X_MAX_MIXERS; - case NumCurves3: - return TH9X_MAX_CURVES3; - case NumCurves5: - return TH9X_MAX_CURVES5; - case NumCurves9: - return TH9X_MAX_CURVES9; case OwnerName: return 0; case Timers: diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp index 445e8013d..0bc850e09 100644 --- a/companion/src/helpers.cpp +++ b/companion/src/helpers.cpp @@ -480,68 +480,57 @@ void populatePhasesCB(QComboBox *b, int value) b->setCurrentIndex(value + GetEepromInterface()->getCapability(FlightPhases)); } -void populateCurvesCB(QComboBox *b, int value) +void populateCurveReference(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QComboBox *curveValueCB, QSpinBox *curveValueSB, CurveReference & curve, unsigned int flags) { - b->clear(); - int numcurves=GetEepromInterface()->getCapability(NumCurves); - if (numcurves==0) { - numcurves=16; - } - for (int i = -(numcurves)*GetEepromInterface()->getCapability(HasNegCurves); i < CURVE_BASE + numcurves; i++) { - if ((i==0) && GetEepromInterface()->getCapability(DiffMixers)) { - b->addItem(QObject::tr("Diff")); - } else { - b->addItem(getCurveStr(i)); + curveTypeCB->clear(); + curveTypeCB->addItem(QObject::tr("Diff")); + curveTypeCB->addItem(QObject::tr("Expo")); + curveTypeCB->addItem(QObject::tr("Func")); + curveTypeCB->addItem(QObject::tr("Curve")); + curveTypeCB->setCurrentIndex(curve.type); + + if (curve.type == CurveReference::CURVE_REF_DIFF || curve.type == CurveReference::CURVE_REF_EXPO) { + curveGVarCB->show(); + if (curve.value>100 || curve.value<-100) { + curveGVarCB->setChecked(true); + populateGVCB(curveValueCB, curve.value); + curveValueCB->show(); + curveValueSB->hide(); + } + else { + curveGVarCB->setChecked(false); + curveValueSB->setMinimum(-100); + curveValueSB->setMaximum(100); + curveValueSB->setValue(curve.value); + curveValueSB->show(); + curveValueCB->hide(); } } - b->setCurrentIndex(value+numcurves*GetEepromInterface()->getCapability(HasNegCurves)); - b->setMaxVisibleItems(10); -} - -void populateExpoCurvesCB(QComboBox *b, int value) -{ - b->clear(); - int numcurves=GetEepromInterface()->getCapability(NumCurves); - if (numcurves==0) { - numcurves=16; - } - if (GetEepromInterface()->getCapability(ExpoIsCurve)) { - b->addItem(QObject::tr("Expo")); - } else { - b->addItem(getCurveStr(0)); - } - for (int i = 1; i < CURVE_BASE + numcurves; i++) - b->addItem(getCurveStr(i)); - b->setCurrentIndex(value); - b->setMaxVisibleItems(10); - /* TODO - if (GetEepromInterface()->getCapability(ExpoCurve5)) { - int curve5=GetEepromInterface()->getCapability(ExpoCurve5); - for (int i=CURVE_BASE+curve5; i < CURVE_BASE + MAX_CURVE5; i++) { - // Get the index of the value to disable - QModelIndex index = b->model()->index(i, 0); - - // This is the effective 'disable' flag - QVariant v(0); - - //the magic - b->model()->setData(index, v, Qt::UserRole - 1); + else { + curveGVarCB->hide(); + curveValueSB->hide(); + curveValueCB->show(); + curveValueCB->setMaxVisibleItems(10); + switch (curve.type) { + case CurveReference::CURVE_REF_FUNC: + for (int i=0; i<=6/*TODO constant*/; i++) { + curveValueCB->addItem(CurveReference(CurveReference::CURVE_REF_FUNC, i).toString()); + } + curveValueCB->setCurrentIndex(curve.value); + break; + case CurveReference::CURVE_REF_CUSTOM: + { + int numcurves = GetEepromInterface()->getCapability(NumCurves); + for (int i=-numcurves; iaddItem(CurveReference(CurveReference::CURVE_REF_CUSTOM, i).toString()); + } + curveValueCB->setCurrentIndex(curve.value+numcurves); + break; + } + default: + break; } } - if (GetEepromInterface()->getCapability(ExpoCurve9)) { - int curve9=GetEepromInterface()->getCapability(ExpoCurve9); - for (int i=CURVE_BASE+MAX_CURVE5+curve9; i < CURVE_BASE + MAX_CURVE5+ MAX_CURVE9; i++) { - // Get the index of the value to disable - QModelIndex index = b->model()->index(i, 0); - - // This is the effective 'disable' flag - QVariant v(0); - - //the magic - b->model()->setData(index, v, Qt::UserRole - 1); - } - } - */ } void populateTrimUseCB(QComboBox *b, unsigned int phase) @@ -1017,12 +1006,6 @@ QString getSignedStr(int value) return value > 0 ? QString("+%1").arg(value) : QString("%1").arg(value); } -QString getCurveStr(int curve) -{ - QString crvStr = "!c16!c15!c14!c13!c12!c11!c10!c9 !c8 !c7 !c6 !c5 !c4 !c3 !c2 !c1 ----x>0 x<0 |x| f>0 f<0 |f| c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 "; - return crvStr.mid((curve+C9X_MAX_CURVES) * 4, 4).remove(' ').replace("c", QObject::tr("Curve") + " "); -} - QString getGVarString(int16_t val, bool sign) { if (val >= -10000 && val <= 10000) diff --git a/companion/src/helpers.h b/companion/src/helpers.h index 4a3b9ee6c..43ed54f34 100644 --- a/companion/src/helpers.h +++ b/companion/src/helpers.h @@ -42,9 +42,9 @@ void populateFuncParamArmTCB(QComboBox *b, ModelData * g_model, char * value, QS void populatePhasesCB(QComboBox *b, int value); void populateTrimUseCB(QComboBox *b, unsigned int phase); void populateGvarUseCB(QComboBox *b, unsigned int phase); +void populateCurveReference(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QComboBox *curveValueCB, QSpinBox *curveValueSB, CurveReference & curve, unsigned int flags); void populateCurvesCB(QComboBox *b, int value); void populateCustomScreenFieldCB(QComboBox *b, unsigned int value, bool last, int hubproto); -void populateExpoCurvesCB(QComboBox *b, int value); void populateTimerSwitchCB(QComboBox *b, int value); QString getCustomSwitchStr(CustomSwData * customSw, const ModelData & model); QString getProtocolStr(const int proto); @@ -71,7 +71,6 @@ QString getCSWFunc(int val); QString getFuncName(unsigned int val); QString getRepeatString(unsigned int val); QString getSignedStr(int value); -QString getCurveStr(int curve); QString getGVarString(int16_t val, bool sign=false); QString image2qstring(QImage image); QImage qstring2image(QString imagestr); diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index 058218ec7..fc9c58b93 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -59,7 +59,7 @@ #include "burndialog.h" #include "hexinterface.h" #include "warnings.h" -#include "firmwares/opentx/open9xinterface.h" // TODO get rid of this include +#include "firmwares/opentx/opentxinterface.h" // TODO get rid of this include #define DONATE_STR "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QUZ48K4SEXDP2" #ifdef __APPLE__ diff --git a/companion/src/modeledit/curves.cpp b/companion/src/modeledit/curves.cpp index 54cf80e93..577e3bd0f 100644 --- a/companion/src/modeledit/curves.cpp +++ b/companion/src/modeledit/curves.cpp @@ -89,6 +89,7 @@ Curves::Curves(QWidget * parent, ModelData & model): for (int i=0; igetCapability(NumCurves); i++) { visibleCurves[i] = false; + // The reset curve button QPushButton * reset = new QPushButton(this); reset->setProperty("index", i); @@ -117,8 +118,6 @@ Curves::Curves(QWidget * parent, ModelData & model): ui->curvesLayout->addWidget(plot, i, 2, 1, 1); } - visibleCurves[0] = true; - for (int i=0; isetProperty("index", i); @@ -183,7 +182,7 @@ void Curves::update() for (int i=0; ishow(); spny[i]->setValue(model.curves[currentCurve].points[i].y); - if (model.curves[currentCurve].custom) { + if (model.curves[currentCurve].type == CurveData::CURVE_TYPE_CUSTOM) { spnx[i]->show(); if (i==0 || i==model.curves[currentCurve].count-1) { spnx[i]->setDisabled(true); @@ -218,7 +217,7 @@ void Curves::setCurrentCurve(int index) void Curves::updateCurveType() { - int index = model.curves[currentCurve].custom; + int index = (model.curves[currentCurve].type == CurveData::CURVE_TYPE_CUSTOM ? 1 : 0); if (model.curves[currentCurve].count==5) index += 2; else if (model.curves[currentCurve].count==9) @@ -256,10 +255,10 @@ void Curves::updateCurve() int numcurves = GetEepromInterface()->getCapability(NumCurves); for (int k=0; kaddLine(centerX + (qreal)model.curves[k].points[i].x*width/200,centerY - (qreal)model.curves[k].points[i].y*height/200,centerX + (qreal)model.curves[k].points[i+1].x*width/200,centerY - (qreal)model.curves[k].points[i+1].y*height/200,pen); else scene->addLine(GFX_MARGIN + i*width/(numpoints-1),centerY - (qreal)model.curves[k].points[i].y*height/200,GFX_MARGIN + (i+1)*width/(numpoints-1),centerY - (qreal)model.curves[k].points[i+1].y*height/200,pen); @@ -273,7 +272,7 @@ void Curves::updateCurve() nodex = new Node(); nodex->setProperty("index", i); nodex->setColor(colors[currentCurve]); - if (model.curves[currentCurve].custom) { + if (model.curves[currentCurve].type == CurveData::CURVE_TYPE_CUSTOM) { if (i>0 && isetFixedX(false); nodex->setMinX(model.curves[currentCurve].points[i-1].x); @@ -339,7 +338,7 @@ void Curves::onNodeUnfocus() void Curves::on_curvetype_CB_currentIndexChanged(int index) { static const int numpoint[] = {3,3,5,5,9,9,17,17}; - static const bool custom[] = {false,true,false,true,false,true,false,true}; + static const CurveData::CurveType types[] = {CurveData::CURVE_TYPE_STANDARD, CurveData::CURVE_TYPE_CUSTOM, CurveData::CURVE_TYPE_STANDARD, CurveData::CURVE_TYPE_CUSTOM, CurveData::CURVE_TYPE_STANDARD, CurveData::CURVE_TYPE_CUSTOM, CurveData::CURVE_TYPE_STANDARD, CurveData::CURVE_TYPE_CUSTOM}; if (!lock) { lock = true; @@ -352,13 +351,13 @@ void Curves::on_curvetype_CB_currentIndexChanged(int index) for (int i=0; ica_ymax_SB->value()-ui->ca_ymin_SB->value())/200.0; int numpoints=model.curves[currentCurve].count; for (int i=0; igetCapability(CustomCurves)){ - ui->curvetype_CB->setDisabled(true); - int count=0; - for (int j=0; j< GetEepromInterface()->getCapability(NumCurves3); j++) { - model.curves[count].count=3; - model.curves[count].custom=false; - memset(model.curves[j].name,0,sizeof(model.curves[j].name)); - for (int i=0; i<17; i++) { - model.curves[count].points[i].x=0; - model.curves[count].points[i].y=0; - } - count++; - } - for (int j=0; j< GetEepromInterface()->getCapability(NumCurves5); j++) { - model.curves[count].count=5; - model.curves[count].custom=false; - memset(model.curves[j].name,0,sizeof(model.curves[j].name)); - for (int i=0; i<17; i++) { - model.curves[count].points[i].x=0; - model.curves[count].points[i].y=0; - } - count++; - } - for (int j=0; j< GetEepromInterface()->getCapability(NumCurves9); j++) { - model.curves[count].count=9; - model.curves[count].custom=false; - memset(model.curves[j].name,0,sizeof(model.curves[j].name)); - for (int i=0; i<17; i++) { - model.curves[count].points[i].x=0; - model.curves[count].points[i].y=0; - } - count++; - } - for (int j=count; j<16; j++) { - model.curves[j].count=5; - model.curves[j].custom=false; - memset(model.curves[j].name,0,sizeof(model.curves[j].name)); - for (int i=0; i<17; i++) { - model.curves[j].points[i].x=0; - model.curves[j].points[i].y=0; - } - } - } else { - for (int j=0; j<16; j++) { - model.curves[j].count=5; - model.curves[j].custom=false; - memset(model.curves[j].name,0,sizeof(model.curves[j].name)); - for (int i=0; i<17; i++) { - model.curves[j].points[i].x=0; - model.curves[j].points[i].y=0; - } + for (int j=0; j<16; j++) { + model.curves[j].count = 5; + model.curves[j].custom = false; + memset(model.curves[j].name, 0, sizeof(model.curves[j].name)); + for (int i=0; i<17; i++) { + model.curves[j].points[i].x = 0; + model.curves[j].points[i].y = 0; } } for (int i=0; i<17; i++) { @@ -667,11 +622,7 @@ void ModelEdit::clearCurves(bool ask) } currentCurve=0; curvesLock=false; - if (GetEepromInterface()->getCapability(NumCurves3)>0) { - ui->curvetype_CB->setCurrentIndex(0); - } else { - ui->curvetype_CB->setCurrentIndex(2); - } + ui->curvetype_CB->setCurrentIndex(2); ui->cname_LE->clear(); updateSettings(); drawCurve(); diff --git a/companion/src/modeledit/expodialog.cpp b/companion/src/modeledit/expodialog.cpp index 9382766b0..097d8c1a6 100644 --- a/companion/src/modeledit/expodialog.cpp +++ b/companion/src/modeledit/expodialog.cpp @@ -28,19 +28,24 @@ ExpoDialog::ExpoDialog(QWidget *parent, ExpoData *expoData, int stickMode) : ui->expoGV->setDisabled(true); ui->weightGV->setDisabled(true); ui->expoCurveGV->setDisabled(true); + + /* TODO if (ed->expo>100) { ed->expo=0; } + */ if (ed->weight>100 || ed->weight<-100) { ed->weight=100; } +/* TODO if (ed->curveParam>100 || ed->curveParam<-100) { ed->curveParam=0; } + */ } - populateGVCB(ui->expoCB,ed->expo); - populateGVCB(ui->weightCB,ed->weight); - populateGVCB(ui->expoCurveCB,ed->curveParam); + // TODO populateGVCB(ui->expoCB, ed->expo); + populateGVCB(ui->weightCB, ed->weight); + // TODO populateGVCB(ui->expoCurveCB, ed->curveParam); ui->weightSB->setMinimum(0); ui->weightSB->setMaximum(100); @@ -54,14 +59,15 @@ ExpoDialog::ExpoDialog(QWidget *parent, ExpoData *expoData, int stickMode) : ui->weightSB->show(); ui->weightCB->hide(); } - +/* TODO ui->expoSB->setMinimum(-100); ui->expoSB->setMaximum(100); if (ed->expo>100 || ed->expo<-100) { ui->expoGV->setChecked(true); ui->expoSB->hide(); ui->expoCB->show(); - } else { + } + else { ui->expoGV->setChecked(false); ui->expoSB->setValue(ed->expo); ui->expoSB->show(); @@ -74,49 +80,45 @@ ExpoDialog::ExpoDialog(QWidget *parent, ExpoData *expoData, int stickMode) : ui->expoCurveGV->setChecked(true); ui->expoCurveSB->hide(); ui->expoCurveCB->show(); - } else { + } + else { ui->expoCurveGV->setChecked(false); ui->expoCurveSB->setValue(ed->curveParam); ui->expoCurveSB->show(); ui->expoCurveCB->hide(); } - } else { - ui->expoGV->hide(); + */ + } + else { +// TODO ui->expoGV->hide(); ui->weightGV->hide(); - ui->expoCurveGV->hide(); - ui->expoSB->setMinimum(-100); - ui->expoSB->setMaximum(100); - ui->expoSB->setValue(ed->expo); - ui->expoCurveSB->setMinimum(-100); - ui->expoCurveSB->setMaximum(100); - ui->expoCurveSB->setValue(ed->curveParam); + // TODO ui->expoCurveGV->hide(); + // TODO ui->expoSB->setMinimum(-100); + // TODO ui->expoSB->setMaximum(100); + // TODO ui->expoSB->setValue(ed->expo); + // TODO ui->expoCurveSB->setMinimum(-100); + // TODO ui->expoCurveSB->setMaximum(100); + // TODO ui->expoCurveSB->setValue(ed->curveParam); ui->weightSB->setMinimum(0); ui->weightSB->setMaximum(100); ui->weightSB->setValue(ed->weight); } + populateSwitchCB(ui->switchesCB,ed->swtch); - if (ed->curveMode==0) { + /* if (ed->curveMode==0) { populateExpoCurvesCB(ui->curvesCB,0); // TODO capacity for er9x - } else { + } + else { populateExpoCurvesCB(ui->curvesCB,ed->curveParam); // TODO capacity for er9x } + */ ui->modeCB->setCurrentIndex(ed->mode-1); - if (!GetEepromInterface()->getCapability(HasExpoCurves)) { - ui->label_curves->hide(); - ui->curvesCB->hide(); - ed->curveMode=1; - } - if (!GetEepromInterface()->getCapability(ExpoIsCurve)) { - ui->expoCurveCB->hide(); - ui->expoCurveSB->hide(); - ui->expoCurveGV->hide(); - ui->label_curves->setText(tr("Curve")); - } else { - ui->label_expo->hide(); - ui->expoCB->hide(); - ui->expoGV->hide(); - ui->expoSB->hide(); - } + + ui->label_expo->hide(); + // TODO ui->expoCB->hide(); + // TODO ui->expoGV->hide(); + // TODO ui->expoSB->hide(); + if (!GetEepromInterface()->getCapability(FlightPhases)) { ui->label_phases->hide(); for (int i=0; i<9; i++) { @@ -194,22 +196,12 @@ void ExpoDialog::widgetChanged() gvars=1; } if (gvars==1) { - if (!GetEepromInterface()->getCapability(ExpoIsCurve)) { - if (ui->expoGV->isChecked()) { - ui->expoCB->show(); - ui->expoSB->hide(); - } else { - ui->expoCB->hide(); - ui->expoSB->show(); - } + if (ui->expoCurveGV->isChecked()) { + ui->expoCurveCB->show(); + ui->expoCurveSB->hide(); } else { - if (ui->expoCurveGV->isChecked()) { - ui->expoCurveCB->show(); - ui->expoCurveSB->hide(); - } else { - ui->expoCurveCB->hide(); - ui->expoCurveSB->show(); - } + ui->expoCurveCB->hide(); + ui->expoCurveSB->show(); } if (ui->weightGV->isChecked()) { ui->weightCB->show(); @@ -229,45 +221,24 @@ void ExpoDialog::valuesChanged() { QCheckBox * cb_fp[] = {ui->cb_FP0,ui->cb_FP1,ui->cb_FP2,ui->cb_FP3,ui->cb_FP4,ui->cb_FP5,ui->cb_FP6,ui->cb_FP7,ui->cb_FP8 }; if (ui->curvesCB->currentIndex()==0) { - if (GetEepromInterface()->getCapability(ExpoIsCurve)) { - ed->curveMode = 0; - ui->expoCurveGV->show(); - if (ui->expoCurveGV->isChecked()) { - ui->expoCurveCB->show(); - ui->expoCurveSB->hide(); - ed->curveParam = ui->expoCurveCB->itemData(ui->expoCurveCB->currentIndex()).toInt(); - } else { - ui->expoCurveCB->hide(); - ui->expoCurveSB->show(); - ed->curveParam = ui->expoCurveSB->value(); - } - ed->expo = ed->curveParam; - } else { - ui->expoCurveCB->hide(); + // TODO ed->curveMode = 0; + ui->expoCurveGV->show(); + if (ui->expoCurveGV->isChecked()) { + ui->expoCurveCB->show(); ui->expoCurveSB->hide(); - ui->expoCurveGV->hide(); - ed->curveMode = 0; - if (ui->expoGV->isChecked()) { - ed->expo = ui->expoCB->itemData(ui->expoCB->currentIndex()).toInt(); - } else { - ed->expo = ui->expoSB->value(); - } - ed->curveParam = ed->expo; + // TODO ed->curveParam = ui->expoCurveCB->itemData(ui->expoCurveCB->currentIndex()).toInt(); } - } else { - if (!GetEepromInterface()->getCapability(ExpoIsCurve)) { - ed->curveMode = 1; - ed->curveParam = ui->curvesCB->currentIndex(); - if (ui->expoGV->isChecked()) { - ed->expo = ui->expoCB->itemData(ui->expoCB->currentIndex()).toInt(); - } else { - ed->expo = ui->expoSB->value(); - } - } else { - ed->curveMode = 1; - ed->curveParam = ui->curvesCB->currentIndex(); - ed->expo = 0; + else { + ui->expoCurveCB->hide(); + ui->expoCurveSB->show(); + // TODO ed->curveParam = ui->expoCurveSB->value(); } + // TODO ed->expo = ed->curveParam; + } + else { + // TODO ed->curveMode = 1; + // TODO ed->curveParam = ui->curvesCB->currentIndex(); + // TODO ed->expo = 0; ui->expoCurveCB->hide(); ui->expoCurveSB->hide(); ui->expoCurveGV->hide(); diff --git a/companion/src/modeledit/flightmodes.cpp b/companion/src/modeledit/flightmodes.cpp index 67b59d60d..4a4e5e651 100644 --- a/companion/src/modeledit/flightmodes.cpp +++ b/companion/src/modeledit/flightmodes.cpp @@ -1,6 +1,6 @@ #include "flightmodes.h" #include "ui_flightmode.h" -#include "firmwares/opentx/open9xeeprom.h" // TODO shouldn't be there +// #include "firmwares/opentx/opentxeeprom.h" // TODO shouldn't be there #include "helpers.h" #include #include diff --git a/companion/src/modeledit/inputs.cpp b/companion/src/modeledit/inputs.cpp index 96967a5e8..49eb8cf83 100644 --- a/companion/src/modeledit/inputs.cpp +++ b/companion/src/modeledit/inputs.cpp @@ -83,13 +83,12 @@ void InputsPanel::update() }; str += tr("Weight") + getGVarString(md->weight).rightJustified(6, ' '); - if (!GetEepromInterface()->getCapability(ExpoIsCurve)) { - if (md->expo!=0) - str += " " + tr("Expo") + getGVarString(md->expo, true).rightJustified(7, ' '); - } else { - if (md->curveMode==0 && md->curveParam!=0) - str += " " + tr("Expo") + getGVarString(md->curveParam, true).rightJustified(7, ' '); + + QString curveStr = md->curve.toString(); + if (!curveStr.isEmpty()) { + str += " " + curveStr; } + if (GetEepromInterface()->getCapability(FlightPhases)) { if(md->phases) { if (md->phases!=(unsigned int)(1<getCapability(FlightPhases))-1) { @@ -120,14 +119,14 @@ void InputsPanel::update() mask <<=1; } str += QString(")"); - } else { + } + else { str += tr("DISABLED")+QString(" !!!"); } } } if (md->swtch.type != SWITCH_TYPE_NONE) str += " " + tr("Switch") + QString("(%1)").arg(md->swtch.toString()); - if (md->curveMode) - if (md->curveParam) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curveParam)); + if (GetEepromInterface()->getCapability(HasExpoNames)) { QString ExpoName; ExpoName.append(md->name); diff --git a/companion/src/modeledit/mixerdialog.cpp b/companion/src/modeledit/mixerdialog.cpp index 92d7b809f..33c374ef9 100644 --- a/companion/src/modeledit/mixerdialog.cpp +++ b/companion/src/modeledit/mixerdialog.cpp @@ -17,7 +17,9 @@ MixerDialog::MixerDialog(QWidget *parent, MixData *mixdata, int stickMode) : this->setWindowTitle(tr("DEST -> X%1").arg(md->destCh-GetEepromInterface()->getCapability(Outputs))); else this->setWindowTitle(tr("DEST -> CH%1%2").arg(md->destCh/10).arg(md->destCh%10)); + populateSourceCB(ui->sourceCB, md->srcRaw, POPULATE_SOURCES | POPULATE_SWITCHES | (GetEepromInterface()->getCapability(ExtraTrims) ? POPULATE_TRIMS : 0) | (GetEepromInterface()->getCapability(GvarsAsSources) ? POPULATE_GVARS : 0)); + ui->sourceCB->removeItem(0); int limit=GetEepromInterface()->getCapability(OffsetWeight); if (GetEepromInterface()->getCapability(GvarsAsWeight)) { @@ -32,20 +34,15 @@ MixerDialog::MixerDialog(QWidget *parent, MixData *mixdata, int stickMode) : if (gvars==0) { ui->offsetGV->setDisabled(true); ui->weightGV->setDisabled(true); - ui->differentialGV->setDisabled(true); if (md->weight>limit || md->weight<-limit) { md->weight=100; } if (md->sOffset>limit || md->sOffset<-limit) { md->sOffset=0; } - if (md->differential>100 || md->weight<-100) { - md->differential=0; - } } populateGVCB(ui->offsetCB,md->sOffset); populateGVCB(ui->weightCB,md->weight); - populateGVCB(ui->differentialCB,md->differential); ui->weightSB->setMinimum(-limit); ui->weightSB->setMaximum(limit); if (md->weight>limit || md->weight<-limit) { @@ -65,57 +62,33 @@ MixerDialog::MixerDialog(QWidget *parent, MixData *mixdata, int stickMode) : ui->offsetGV->setChecked(true); ui->offsetSB->hide(); ui->offsetCB->show(); - } else { + } + else { ui->offsetGV->setChecked(false); ui->offsetSB->setValue(md->sOffset); ui->offsetSB->show(); ui->offsetCB->hide(); } - - ui->differentialSB->setMinimum(-100); - ui->differentialSB->setMaximum(100); - if (md->differential>100 || md->differential<-100) { - ui->differentialGV->setChecked(true); - ui->differentialSB->hide(); - ui->differentialCB->show(); - } else { - ui->differentialGV->setChecked(false); - ui->differentialSB->setValue(md->differential); - ui->differentialSB->show(); - ui->differentialCB->hide(); - } - } else { + } + else { ui->offsetGV->hide(); ui->weightGV->hide(); - ui->differentialGV->hide(); ui->offsetSB->setMinimum(-limit); ui->offsetSB->setMaximum(limit); ui->offsetSB->setValue(md->sOffset); - ui->differentialSB->setMinimum(-100); - ui->differentialSB->setMaximum(100); - ui->differentialSB->setValue(md->differential); ui->weightSB->setMinimum(-limit); ui->weightSB->setMaximum(limit); ui->weightSB->setValue(md->weight); } + populateCurveReference(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueCB, ui->curveValueSB, md->curve, 0); + ui->FixOffsetChkB->setChecked(md->lateOffset); ui->MixDR_CB->setChecked(md->noExpo==0); - if (md->enableFmTrim==1) { - ui->label_4->setText(tr("FM Trim Value")); - } - else { - ui->label_4->setText(tr("Offset")); - } if (!GetEepromInterface()->getCapability(MixesWithoutExpo)) { ui->MixDR_CB->hide(); ui->label_MixDR->hide(); } - if (!GetEepromInterface()->getCapability(MixFmTrim)) { - ui->FMtrimChkB->hide(); - ui->label_FMtrim->hide(); - ui->label_4->setText(tr("Offset")); - } if (!GetEepromInterface()->getCapability(HasFixOffset)) { ui->FixOffsetChkB->hide(); ui->label_FixOffset->hide(); @@ -127,12 +100,6 @@ MixerDialog::MixerDialog(QWidget *parent, MixData *mixdata, int stickMode) : ui->trimCB->addItem(tr("Ail"),4); } ui->trimCB->setCurrentIndex((-md->carryTrim)+1); - if (!GetEepromInterface()->getCapability(DiffMixers)) { - ui->differentialGV->hide(); - ui->differentialSB->hide(); - ui->differentialCB->hide(); - ui->label_curve->setText(tr("Curve")); - } int namelength=GetEepromInterface()->getCapability(HasMixerNames); if (!namelength) { ui->label_name->hide(); @@ -146,7 +113,8 @@ MixerDialog::MixerDialog(QWidget *parent, MixData *mixdata, int stickMode) : lb_fp[i]->hide(); cb_fp[i]->hide(); } - } else { + } + else { int mask=1; for (int i=0; i<9 ; i++) { if ((md->phases & mask)==0) { @@ -159,9 +127,10 @@ MixerDialog::MixerDialog(QWidget *parent, MixData *mixdata, int stickMode) : cb_fp[i]->hide(); } } + ui->mixerName->setValidator(new QRegExpValidator(rx, this)); ui->mixerName->setText(md->name); - populateCurvesCB(ui->curvesCB,md->curve); + populateSwitchCB(ui->switchesCB,md->swtch); ui->warningCB->setCurrentIndex(md->mixWarn); ui->mltpxCB->setCurrentIndex(md->mltpx); @@ -190,18 +159,19 @@ MixerDialog::MixerDialog(QWidget *parent, MixData *mixdata, int stickMode) : connect(ui->sourceCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); connect(ui->weightCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); connect(ui->offsetCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); - connect(ui->differentialCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); + + connect(ui->curveTypeCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); + connect(ui->curveGVarCB,SIGNAL(stateChanged(int)),this,SLOT(valuesChanged())); + connect(ui->curveValueCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); + connect(ui->curveValueSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged())); + connect(ui->weightSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged())); connect(ui->offsetSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged())); - connect(ui->differentialSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged())); - connect(ui->weightGV,SIGNAL(stateChanged(int)),this,SLOT(widgetChanged())); + connect(ui->weightGV,SIGNAL(stateChanged(int)),this,SLOT(widgetChanged())); // TODO why the same slot? connect(ui->offsetGV,SIGNAL(stateChanged(int)),this,SLOT(widgetChanged())); - connect(ui->differentialGV,SIGNAL(stateChanged(int)),this,SLOT(widgetChanged())); connect(ui->trimCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); connect(ui->MixDR_CB,SIGNAL(toggled(bool)),this,SLOT(valuesChanged())); - connect(ui->FMtrimChkB,SIGNAL(toggled(bool)),this,SLOT(valuesChanged())); connect(ui->FixOffsetChkB,SIGNAL(toggled(bool)),this,SLOT(valuesChanged())); - connect(ui->curvesCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged())); 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())); @@ -243,15 +213,6 @@ void MixerDialog::widgetChanged() gvars=1; } if (gvars==1) { - if (!GetEepromInterface()->getCapability(DiffMixers)) { - if (ui->differentialGV->isChecked()) { - ui->differentialCB->show(); - ui->differentialSB->hide(); - } else { - ui->differentialCB->hide(); - ui->differentialSB->show(); - } - } if (ui->weightGV->isChecked()) { ui->weightCB->show(); ui->weightSB->hide(); @@ -301,28 +262,15 @@ void MixerDialog::valuesChanged() md->carryTrim = -(ui->trimCB->currentIndex()-1); md->noExpo = ui->MixDR_CB->checkState() ? 0 : 1; md->lateOffset = ui->FixOffsetChkB->checkState() ? 1 : 0; - md->enableFmTrim = ui->FMtrimChkB->checkState() ? 1 : 0; - int numcurves=GetEepromInterface()->getCapability(NumCurves); - if (numcurves==0) { - numcurves=16; - } - if (GetEepromInterface()->getCapability(DiffMixers) && (ui->curvesCB->currentIndex()-(numcurves)*GetEepromInterface()->getCapability(HasNegCurves))==0){ - ui->differentialGV->show(); - if (ui->differentialGV->isChecked()) { - ui->differentialSB->hide(); - ui->differentialCB->show(); - } else { - ui->differentialSB->show(); - ui->differentialCB->hide(); - } - } else { - ui->differentialGV->hide(); - ui->differentialGV->setChecked(false); - ui->differentialSB->hide(); - ui->differentialSB->setValue(0); - ui->differentialCB->hide(); - } - md->curve = ui->curvesCB->currentIndex()-(numcurves)*GetEepromInterface()->getCapability(HasNegCurves); + + // TODO md->curve = ui->curvesCB->currentIndex()-(numcurves)*GetEepromInterface()->getCapability(HasNegCurves); + // TODO if (ui->differentialGV->isChecked()) { + // TODO md->differential = ui->differentialCB->itemData(ui->differentialCB->currentIndex()).toInt(); + // TODO } else { + // TODO md->differential = ui->differentialSB->value(); + // TODO } + // populateCurveReference(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QComboBox *curveValueCB, QSpinBox *curveValueCB, CurveReference & curve, unsigned int flags) + md->swtch = RawSwitch(ui->switchesCB->itemData(ui->switchesCB->currentIndex()).toInt()); md->mixWarn = ui->warningCB->currentIndex(); md->mltpx = (MltpxValue)ui->mltpxCB->currentIndex(); @@ -331,16 +279,7 @@ void MixerDialog::valuesChanged() md->delayUp = round(ui->delayUpSB->value()*scale); md->speedDown = round(ui->slowDownSB->value()*scale); md->speedUp = round(ui->slowUpSB->value()*scale); - if (ui->differentialGV->isChecked()) { - md->differential = ui->differentialCB->itemData(ui->differentialCB->currentIndex()).toInt(); - } else { - md->differential = ui->differentialSB->value(); - } - if (GetEepromInterface()->getCapability(MixFmTrim) && md->enableFmTrim==1) { - ui->label_4->setText(tr("FM Trim Value")); - } else { - ui->label_4->setText(tr("Offset")); - } + int i=0; for (i=0; imixerName->text().toAscii().length(); i++) { md->name[i]=ui->mixerName->text().toAscii().at(i); diff --git a/companion/src/modeledit/mixerdialog.ui b/companion/src/modeledit/mixerdialog.ui index 594d26356..3eec442eb 100644 --- a/companion/src/modeledit/mixerdialog.ui +++ b/companion/src/modeledit/mixerdialog.ui @@ -6,8 +6,8 @@ 0 0 - 367 - 475 + 342 + 434 @@ -20,7 +20,7 @@ Dialog - + :/icon.png:/icon.png @@ -178,7 +178,142 @@ p, li { white-space: pre-wrap; } - + + + + Include DR/Expo + + + + + + + + 0 + 0 + + + + + + + + Flight modes + + + + + + + Include Trim + + + + + + + Switch + + + + + + + + + + + + + + The curve used by the mix + + + + + + + Mixer warning. +Setting this value will cause a beep to be emmitted when this value is active. + + + + OFF + + + + + 1 Beep + + + + + 2 Beep + + + + + 3 Beep + + + + + + + + Fix Offset + + + + + + + + No + + + + + Yes + + + + + + + + + + GV + + + + + + + The source for the mixer + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + Multiplexer @@ -213,7 +348,7 @@ This determines how mixer values are added. - + @@ -370,14 +505,14 @@ This determines how mixer values are added. - + Warning - + Multiplex @@ -415,162 +550,10 @@ This determines how mixer values are added. - Curve/Differential + Curve - - - - Include Trim - - - - - - - Enable FM Trim - - - - - - - Flight modes - - - - - - - Switch - - - - - - - Include DR/Expo - - - - - - - Fix Offset - - - - - - - Mixer warning. -Setting this value will cause a beep to be emmitted when this value is active. - - - - OFF - - - - - 1 Beep - - - - - 2 Beep - - - - - 3 Beep - - - - - - - - The curve used by the mix - - - - - - - - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - - - - - - GV - - - - - - - The source for the mixer - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - No - - - - - Yes - - - - @@ -605,7 +588,7 @@ Setting this value will cause a beep to be emmitted when this value is active. - + Switch used by the mix. @@ -623,21 +606,21 @@ If blank then the mix is considered to be "ON" all the time. - + GV - + The source for the mixer - + @@ -646,7 +629,7 @@ If blank then the mix is considered to be "ON" all the time. - + diff --git a/companion/src/modeledit/mixes.cpp b/companion/src/modeledit/mixes.cpp index 695e75ff4..b40f36f81 100644 --- a/companion/src/modeledit/mixes.cpp +++ b/companion/src/modeledit/mixes.cpp @@ -152,13 +152,14 @@ void MixesPanel::update() if(md->noExpo) { str += " " +tr("No DR/Expo"); } - if (GetEepromInterface()->getCapability(MixFmTrim) && md->enableFmTrim==1) { - if (md->sOffset) str += " " + tr("FMTrim") + QString("(%1%)").arg(md->sOffset); - } else { - if (md->sOffset) str += " " + tr("Offset") + getGVarString(md->sOffset); + + if (md->sOffset) str += " " + tr("Offset") + getGVarString(md->sOffset); + + QString curveStr = md->curve.toString(); + if (!curveStr.isEmpty()) { + str += " " + curveStr; } - if (md->differential) str += " " + tr("Diff") + getGVarString(md->differential); - if (md->curve) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curve)); + int scale=GetEepromInterface()->getCapability(SlowScale); if (scale==0) scale=1; @@ -171,7 +172,7 @@ void MixesPanel::update() QString MixerName; MixerName.append(md->name); if (!MixerName.isEmpty()) { - str+=QString("(%1)").arg(MixerName); + str += QString("(%1)").arg(MixerName); } } qba.clear(); @@ -188,7 +189,8 @@ void MixesPanel::update() if (curDest > outputs) { str = tr("X%1 ").arg(curDest-outputs); - } else { + } + else { str = tr("CH%1%2").arg(curDest/10).arg(curDest%10); if (GetEepromInterface()->getCapability(HasChNames) && showNames) { QString name=model.limitData[curDest-1].name; diff --git a/companion/src/printdialog.cpp b/companion/src/printdialog.cpp index 36b0422c4..ac1cc9feb 100644 --- a/companion/src/printdialog.cpp +++ b/companion/src/printdialog.cpp @@ -261,23 +261,8 @@ void printDialog::printExpo() }; str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight,true)).rightJustified(6, ' '); - if (!GetEepromInterface()->getCapability(ExpoIsCurve)) { - if (ed->expo!=0) { - if (ed->expo<126) { - str += " " + tr("Expo") + QString("%1").arg(getGVarString(ed->expo)).rightJustified(7, ' '); - } else { - str += " " + tr("Expo") + QString("%1").arg(getGVarString(ed->expo)).rightJustified(7, ' '); - } - } - } else { - if (ed->curveMode==0 && ed->curveParam!=0) { - if (ed->curveParam<126) { - str += " " + tr("Expo") + QString("%1").arg(getGVarString(ed->curveParam)).rightJustified(7, ' '); - } else { - str += " " + tr("Expo") + QString("%1").arg(getGVarString(ed->curveParam)).rightJustified(7, ' '); - } - } - } + str += ed->curve.toString().replace("<", "<").replace(">", ">"); + if (GetEepromInterface()->getCapability(FlightPhases)) { if(ed->phases) { if (ed->phases!=(unsigned int)(1<getCapability(FlightPhases))-1) { @@ -316,9 +301,7 @@ void printDialog::printExpo() } if (ed->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(ed->swtch.toString()); - if (ed->curveMode) - if (ed->curveParam) - str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(ed->curveParam).replace("<", "<").replace(">", ">")); + str += ed->curve.toString().replace("<", "<").replace(">", ">"); if (GetEepromInterface()->getCapability(HasExpoNames)) { QString ExpoName; ExpoName.append(ed->name); @@ -370,13 +353,8 @@ void printDialog::printMixes() str += md->srcRaw.toString(); if (md->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(md->swtch.toString()); if (md->carryTrim) str += " " + tr("noTrim"); - if(GetEepromInterface()->getCapability(MixFmTrim) && md->enableFmTrim==1){ - if (md->sOffset) str += " "+ tr("FMTrim") + QString(" %1").arg(getGVarString(md->sOffset)); - } else { - if (md->sOffset) str += " "+ tr("Offset") + QString(" %1").arg(getGVarString(md->sOffset)); - } - if (md->differential) str += " "+ tr("Diff") + QString(" %1").arg(getGVarString(md->differential)); - if (md->curve) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curve).replace("<", "<").replace(">", ">")); + if (md->sOffset) str += " "+ tr("Offset") + QString(" %1").arg(getGVarString(md->sOffset)); + str += md->curve.toString().replace("<", "<").replace(">", ">"); float scale=GetEepromInterface()->getCapability(SlowScale); 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); @@ -566,101 +544,7 @@ void printDialog::printCurves() if (numcurves==0) { numcurves=16; } - if (!GetEepromInterface()->getCapability(CustomCurves)) { - QImage qi(ISIZE+1,ISIZE+1,QImage::Format_RGB32); - QPainter painter(&qi); - painter.setBrush(QBrush("#FFFFFF")); - painter.setPen(QColor(0,0,0)); - painter.drawRect(0,0,ISIZE,ISIZE); - str.append("
"+tr("5 Points Curves")+QString("
").arg(curvefile5)); - str.append(""); - str.append(doTC(" ")); - for(i=0; i<5; i++) - str.append(doTC(tr("pt %1").arg(i+1), "", true)); - str.append(""); - for(i=0; i<8; i++) { - pen.setColor(*qplot_color[i]); - painter.setPen(pen); - qplot_color[i]->getRgb(&r,&g,&b); - c=r; - c*=256; - c+=g; - c*=256; - c+=b; - sprintf(buffer,"%06x",c); - str.append(""); - str.append(QString("").arg(i+1)); - count=0; - for(int j=0; j<5; j++) { - if (g_model->curves[i].points[j].y!=0) - count++; - } - for(int j=0; j<5; j++) { - str.append(doTR(QString::number(g_model->curves[i].points[j].y),"green")); - if (j>0 && count!=0) { - painter.drawLine(ISIZE*(j-1)/4,ISIZE/2-(ISIZE*g_model->curves[i].points[j-1].y)/200,ISIZE*(j)/4,ISIZE/2-(ISIZE*g_model->curves[i].points[j].y)/200); - } - } - str.append(""); - } - str.append("
").arg(buffer)+tr("Curve")+QString(" %1
"); - painter.setPen(QColor(0,0,0)); - painter.drawLine(0,ISIZE/2,ISIZE,ISIZE/2); - painter.drawLine(ISIZE/2,0,ISIZE/2,ISIZE); - for(i=0; i<5; i++) { - painter.drawLine(ISIZE/2-2,(ISIZE*i)/4,ISIZE/2+2,(ISIZE*i)/4); - painter.drawLine((ISIZE*i)/4,ISIZE/2-2,(ISIZE*i)/4,ISIZE/2+2); - } - - qi.save(curvefile5, "png",100); - str.append("
"+tr("9 Points Curves")+QString("
").arg(curvefile9)); - str.append(""); - for(i=0; i<9; i++) str.append(doTC(tr("pt %1").arg(i+1), "", true)); - str.append(""); - - painter.setBrush(QBrush("#FFFFFF")); - painter.setPen(QColor(0,0,0)); - painter.drawRect(0,0,ISIZE,ISIZE); - for(i=0; i<9; i++) { - painter.drawLine(ISIZE/2-2,(ISIZE*i)/8,ISIZE/2+2,(ISIZE*i)/8); - painter.drawLine((ISIZE*i)/8,ISIZE/2-2,(ISIZE*i)/8,ISIZE/2+2); - } - for(i=0; i<8; i++) { - pen.setColor(*qplot_color[i]); - painter.setPen(pen); - qplot_color[i]->getRgb(&r,&g,&b); - c=r; - c*=256; - c+=g; - c*=256; - c+=b; - sprintf(buffer,"%06x",c); - str.append(""); - str.append(QString("").arg(i+9)); - count=0; - for(int j=0; j<9; j++) { - if (g_model->curves[i].points[j].y!=0) - count++; - } - for(int j=0; j<9; j++) { - str.append(doTR(QString::number(g_model->curves[i].points[j].y),"green")); - if (j>0 && count!=0) { - painter.drawLine(ISIZE*(j-1)/8,ISIZE/2-(ISIZE*g_model->curves[i+8].points[j-1].y)/200,ISIZE*(j)/8,ISIZE/2-(ISIZE*g_model->curves[i+8].points[j].y)/200); - } - } - str.append(""); - } - str.append("
 
").arg(buffer)+tr("Curve")+QString(" %1
"); - str.append("
"); - painter.setPen(QColor(0,0,0)); - painter.drawLine(0,ISIZE/2,ISIZE,ISIZE/2); - painter.drawLine(ISIZE/2,0,ISIZE/2,ISIZE); - for(i=0; i<9; i++) { - painter.drawLine(ISIZE/2-2,(ISIZE*i)/8,ISIZE/2+2,(ISIZE*i)/8); - painter.drawLine((ISIZE*i)/8,ISIZE/2-2,(ISIZE*i)/8,ISIZE/2+2); - } - qi.save(curvefile9, "png",100); - } else { + { QImage qi(ISIZEW+1,ISIZEW+1,QImage::Format_RGB32); QPainter painter(&qi); painter.setBrush(QBrush("#FFFFFF")); @@ -703,11 +587,10 @@ void printDialog::printCurves() sprintf(buffer,"%06x",c); str.append(""); int curvepoints=g_model->curves[i].count; - if (!g_model->curves[i].custom) { - str.append(QString("").arg(buffer)+tr("Curve")+QString(" %1Y").arg(i+1)); - } else { + if (g_model->curves[i].type == CurveData::CURVE_TYPE_CUSTOM) str.append(QString("").arg(buffer)+tr("Curve")+QString(" %1Y").arg(i+1)); - } + else + str.append(QString("").arg(buffer)+tr("Curve")+QString(" %1Y").arg(i+1)); count=0; for(int j=0; jcurves[i].points[j].y!=0) @@ -716,18 +599,17 @@ void printDialog::printCurves() for(int j=0; jcurves[i].points[j].y),"green")); if (j>0 && count!=0) { - if (!g_model->curves[i].custom) { - painter.drawLine(ISIZEW*(j-1)/(curvepoints-1),ISIZEW/2-(ISIZEW*g_model->curves[i].points[j-1].y)/200,ISIZEW*(j)/(curvepoints-1),ISIZEW/2-(ISIZEW*g_model->curves[i].points[j].y)/200); - } else { + if (g_model->curves[i].type == CurveData::CURVE_TYPE_CUSTOM) painter.drawLine(ISIZEW/2+(ISIZEW*g_model->curves[i].points[j-1].x)/200,ISIZEW/2-(ISIZEW*g_model->curves[i].points[j-1].y)/200,ISIZEW/2+(ISIZEW*g_model->curves[i].points[j].x)/200,ISIZEW/2-(ISIZEW*g_model->curves[i].points[j].y)/200); - } + else + painter.drawLine(ISIZEW*(j-1)/(curvepoints-1),ISIZEW/2-(ISIZEW*g_model->curves[i].points[j-1].y)/200,ISIZEW*(j)/(curvepoints-1),ISIZEW/2-(ISIZEW*g_model->curves[i].points[j].y)/200); } } for(int j=curvepoints; j"); - if (g_model->curves[i].custom) { + if (g_model->curves[i].type == CurveData::CURVE_TYPE_CUSTOM) { str.append("X"); for(int j=0; jcurves[i].points[j].x),"green")); diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 3c49e6f59..bbf184de6 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -56,11 +56,11 @@ #elif defined(PCBSKY9X) #define EEPROM_VER 216 #elif defined(CPUM2560) || defined(CPUM2561) - #define EEPROM_VER 215 + #define EEPROM_VER 216 #elif defined(CPUM128) #define EEPROM_VER 216 #else - #define EEPROM_VER 214 + #define EEPROM_VER 216 #endif #ifndef PACK @@ -274,12 +274,12 @@ PACK(typedef struct t_ScriptData { TRAINER_MODULE }; #define MODELDATA_BITMAP char bitmap[LEN_BITMAP_NAME]; - #define MODELDATA_EXTRA uint8_t externalModule; uint8_t trainerMode; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][4]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS]; + #define MODELDATA_EXTRA uint8_t externalModule; uint8_t trainerMode; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][4]; #define LIMITDATA_EXTRA char name[LEN_CHANNEL_NAME]; int8_t curve; #define swstate_t uint16_t #elif defined(PCBSKY9X) #define MODELDATA_BITMAP - #define MODELDATA_EXTRA ModuleData moduleData[NUM_MODULES]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS]; + #define MODELDATA_EXTRA ModuleData moduleData[NUM_MODULES]; #define LIMITDATA_EXTRA #define swstate_t uint8_t #else @@ -397,7 +397,7 @@ PACK(typedef struct t_ExpoData { char name[LEN_EXPOMIX_NAME]; int8_t offset; CurveRef curve; - uint8_t spare[2]; + uint8_t spare; }) ExpoData; #define MIN_EXPO_WEIGHT -100 #define EXPO_VALID(ed) ((ed)->srcRaw) @@ -508,7 +508,7 @@ PACK(typedef struct t_MixData { uint8_t srcRaw; int16_t offset; char name[LEN_EXPOMIX_NAME]; - uint8_t spare[2]; + uint8_t spare; }) MixData; #else PACK(typedef struct t_MixData { @@ -988,8 +988,7 @@ PACK(typedef struct t_FrSkyData { FrSkyRSSIAlarm rssiAlarms[2]; uint16_t mAhPersistent:1; uint16_t storedMah:15; - int8_t fasOffset:5; - uint8_t spare:3; + int8_t fasOffset; }) FrSkyData; #else #define MAX_FRSKY_SCREENS 2 @@ -1007,8 +1006,7 @@ PACK(typedef struct t_FrSkyData { int8_t varioCenterMin:5; uint8_t currentSource:3; int8_t varioCenterMax:5; - int8_t fasOffset:5; - uint8_t spare:3; + int8_t fasOffset; }) FrSkyData; #endif @@ -1412,24 +1410,28 @@ PACK(typedef struct t_ModelHeader { }) ModelHeader; #if defined (CPUARM) - #define ARM_OR_AVR(x, y) x + #define ARM_FIELD(x) x; + #define AVR_FIELD(x) #else - #define ARM_OR_AVR(x, y) y + #define ARM_FIELD(x) + #define AVR_FIELD(x) x; #endif PACK(typedef struct t_ModelData { ModelHeader header; TimerData timers[MAX_TIMERS]; - uint8_t protocol:3; + uint8_t protocol:3; // not used on Taranis uint8_t thrTrim:1; // Enable Throttle Trim - int8_t ppmNCH:4; /* spare on ARM */ + AVR_FIELD(int8_t ppmNCH:4) + ARM_FIELD(int8_t spare2:4) uint8_t trimInc:3; // Trim Increments uint8_t disableThrottleWarning:1; - uint8_t ARM_OR_AVR(displayText, pulsePol):1; + ARM_FIELD(uint8_t displayText:1) + AVR_FIELD(uint8_t pulsePol:1) uint8_t extendedLimits:1; uint8_t extendedTrims:1; uint8_t throttleReversed:1; - int8_t ppmDelay; /* spare on ARM */ + AVR_FIELD(int8_t ppmDelay) BeepANACenter beepANACenter; // 1<<0->A1.. 1<<6->A7 MixData mixData[MAX_MIXERS]; LimitData limitData[NUM_CHNOUT]; @@ -1443,11 +1445,10 @@ PACK(typedef struct t_ModelData { SwashRingData swashR; PhaseData phaseData[MAX_PHASES]; - 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; swstate_t switchWarningStates; - uint8_t nSwToWarn; MODEL_GVARS_DATA