diff --git a/.gitignore b/.gitignore index fd92abe27..3e0c0844a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /.*project /.settings +/.autotools diff --git a/DONATIONS.txt b/DONATIONS.txt index 46df5704e..2c53a5b43 100644 --- a/DONATIONS.txt +++ b/DONATIONS.txt @@ -329,4 +329,5 @@ A Harris Stefan Grunenberg Francisco Gutierrez Muñoz Steve Coley - +Sean Cull +Roberto Orsello diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index 052b5a176..711b68764 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -195,12 +195,12 @@ QString AnalogString(int index) { static const QString sticks[] = { QObject::tr("Rud"), QObject::tr("Ele"), QObject::tr("Thr"), QObject::tr("Ail") }; static const QString pots9X[] = { QObject::tr("P1"), QObject::tr("P2"), QObject::tr("P3") }; - static const QString potsX9D[] = { QObject::tr("S1"), QObject::tr("S2"), QObject::tr("LS"), QObject::tr("RS") }; + static const QString potsTaranis[] = { QObject::tr("S1"), QObject::tr("S2"), QObject::tr("S3"), QObject::tr("LS"), QObject::tr("RS") }; if (index < 4) return CHECK_IN_ARRAY(sticks, index); else - return (IS_TARANIS(GetEepromInterface()->getBoard()) ? CHECK_IN_ARRAY(potsX9D, index-4) : CHECK_IN_ARRAY(pots9X, index-4)); + return (IS_TARANIS(GetEepromInterface()->getBoard()) ? CHECK_IN_ARRAY(potsTaranis, index-4) : CHECK_IN_ARRAY(pots9X, index-4)); } QString RotaryEncoderString(int index) @@ -242,10 +242,13 @@ QString RawSource::toString() } switch (type) { case SOURCE_TYPE_VIRTUAL_INPUT: - if (model && strlen(model->inputNames[index]) > 0) - return QString(model->inputNames[index]); - else - return QObject::tr("Input %1").arg(index+1); + { + QString result = QObject::tr("[I%1]").arg(index+1); + if (model && strlen(model->inputNames[index]) > 0) { + result += QString(model->inputNames[index]); + } + return result; + } case SOURCE_TYPE_STICK: return AnalogString(index); case SOURCE_TYPE_TRIM: @@ -316,7 +319,8 @@ QString RawSwitch::toString() static const QString multiposPots[] = { QObject::tr("S11"), QObject::tr("S12"), QObject::tr("S13"), QObject::tr("S14"), QObject::tr("S15"), QObject::tr("S16"), - QObject::tr("S21"), QObject::tr("S22"), QObject::tr("S23"), QObject::tr("S24"), QObject::tr("S25"), QObject::tr("S26") + QObject::tr("S21"), QObject::tr("S22"), QObject::tr("S23"), QObject::tr("S24"), QObject::tr("S25"), QObject::tr("S26"), + QObject::tr("S31"), QObject::tr("S32"), QObject::tr("S33"), QObject::tr("S34"), QObject::tr("S35"), QObject::tr("S36") }; static const QString trimsSwitches[] = { @@ -791,7 +795,8 @@ GeneralSettings::GeneralSettings() int potsnum=GetEepromInterface()->getCapability(Pots); if (t_calib.isEmpty()) { return; - } else { + } + else { QString t_trainercalib=g.profile[g.id()].trainerCalib(); int8_t t_vBatCalib=(int8_t)g.profile[g.id()].vBatCalib(); int8_t t_currentCalib=(int8_t)g.profile[g.id()].currentCalib(); @@ -887,11 +892,30 @@ GeneralSettings::GeneralSettings() } +RawSource GeneralSettings::getDefaultSource(unsigned int channel) +{ + unsigned int stick_index = chout_ar[4*templateSetup + channel] - 1; + return RawSource(SOURCE_TYPE_STICK, stick_index); +} + ModelData::ModelData() { clear(); } +ExpoData * ModelData::insertInput(const int idx) +{ + memmove(&expoData[idx+1], &expoData[idx], (C9X_MAX_EXPOS-(idx+1))*sizeof(ExpoData)); + expoData[idx].clear(); + return &expoData[idx]; +} + +void ModelData::removeInput(const int idx) +{ + memmove(&expoData[idx], &expoData[idx+1], (C9X_MAX_EXPOS-(idx+1))*sizeof(ExpoData)); + expoData[C9X_MAX_EXPOS-1].clear(); +} + void ModelData::clearInputs() { for (int i=0; igetBoard(); + int board = GetEepromInterface()->getBoard(); if (IS_TARANIS(board)) { moduleData[0].protocol=PXX_XJT_X16; moduleData[1].protocol=OFF; @@ -947,12 +971,38 @@ bool ModelData::isempty() return !used; } -void ModelData::setDefault(uint8_t id) +void ModelData::setDefaultMixes(GeneralSettings & settings) +{ + if (IS_TARANIS(GetEepromInterface()->getBoard())) { + for (int i=0; ichn = i; + expo->mode = INPUT_MODE_BOTH; + expo->srcRaw = settings.getDefaultSource(i); + expo->weight = 100; + strncpy(inputNames[i], expo->srcRaw.toString().toLatin1().constData(), sizeof(inputNames[i])-1); + MixData * mix = &mixData[i]; + mix->destCh = i+1; + mix->weight = 100; + mix->srcRaw = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, i, this); + } + } + else { + for (int i=0; i template setup, Second is relevant channel out -1,2,3,4 , 1,2,4,3 , 1,3,2,4 , 1,3,4,2 , 1,4,2,3 , 1,4,3,2, -2,1,3,4 , 2,1,4,3 , 2,3,1,4 , 2,3,4,1 , 2,4,1,3 , 2,4,3,1, -3,1,2,4 , 3,1,4,2 , 3,2,1,4 , 3,2,4,1 , 3,4,1,2 , 3,4,2,1, -4,1,2,3 , 4,1,3,2 , 4,2,1,3 , 4,2,3,1 , 4,3,1,2 , 4,3,2,1 }; // TODO delete it? + 1,2,3,4 , 1,2,4,3 , 1,3,2,4 , 1,3,4,2 , 1,4,2,3 , 1,4,3,2, + 2,1,3,4 , 2,1,4,3 , 2,3,1,4 , 2,3,4,1 , 2,4,1,3 , 2,4,3,1, + 3,1,2,4 , 3,1,4,2 , 3,2,1,4 , 3,2,4,1 , 3,4,1,2 , 3,4,2,1, + 4,1,2,3 , 4,1,3,2 , 4,2,1,3 , 4,2,3,1 , 4,3,1,2 , 4,3,2,1 +}; // TODO delete it? // Beep center bits #define BC_BIT_RUD (0x01) @@ -159,10 +160,8 @@ enum HeliSwashTypes { #define NUM_STICKS 4 #define BOARD_9X_NUM_POTS 3 -#define BOARD_X9D_NUM_POTS 4 -#define C9X_NUM_POTS 4 +#define C9X_NUM_POTS 5 #define NUM_CAL_PPM 4 -#define NUM_PPM(board) (IS_ARM(board) ? 16 : 8) #define NUM_CYC 3 #define C9X_NUM_SWITCHES 10 #define C9X_NUM_KEYS 6 @@ -402,6 +401,9 @@ enum BeeperMode { class GeneralSettings { public: GeneralSettings(); + + RawSource getDefaultSource(unsigned int channel); + unsigned int version; unsigned int variant; int calibMid[NUM_STICKS+C9X_NUM_POTS]; @@ -439,7 +441,7 @@ class GeneralSettings { unsigned int backlightDelay; bool blightinv; bool stickScroll; - unsigned int templateSetup; //RETA order according to chout_ar array // TODO enum + unsigned int templateSetup; //RETA order according to chout_ar array int PPM_Multiplier; int hapticLength; unsigned int reNavigation; @@ -504,12 +506,19 @@ class CurveReference { QString toString(); }; +enum InputMode { + INPUT_MODE_NONE, + INPUT_MODE_POS, + INPUT_MODE_NEG, + INPUT_MODE_BOTH +}; + class ExpoData { public: ExpoData() { clear(); } RawSource srcRaw; unsigned int scale; - unsigned int mode; // 0=end, 1=pos, 2=neg, 3=both + unsigned int mode; unsigned int chn; RawSwitch swtch; unsigned int phases; // -5=!FP4, 0=normal, 5=FP4 @@ -882,6 +891,10 @@ class ScriptData { class ModelData { public: ModelData(); + + ExpoData * insertInput(const int idx); + void removeInput(const int idx); + bool used; char name[12+1]; uint8_t modelVoice; @@ -937,7 +950,8 @@ class ModelData { void clear(); bool isempty(); - void setDefault(uint8_t id); + void setDefaultMixes(GeneralSettings & settings); + void setDefaultValues(unsigned int id, GeneralSettings & settings); int getTrimValue(int phaseIdx, int trimIdx); void setTrimValue(int phaseIdx, int trimIdx, int value); @@ -1063,6 +1077,7 @@ enum Capability { GetThrSwitch, HasDisplayText, VirtualInputs, + TrainerInputs, LuaInputs, LimitsPer1000, EnhancedCurves, diff --git a/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp b/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp index 13db450d7..f147e1fc5 100644 --- a/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp +++ b/companion/src/firmwares/opentx/opentxTaranisSimulator.cpp @@ -148,7 +148,7 @@ inline int geteepromsize() { #include "radio/src/lua/src/lcorolib.c" -int16_t g_anas[NUM_STICKS+BOARD_X9D_NUM_POTS]; +int16_t g_anas[NUM_STICKS+5]; uint16_t anaIn(uint8_t chan) { diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 5be9f0917..8a9744bc0 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -11,7 +11,7 @@ #define HAS_PERSISTENT_TIMERS(board) (IS_ARM(board) || board == BOARD_GRUVIN9X) #define HAS_LARGE_LCD(board) IS_TARANIS(board) #define MAX_VIEWS(board) (HAS_LARGE_LCD(board) ? 2 : 256) -#define MAX_POTS(board) (IS_TARANIS(board) ? 4 : 3) +#define MAX_POTS(board, version) (IS_TARANIS(board) ? (version>=216 ? 5 : 4) : 3) #define MAX_SWITCHES(board) (IS_TARANIS(board) ? 8 : 7) #define MAX_SWITCHES_POSITION(board) (IS_TARANIS(board) ? 22 : 9) #define MAX_ROTARY_ENCODERS(board) (board==BOARD_GRUVIN9X ? 2 : (board==BOARD_SKY9X ? 1 : 0)) @@ -60,8 +60,8 @@ class SwitchesConversionTable: public ConversionTable { addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val++); } - if (version >= 216) { - for (int i=1; i<=GetEepromInterface()->getCapability(MultiposPots) * GetEepromInterface()->getCapability(MultiposPotsPositions); i++) { + if (IS_TARANIS(board) && version >= 216) { + for (int i=1; i<=3*6; i++) { addConversion(RawSwitch(SWITCH_TYPE_MULTIPOS_POT, -i), -val+offset); addConversion(RawSwitch(SWITCH_TYPE_MULTIPOS_POT, i), val++); } @@ -172,7 +172,7 @@ class SourcesConversionTable: public ConversionTable { } } - for (int i=0; i<4+MAX_POTS(board); i++) + for (int i=0; i<4+MAX_POTS(board, version); i++) addConversion(RawSource(SOURCE_TYPE_STICK, i), val++); for (int i=0; i= 216) { internalField.Append(new UnsignedField<8>(_destCh)); @@ -878,6 +879,14 @@ class MixField: public TransformedField { virtual void afterImport() { + if (IS_TARANIS(board) || version < 216) { + if (mix.srcRaw.type == SOURCE_TYPE_STICK && mix.srcRaw.index < NUM_STICKS) { + if (!mix.noExpo) { + mix.srcRaw = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, mix.srcRaw.index, model); + } + } + } + if (mix.srcRaw.type != SOURCE_TYPE_NONE) { mix.destCh = _destCh + 1; if (!IS_ARM(board) || version < 216) { @@ -908,6 +917,7 @@ class MixField: public TransformedField { MixData & mix; BoardEnum board; unsigned int version; + ModelData * model; unsigned int _destCh; bool _curveMode; int _curveParam; @@ -917,11 +927,11 @@ class MixField: public TransformedField { unsigned int _offsetMode; }; -class ExpoField: public TransformedField { +class InputField: public TransformedField { public: - ExpoField(ExpoData & expo, BoardEnum board, unsigned int version): + InputField(ExpoData & expo, BoardEnum board, unsigned int version): TransformedField(internalField), - internalField("Expo"), + internalField("Input"), expo(expo), board(board), version(version) @@ -940,11 +950,11 @@ class ExpoField: public TransformedField { 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 UnsignedField<8>(expo.mode, "Mode")); + internalField.Append(new UnsignedField<8>(expo.chn, "Channel")); 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 UnsignedField<16>(expo.phases, "Phases")); + internalField.Append(new SignedField<8>(_weight, "Weight")); internalField.Append(new BoolField<8>(_curveMode)); if (HAS_LARGE_LCD(board)) { internalField.Append(new ZCharField<8>(expo.name)); @@ -979,6 +989,7 @@ class ExpoField: public TransformedField { virtual void beforeExport() { _weight = smallGvarToEEPROM(expo.weight); + if (!IS_TARANIS(board) || version < 216) { if (expo.curve.type==CurveReference::CURVE_REF_FUNC && expo.curve.value) { _curveMode = true; @@ -998,7 +1009,9 @@ class ExpoField: public TransformedField { virtual void afterImport() { if (IS_TARANIS(board) && version < 216) { - expo.srcRaw = RawSource(SOURCE_TYPE_STICK, expo.chn); + if (expo.mode) { + expo.srcRaw = RawSource(SOURCE_TYPE_STICK, expo.chn); + } } expo.weight = smallGvarToC9x(_weight); @@ -1091,7 +1104,7 @@ class CurvesField: public TransformedField { CurveData *curve = &curves[i]; int size = (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count); if (offset+size > maxPoints) { - EEPROMWarnings += ::QObject::tr("openTx only accepts %1 points in all curves").arg(maxPoints) + "\n"; + EEPROMWarnings += ::QObject::tr("OpenTX only accepts %1 points in all curves").arg(maxPoints) + "\n"; break; } if (!IS_TARANIS(board) || version < 216) { @@ -1128,6 +1141,16 @@ class CurvesField: public TransformedField { } } + if (curve->count > 17) { + qDebug() << "Wrong points count" << curve->count; + curve->count = 0; + for (int j=0; jclear(5); + } + return; + } + for (int j=0; jcount; j++) { curve->points[j].y = *cur++; } @@ -1268,13 +1291,14 @@ class AndSwitchesConversionTable: public ConversionTable { class LogicalSwitchField: public TransformedField { public: - LogicalSwitchField(LogicalSwitchData & csw, BoardEnum board, unsigned int version, unsigned int variant): + LogicalSwitchField(LogicalSwitchData & csw, BoardEnum board, unsigned int version, unsigned int variant, ModelData * model=NULL): TransformedField(internalField), internalField("LogicalSwitch"), csw(csw), board(board), version(version), variant(variant), + model(model), functionsConversionTable(board, version), sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, (version >= 214 || (!IS_ARM(board) && version >= 213)) ? 0 : FLAG_NOSWITCHES)), switchesConversionTable(SwitchesConversionTable::getInstance(board, version)), @@ -1364,7 +1388,7 @@ class LogicalSwitchField: public TransformedField { else if (csw.func != LS_FN_OFF) { sourcesConversionTable->importValue((uint8_t)v1, csw.val1); csw.val2 = v2; - RawSource val1(csw.val1); + RawSource val1(csw.val1, model); if (IS_ARM(board) && version < 216 && val1.type == SOURCE_TYPE_TELEMETRY) { switch (val1.index) { case TELEMETRY_SOURCE_TIMER1: @@ -1416,6 +1440,7 @@ class LogicalSwitchField: public TransformedField { BoardEnum board; unsigned int version; unsigned int variant; + ModelData * model; LogicalSwitchesFunctionsTable functionsConversionTable; SourcesConversionTable * sourcesConversionTable; SwitchesConversionTable * switchesConversionTable; @@ -2133,11 +2158,12 @@ class MavlinkField: public StructField { int exportPpmDelay(int delay) { return (delay - 300) / 50; } int importPpmDelay(int delay) { return 300 + 50 * delay; } -Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, unsigned int version, unsigned int variant): +OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigned int version, unsigned int variant): TransformedField(internalField), internalField("ModelData"), modelData(modelData), board(board), + version(version), variant(variant), protocolsConversionTable(board) { @@ -2227,14 +2253,14 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u internalField.Append(new UnsignedField<8>(modelData.beepANACenter)); for (int i=0; imode == INPUT_MODE_BOTH && expo->chn == i && expo->phases == 0 && expo->swtch.type == SWITCH_TYPE_NONE) + break; + if (expo->mode == 0 || expo->chn > i) { + ExpoData * newExpo = modelData.insertInput(j); + newExpo->mode = INPUT_MODE_BOTH; + newExpo->srcRaw = RawSource(SOURCE_TYPE_STICK, i); + newExpo->chn = i; + newExpo->weight = 100; + break; + } + } + strncpy(modelData.inputNames[i], AnalogString(i).toLatin1().constData(), sizeof(modelData.inputNames[i])-1); + } + } + for (int module=0; module<3; module++) { if (modelData.moduleData[module].protocol == PXX_XJT_X16 || modelData.moduleData[module].protocol == LP45) { if (subprotocols[module] >= 0) @@ -2374,13 +2419,13 @@ void Open9xModelDataNew::afterImport() } } -Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardEnum board, unsigned int version, unsigned int variant): +OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum board, unsigned int version, unsigned int variant): TransformedField(internalField), internalField("General Settings"), generalData(generalData), board(board), version(version), - inputsCount(IS_TARANIS(board) ? 8 : 7) + inputsCount(4 + MAX_POTS(board, version)) { generalData.version = version; generalData.variant = variant; @@ -2511,18 +2556,18 @@ Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardE } } -void Open9xGeneralDataNew::beforeExport() +void OpenTxGeneralData::beforeExport() { uint16_t sum = 0; if (version >= 216) { int count = 0; for (int i=0; i(model, data, index); } else { - return loadModelVariant(index, model, data, version, variant); + return loadModelVariant(index, model, data, version, variant); } } else if (version >= 213) { - return loadModelVariant(index, model, data, version, variant); + return loadModelVariant(index, model, data, version, variant); } std::cout << " ko\n"; @@ -336,7 +336,7 @@ bool OpenTxInterface::load(RadioData &radioData, const uint8_t *eeprom, int size return false; } - if (!loadGeneral(radioData.generalSettings, version)) { + if (!loadGeneral(radioData.generalSettings, version)) { std::cout << " ko\n"; return false; } @@ -383,14 +383,14 @@ int OpenTxInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t varian variant |= M128_VARIANT; } - int result = saveGeneral(radioData.generalSettings, board, version, variant); + int result = saveGeneral(radioData.generalSettings, board, version, variant); if (!result) { return 0; } for (int i=0; i(i, radioData.models[i], version, variant); + result = saveModel(i, radioData.models[i], version, variant); if (!result) { return 0; } @@ -417,7 +417,7 @@ int OpenTxInterface::getSize(ModelData &model) uint8_t tmp[EESIZE_RLC_MAX]; efile->EeFsCreate(tmp, EESIZE_RLC_MAX, board); - Open9xModelDataNew open9xModel(model, board, 255, GetCurrentFirmwareVariant()); + OpenTxModelData open9xModel(model, board, 255, GetCurrentFirmwareVariant()); QByteArray eeprom; open9xModel.Export(eeprom); @@ -436,7 +436,7 @@ int OpenTxInterface::getSize(GeneralSettings &settings) uint8_t tmp[EESIZE_RLC_MAX]; efile->EeFsCreate(tmp, EESIZE_RLC_MAX, board); - Open9xGeneralDataNew open9xGeneral(settings, board, 255, GetCurrentFirmwareVariant()); + OpenTxGeneralData open9xGeneral(settings, board, 255, GetCurrentFirmwareVariant()); // open9xGeneral.Dump(); QByteArray eeprom; @@ -511,7 +511,7 @@ int OpenTxInterface::getCapability(const Capability capability) else return 0; case Pots: - return (IS_TARANIS(board) ? 4 : 3); + return (IS_TARANIS(board) ? 5 : 3); case Switches: return (IS_TARANIS(board) ? 8 : 7); case SwitchesPositions: @@ -671,6 +671,8 @@ int OpenTxInterface::getCapability(const Capability capability) case HasDisplayText: case VirtualInputs: return IS_TARANIS(board) ? 32 : 0; + case TrainerInputs: + return IS_ARM(board) ? 16 : 8; case LuaInputs: case LimitsPer1000: case EnhancedCurves: @@ -681,7 +683,7 @@ int OpenTxInterface::getCapability(const Capability capability) case HasMahPersistent: return (IS_ARM(board) ? true : false); case MultiposPots: - return IS_TARANIS(board) ? 2 : 0; + return IS_TARANIS(board) ? 3 : 0; case MultiposPotsPositions: return IS_TARANIS(board) ? 6 : 0; case SimulatorVariant: diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp index 5c9ca7fbd..536921de1 100644 --- a/companion/src/helpers.cpp +++ b/companion/src/helpers.cpp @@ -599,7 +599,7 @@ void populateSourceCB(QComboBox *b, const RawSource & source, const ModelData & if (item == source) b->setCurrentIndex(b->count()-1); } - for (int i=0; igetBoard()); i++) { + for (int i=0; igetCapability(TrainerInputs); i++) { item = RawSource(SOURCE_TYPE_PPM, i); b->addItem(item.toString(), item.toValue()); if (item == source) b->setCurrentIndex(b->count()-1); diff --git a/companion/src/mdichild.cpp b/companion/src/mdichild.cpp index 91a5ba3e1..3af585369 100644 --- a/companion/src/mdichild.cpp +++ b/companion/src/mdichild.cpp @@ -155,7 +155,7 @@ void MdiChild::OpenEditWindow(bool wizard=false) ModelData &model = radioData.models[row - 1]; if (model.isempty()) { - model.setDefault(row - 1); + model.setDefaultValues(row - 1, radioData.generalSettings); isNew = true; //modeledit - clear mixes, apply first template setModified(); } diff --git a/companion/src/modeledit/inputs.cpp b/companion/src/modeledit/inputs.cpp index c140585ee..a6e1f6eac 100644 --- a/companion/src/modeledit/inputs.cpp +++ b/companion/src/modeledit/inputs.cpp @@ -29,9 +29,9 @@ InputsPanel::InputsPanel(QWidget *parent, ModelData & model, GeneralSettings & g exposLayout->addWidget(qbClear,2,2); exposLayout->addWidget(qbDown,2,3); - connect(ExposlistWidget, SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(expolistWidget_customContextMenuRequested(QPoint))); - connect(ExposlistWidget, SIGNAL(doubleClicked(QModelIndex)),this,SLOT(expolistWidget_doubleClicked(QModelIndex))); - connect(ExposlistWidget, SIGNAL(mimeDropped(int,const QMimeData*,Qt::DropAction)),this,SLOT(mimeExpoDropped(int,const QMimeData*,Qt::DropAction))); + connect(ExposlistWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(expolistWidget_customContextMenuRequested(QPoint))); + connect(ExposlistWidget, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(expolistWidget_doubleClicked(QModelIndex))); + connect(ExposlistWidget, SIGNAL(mimeDropped(int,const QMimeData*,Qt::DropAction)), this, SLOT(mimeExpoDropped(int, const QMimeData*, Qt::DropAction))); connect(qbUp, SIGNAL(pressed()),SLOT(moveExpoUp())); connect(qbDown, SIGNAL(pressed()),SLOT(moveExpoDown())); @@ -58,7 +58,7 @@ void InputsPanel::update() ExposlistWidget->clear(); int curDest = -1; - for(int i=0; imode==0) break; @@ -144,26 +144,24 @@ void InputsPanel::update() bool InputsPanel::gm_insertExpo(int idx) { - if (idx<0 || idx>=C9X_MAX_EXPOS || model.expoData[C9X_MAX_EXPOS-1].mode > 0) { - QMessageBox::information(this, "companion", tr("Not enough available inputs!")); - return false; - } + if (idx<0 || idx>=C9X_MAX_EXPOS || model.expoData[C9X_MAX_EXPOS-1].mode > 0) { + QMessageBox::information(this, "Companion", tr("Not enough available inputs!")); + return false; + } - int chn = model.expoData[idx].chn; - memmove(&model.expoData[idx+1],&model.expoData[idx], - (C9X_MAX_EXPOS-(idx+1))*sizeof(ExpoData) ); - memset(&model.expoData[idx],0,sizeof(ExpoData)); - model.expoData[idx].chn = chn; - model.expoData[idx].weight = 100; - model.expoData[idx].mode = 3 /* TODO enum */; - return true; + int chn = model.expoData[idx].chn; + + ExpoData * newExpo = model.insertInput(idx); + newExpo->chn = chn; + newExpo->weight = 100; + newExpo->mode = INPUT_MODE_BOTH; + + return true; } void InputsPanel::gm_deleteExpo(int index) { - memmove(&model.expoData[index],&model.expoData[index+1], - (C9X_MAX_EXPOS-(index+1))*sizeof(ExpoData)); - memset(&model.expoData[C9X_MAX_EXPOS-1],0,sizeof(ExpoData)); + model.removeInput(index); } void InputsPanel::gm_openExpo(int index) diff --git a/companion/src/modeledit/mixerslist.h b/companion/src/modeledit/mixerslist.h index 01b225a39..52e9ffebb 100644 --- a/companion/src/modeledit/mixerslist.h +++ b/companion/src/modeledit/mixerslist.h @@ -6,24 +6,19 @@ class MixersList : public QListWidget { Q_OBJECT -public: - explicit MixersList(QWidget *parent, bool expo); -// QMimeData * mimeData ( const QList items ); + public: + explicit MixersList(QWidget *parent, bool expo); void keyPressEvent(QKeyEvent *event); - -signals: + signals: void mimeDropped(int index, const QMimeData *data, Qt::DropAction action); void keyWasPressed(QKeyEvent *event); - -protected: - -public slots: + public slots: bool dropMimeData(int index, const QMimeData *data, Qt::DropAction action); -private: + private: QPoint dragStartPosition; bool expo; diff --git a/companion/src/modeledit/mixes.cpp b/companion/src/modeledit/mixes.cpp index ed6016e57..df92f5ecb 100644 --- a/companion/src/modeledit/mixes.cpp +++ b/companion/src/modeledit/mixes.cpp @@ -53,15 +53,16 @@ void MixesPanel::update() int i; unsigned int outputs = GetEepromInterface()->getCapability(Outputs); int showNames = false; // TODO in a menu ui->showNames_Ckb->isChecked(); - for(i=0; igetCapability(Mixes); i++) { + for (i=0; igetCapability(Mixes); i++) { MixData *md = &model.mixData[i]; if ((md->destCh==0) || (md->destCh>outputs+(unsigned int)GetEepromInterface()->getCapability(ExtraChannels))) continue; QString str = ""; - while(curDest<(md->destCh-1)) { + while (curDest<(md->destCh-1)) { curDest++; 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; @@ -80,7 +81,8 @@ void MixesPanel::update() if (md->destCh > outputs) { str = tr("X%1 ").arg(md->destCh-outputs); - } else { + } + else { str = tr("CH%1%2").arg(md->destCh/10).arg(md->destCh%10); str.append(" "); if (GetEepromInterface()->getCapability(HasChNames) && showNames) { @@ -97,7 +99,7 @@ void MixesPanel::update() str.fill(' '); } - switch(md->mltpx) { + switch (md->mltpx) { case (1): str += " *"; break; case (2): str += " R"; break; default: str += " "; break; @@ -110,7 +112,9 @@ void MixesPanel::update() QString phasesStr = getPhasesStr(md->phases, model); if (!phasesStr.isEmpty()) str += " " + phasesStr; - if (md->swtch.type != SWITCH_TYPE_NONE) str += " " + tr("Switch(%1)").arg(md->swtch.toString()); + if (md->swtch.type != SWITCH_TYPE_NONE) { + str += " " + tr("Switch(%1)").arg(md->swtch.toString()); + } if (!GetEepromInterface()->getCapability(VirtualInputs)) { if (md->carryTrim>0) { @@ -125,9 +129,9 @@ void MixesPanel::update() if (md->sOffset) str += " " + tr("Offset(%1)").arg(getGVarString(md->sOffset)); if (md->curve.value) str += " " + md->curve.toString(); - int scale=GetEepromInterface()->getCapability(SlowScale); - if (scale==0) - scale=1; + int scale = GetEepromInterface()->getCapability(SlowScale); + if (scale == 0) + scale = 1; if (md->delayDown || md->delayUp) str += tr(" Delay(u%1:d%2)").arg((double)md->delayUp/scale).arg((double)md->delayDown/scale); if (md->speedDown || md->speedUp) @@ -144,8 +148,8 @@ void MixesPanel::update() qba.append((quint8)i); qba.append((const char*)md, sizeof(MixData)); QListWidgetItem *itm = new QListWidgetItem(str); - itm->setData(Qt::UserRole,qba); // mix number - MixerlistWidget->addItem(itm);//(str); + itm->setData(Qt::UserRole, qba); // mix number + MixerlistWidget->addItem(itm); //(str); } while(curDestgetCapability(ExtraChannels)) { diff --git a/companion/src/modelslist.cpp b/companion/src/modelslist.cpp index 088945f12..d6e72b219 100644 --- a/companion/src/modelslist.cpp +++ b/companion/src/modelslist.cpp @@ -44,36 +44,36 @@ #include "helpers.h" class DragDropHeader { -public: - DragDropHeader(): - general_settings(false), - models_count(0) - { - } - bool general_settings; - uint8_t models_count; - uint8_t models[C9X_MAX_MODELS]; + public: + DragDropHeader(): + general_settings(false), + models_count(0) + { + } + bool general_settings; + uint8_t models_count; + uint8_t models[C9X_MAX_MODELS]; }; ModelsListWidget::ModelsListWidget(QWidget *parent): QListWidget(parent) { - this->setFont(QFont("Courier New",12)); - radioData = &((MdiChild *)parent)->radioData; - refreshList(); + setFont(QFont("Courier New",12)); + radioData = &((MdiChild *)parent)->radioData; + refreshList(); - connect(this, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(OpenEditWindow())); - connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(ShowContextMenu(const QPoint&))); - connect(this, SIGNAL(currentRowChanged(int)), this, SLOT(viableModelSelected(int))); + connect(this, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(OpenEditWindow())); + connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(ShowContextMenu(const QPoint&))); + connect(this, SIGNAL(currentRowChanged(int)), this, SLOT(viableModelSelected(int))); - setContextMenuPolicy(Qt::CustomContextMenu); - setSelectionMode(QAbstractItemView::ExtendedSelection); - setDragEnabled(true); - setAcceptDrops(true); - setDragDropOverwriteMode(true); - setDropIndicatorShown(true); + setContextMenuPolicy(Qt::CustomContextMenu); + setSelectionMode(QAbstractItemView::ExtendedSelection); + setDragEnabled(true); + setAcceptDrops(true); + setDragDropOverwriteMode(true); + setDropIndicatorShown(true); - active_highlight_color = this->palette().color(QPalette::Active, QPalette::Highlight); + active_highlight_color = palette().color(QPalette::Active, QPalette::Highlight); } void ModelsListWidget::ShowContextMenu(const QPoint& pos) diff --git a/radio/src/.gitignore b/radio/src/.gitignore index 9bff2bce9..af2b25b2f 100644 --- a/radio/src/.gitignore +++ b/radio/src/.gitignore @@ -15,3 +15,4 @@ /TEMPLATES /SOUNDS /LOGS +/allsrc.cpp diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 5faad0884..36f11d17e 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -381,7 +381,7 @@ void referenceModelAudioFiles() } // Switches Audio Files -[up|mid|down].wav - for (int i=0; i 0) source += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS; + // S3 added + if (source > MIXSRC_POT2) + source += 1; // PPM9-PPM16 added if (source > MIXSRC_FIRST_PPM+7) source += 8; @@ -290,7 +358,7 @@ int ConvertSwitch_215_to_216(int swtch) else if (swtch <= SWSRC_LAST_SWITCH) return swtch; else - return swtch + (2*4) + (2*6); // 4 trims and 2 * 6-pos added as switches + return swtch + (2*4) + (3*6); // 4 trims and 2 * 6-pos added as switches } #else int ConvertSource_215_to_216(int source, bool insertZero=false) diff --git a/radio/src/gui/menu_general.cpp b/radio/src/gui/menu_general.cpp index e8bd44897..5f2ade988 100644 --- a/radio/src/gui/menu_general.cpp +++ b/radio/src/gui/menu_general.cpp @@ -477,7 +477,7 @@ void menuGeneralSetup(uint8_t event) #if defined(PCBSKY9X) case ITEM_SETUP_TEMPERATURE_WARNING: lcd_putsLeft(y, STR_TEMPWARNING); - putsTelemetryValue(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.temperatureWarn, UNIT_DEGREES, attr|LEFT) ; + putsTelemetryValue(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.temperatureWarn, UNIT_TEMPERATURE, attr|LEFT) ; if(attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.temperatureWarn, 0, 120); // 0 means no alarm break; #endif @@ -1154,7 +1154,7 @@ void menuGeneralDiagAna(uint8_t event) #if defined(PCBTARANIS) lcd_putsLeft(6*FH+1, STR_BATT_CALIB); static int32_t adcBatt; - adcBatt = ((adcBatt * 7) + anaIn(8)) / 8; + adcBatt = ((adcBatt * 7) + anaIn(TX_VOLTAGE)) / 8; uint32_t batCalV = (adcBatt + (adcBatt*g_eeGeneral.vBatCalib)/128) * BATT_SCALE; batCalV >>= 11; batCalV += 2; // because of the diode @@ -1162,7 +1162,7 @@ void menuGeneralDiagAna(uint8_t event) #elif defined(PCBSKY9X) lcd_putsLeft(5*FH+1, STR_BATT_CALIB); static int32_t adcBatt; - adcBatt = ((adcBatt * 7) + anaIn(7)) / 8; + adcBatt = ((adcBatt * 7) + anaIn(TX_VOLTAGE)) / 8; uint32_t batCalV = (adcBatt + adcBatt*(g_eeGeneral.vBatCalib)/128) * 4191; batCalV /= 55296; putsVolts(LEN_CALIB_FIELDS*FW+4*FW, 5*FH+1, batCalV, (m_posVert==1 ? INVERS : 0)); @@ -1170,7 +1170,7 @@ void menuGeneralDiagAna(uint8_t event) lcd_putsLeft(6*FH-2, STR_BATT_CALIB); // Gruvin wants 2 decimal places and instant update of volts calib field when button pressed static uint16_t adcBatt; - adcBatt = ((adcBatt * 7) + anaIn(7)) / 8; // running average, sourced directly (to avoid unending debate :P) + adcBatt = ((adcBatt * 7) + anaIn(TX_VOLTAGE)) / 8; // running average, sourced directly (to avoid unending debate :P) uint32_t batCalV = ((uint32_t)adcBatt*1390 + (10*(int32_t)adcBatt*g_eeGeneral.vBatCalib)/8) / BandGap; lcd_outdezNAtt(LEN_CALIB_FIELDS*FW+4*FW, 6*FH-2, batCalV, PREC2|(m_posVert==1 ? INVERS : 0)); #else @@ -1187,7 +1187,7 @@ void menuGeneralDiagAna(uint8_t event) #if defined(PCBSKY9X) lcd_putsLeft(7*FH+1, STR_TEMP_CALIB); - putsTelemetryValue(LEN_CALIB_FIELDS*FW+4*FW, 7*FH+1, getTemperature(), UNIT_DEGREES, (m_posVert==3 ? INVERS : 0)) ; + putsTelemetryValue(LEN_CALIB_FIELDS*FW+4*FW, 7*FH+1, getTemperature(), UNIT_TEMPERATURE, (m_posVert==3 ? INVERS : 0)) ; if (m_posVert==3) CHECK_INCDEC_GENVAR(event, g_eeGeneral.temperatureCalib, -100, 100); #endif } @@ -1196,6 +1196,7 @@ void menuGeneralDiagAna(uint8_t event) enum menuGeneralHwItems { ITEM_SETUP_HW_POT1, ITEM_SETUP_HW_POT2, + ITEM_SETUP_HW_POT3, ITEM_SETUP_HW_UART3_MODE, ITEM_SETUP_HW_MAX }; @@ -1214,14 +1215,20 @@ void menuGeneralHardware(uint8_t event) switch(i) { case ITEM_SETUP_HW_POT1: case ITEM_SETUP_HW_POT2: + case ITEM_SETUP_HW_POT3: { int idx = i - ITEM_SETUP_HW_POT1; - uint8_t mask = (1<> idx, 0, 1, attr, event); - if (potType) - g_eeGeneral.potsType |= mask; - else - g_eeGeneral.potsType &= ~mask; + uint8_t shift = (2*idx); + uint8_t mask = (0x03 << shift); + putsMixerSource(sizeof(TR_TYPE)*FW, y, MIXSRC_FIRST_POT+idx); + uint8_t potType = (g_eeGeneral.potsType & mask) >> shift; + if (potType == POT_TYPE_NONE && i < 2) + potType = 1; + potType = selectMenuItem(HW_SETTINGS_COLUMN, y, STR_TYPE, STR_POTTYPES, potType, 0, POT_TYPE_MAX, attr, event); + if (potType == POT_TYPE_POT && i < 2) + potType = 0; + g_eeGeneral.potsType &= ~mask; + g_eeGeneral.potsType |= (potType << shift); break; } @@ -1234,7 +1241,6 @@ void menuGeneralHardware(uint8_t event) } } - } #elif defined(PCBSKY9X) @@ -1323,7 +1329,7 @@ void menuCommonCalib(uint8_t event) #if defined(PCBTARANIS) uint8_t idx = i - POT1; int count = reusableBuffer.calib.xpotsCalib[idx].stepsCount; - if (IS_MULTIPOS_POT(i) && count <= POTS_POS_COUNT) { + if (IS_POT_MULTIPOS(i) && count <= XPOTS_MULTIPOS_COUNT) { if (reusableBuffer.calib.xpotsCalib[idx].lastCount == 0 || vt < reusableBuffer.calib.xpotsCalib[idx].lastPosition - XPOT_DELTA || vt > reusableBuffer.calib.xpotsCalib[idx].lastPosition + XPOT_DELTA) { reusableBuffer.calib.xpotsCalib[idx].lastPosition = vt; reusableBuffer.calib.xpotsCalib[idx].lastCount = 1; @@ -1341,7 +1347,7 @@ void menuCommonCalib(uint8_t event) } } if (!found) { - if (count < POTS_POS_COUNT) { + if (count < XPOTS_MULTIPOS_COUNT) { reusableBuffer.calib.xpotsCalib[idx].steps[count] = position; } reusableBuffer.calib.xpotsCalib[idx].stepsCount += 1; @@ -1413,7 +1419,7 @@ void menuCommonCalib(uint8_t event) for (uint8_t i=POT1; i<=POT_LAST; i++) { int idx = i - POT1; int count = reusableBuffer.calib.xpotsCalib[idx].stepsCount; - if (IS_MULTIPOS_POT(i) && count > 1 && count <= POTS_POS_COUNT) { + if (IS_POT_MULTIPOS(i) && count > 1 && count <= XPOTS_MULTIPOS_COUNT) { for (int j=0; jcount + 1; } - if (steps > 0 && steps <= POTS_POS_COUNT) { + if (steps > 0 && steps <= XPOTS_MULTIPOS_COUNT) { lcd_outdezAtt(LCD_W/2-2+(i-POT1)*5, LCD_H-6, steps, TINSIZE); } } diff --git a/radio/src/gui/menus.cpp b/radio/src/gui/menus.cpp index 997f6e984..70ceb4412 100644 --- a/radio/src/gui/menus.cpp +++ b/radio/src/gui/menus.cpp @@ -1351,6 +1351,12 @@ bool isSourceAvailable(int source) return false; #endif +#if defined(PCBTARANIS) + if (source>=MIXSRC_FIRST_POT && source<=MIXSRC_LAST_POT) { + return IS_POT_AVAILABLE(POT1+source-MIXSRC_FIRST_POT); + } +#endif + #if !defined(HELI) if (source>=MIXSRC_CYC1 && source<=MIXSRC_CYC3) return false; @@ -1438,11 +1444,11 @@ bool isSwitchAvailableInLogicalSwitches(int swtch) } #if defined(PCBTARANIS) - if (swtch >= SWSRC_P11 && swtch <= SWSRC_P26) { - int index = (swtch - SWSRC_P11) / POTS_POS_COUNT; - if (g_eeGeneral.potsType & (1<= SWSRC_FIRST_MULTIPOS_SWITCH && swtch <= SWSRC_LAST_MULTIPOS_SWITCH) { + int index = (swtch - SWSRC_FIRST_MULTIPOS_SWITCH) / XPOTS_MULTIPOS_COUNT; + if (IS_POT_MULTIPOS(POT1+index)) { StepsCalibData * calib = (StepsCalibData *) &g_eeGeneral.calib[POT1+index]; - return (calib->count >= ((swtch - SWSRC_P11) % POTS_POS_COUNT)); + return (calib->count >= ((swtch - SWSRC_FIRST_MULTIPOS_SWITCH) % XPOTS_MULTIPOS_COUNT)); } else { return false; diff --git a/radio/src/gui/view_main.cpp b/radio/src/gui/view_main.cpp index 5eb4575bd..4c373e18c 100644 --- a/radio/src/gui/view_main.cpp +++ b/radio/src/gui/view_main.cpp @@ -122,8 +122,10 @@ void drawPotsBars() // Optimization by Mike Blandford uint8_t x, i, len ; // declare temporary variables for (x=LCD_W/2-5, i=NUM_STICKS; iNUM_STICKS+1 ? LCD_H/2+1 : 1); + if (i == POT3) { + continue; + } + xcoord_t x = ((i==POT1 || i==SLIDER1) ? 3 : LCD_W-5); + int8_t y = (i>=SLIDER1 ? LCD_H/2+1 : 1); lcd_vline(x, y, LCD_H/2-2); lcd_vline(x+1, y, LCD_H/2-2); y += LCD_H/2-4; @@ -268,9 +273,9 @@ void displayTopBar() } /* Altitude */ - if (g_model.frsky.altitudeDisplayed && frskyData.hub.baroAltitudeOffset) { + if (g_model.frsky.altitudeDisplayed && TELEMETRY_BARO_ALT_AVAILABLE()) { LCD_ICON(altitude_icon_x, BAR_Y, ICON_ALTITUDE); - putsTelemetryValue(altitude_icon_x+2*FW-1, BAR_Y+1, TELEMETRY_ALT_BP, UNIT_METERS, LEFT); + putsTelemetryValue(altitude_icon_x+2*FW-1, BAR_Y+1, TELEMETRY_RELATIVE_BARO_ALT_BP, UNIT_SPEED, LEFT); } } @@ -406,7 +411,7 @@ void displayBattVoltage() void displayVoltageOrAlarm() { if (g_vbat100mV > g_eeGeneral.vBatWarn && g_eeGeneral.temperatureWarn && getTemperature() >= g_eeGeneral.temperatureWarn) { - putsTelemetryValue(6*FW-1, 3*FH, getTemperature(), UNIT_DEGREES, BLINK|INVERS|DBLSIZE); + putsTelemetryValue(6*FW-1, 3*FH, getTemperature(), UNIT_TEMPERATURE, BLINK|INVERS|DBLSIZE); } else if (g_vbat100mV > g_eeGeneral.vBatWarn && g_eeGeneral.mAhWarn && (g_eeGeneral.mAhUsed + Current_used * (488 + g_eeGeneral.currentCalib)/8192/36) / 500 >= g_eeGeneral.mAhWarn) { putsTelemetryValue(7*FW-1, 3*FH, (g_eeGeneral.mAhUsed + Current_used*(488 + g_eeGeneral.currentCalib)/8192/36)/10, UNIT_MAH, BLINK|INVERS|DBLSIZE); diff --git a/radio/src/gui/view_statistics.cpp b/radio/src/gui/view_statistics.cpp index 10573b8bd..36c4d5b78 100644 --- a/radio/src/gui/view_statistics.cpp +++ b/radio/src/gui/view_statistics.cpp @@ -152,8 +152,8 @@ void menuStatisticsDebug(uint8_t event) #if defined(PCBSKY9X) lcd_putsLeft(3*FH, STR_CPU_TEMP); - putsTelemetryValue(MENU_DEBUG_COL_OFS, 3*FH, getTemperature(), UNIT_DEGREES, 0); - putsTelemetryValue(20*FW+2, 3*FH, maxTemperature+g_eeGeneral.temperatureCalib, UNIT_DEGREES, 0); + putsTelemetryValue(MENU_DEBUG_COL_OFS, 3*FH, getTemperature(), UNIT_TEMPERATURE, 0); + putsTelemetryValue(20*FW+2, 3*FH, maxTemperature+g_eeGeneral.temperatureCalib, UNIT_TEMPERATURE, 0); #endif #if defined(PCBSKY9X) @@ -169,8 +169,8 @@ void menuStatisticsDebug(uint8_t event) lcd_putsAtt(9*FW+2, 4*FH, PSTR("Upgr.TinyApp"),INVERS); } else { - putsTelemetryValue(MENU_DEBUG_COL_OFS, 4*FH, Coproc_temp, UNIT_DEGREES, 0); - putsTelemetryValue(20*FW+2, 4*FH, Coproc_maxtemp, UNIT_DEGREES, 0); + putsTelemetryValue(MENU_DEBUG_COL_OFS, 4*FH, Coproc_temp, UNIT_TEMPERATURE, 0); + putsTelemetryValue(20*FW+2, 4*FH, Coproc_maxtemp, UNIT_TEMPERATURE, 0); } #elif defined(PCBTARANIS) && !defined(SIMU) lcd_putsLeft(4*FH, "Free Mem"); diff --git a/radio/src/lcd.cpp b/radio/src/lcd.cpp index 65c201968..0bfd78820 100644 --- a/radio/src/lcd.cpp +++ b/radio/src/lcd.cpp @@ -1180,19 +1180,20 @@ void putsTelemetryValue(xcoord_t x, uint8_t y, lcdint_t val, uint8_t unit, uint8 { convertUnit(val, unit); lcd_outdezAtt(x, y, val, att & (~NO_UNIT)); - if (!(att & NO_UNIT) && unit != UNIT_RAW) + if (!(att & NO_UNIT) && unit != UNIT_RAW) { lcd_putsiAtt(lcdLastPos/*+1*/, y, STR_VTELEMUNIT, unit, 0); + } } const pm_uint8_t bchunit_ar[] PROGMEM = { - UNIT_METERS, // Alt + UNIT_DIST, // Alt UNIT_RAW, // Rpm UNIT_PERCENT, // Fuel - UNIT_DEGREES, // T1 - UNIT_DEGREES, // T2 + UNIT_TEMPERATURE, // T1 + UNIT_TEMPERATURE, // T2 UNIT_KTS, // Speed - UNIT_METERS, // Dist - UNIT_METERS, // GPS Alt + UNIT_DIST, // Dist + UNIT_DIST, // GPS Alt }; void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val, uint8_t att) @@ -1280,7 +1281,7 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val, #if defined(FRSKY_SPORT) case TELEM_ALT-1: - putsTelemetryValue(x, y, val/10, UNIT_METERS, att|PREC1); + putsTelemetryValue(x, y, val/10, UNIT_DIST, att|PREC1); break; #elif defined(WS_HOW_HIGH) case TELEM_ALT-1: @@ -1303,7 +1304,7 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val, if (channel >= TELEM_MIN_ALT-1 && channel <= TELEM_MAX_ALT-1) unit = 0; if (channel == TELEM_HDG-1) - unit = 3; + unit = UNIT_HDG; putsTelemetryValue(x, y, val, pgm_read_byte(bchunit_ar+unit), att); break; } diff --git a/radio/src/logs.cpp b/radio/src/logs.cpp index 41cf29b8d..99ad03d98 100644 --- a/radio/src/logs.cpp +++ b/radio/src/logs.cpp @@ -137,19 +137,25 @@ const pm_char * openLogs() #endif #if defined(FRSKY_HUB) - if (IS_USR_PROTO_FRSKY_HUB()) - f_puts("GPS Date,GPS Time,Long,Lat,Course,GPS Speed,GPS Alt,Baro Alt,Vertical Speed,Temp1,Temp2,RPM,Fuel,Cell volts,Cell 1,Cell 2,Cell 3,Cell 4,Cell 5,Cell 6,Current,Consumption,Vfas,AccelX,AccelY,AccelZ,", &g_oLogFile); + if (IS_USR_PROTO_FRSKY_HUB()) { + f_puts("GPS Date,GPS Time,Long,Lat,Course,GPS Speed(", &g_oLogFile); + f_puts(TELEMETRY_GPS_SPEED_UNIT, &g_oLogFile); + f_puts("),GPS Alt,Baro Alt(", &g_oLogFile); + f_puts(TELEMETRY_BARO_ALT_UNIT, &g_oLogFile); + f_puts("),Vertical Speed,Temp1,Temp2,RPM,Fuel,Cell volts,Cell 1,Cell 2,Cell 3,Cell 4,Cell 5,Cell 6,Current,Consumption,Vfas,AccelX,AccelY,AccelZ,", &g_oLogFile); + } #endif #if defined(WS_HOW_HIGH) - if (IS_USR_PROTO_WS_HOW_HIGH()) + if (IS_USR_PROTO_WS_HOW_HIGH()) { f_puts("WSHH Alt,", &g_oLogFile); + } #endif #if defined(PCBTARANIS) - f_puts("Rud,Ele,Thr,Ail,S1,S2,LS,RS,SA,SB,SC,SD,SE,SF,SG,SH\n", &g_oLogFile); + f_puts("Rud,Ele,Thr,Ail,S1,S2,S3,LS,RS,SA,SB,SC,SD,SE,SF,SG,SH\n", &g_oLogFile); #else - f_puts("Rud,Ele,Thr,Ail,P1,P2,P3,THR,RUD,ELE,ID0,ID1,ID2,AIL,GEA,TRN\n", &g_oLogFile); + f_puts("Rud,Ele,Thr,Ail,P1,P2,P3,THR,RUD,ELE,3POS,AIL,GEA,TRN\n", &g_oLogFile); #endif } else { @@ -170,6 +176,12 @@ void closeLogs() lastLogTime = 0; } +getvalue_t getConvertedTelemetryValue(getvalue_t val, uint8_t unit) +{ + convertUnit(val, unit); + return val; +} + // TODO test when disk full void writeLogs() { @@ -213,8 +225,10 @@ void writeLogs() #endif #if defined(FRSKY_HUB) + TELEMETRY_BARO_ALT_PREPARE(); + if (IS_USR_PROTO_FRSKY_HUB()) { - f_printf(&g_oLogFile, "%4d-%02d-%02d,%02d:%02d:%02d,%03d.%04d%c,%03d.%04d%c,%03d.%02d,%d.%02d,%d.%02d," TELEMETRY_ALT_FORMAT TELEMETRY_VSPEED_FORMAT "%d,%d,%d,%d," TELEMETRY_CELLS_FORMAT TELEMETRY_CURRENT_FORMAT "%d," TELEMETRY_VFAS_FORMAT "%d,%d,%d,", + f_printf(&g_oLogFile, "%4d-%02d-%02d,%02d:%02d:%02d,%03d.%04d%c,%03d.%04d%c,%03d.%02d," TELEMETRY_GPS_SPEED_FORMAT TELEMETRY_GPS_ALT_FORMAT TELEMETRY_BARO_ALT_FORMAT TELEMETRY_VSPEED_FORMAT "%d,%d,%d,%d," TELEMETRY_CELLS_FORMAT TELEMETRY_CURRENT_FORMAT "%d," TELEMETRY_VFAS_FORMAT "%d,%d,%d,", frskyData.hub.year+2000, frskyData.hub.month, frskyData.hub.day, @@ -229,20 +243,18 @@ void writeLogs() frskyData.hub.gpsLatitudeNS ? frskyData.hub.gpsLatitudeNS : '-', frskyData.hub.gpsCourse_bp, frskyData.hub.gpsCourse_ap, - TELEMETRY_GPS_SPEED_BP, - TELEMETRY_GPS_SPEED_AP, - TELEMETRY_GPS_ALT_BP, - TELEMETRY_GPS_ALT_AP, - TELEMETRY_ALT, - TELEMETRY_VSPEED, + TELEMETRY_GPS_SPEED_ARGS + TELEMETRY_GPS_ALT_ARGS + TELEMETRY_BARO_ALT_ARGS + TELEMETRY_VSPEED_ARGS frskyData.hub.temperature1, frskyData.hub.temperature2, frskyData.hub.rpm, frskyData.hub.fuelLevel, - TELEMETRY_CELLS, - TELEMETRY_CURRENT, + TELEMETRY_CELLS_ARGS + TELEMETRY_CURRENT_ARGS frskyData.hub.currentConsumption, - TELEMETRY_VFAS, + TELEMETRY_VFAS_ARGS frskyData.hub.accelX, frskyData.hub.accelY, frskyData.hub.accelZ); @@ -251,7 +263,7 @@ void writeLogs() #if defined(WS_HOW_HIGH) if (IS_USR_PROTO_WS_HOW_HIGH()) { - f_printf(&g_oLogFile, "%d,", TELEMETRY_ALT_BP); + f_printf(&g_oLogFile, "%d,", TELEMETRY_RELATIVE_BARO_ALT_BP); } #endif diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index 63e57eaeb..66ccea7a4 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -105,7 +105,7 @@ void getGpsDistance() dist = frskyData.hub.distFromEarthAxis * angle / 1000000; result += dist*dist; - dist = abs(frskyData.hub.baroAltitudeOffset ? TELEMETRY_ALT_BP : TELEMETRY_GPS_ALT_BP); + dist = abs(TELEMETRY_BARO_ALT_AVAILABLE() ? TELEMETRY_RELATIVE_BARO_ALT_BP : TELEMETRY_RELATIVE_GPS_ALT_BP); result += dist*dist; frskyData.hub.gpsDistance = isqrt32(result); @@ -195,12 +195,12 @@ void varioWakeup() int varioMax = (10+(int)g_model.frsky.varioMax) * 100; int varioMin = (-10+(int)g_model.frsky.varioMin) * 100; - if (verticalSpeed > varioMax) - verticalSpeed = varioMax; - else if (verticalSpeed < varioMin) - verticalSpeed = varioMin; + if (verticalSpeed < varioCenterMin || (verticalSpeed > varioCenterMax && (int16_t)(s_varioTmr - tmr10ms) < 0)) { + if (verticalSpeed > varioMax) + verticalSpeed = varioMax; + else if (verticalSpeed < varioMin) + verticalSpeed = varioMin; - if ((int16_t)(s_varioTmr - tmr10ms) < 0) { uint8_t varioFreq, varioDuration; if (verticalSpeed > 0) { varioFreq = (verticalSpeed * 4 + 8000) >> 7; diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index b3b5b7de5..ba722512f 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -68,52 +68,62 @@ #endif #if defined(PCBTARANIS) - #define MAX_MODELS 60 - #define NUM_CHNOUT 32 // number of real output channels CH1-CH32 - #define MAX_PHASES 9 - #define MAX_MIXERS 64 - #define MAX_EXPOS 64 - #define NUM_CSW 32 // number of custom switches - #define NUM_CFN 64 // number of functions assigned to switches - #define MAX_SCRIPTS 7 - #define MAX_INPUTS 32 - #define NUM_PPM 16 + #define MAX_MODELS 60 + #define NUM_CHNOUT 32 // number of real output channels CH1-CH32 + #define MAX_PHASES 9 + #define MAX_MIXERS 64 + #define MAX_EXPOS 64 + #define NUM_CSW 32 // number of custom switches + #define NUM_CFN 64 // number of functions assigned to switches + #define MAX_SCRIPTS 7 + #define MAX_INPUTS 32 + #define NUM_PPM 16 + #define NUM_POTS 5 + #define NUM_XPOTS 3 #elif defined(CPUARM) - #define MAX_MODELS 60 - #define NUM_CHNOUT 32 // number of real output channels CH1-CH32 - #define MAX_PHASES 9 - #define MAX_MIXERS 64 - #define MAX_EXPOS 32 - #define NUM_CSW 32 // number of custom switches - #define NUM_CFN 64 // number of functions assigned to switches - #define NUM_PPM 16 + #define MAX_MODELS 60 + #define NUM_CHNOUT 32 // number of real output channels CH1-CH32 + #define MAX_PHASES 9 + #define MAX_MIXERS 64 + #define MAX_EXPOS 32 + #define NUM_CSW 32 // number of custom switches + #define NUM_CFN 64 // number of functions assigned to switches + #define NUM_PPM 16 + #define NUM_POTS 3 + #define NUM_XPOTS 0 #elif defined(CPUM2560) || defined(CPUM2561) - #define MAX_MODELS 30 - #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 - #define MAX_PHASES 6 - #define MAX_MIXERS 32 - #define MAX_EXPOS 16 - #define NUM_CSW 15 // number of custom switches - #define NUM_CFN 24 // number of functions assigned to switches - #define NUM_PPM 8 + #define MAX_MODELS 30 + #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 + #define MAX_PHASES 6 + #define MAX_MIXERS 32 + #define MAX_EXPOS 16 + #define NUM_CSW 15 // number of custom switches + #define NUM_CFN 24 // number of functions assigned to switches + #define NUM_PPM 8 + #define NUM_POTS 3 + #define NUM_XPOTS 0 #elif defined(CPUM128) - #define MAX_MODELS 30 - #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 - #define MAX_PHASES 5 - #define MAX_MIXERS 32 - #define MAX_EXPOS 14 - #define NUM_CSW 15 // number of custom switches - #define NUM_CFN 24 // number of functions assigned to switches - #define NUM_PPM 8 + #define MAX_MODELS 30 + #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 + #define MAX_PHASES 5 + #define MAX_MIXERS 32 + #define MAX_EXPOS 14 + #define NUM_CSW 15 // number of custom switches + #define NUM_CFN 24 // number of functions assigned to switches + #define NUM_PPM 8 + #define NUM_POTS 3 + #define NUM_XPOTS 0 #else - #define MAX_MODELS 16 - #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 - #define MAX_PHASES 5 - #define MAX_MIXERS 32 - #define MAX_EXPOS 14 - #define NUM_CSW 12 // number of custom switches - #define NUM_CFN 16 // number of functions assigned to switches - #define NUM_PPM 8 + #define MAX_MODELS 16 + #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 + #define MAX_PHASES 5 + #define MAX_MIXERS 32 + #define MAX_EXPOS 14 + #define NUM_CSW 12 // number of custom switches + #define NUM_CFN 16 // number of functions assigned to switches + #define NUM_PPM 8 + #define NUM_POTS 3 + #define NUM_XPOTS 0 #endif #define MAX_TIMERS 2 @@ -333,12 +343,12 @@ enum BacklightMode { #define SPLASH_MODE uint8_t splashMode:1; uint8_t spare4:2 #endif -#define POTS_POS_COUNT 6 +#define XPOTS_MULTIPOS_COUNT 6 #if defined(PCBTARANIS) PACK(typedef struct { uint8_t count; - uint8_t steps[POTS_POS_COUNT-1]; + uint8_t steps[XPOTS_MULTIPOS_COUNT-1]; }) StepsCalibData; #endif @@ -921,9 +931,9 @@ enum TelemetryUnit { UNIT_AMPS, UNIT_METERS_PER_SECOND, UNIT_RAW, - UNIT_KMH, - UNIT_METERS, - UNIT_DEGREES, + UNIT_SPEED, + UNIT_DIST, + UNIT_TEMPERATURE, UNIT_PERCENT, UNIT_MILLIAMPS, UNIT_A1A2_MAX = UNIT_MILLIAMPS, @@ -937,6 +947,7 @@ enum TelemetryUnit { UNIT_SECONDS, UNIT_RPMS, UNIT_G, + UNIT_HDG, }; #if defined(CPUARM) @@ -1304,10 +1315,8 @@ enum SwitchSources { SWSRC_LAST_SWITCH = SWSRC_TRAINER, #if defined(PCBTARANIS) - SWSRC_P11, - SWSRC_P16 = SWSRC_P11+5, - SWSRC_P21, - SWSRC_P26 = SWSRC_P21+5, + SWSRC_FIRST_MULTIPOS_SWITCH, + SWSRC_LAST_MULTIPOS_SWITCH = SWSRC_FIRST_MULTIPOS_SWITCH + (NUM_XPOTS*XPOTS_MULTIPOS_COUNT) - 1, #endif SWSRC_FIRST_TRIM, @@ -1368,11 +1377,12 @@ enum MixSources { MIXSRC_FIRST_POT, #if defined(PCBTARANIS) - MIXSRC_S1 = MIXSRC_FIRST_POT, - MIXSRC_S2, - MIXSRC_S3, - MIXSRC_S4, - MIXSRC_LAST_POT = MIXSRC_S4, + MIXSRC_POT1 = MIXSRC_FIRST_POT, + MIXSRC_POT2, + MIXSRC_POT3, + MIXSRC_SLIDER1, + MIXSRC_SLIDER2, + MIXSRC_LAST_POT = MIXSRC_SLIDER2, #else MIXSRC_P1 = MIXSRC_FIRST_POT, MIXSRC_P2, diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 96e19bfff..a8090a9aa 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -520,7 +520,7 @@ uint16_t evalChkSum() { uint16_t sum = 0; const int16_t *calibValues = (const int16_t *) &g_eeGeneral.calib[0]; - for (int i=0; icount>0 && calib->countcount>0 && calib->countcount); uint8_t previousPos = potsPos[i] >> 4; uint8_t previousStoredPos = potsPos[i] & 0x0F; @@ -1416,7 +1416,7 @@ void getSwitchesPosition(bool startup) potsLastposStart[i] = 0; potsPos[i] = (pos << 4) | pos; if (previousStoredPos != pos) { - PLAY_SWITCH_MOVED(SWSRC_LAST_SWITCH+i*POTS_POS_COUNT+pos); + PLAY_SWITCH_MOVED(SWSRC_LAST_SWITCH+i*XPOTS_MULTIPOS_COUNT+pos); } } } @@ -1424,7 +1424,7 @@ void getSwitchesPosition(bool startup) } } #define SWITCH_POSITION(sw) (switchesPos & (1<<(sw))) -#define POT_POSITION(sw) ((potsPos[(sw)/POTS_POS_COUNT] & 0x0f) == ((sw) % POTS_POS_COUNT)) +#define POT_POSITION(sw) ((potsPos[(sw)/XPOTS_MULTIPOS_COUNT] & 0x0f) == ((sw) % XPOTS_MULTIPOS_COUNT)) #else #define getSwitchesPosition(...) #define SWITCH_POSITION(idx) switchState((EnumKeys)(SW_BASE+(idx))) @@ -1464,8 +1464,8 @@ bool getSwitch(int8_t swtch) #endif } #if defined(PCBTARANIS) - else if (cs_idx <= SWSRC_P26) { - result = POT_POSITION(cs_idx-SWSRC_P11); + else if (cs_idx <= SWSRC_LAST_MULTIPOS_SWITCH) { + result = POT_POSITION(cs_idx-SWSRC_FIRST_MULTIPOS_SWITCH); } #endif else if (cs_idx <= SWSRC_LAST_TRIM) { @@ -2136,29 +2136,35 @@ getvalue_t convertCswTelemValue(LogicalSwitchData * cs) FORCEINLINE void convertUnit(getvalue_t & val, uint8_t & unit) { if (IS_IMPERIAL_ENABLE()) { - if (unit == UNIT_DEGREES) { + if (unit == UNIT_TEMPERATURE) { val += 18; val *= 115; val >>= 6; } - if (unit == UNIT_METERS) { + if (unit == UNIT_DIST) { // m to ft *105/32 val = val * 3 + (val >> 2) + (val >> 5); } if (unit == UNIT_FEET) { - unit = UNIT_METERS; + unit = UNIT_DIST; } if (unit == UNIT_KTS) { - unit = UNIT_KMH; + // kts to mph + unit = UNIT_SPEED; + val = (val * 31) / 27; } } else { if (unit == UNIT_KTS) { // kts to km/h - unit = UNIT_KMH; - val = (val * 46) / 25; + unit = UNIT_SPEED; + val = (val * 50) / 27; } } + + if (unit == UNIT_HDG) { + unit = UNIT_TEMPERATURE; + } } #endif @@ -2815,7 +2821,7 @@ void getADC() #if defined(PCBTARANIS) if (s_noScroll) v = temp[x] >> 1; StepsCalibData * calib = (StepsCalibData *) &g_eeGeneral.calib[x]; - if (!s_noScroll && IS_MULTIPOS_POT(x) && calib->count>0 && calib->countcount>0 && calib->count> 4); s_anaFilt[x] = 2*RESX; for (int i=0; icount; i++) { @@ -3078,7 +3084,7 @@ void evalInputs(uint8_t mode) #ifndef SIMU if (i < NUM_STICKS+NUM_POTS) { - if (IS_MULTIPOS_POT(i)) { + if (IS_POT_MULTIPOS(i)) { v -= RESX; } else { @@ -3284,7 +3290,7 @@ PLAY_FUNCTION(playValue, uint8_t idx) case MIXSRC_FIRST_TELEM+TELEM_ALT-1: #if defined(PCBTARANIS) - PLAY_NUMBER(val/10, 1+UNIT_METERS, PREC1); + PLAY_NUMBER(val/10, 1+UNIT_DIST, PREC1); break; #endif case MIXSRC_FIRST_TELEM+TELEM_MIN_ALT-1: @@ -3294,7 +3300,7 @@ PLAY_FUNCTION(playValue, uint8_t idx) PLAY_NUMBER(val, 1+UNIT_FEET, 0); else #endif - PLAY_NUMBER(val, 1+UNIT_METERS, 0); + PLAY_NUMBER(val, 1+UNIT_DIST, 0); break; case MIXSRC_FIRST_TELEM+TELEM_RPM-1: @@ -3303,7 +3309,7 @@ PLAY_FUNCTION(playValue, uint8_t idx) break; case MIXSRC_FIRST_TELEM+TELEM_HDG-1: - PLAY_NUMBER(val, 1+UNIT_DEGREES, 0); + PLAY_NUMBER(val, 1+UNIT_HDG, 0); break; default: diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 0ee4b3bf1..5c86d0dd3 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -378,8 +378,6 @@ enum EnumKeys { #if defined(PCBTARANIS) #define NUM_SWITCHES 8 #define IS_3POS(sw) ((sw) != 5 && (sw) != 7) - #define NUM_POTS 4 - #define NUM_XPOTS 2 #define NUM_SW_SRCRAW 8 #define SWSRC_THR SWSRC_SF2 #define SWSRC_GEA SWSRC_SG2 @@ -391,8 +389,6 @@ enum EnumKeys { #define NUM_SWITCHES 7 #define IS_3POS(sw) ((sw) == 0) #define IS_MOMENTARY(sw) (sw == SWSRC_TRN) - #define NUM_POTS 3 - #define NUM_XPOTS 0 #define NUM_SW_SRCRAW 1 #define SW_DSM2_BIND SW_TRN #endif @@ -413,10 +409,19 @@ enum EnumKeys { #include "myeeprom.h" +enum PotType { + POT_TYPE_NONE, + POT_TYPE_POT, + POT_TYPE_MULTIPOS, + POT_TYPE_MAX=POT_TYPE_MULTIPOS +}; + #if defined(PCBTARANIS) - #define IS_MULTIPOS_POT(x) ((x)>=POT1 && (x)<=POT_LAST && (g_eeGeneral.potsType & (1 << ((x)-POT1)))) + #define IS_POT_AVAILABLE(x) ((x)!=POT3 || (g_eeGeneral.potsType & (0x03 << (2*((x)-POT1))))!=POT_TYPE_NONE) + #define IS_POT_MULTIPOS(x) ((x)>=POT1 && (x)<=POT_LAST && ((g_eeGeneral.potsType>>(2*((x)-POT1)))&0x03)==POT_TYPE_MULTIPOS) #else - #define IS_MULTIPOS_POT(x) (false) + #define IS_POT_AVAILABLE(x) (true) + #define IS_POT_MULTIPOS(x) (false) #endif #if ROTARY_ENCODERS > 0 @@ -1044,7 +1049,8 @@ enum Analogs { #if defined(PCBTARANIS) POT1, POT2, - POT_LAST = POT2, + POT3, + POT_LAST = POT3, SLIDER1, SLIDER2, #else @@ -1603,7 +1609,7 @@ union ReusableBuffer #if defined(PCBTARANIS) struct { uint8_t stepsCount; - int16_t steps[POTS_POS_COUNT]; + int16_t steps[XPOTS_MULTIPOS_COUNT]; uint8_t lastCount; int16_t lastPosition; } xpotsCalib[NUM_XPOTS]; diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index 73458e5b0..abe3bd6d4 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -407,18 +407,18 @@ uint16_t anaIn(uint8_t chan) else if (chanknobs[chan-NUM_STICKS]->getValue(); #if defined(PCBTARANIS) - else if (chan == 8) + else if (chan == TX_VOLTAGE) return 1000; #elif defined(PCBSKY9X) - else if (chan == 7) + else if (chan == TX_VOLTAGE) return 1500; - else if (chan == 8) + else if (chan == TX_CURRENT) return 100; #elif defined(PCBGRUVIN9X) - else if (chan == 7) + else if (chan == TX_VOLTAGE) return 150; #else - else if (chan == 7) + else if (chan == TX_VOLTAGE) return 1500; #endif else diff --git a/radio/src/targets/taranis/adc_driver.cpp b/radio/src/targets/taranis/adc_driver.cpp index a57e300bd..12aaea7c9 100644 --- a/radio/src/targets/taranis/adc_driver.cpp +++ b/radio/src/targets/taranis/adc_driver.cpp @@ -60,9 +60,9 @@ volatile uint16_t Analog_values[NUMBER_ANALOG]; #if defined(REV4a) -const char ana_direction[NUMBER_ANALOG] = {0,1,0,1, 1,1,1,0, 0}; +const char ana_direction[NUMBER_ANALOG] = {0,1,0,1, 1,1,0,1,0, 0}; #elif !defined(REV3) -const char ana_direction[NUMBER_ANALOG] = {0,1,0,1, 1,0,1,0, 0}; +const char ana_direction[NUMBER_ANALOG] = {0,1,0,1, 1,0,0,1,0, 0}; #endif void adcInit() @@ -88,7 +88,7 @@ void adcInit() ADC1->CR1 = ADC_CR1_SCAN ; ADC1->CR2 = ADC_CR2_ADON | ADC_CR2_DMA | ADC_CR2_DDS ; ADC1->SQR1 = (NUMBER_ANALOG-1) << 20 ; // NUMBER_ANALOG Channels - ADC1->SQR2 = SLIDE_L + (SLIDE_R<<5) + (BATTERY<<10) ; + ADC1->SQR2 = (SLIDE_L<<5) + (SLIDE_R<<10) + (BATTERY<<15) ; ADC1->SQR3 = STICK_LH + (STICK_LV<<5) + (STICK_RV<<10) + (STICK_RH<<15) + (POT_L<<20) + (POT_R<<25) ; ADC1->SMPR1 = SAMPTIME + (SAMPTIME<<3) + (SAMPTIME<<6) + (SAMPTIME<<9) + (SAMPTIME<<12) + (SAMPTIME<<15) + (SAMPTIME<<18) + (SAMPTIME<<21) + (SAMPTIME<<24) ; @@ -120,7 +120,6 @@ void adcRead() } } DMA2_Stream0->CR &= ~DMA_SxCR_EN ; // Disable DMA - // return ( i < 10000 ) ? 1 : 0 ; #if !defined(REV3) // adc direction correct @@ -136,9 +135,3 @@ void adcRead() void adcStop() { } - - - - - - diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index d92a6bd7d..408fa43cd 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -71,10 +71,10 @@ FrskyData frskyData; #if defined(FRSKY_HUB) || defined(WS_HOW_HIGH) void checkMinMaxAltitude() { - if (TELEMETRY_ALT_BP > frskyData.hub.maxAltitude) - frskyData.hub.maxAltitude = TELEMETRY_ALT_BP; - if (TELEMETRY_ALT_BP < frskyData.hub.minAltitude) - frskyData.hub.minAltitude = TELEMETRY_ALT_BP; + if (TELEMETRY_RELATIVE_BARO_ALT_BP > frskyData.hub.maxAltitude) + frskyData.hub.maxAltitude = TELEMETRY_RELATIVE_BARO_ALT_BP; + if (TELEMETRY_RELATIVE_BARO_ALT_BP < frskyData.hub.minAltitude) + frskyData.hub.minAltitude = TELEMETRY_RELATIVE_BARO_ALT_BP; } #endif diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index c0b9985bf..9e97989e0 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -225,31 +225,41 @@ bool FRSKY_alarmRaised(uint8_t idx); void resetTelemetry(); -#define TELEMETRY_CELL_VOLTAGE(k) (frskyData.hub.cellVolts[k] * 2) -#define TELEMETRY_MIN_CELL_VOLTAGE (frskyData.hub.minCellVolts * 2) -#define TELEMETRY_ALT_BP frskyData.hub.baroAltitude_bp -#define TELEMETRY_ALT_AP frskyData.hub.baroAltitude_ap -#define TELEMETRY_GPS_SPEED_BP frskyData.hub.gpsSpeed_bp -#define TELEMETRY_GPS_SPEED_AP frskyData.hub.gpsSpeed_ap -#define TELEMETRY_GPS_ALT_AP frskyData.hub.gpsAltitude_ap -#define TELEMETRY_GPS_ALT_BP frskyData.hub.gpsAltitude_bp -#define TELEMETRY_ALT frskyData.hub.baroAltitude_bp, frskyData.hub.baroAltitude_ap -#define TELEMETRY_ALT_FORMAT "%d.%02d," -#define TELEMETRY_CELLS frskyData.hub.cellsSum / 10, frskyData.hub.cellsSum % 10, TELEMETRY_CELL_VOLTAGE(0)/100, TELEMETRY_CELL_VOLTAGE(0)%100, TELEMETRY_CELL_VOLTAGE(1)/100, TELEMETRY_CELL_VOLTAGE(1)%100, TELEMETRY_CELL_VOLTAGE(2)/100, TELEMETRY_CELL_VOLTAGE(2)%100, TELEMETRY_CELL_VOLTAGE(3)/100, TELEMETRY_CELL_VOLTAGE(3)%100, TELEMETRY_CELL_VOLTAGE(4)/100, TELEMETRY_CELL_VOLTAGE(4)%100, TELEMETRY_CELL_VOLTAGE(5)/100, TELEMETRY_CELL_VOLTAGE(5)%100 -#define TELEMETRY_CELLS_FORMAT "%d.%d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d," -#define TELEMETRY_CURRENT frskyData.hub.current / 100, frskyData.hub.current % 100 -#define TELEMETRY_CURRENT_FORMAT "%d.%02d," -#define TELEMETRY_VFAS frskyData.hub.vfas / 10, frskyData.hub.vfas % 10 -#define TELEMETRY_VFAS_FORMAT "%d.%d," -#define TELEMETRY_VSPEED frskyData.hub.varioSpeed < 0 ? '-' : ' ', frskyData.hub.varioSpeed / 100, frskyData.hub.varioSpeed % 100 -#define TELEMETRY_VSPEED_FORMAT "%c%d.%02d," +#define TELEMETRY_STREAMING() (frskyStreaming > 0) -#define TELEMETRY_STREAMING() (frskyStreaming > 0) +#define TELEMETRY_CELL_VOLTAGE(k) (frskyData.hub.cellVolts[k] * 2) +#define TELEMETRY_MIN_CELL_VOLTAGE (frskyData.hub.minCellVolts * 2) + +#define TELEMETRY_BARO_ALT_AVAILABLE() (frskyData.hub.baroAltitudeOffset) +#define TELEMETRY_BARO_ALT_UNIT (IS_IMPERIAL_ENABLE() ? LENGTH_UNIT_IMP : LENGTH_UNIT_METR) + +#define TELEMETRY_RELATIVE_BARO_ALT_BP frskyData.hub.baroAltitude_bp +#define TELEMETRY_RELATIVE_BARO_ALT_AP frskyData.hub.baroAltitude_ap +#define TELEMETRY_RELATIVE_GPS_ALT_BP frskyData.hub.gpsAltitude_bp +#define TELEMETRY_GPS_SPEED_BP frskyData.hub.gpsSpeed_bp +#define TELEMETRY_GPS_SPEED_AP frskyData.hub.gpsSpeed_ap + +#define TELEMETRY_BARO_ALT_PREPARE() +#define TELEMETRY_BARO_ALT_FORMAT "%d," +#define TELEMETRY_BARO_ALT_ARGS frskyData.hub.baroAltitude_bp, +#define TELEMETRY_GPS_ALT_FORMAT "%d," +#define TELEMETRY_GPS_ALT_ARGS frskyData.hub.gpsAltitude_bp, +#define TELEMETRY_GPS_SPEED_UNIT (IS_IMPERIAL_ENABLE() ? SPEED_UNIT_IMP : SPEED_UNIT_METR) +#define TELEMETRY_GPS_SPEED_FORMAT "%d," +#define TELEMETRY_GPS_SPEED_ARGS getConvertedTelemetryValue(frskyData.hub.gpsSpeed_bp, UNIT_KTS), +#define TELEMETRY_CELLS_FORMAT "%d.%d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d," +#define TELEMETRY_CELLS_ARGS frskyData.hub.cellsSum / 10, frskyData.hub.cellsSum % 10, frskyData.hub.cellVolts[0]*2/100, frskyData.hub.cellVolts[0]*2%100, frskyData.hub.cellVolts[1]*2/100, frskyData.hub.cellVolts[1]*2%100, frskyData.hub.cellVolts[2]*2/100, frskyData.hub.cellVolts[2]*2%100, frskyData.hub.cellVolts[3]*2/100, frskyData.hub.cellVolts[3]*2%100, frskyData.hub.cellVolts[4]*2/100, frskyData.hub.cellVolts[4]*2%100, frskyData.hub.cellVolts[5]*2/100, frskyData.hub.cellVolts[5]*2%100, +#define TELEMETRY_CURRENT_FORMAT "%d.%02d," +#define TELEMETRY_CURRENT_ARGS frskyData.hub.current / 100, frskyData.hub.current % 100, +#define TELEMETRY_VFAS_FORMAT "%d.%d," +#define TELEMETRY_VFAS_ARGS frskyData.hub.vfas / 10, frskyData.hub.vfas % 10, +#define TELEMETRY_VSPEED_FORMAT "%c%d.%02d," +#define TELEMETRY_VSPEED_ARGS frskyData.hub.varioSpeed < 0 ? '-' : ' ', frskyData.hub.varioSpeed / 100, frskyData.hub.varioSpeed % 100, #if defined(FRSKY_HUB) - #define TELEMETRY_OPENXSENSOR() (frskyData.hub.openXsensor) + #define TELEMETRY_OPENXSENSOR() (frskyData.hub.openXsensor) #else - #define TELEMETRY_OPENXSENSOR() (0) + #define TELEMETRY_OPENXSENSOR() (0) #endif #endif diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index c3bd2427c..8ac5a0801 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -187,8 +187,7 @@ void processHubPacket(uint8_t id, uint16_t value) if (frskyData.hub.rpm > frskyData.hub.maxRpm) frskyData.hub.maxRpm = frskyData.hub.rpm; break; -//case GPS_COURS_BP_ID: - //frskyData.hub.gpsCourse_bp = value; + case TEMP1_ID: if (frskyData.hub.temperature1 > frskyData.hub.maxTemperature1) frskyData.hub.maxTemperature1 = frskyData.hub.temperature1; @@ -200,7 +199,7 @@ void processHubPacket(uint8_t id, uint16_t value) break; case CURRENT_ID: - if(((int16_t)frskyData.hub.current + g_model.frsky.fasOffset)>0) + if ((int16_t)frskyData.hub.current > 0 && ((int16_t)frskyData.hub.current + g_model.frsky.fasOffset) > 0) frskyData.hub.current += g_model.frsky.fasOffset; else frskyData.hub.current = 0; @@ -227,17 +226,17 @@ void processHubPacket(uint8_t id, uint16_t value) break; case GPS_ALT_AP_ID: - frskyData.hub.gpsAltitude_bp = frskyData.hub.gpsAltitude_bp*100; + { + frskyData.hub.gpsAltitude = (frskyData.hub.gpsAltitude_bp * 100) + frskyData.hub.gpsAltitude_ap; if (!frskyData.hub.gpsAltitudeOffset) - frskyData.hub.gpsAltitudeOffset = -frskyData.hub.gpsAltitude_bp; - frskyData.hub.gpsAltitude_bp += frskyData.hub.gpsAltitudeOffset; + frskyData.hub.gpsAltitudeOffset = -frskyData.hub.gpsAltitude; if (!frskyData.hub.baroAltitudeOffset) { - if (frskyData.hub.gpsAltitude_bp > frskyData.hub.maxAltitude*100) - frskyData.hub.maxAltitude = frskyData.hub.gpsAltitude_bp/100; - if (frskyData.hub.gpsAltitude_bp < frskyData.hub.minAltitude*100) - frskyData.hub.minAltitude = frskyData.hub.gpsAltitude_bp/100; + int altitude = TELEMETRY_RELATIVE_GPS_ALT_BP; + if (altitude > frskyData.hub.maxAltitude) + frskyData.hub.maxAltitude = altitude; + if (altitude < frskyData.hub.minAltitude) + frskyData.hub.minAltitude = altitude; } - if (!frskyData.hub.pilotLatitude && !frskyData.hub.pilotLongitude) { // First received GPS position => Pilot GPS position getGpsPilotPosition(); @@ -246,6 +245,7 @@ void processHubPacket(uint8_t id, uint16_t value) getGpsDistance(); } break; + } case GPS_SPEED_BP_ID: // Speed => Max speed @@ -310,10 +310,10 @@ void processSportPacket(uint8_t *packet) /* uint8_t dataId = packet[0]; */ uint8_t prim = packet[1]; uint16_t appId = *((uint16_t *)(packet+2)); - static uint8_t t_coor; - if (!checkSportPacket(packet)) + if (!checkSportPacket(packet)) { return; + } switch (prim) { @@ -387,7 +387,7 @@ void processSportPacket(uint8_t *packet) } else if (appId >= CURR_FIRST_ID && appId <= CURR_LAST_ID) { frskyData.hub.current = SPORT_DATA_U32(packet); - if(((int16_t)frskyData.hub.current + g_model.frsky.fasOffset)>0) + if (((int16_t)frskyData.hub.current + g_model.frsky.fasOffset)>0) frskyData.hub.current += g_model.frsky.fasOffset; else frskyData.hub.current = 0; @@ -399,91 +399,87 @@ void processSportPacket(uint8_t *packet) } else if (appId >= GPS_SPEED_FIRST_ID && appId <= GPS_SPEED_LAST_ID) { frskyData.hub.gpsSpeed_bp = SPORT_DATA_U32(packet); - frskyData.hub.gpsSpeed_bp = (frskyData.hub.gpsSpeed_bp * 46) / 25/1000; + frskyData.hub.gpsSpeed_bp = (frskyData.hub.gpsSpeed_bp * 46) / 25 / 1000; if (frskyData.hub.gpsSpeed_bp > frskyData.hub.maxGpsSpeed) frskyData.hub.maxGpsSpeed = frskyData.hub.gpsSpeed_bp; } - else if(appId>=GPS_TIME_DATE_FIRST_ID && appId<=GPS_TIME_DATE_LAST_ID) { - uint32_t gps_time_date = SPORT_DATA_U32(packet); - if(gps_time_date & 0x000000ff) { - frskyData.hub.year = (uint16_t)((gps_time_date & 0xff000000)>>24); - frskyData.hub.month =(uint8_t)((gps_time_date & 0x00ff0000)>>16); - frskyData.hub.day = (uint8_t)((gps_time_date & 0x0000ff00)>>8); - } - else { - frskyData.hub.hour =(uint8_t) ((gps_time_date & 0xff000000)>>24); - frskyData.hub.min = (uint8_t)((gps_time_date & 0x00ff0000)>>16); - frskyData.hub.sec =(uint16_t) ((gps_time_date & 0x0000ff00)>>8); - frskyData.hub.hour = ((uint8_t)(frskyData.hub.hour + g_eeGeneral.timezone + 24)) % 24; - } - } - else if(appId>=GPS_COURS_FIRST_ID && appId<=GPS_COURS_LAST_ID) { - uint32_t course = SPORT_DATA_U32(packet); - frskyData.hub.gpsCourse_bp = course/100; - frskyData.hub.gpsCourse_ap = course%100; - } - else if (appId>=GPS_ALT_FIRST_ID && appId<=GPS_ALT_LAST_ID) { - int32_t gps_altitude; - gps_altitude = SPORT_DATA_S32(packet); - frskyData.hub.gpsAltitude_bp = gps_altitude; - - if (!frskyData.hub.gpsAltitudeOffset) - frskyData.hub.gpsAltitudeOffset = -frskyData.hub.gpsAltitude_bp; - - frskyData.hub.gpsAltitude_bp += frskyData.hub.gpsAltitudeOffset; + else if (appId >= GPS_TIME_DATE_FIRST_ID && appId <= GPS_TIME_DATE_LAST_ID) { + uint32_t gps_time_date = SPORT_DATA_U32(packet); + if (gps_time_date & 0x000000ff) { + frskyData.hub.year = (uint16_t) ((gps_time_date & 0xff000000) >> 24); + frskyData.hub.month = (uint8_t) ((gps_time_date & 0x00ff0000) >> 16); + frskyData.hub.day = (uint8_t) ((gps_time_date & 0x0000ff00) >> 8); + } + else { + frskyData.hub.hour = (uint8_t) ((gps_time_date & 0xff000000) >> 24); + frskyData.hub.min = (uint8_t) ((gps_time_date & 0x00ff0000) >> 16); + frskyData.hub.sec = (uint16_t) ((gps_time_date & 0x0000ff00) >> 8); + frskyData.hub.hour = ((uint8_t) (frskyData.hub.hour + g_eeGeneral.timezone + 24)) % 24; + } + } + else if (appId >= GPS_COURS_FIRST_ID && appId <= GPS_COURS_LAST_ID) { + uint32_t course = SPORT_DATA_U32(packet); + frskyData.hub.gpsCourse_bp = course / 100; + frskyData.hub.gpsCourse_ap = course % 100; + } + else if (appId >= GPS_ALT_FIRST_ID && appId <= GPS_ALT_LAST_ID) { + frskyData.hub.gpsAltitude = SPORT_DATA_S32(packet); + + if (!frskyData.hub.gpsAltitudeOffset) + frskyData.hub.gpsAltitudeOffset = -frskyData.hub.gpsAltitude; - if (!frskyData.hub.baroAltitudeOffset) { - if (frskyData.hub.gpsAltitude_bp > frskyData.hub.maxAltitude*100) - frskyData.hub.maxAltitude = frskyData.hub.gpsAltitude_bp/100; - - if (frskyData.hub.gpsAltitude_bp < frskyData.hub.minAltitude*100) - frskyData.hub.minAltitude = frskyData.hub.gpsAltitude_bp/100; - } - - if (!frskyData.hub.pilotLatitude && !frskyData.hub.pilotLongitude) { - // First received GPS position => Pilot GPS position - if(t_coor) - getGpsPilotPosition(); - } - else if (frskyData.hub.gpsDistNeeded || g_menuStack[g_menuStackPtr] == menuTelemetryFrsky) { - getGpsDistance(); - } - } - else if(appId>=GPS_LONG_LATI_FIRST_ID && appId<=GPS_LONG_LATI_LAST_ID) { - uint32_t gps_long_lati_data = SPORT_DATA_U32(packet); - if (gps_long_lati_data) - { - frskyData.hub.gpsFix = 1; - t_coor = 1; - } - - uint32_t gps_long_lati_b1w,gps_long_lati_a1w; - gps_long_lati_b1w = (gps_long_lati_data&0x3fffffff)/10000; - gps_long_lati_a1w = (gps_long_lati_data&0x3fffffff)%10000; - switch ((gps_long_lati_data & 0xc0000000)>>30) { - case 0: { - frskyData.hub.gpsLatitude_bp = (gps_long_lati_b1w/60*100)+(gps_long_lati_b1w%60); - frskyData.hub.gpsLatitude_ap = gps_long_lati_a1w; - frskyData.hub.gpsLatitudeNS = 'N'; - }break; - case 1: { - frskyData.hub.gpsLatitude_bp = (gps_long_lati_b1w/60*100) + (gps_long_lati_b1w%60); - frskyData.hub.gpsLatitude_ap = gps_long_lati_a1w; - frskyData.hub.gpsLatitudeNS = 'S'; }break; - case 2: { - frskyData.hub.gpsLongitude_bp = (gps_long_lati_b1w/60*100) +(gps_long_lati_b1w%60); - frskyData.hub.gpsLongitude_ap = gps_long_lati_a1w; - frskyData.hub.gpsLongitudeEW = 'E'; }break; - case 3: { - frskyData.hub.gpsLongitude_bp = (gps_long_lati_b1w/60*100) +(gps_long_lati_b1w%60); - frskyData.hub.gpsLongitude_ap = gps_long_lati_a1w; - frskyData.hub.gpsLongitudeEW = 'W';}break; - } - if (frskyData.hub.gpsFix > 0 && frskyData.hub.gpsLatitude_bp > 1) - frskyData.hub.gpsFix = 0; - if (frskyData.hub.gpsFix > 0 && frskyData.hub.gpsLongitude_bp > 1) - frskyData.hub.gpsFix = 0; - } + if (!frskyData.hub.baroAltitudeOffset) { + int altitude = TELEMETRY_RELATIVE_GPS_ALT_BP; + if (altitude > frskyData.hub.maxAltitude) + frskyData.hub.maxAltitude = altitude; + if (altitude < frskyData.hub.minAltitude) + frskyData.hub.minAltitude = altitude; + } + + if (frskyData.hub.gpsFix > 0) { + if (!frskyData.hub.pilotLatitude && !frskyData.hub.pilotLongitude) { + // First received GPS position => Pilot GPS position + getGpsPilotPosition(); + } + else if (frskyData.hub.gpsDistNeeded || g_menuStack[g_menuStackPtr] == menuTelemetryFrsky) { + getGpsDistance(); + } + } + } + else if (appId >= GPS_LONG_LATI_FIRST_ID && appId <= GPS_LONG_LATI_LAST_ID) { + uint32_t gps_long_lati_data = SPORT_DATA_U32(packet); + uint32_t gps_long_lati_b1w, gps_long_lati_a1w; + gps_long_lati_b1w = (gps_long_lati_data & 0x3fffffff) / 10000; + gps_long_lati_a1w = (gps_long_lati_data & 0x3fffffff) % 10000; + switch ((gps_long_lati_data & 0xc0000000) >> 30) { + case 0: + frskyData.hub.gpsLatitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); + frskyData.hub.gpsLatitude_ap = gps_long_lati_a1w; + frskyData.hub.gpsLatitudeNS = 'N'; + break; + case 1: + frskyData.hub.gpsLatitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); + frskyData.hub.gpsLatitude_ap = gps_long_lati_a1w; + frskyData.hub.gpsLatitudeNS = 'S'; + break; + case 2: + frskyData.hub.gpsLongitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); + frskyData.hub.gpsLongitude_ap = gps_long_lati_a1w; + frskyData.hub.gpsLongitudeEW = 'E'; + break; + case 3: + frskyData.hub.gpsLongitude_bp = (gps_long_lati_b1w / 60 * 100) + (gps_long_lati_b1w % 60); + frskyData.hub.gpsLongitude_ap = gps_long_lati_a1w; + frskyData.hub.gpsLongitudeEW = 'W'; + break; + } + if (frskyData.hub.gpsLongitudeEW && frskyData.hub.gpsLatitudeNS) { + frskyData.hub.gpsFix = 1; + } + else if (frskyData.hub.gpsFix > 0) { + frskyData.hub.gpsFix = 0; + } + } else if (appId >= CELLS_FIRST_ID && appId <= CELLS_LAST_ID) { uint32_t cells = SPORT_DATA_U32(packet); @@ -782,6 +778,9 @@ void resetTelemetry() frskyData.hub.gpsLongitude_ap = 9533; getGpsDistance(); + frskyData.hub.gpsSpeed_bp = 100; + frskyData.hub.gpsSpeed_ap = 50; + frskyData.hub.cellsCount = 6; frskyData.hub.baroAltitudeOffset = 500 * 100; diff --git a/radio/src/telemetry/frsky_sport.h b/radio/src/telemetry/frsky_sport.h index a59899cf7..9cdabee42 100644 --- a/radio/src/telemetry/frsky_sport.h +++ b/radio/src/telemetry/frsky_sport.h @@ -130,6 +130,7 @@ PACK(struct FrskySerialData { uint16_t maxPower; /* end */ + int32_t gpsAltitude; uint8_t gpsDistNeeded; int8_t gpsFix; // -1=never fixed, 0=fix lost, 1=fixed @@ -179,41 +180,40 @@ bool FRSKY_alarmRaised(uint8_t idx); void resetTelemetry(); -#define TELEMETRY_CELL_VOLTAGE(k) frskyData.hub.cellVolts[k] -#define TELEMETRY_MIN_CELL_VOLTAGE frskyData.hub.minCellVolts -#define TELEMETRY_GPS_SPEED_BP frskyData.hub.gpsSpeed_bp -#define TELEMETRY_GPS_SPEED_AP frskyData.hub.gpsSpeed_ap -#define TELEMETRY_GPS_SPEED_LOG frskyData.hub.gpsSpeed_bp<0?'-':' ',abs(frskyData.hub.gpsSpeed_bp/1000),abs(frskyData.hub.gpsSpeed_bp%1000) -#define TELEMETRY_GPS_ALT_AP (frskyData.hub.gpsAltitude_bp%100) -#define TELEMETRY_GPS_ALT_BP (frskyData.hub.gpsAltitude_bp/100) -#define TELEMETRY_GPS_ALT_LOG frskyData.hub.gpsAltitude_bp < 0 ? '-':' ',abs(frskyData.hub.gpsAltitude_bp/100),abs(frskyData.hub.gpsAltitude_bp%100) -#define TELEMETRY_ALT_BP (frskyData.hub.baroAltitude / 100) -#define TELEMETRY_ALT_AP (frskyData.hub.baroAltitude % 100) -#define TELEMETRY_ALT frskyData.hub.baroAltitude < 0 ? '-' : ' ', abs(frskyData.hub.baroAltitude / 100), abs(frskyData.hub.baroAltitude % 100) -#define TELEMETRY_ALT_FORMAT "%c%d.%02d," -#define TELEMETRY_CELLS frskyData.hub.cellsSum / 10, frskyData.hub.cellsSum % 10, TELEMETRY_CELL_VOLTAGE(0)/100, TELEMETRY_CELL_VOLTAGE(0)%100, TELEMETRY_CELL_VOLTAGE(1)/100, TELEMETRY_CELL_VOLTAGE(1)%100, TELEMETRY_CELL_VOLTAGE(2)/100, TELEMETRY_CELL_VOLTAGE(2)%100, TELEMETRY_CELL_VOLTAGE(3)/100, TELEMETRY_CELL_VOLTAGE(3)%100, TELEMETRY_CELL_VOLTAGE(4)/100, TELEMETRY_CELL_VOLTAGE(4)%100, TELEMETRY_CELL_VOLTAGE(5)/100, TELEMETRY_CELL_VOLTAGE(5)%100 -#define TELEMETRY_CELLS_FORMAT "%d.%d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d," -#define TELEMETRY_CURRENT frskyData.hub.current / 10, frskyData.hub.current % 10 -#define TELEMETRY_CURRENT_FORMAT "%d.%d," -#define TELEMETRY_VFAS frskyData.hub.vfas / 10, frskyData.hub.vfas % 10 -#define TELEMETRY_VFAS_FORMAT "%d.%d," -#define TELEMETRY_VSPEED frskyData.hub.varioSpeed < 0 ? '-' : ' ', abs(frskyData.hub.varioSpeed / 100), abs(frskyData.hub.varioSpeed % 100) -#define TELEMETRY_VSPEED_FORMAT "%c%d.%02d," +#define TELEMETRY_STREAMING() (frskyData.rssi[0].value > 0) -/* Would be great, but f_printf() doesn't take floats... -#define TELEMETRY_ALT float(frskyData.hub.baroAltitude)/100 -#define TELEMETRY_ALT_FORMAT "%.2f," -#define TELEMETRY_CELLS float(frskyData.hub.cellsSum)/10, float(frskyData.hub.cellVolts[0])/100, float(frskyData.hub.cellVolts[1])/100, float(frskyData.hub.cellVolts[2])/100, float(frskyData.hub.cellVolts[3])/100, float(frskyData.hub.cellVolts[4])/100, float(frskyData.hub.cellVolts[5])/100 -#define TELEMETRY_CELLS_FORMAT "%.1f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f," -#define TELEMETRY_CURRENT float(frskyData.hub.current)/100 -#define TELEMETRY_CURRENT_FORMAT "%.2f," -#define TELEMETRY_VFAS float(frskyData.hub.vfas)/10 -#define TELEMETRY_VFAS_FORMAT "%.1f," -#define TELEMETRY_VSPEED float(frskyData.hub.varioSpeed)/100 -#define TELEMETRY_VSPEED_FORMAT "%.2f," -*/ +#define TELEMETRY_CELL_VOLTAGE(k) frskyData.hub.cellVolts[k] +#define TELEMETRY_MIN_CELL_VOLTAGE frskyData.hub.minCellVolts -#define TELEMETRY_STREAMING() (frskyData.rssi[0].value > 0) +#define TELEMETRY_BARO_ALT_AVAILABLE() (frskyData.hub.baroAltitudeOffset) +#define TELEMETRY_BARO_ALT_UNIT (IS_IMPERIAL_ENABLE() ? LENGTH_UNIT_IMP : LENGTH_UNIT_METR) + +#define TELEMETRY_GPS_SPEED_BP frskyData.hub.gpsSpeed_bp +#define TELEMETRY_GPS_SPEED_AP frskyData.hub.gpsSpeed_ap + +#define TELEMETRY_ABSOLUTE_GPS_ALT (frskyData.hub.gpsAltitude) +#define TELEMETRY_RELATIVE_GPS_ALT (frskyData.hub.gpsAltitude + frskyData.hub.gpsAltitudeOffset) +#define TELEMETRY_RELATIVE_GPS_ALT_BP (TELEMETRY_RELATIVE_GPS_ALT / 100) + +#define TELEMETRY_RELATIVE_BARO_ALT_BP (frskyData.hub.baroAltitude / 100) +#define TELEMETRY_RELATIVE_BARO_ALT_AP (frskyData.hub.baroAltitude % 100) + +#define TELEMETRY_BARO_ALT_PREPARE() div_t baroAltitudeDivision = div(getConvertedTelemetryValue(frskyData.hub.baroAltitude, UNIT_DIST), 100) +#define TELEMETRY_BARO_ALT_FORMAT "%c%d.%02d," +#define TELEMETRY_BARO_ALT_ARGS frskyData.hub.baroAltitude < 0 ? '-' : ' ', abs(baroAltitudeDivision.quot), abs(baroAltitudeDivision.rem), +#define TELEMETRY_GPS_ALT_FORMAT "%c%d.%02d," +#define TELEMETRY_GPS_ALT_ARGS frskyData.hub.gpsAltitude < 0 ? '-' : ' ', abs(frskyData.hub.gpsAltitude / 100), abs(frskyData.hub.gpsAltitude % 100), +#define TELEMETRY_GPS_SPEED_UNIT (IS_IMPERIAL_ENABLE() ? SPEED_UNIT_IMP : SPEED_UNIT_METR) +#define TELEMETRY_GPS_SPEED_FORMAT "%d," +#define TELEMETRY_GPS_SPEED_ARGS getConvertedTelemetryValue(frskyData.hub.gpsSpeed_bp, UNIT_KTS), +#define TELEMETRY_CELLS_FORMAT "%d.%d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d," +#define TELEMETRY_CELLS_ARGS frskyData.hub.cellsSum / 10, frskyData.hub.cellsSum % 10, TELEMETRY_CELL_VOLTAGE(0)/100, TELEMETRY_CELL_VOLTAGE(0)%100, TELEMETRY_CELL_VOLTAGE(1)/100, TELEMETRY_CELL_VOLTAGE(1)%100, TELEMETRY_CELL_VOLTAGE(2)/100, TELEMETRY_CELL_VOLTAGE(2)%100, TELEMETRY_CELL_VOLTAGE(3)/100, TELEMETRY_CELL_VOLTAGE(3)%100, TELEMETRY_CELL_VOLTAGE(4)/100, TELEMETRY_CELL_VOLTAGE(4)%100, TELEMETRY_CELL_VOLTAGE(5)/100, TELEMETRY_CELL_VOLTAGE(5)%100, +#define TELEMETRY_CURRENT_FORMAT "%d.%d," +#define TELEMETRY_CURRENT_ARGS frskyData.hub.current / 10, frskyData.hub.current % 10, +#define TELEMETRY_VFAS_FORMAT "%d.%d," +#define TELEMETRY_VFAS_ARGS frskyData.hub.vfas / 10, frskyData.hub.vfas % 10, +#define TELEMETRY_VSPEED_FORMAT "%c%d.%02d," +#define TELEMETRY_VSPEED_ARGS frskyData.hub.varioSpeed < 0 ? '-' : ' ', abs(frskyData.hub.varioSpeed / 100), abs(frskyData.hub.varioSpeed % 100), #endif diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 12dff79c1..98c1066f1 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -76,7 +76,7 @@ const pm_char STR_OPEN9X[] PROGMEM = #if defined(FRSKY) || defined(CPUARM) #if defined(CPUARM) ISTR(VTELEMUNIT_IMP) - ISTR(VTELEMUNIT_NORM) + ISTR(VTELEMUNIT_METR) #else ISTR(VTELEMUNIT) #endif diff --git a/radio/src/translations.h b/radio/src/translations.h index 5154676b8..e51a262b6 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -125,8 +125,8 @@ extern const pm_char STR_OPEN9X[]; #if defined(FRSKY) || defined(CPUARM) #if defined(CPUARM) #define OFS_VTELEMUNIT_IMP (OFS_VTELEMCHNS + sizeof(TR_VTELEMCHNS)) - #define OFS_VTELEMUNIT_NORM (OFS_VTELEMUNIT_IMP + sizeof(TR_VTELEMUNIT_IMP)) - #define OFS_VALARM (OFS_VTELEMUNIT_NORM + sizeof(TR_VTELEMUNIT_NORM)) + #define OFS_VTELEMUNIT_METR (OFS_VTELEMUNIT_IMP + sizeof(TR_VTELEMUNIT_IMP)) + #define OFS_VALARM (OFS_VTELEMUNIT_METR + sizeof(TR_VTELEMUNIT_METR)) #else #define OFS_VTELEMUNIT (OFS_VTELEMCHNS + sizeof(TR_VTELEMCHNS)) #define OFS_VALARM (OFS_VTELEMUNIT + sizeof(TR_VTELEMUNIT)) @@ -220,7 +220,7 @@ extern const pm_char STR_OPEN9X[]; #if defined(FRSKY) || defined(CPUARM) #if defined(CPUARM) - #define STR_VTELEMUNIT (STR_OPEN9X + (g_eeGeneral.imperial ? OFS_VTELEMUNIT_IMP : OFS_VTELEMUNIT_NORM)) + #define STR_VTELEMUNIT (STR_OPEN9X + (g_eeGeneral.imperial ? OFS_VTELEMUNIT_IMP : OFS_VTELEMUNIT_METR)) #else #define STR_VTELEMUNIT (STR_OPEN9X + OFS_VTELEMUNIT) #endif diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 91b85620d..35a21e470 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -273,11 +273,16 @@ #endif #define TR_VTELEMCHNS "---\0""Bat\0""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Cls-""Vfs-""Cur+""Pwr+""Acc\0""Time" +#define LENGTH_UNIT_IMP "ft\0" +#define SPEED_UNIT_IMP "mph" +#define LENGTH_UNIT_METR "m\0 " +#define SPEED_UNIT_METR "kmh" + #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metr.\0""Imper.", "Metrické""Imperial") - #define LEN_VTELEMUNIT_NORM "\003" - #define TR_VTELEMUNIT_NORM "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " + #define LEN_VTELEMUNIT_METR "\003" + #define TR_VTELEMUNIT_METR "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " #define LEN_VTELEMUNIT_IMP "\003" #define TR_VTELEMUNIT_IMP "v\0 ""A\0 ""m/s""-\0 ""kts""ft\0""@\0 ""%\0 ""mA\0""mAh""W\0 " #else @@ -337,7 +342,7 @@ #define LEN_VSRCRAW "\004" #if defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""LS\0 ""RS\0 " + #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 " #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " #elif defined(EXTRA_3POS) #define TR_POTS_VSRCRAW "P1\0 ""P2\0 " @@ -371,7 +376,7 @@ #endif #if defined(PCBTARANIS) - #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26""P31""P32""P33""P34""P35""P36" #define TR_VSWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW #elif defined(CPUARM) #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW @@ -715,8 +720,6 @@ #define TR_CHECKLIST INDENT "Display Checklist" #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_UART3MODE "Serial port" -#define TR_POT1TYPE "S1 Type" -#define TR_POT2TYPE "S2 Type" #if defined(MAVLINK) #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 5cb0c795e..857d8a341 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -1,4 +1,4 @@ -/* +/* German checked 28.02.2014 kleine Änderungen * Authors (alphabetical order) * - Bertrand Songis * - Bernet Andre @@ -69,10 +69,10 @@ #define TR_TRNCHN "CH1CH2CH3CH4" #define LEN_UART3MODES "\017" -#define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Debug\0 " +#define TR_UART3MODES "AUS\0 ""S-Port Data Out\0""Debug\0 " #define LEN_POTTYPES "\017" -#define TR_POTTYPES "Pot\0 ""Multipos Switch" +#define TR_POTTYPES "Poti\0 ""Stufen-Schalter " #define LEN_DATETIME "\005" #define TR_DATETIME "DATE:""ZEIT:" @@ -84,7 +84,7 @@ #define TR_COUNTRYCODES TR("US""JP""EU", "Amerika""Japan\0 ""Europa\0") #define LEN_VTRIMINC TR("\006","\013") -#define TR_VTRIMINC TR("Expo ""ExFein""Fein ""Mittel""Grob ","Exponential""Extra Fein ""Fein ""Mittel ""Grob ") +#define TR_VTRIMINC TR("Expo ""ExFein""Fein ""Mittel""Grob ","Exponential""Extra Fein ""Fein ""Mittel ""Grob ") #define LEN_VBEEPCOUNTDOWN "\006" #define TR_VBEEPCOUNTDOWN "Kein\0 Pieps\0Stimme" @@ -148,7 +148,7 @@ #define TR_VMLTPX2 "+=""*="":=" #define LEN_VMIXTRIMS "\003" -#define TR_VMIXTRIMS "AUS""EIN""Sei""H\203e""Gas""Que" //Mixer Trim Werte +#define TR_VMIXTRIMS "AUS""EIN""Sei""Höh""Gas""Que" //Mixer Trim Werte #if defined(PCBTARANIS) #define TR_CSWTIMER "Timer" @@ -168,9 +168,9 @@ #endif #if defined(CPUARM) - #define TR_CSWEQUAL "a=x\0 " +#define TR_CSWEQUAL "a=x\0 " #else - #define TR_CSWEQUAL +#define TR_CSWEQUAL #endif #define LEN_VCSWFUNC "\005" @@ -189,7 +189,7 @@ #endif #if defined(AUDIO) - #define TR_SOUND "Spiel T\203ne" + #define TR_SOUND "Spiel Töne" #else #define TR_SOUND "Spiel\0 " #endif @@ -207,14 +207,14 @@ #define TR_PLAY_TRACK "Sag Text\0 " #endif #define TR_PLAY_BOTH "Sag Beide " - #define TR_PLAY_VALUE "Sag Wert\0 " + #define TR_PLAY_VALUE TR("Sag Wert\0 ", "Sag Wert ") #else #define TR_PLAY_TRACK "[Sag Text]" #define TR_PLAY_BOTH "[SagBeide]" #define TR_PLAY_VALUE "[Sag Wert]" #endif -#define TR_CFN_BG_MUSIC "MusikStart""MusikPause" +#define TR_CFN_BG_MUSIC "StartMusik""Stop Musik" #if defined(SDCARD) #define TR_SDCLOGS "SD Aufz.\0 " @@ -223,9 +223,9 @@ #endif #ifdef GVARS - #define TR_ADJUST_GVAR "\200ndere \0 " + #define TR_ADJUST_GVAR "Ändere \0 " #else - #define TR_ADJUST_GVAR "[AdjustGV]" + #define TR_ADJUST_GVAR "[AdjustGV]" #endif #ifdef DEBUG @@ -234,10 +234,12 @@ #define TR_CFN_TEST #endif +#define TR_CFN_RESERVE "[Reserve]\0" + #define TR_VFSWFUNC "Sicher\0 ""Lehrer \0 ""Inst. Trim""Rücksetz.\0""Setze \0 " TR_ADJUST_GVAR "Lautstr.\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_CFN_TEST #if defined(CPUARM) - #define TR_VFSWFUNC "Sicher\0 ""Lehrer \0 ""Inst. Trim""R\205cksetz.\0""Set \0 " TR_ADJUST_GVAR "Lautst\201rke" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_CFN_TEST + #define TR_VFSWFUNC "Sicher\0 ""Lehrer \0 ""Inst. Trim""Rücksetz.\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_CFN_TEST #elif defined(PCBGRUVIN9X) - #define TR_VFSWFUNC "Sicher\0 ""Lehrer \0 ""Inst. Trim""R\205cksetz.\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_CFN_TEST + #define TR_VFSWFUNC "Sicher\0 ""Lehrer \0 ""Inst. Trim""Rücksetz.\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC "LCD Licht\0" TR_CFN_TEST #else #define TR_VFSWFUNC "Sicher\0 ""Lehrer \0 ""Inst. Trim""R\205cksetz.\0" TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC "LCD Licht\0" TR_CFN_TEST #endif @@ -249,9 +251,9 @@ #else #define TR_FSW_RESET_TELEM #endif - + #define TR_FSW_RESET_ROTENC TR("DGa\0""DGb\0", "DrehGb A\0""DrehGb B\0") #if ROTARY_ENCODERS == 2 - #define TR_FSW_RESET_ROTENC TR("REa\0""REb\0", "RotEnc A\0""RotEnc B\0") + #define TR_FSW_RESET_ROTENC TR("D.G.", "DrehGb\0 ") #elif ROTARY_ENCODERS == 1 #define TR_FSW_RESET_ROTENC TR("R.E.", "RotEnc\0 ") #else @@ -438,10 +440,10 @@ #define TR_BITMAP "Modell Bild" #define TR_TIMER TR("Stoppuhr","Stoppuhr ") #define TR_ELIMITS TR("Erw.Limit","Erweit. Limits") -#define TR_ETRIMS TR("Erw.Trims","Erweit. Trimmung") -#define TR_TRIMINC TR("Trim Schr.","Trimm Schritte") -#define TR_TTRACE TR("Gasquelle", INDENT "Gas Quelle") -#define TR_TTRIM TR("Gastrim", INDENT "Gas Trimmung") +#define TR_TTRACE TR("Gasquelle","Gas Verfolgung") +#define TR_TTRIM TR("Gastrim","Gas Trimmung") +#define TR_TTRACE TR("Gasquelle","Gas Quelle") +#define TR_TTRIM TR("Gastrim","Gas Trimmung") #define TR_BEEPCTR TR("Mitt.Piep","Mittelst. Pieps") #define TR_PROTO TR(INDENT"Proto.",INDENT"Protokoll") #define TR_PPMFRAME "PPM Einst." @@ -504,19 +506,18 @@ #define TR_MEMORYWARNING INDENT"Speicher voll" #define TR_ALARMWARNING INDENT"Ton aus" #define TR_RENAVIG "Drehgeb. Navig." -#define TR_THROTTLE_LABEL "Gas" -#define TR_THROTTLEREVERSE TR("Gas invers", INDENT "Vollgas hinten?") //Änderung wg TH9x, Taranis +#define TR_THROTTLEREVERSE TR("Gas invers", "Vollgas hinten?") //Änderung wg TH9x, Taranis #define TR_MINUTEBEEP TR(INDENT"Minute",INDENT"Jede Minute") #define TR_BEEPCOUNTDOWN INDENT"Countdown" #define TR_PERSISTENT TR(INDENT"M-Zeit",INDENT"Modell Zeit") #define TR_BACKLIGHT_LABEL "LCD Licht an" #define TR_BLDELAY INDENT"Dauer" #define TR_BLONBRIGHTNESS INDENT"An Helligkeit" -#define TR_BLOFFBRIGHTNESS INDENT"Aus Helligkeit" -#define TR_SPLASHSCREEN "Startbild" -#define TR_THROTTLEWARNING TR("Gas Alarm", INDENT "Gas Alarm") -#define TR_SWITCHWARNING TR("Sch. Alarm", INDENT "Schalter Alarm") -#define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning") +#define TR_THROTTLEWARNING "Gas Alarm" +#define TR_SWITCHWARNING TR("Sch. Alarm","Schalter Alarm") +#define TR_POTWARNING TR("Pot Warn.","Poti Warnung") +#define TR_SWITCHWARNING TR("Sch. Alarm","Schalter Alarm") +#define TR_POTWARNING TR("Pot Warn.","Pot Warning") #define TR_TIMEZONE TR("Zeitzone","GPS Zeit Zone") #define TR_RXCHANNELORD TR("Kanalanordnung","Kanalvoreinstellung") #define TR_SLAVE "Sch\205ler PPM1-8 als Ausgang" @@ -711,8 +712,7 @@ #define TR_LOWALARM INDENT "Low Alarm" #define TR_CRITICALALARM INDENT "Kritisch Alarm" #define TR_PERSISTENT_MAH INDENT "Store mAh" -#define TR_PREFLIGHT "Preflight Checks" -#define TR_CHECKLIST INDENT "Display Checklist" +#define TR_CHECKLIST "Display Checklist" #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_UART3MODE "Serial port" #define TR_POT1TYPE "S1 Type" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index d361be05b..9f8ea38aa 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -273,11 +273,16 @@ #endif #define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Cls-""Vfs-""Cur+""Pwr+""Acc\0""Hora" +#define LENGTH_UNIT_IMP "ft\0" +#define SPEED_UNIT_IMP "mph" +#define LENGTH_UNIT_METR "m\0 " +#define SPEED_UNIT_METR "kmh" + #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") - #define LEN_VTELEMUNIT_NORM "\003" - #define TR_VTELEMUNIT_NORM "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " + #define LEN_VTELEMUNIT_METR "\003" + #define TR_VTELEMUNIT_METR "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " #define LEN_VTELEMUNIT_IMP "\003" #define TR_VTELEMUNIT_IMP "v\0 ""A\0 ""m/s""-\0 ""kts""ft\0""@\0 ""%\0 ""mA\0""mAh""W\0 " #else @@ -337,7 +342,7 @@ #define LEN_VSRCRAW "\004" #if defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""LS\0 ""RS\0 " + #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 " #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " #elif defined(EXTRA_3POS) #define TR_POTS_VSRCRAW "P1\0 ""P2\0 " @@ -371,7 +376,7 @@ #endif #if defined(PCBTARANIS) - #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26""P31""P32""P33""P34""P35""P36" #define TR_VSWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW #elif defined(CPUARM) #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW @@ -715,8 +720,6 @@ #define TR_CHECKLIST INDENT "Display Checklist" #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_UART3MODE "Serial port" -#define TR_POT1TYPE "S1 Type" -#define TR_POT2TYPE "S2 Type" #if defined(MAVLINK) #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index ced15354b..096247a56 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -273,11 +273,16 @@ #endif #define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Cls-""Vfs-""Cel-""Cls-""Vfs-""Cur+""Pwr+""Acc\0""Time" +#define LENGTH_UNIT_IMP "ft\0" +#define SPEED_UNIT_IMP "mph" +#define LENGTH_UNIT_METR "m\0 " +#define SPEED_UNIT_METR "kmh" + #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") - #define LEN_VTELEMUNIT_NORM "\003" - #define TR_VTELEMUNIT_NORM "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " + #define LEN_VTELEMUNIT_METR "\003" + #define TR_VTELEMUNIT_METR "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " #define LEN_VTELEMUNIT_IMP "\003" #define TR_VTELEMUNIT_IMP "v\0 ""A\0 ""m/s""-\0 ""kts""ft\0""@\0 ""%\0 ""mA\0""mAh""W\0 " #else @@ -337,7 +342,7 @@ #define LEN_VSRCRAW "\004" #if defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""LS\0 ""RS\0 " + #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 " #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " #elif defined(EXTRA_3POS) #define TR_POTS_VSRCRAW "P1\0 ""P2\0 " @@ -371,7 +376,7 @@ #endif #if defined(PCBTARANIS) - #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26""P31""P32""P33""P34""P35""P36" #define TR_VSWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW #elif defined(CPUARM) #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW @@ -715,8 +720,6 @@ #define TR_CHECKLIST INDENT "Display Checklist" #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_UART3MODE "Serial port" -#define TR_POT1TYPE "S1 Type" -#define TR_POT2TYPE "S2 Type" #if defined(MAVLINK) #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 6bbf97318..c26d95018 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -1,5 +1,6 @@ /* * Authors (alphabetical order) + * - Andre Bernet * - Bertrand Songis * - Bernet Andre * - Kjell Kernen diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 555ce7bb9..f98270685 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -273,11 +273,16 @@ #endif #define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Carb""T1\0 ""T2\0 ""Vel\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsm""Powr""AccX""AccY""AccZ""Dir\0""VelV""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Vel+""Dst+""Cel-""Cls-""Vfs-""Cur+""Pwr+""Acc\0""Time" +#define LENGTH_UNIT_IMP "ft\0" +#define SPEED_UNIT_IMP "mph" +#define LENGTH_UNIT_METR "m\0 " +#define SPEED_UNIT_METR "kmh" + #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\011") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metriche\0""Imperiali") - #define LEN_VTELEMUNIT_NORM "\003" - #define TR_VTELEMUNIT_NORM "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " + #define LEN_VTELEMUNIT_METR "\003" + #define TR_VTELEMUNIT_METR "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " #define LEN_VTELEMUNIT_IMP "\003" #define TR_VTELEMUNIT_IMP "v\0 ""A\0 ""m/s""-\0 ""kts""ft\0""@\0 ""%\0 ""mA\0""mAh""W\0 " #else @@ -337,7 +342,7 @@ #define LEN_VSRCRAW "\004" #if defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""LS\0 ""RS\0 " + #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 " #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " #elif defined(EXTRA_3POS) #define TR_POTS_VSRCRAW "P1\0 ""P2\0 " @@ -371,7 +376,7 @@ #endif #if defined(PCBTARANIS) - #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26""P31""P32""P33""P34""P35""P36" #define TR_VSWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW #elif defined(CPUARM) #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW @@ -715,8 +720,6 @@ #define TR_CHECKLIST INDENT "Display Checklist" #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_UART3MODE "Serial port" -#define TR_POT1TYPE "S1 Type" -#define TR_POT2TYPE "S2 Type" #if defined(MAVLINK) #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index e81b30c8a..b8366499a 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -273,11 +273,16 @@ #endif #define TR_VTELEMCHNS "---\0""Bat\0""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Wys\0""Rpm\0""Pali""T1\0 ""T2\0 ""Spd\0""Dyst""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Moc\0""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Wys-""Wys+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Cls-""Vfs-""Cur+""Moc+""Acc\0""Time" +#define LENGTH_UNIT_IMP "ft\0" +#define SPEED_UNIT_IMP "mph" +#define LENGTH_UNIT_METR "m\0 " +#define SPEED_UNIT_METR "kmh" + #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\012") #define TR_VUNITSSYSTEM TR("Metr.\0""Imper.", "Metryczne\0""Imperialne") - #define LEN_VTELEMUNIT_NORM "\003" - #define TR_VTELEMUNIT_NORM "V\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " + #define LEN_VTELEMUNIT_METR "\003" + #define TR_VTELEMUNIT_METR "V\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " #define LEN_VTELEMUNIT_IMP "\003" #define TR_VTELEMUNIT_IMP "V\0 ""A\0 ""m/s""-\0 ""kts""ft\0""@\0 ""%\0 ""mA\0""mAh""W\0 " #else @@ -337,7 +342,7 @@ #define LEN_VSRCRAW "\004" #if defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""LS\0 ""RS\0 " + #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 " #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " #elif defined(EXTRA_3POS) #define TR_POTS_VSRCRAW "P1\0 ""P2\0 " @@ -371,7 +376,7 @@ #endif #if defined(PCBTARANIS) - #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26""P31""P32""P33""P34""P35""P36" #define TR_VSWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW #elif defined(CPUARM) #define TR_VSWITCHES TR_9X_3POS_SWITCHES "GAZ""SK""SW""LOL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW @@ -715,8 +720,6 @@ #define TR_CHECKLIST INDENT "Display Checklist" #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_UART3MODE "Port szreg." -#define TR_POT1TYPE "Typ S1" -#define TR_POT2TYPE "Typ S2" #if defined(MAVLINK) #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Maks RSSI" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 6b6b9c89f..fe01c626b 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -273,11 +273,16 @@ #endif #define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VVel""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Vel+""Dst+""Cel-""Cls-""Vfs-""Cur+""Pwr+""Acc\0""Hora" +#define LENGTH_UNIT_IMP "ft\0" +#define SPEED_UNIT_IMP "mph" +#define LENGTH_UNIT_METR "m\0 " +#define SPEED_UNIT_METR "kmh" + #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") - #define LEN_VTELEMUNIT_NORM "\003" - #define TR_VTELEMUNIT_NORM "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " + #define LEN_VTELEMUNIT_METR "\003" + #define TR_VTELEMUNIT_METR "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " #define LEN_VTELEMUNIT_IMP "\003" #define TR_VTELEMUNIT_IMP "v\0 ""A\0 ""m/s""-\0 ""kts""ft\0""@\0 ""%\0 ""mA\0""mAh""W\0 " #else @@ -337,7 +342,7 @@ #define LEN_VSRCRAW "\004" #if defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""LS\0 ""RS\0 " + #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 " #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " #elif defined(EXTRA_3POS) #define TR_POTS_VSRCRAW "P1\0 ""P2\0 " @@ -371,7 +376,7 @@ #endif #if defined(PCBTARANIS) - #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26""P31""P32""P33""P34""P35""P36" #define TR_VSWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW #elif defined(CPUARM) #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW @@ -715,8 +720,6 @@ #define TR_CHECKLIST INDENT "Display Checklist" #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_UART3MODE "Serial port" -#define TR_POT1TYPE "S1 Type" -#define TR_POT2TYPE "S2 Type" #if defined(MAVLINK) #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 3d2e0df7b..b9cae485e 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -273,11 +273,16 @@ #endif #define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Höjd""Varv""Tank""T1\0 ""T2\0 ""Fart""Avst""GHjd""Batt""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VFrt""ASpd""dTE\0""A1-\0""A2-\0""Hjd-""Hjd+""Rpm+""T1+\0""T2+\0""Frt+""Avs+""Cur+""Pwr+""Acc\0""Tid\0" +#define LENGTH_UNIT_IMP "ft\0" +#define SPEED_UNIT_IMP "mph" +#define LENGTH_UNIT_METR "m\0 " +#define SPEED_UNIT_METR "kmh" + #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metri.""Imper.", "Metriska""Imperial") - #define LEN_VTELEMUNIT_NORM "\003" - #define TR_VTELEMUNIT_NORM "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " + #define LEN_VTELEMUNIT_METR "\003" + #define TR_VTELEMUNIT_METR "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " #define LEN_VTELEMUNIT_IMP "\003" #define TR_VTELEMUNIT_IMP "v\0 ""A\0 ""m/s""-\0 ""kts""ft\0""@\0 ""%\0 ""mA\0""mAh""W\0 " #else @@ -337,7 +342,7 @@ #define LEN_VSRCRAW "\004" #if defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""LS\0 ""RS\0 " + #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 " #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " #elif defined(EXTRA_3POS) #define TR_POTS_VSRCRAW "P1\0 ""P2\0 " @@ -371,7 +376,7 @@ #endif #if defined(PCBTARANIS) - #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26""P31""P32""P33""P34""P35""P36" #define TR_VSWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW #elif defined(CPUARM) #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW @@ -715,8 +720,6 @@ #define TR_CHECKLIST INDENT "Display Checklist" #define TR_FAS_OFFSET TR(INDENT "FAS Ofs", INDENT "FAS Offset") #define TR_UART3MODE "Serieporten" -#define TR_POT1TYPE "S1-ratten" -#define TR_POT2TYPE "S2-ratten" #if defined(MAVLINK) #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" diff --git a/radio/src/translations/tts_cz.cpp b/radio/src/translations/tts_cz.cpp index c2bbe6037..fb45783ab 100644 --- a/radio/src/translations/tts_cz.cpp +++ b/radio/src/translations/tts_cz.cpp @@ -41,9 +41,9 @@ enum CzechPrompts { CZ_PROMPT_AMPS = CZ_PROMPT_UNITS_BASE+(UNIT_AMPS*4), CZ_PROMPT_METERS_PER_SECOND = CZ_PROMPT_UNITS_BASE+(UNIT_METERS_PER_SECOND*4), CZ_PROMPT_SPARE1 = CZ_PROMPT_UNITS_BASE+(UNIT_RAW*4), - CZ_PROMPT_KMH = CZ_PROMPT_UNITS_BASE+(UNIT_KMH*4), - CZ_PROMPT_METERS = CZ_PROMPT_UNITS_BASE+(UNIT_METERS*4), - CZ_PROMPT_DEGREES = CZ_PROMPT_UNITS_BASE+(UNIT_DEGREES*4), + CZ_PROMPT_KMH = CZ_PROMPT_UNITS_BASE+(UNIT_SPEED*4), + CZ_PROMPT_METERS = CZ_PROMPT_UNITS_BASE+(UNIT_DIST*4), + CZ_PROMPT_DEGREES = CZ_PROMPT_UNITS_BASE+(UNIT_TEMPERATURE*4), CZ_PROMPT_PERCENT = CZ_PROMPT_UNITS_BASE+(UNIT_PERCENT*4), CZ_PROMPT_MILLIAMPS = CZ_PROMPT_UNITS_BASE+(UNIT_MILLIAMPS*4), CZ_PROMPT_MAH = CZ_PROMPT_UNITS_BASE+(UNIT_MAH*4), @@ -120,12 +120,15 @@ I18N_PLAY_FUNCTION(cz, playNumber, getvalue_t number, uint8_t unit, uint8_t att) unit--; convertUnit(number, unit); if (IS_IMPERIAL_ENABLE()) { - if (unit == UNIT_METERS) { + if (unit == UNIT_DIST) { unit = UNIT_FEET; } + if (unit == UNIT_SPEED) { + unit = UNIT_KTS; + } } #if defined(CPUARM) - if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_METERS && number >= 100))) { + if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_DIST && number >= 100))) { number /= 10; att -= PREC1; } diff --git a/radio/src/translations/tts_de.cpp b/radio/src/translations/tts_de.cpp index 1afadbf4e..af09eeb53 100644 --- a/radio/src/translations/tts_de.cpp +++ b/radio/src/translations/tts_de.cpp @@ -43,9 +43,9 @@ enum GermanPrompts { DE_PROMPT_AMPS = DE_PROMPT_UNITS_BASE+UNIT_AMPS, DE_PROMPT_METERS_PER_SECOND = DE_PROMPT_UNITS_BASE+UNIT_METERS_PER_SECOND, DE_PROMPT_SPARE1 = DE_PROMPT_UNITS_BASE+UNIT_RAW, - DE_PROMPT_KMH = DE_PROMPT_UNITS_BASE+UNIT_KMH, - DE_PROMPT_METERS = DE_PROMPT_UNITS_BASE+UNIT_METERS, - DE_PROMPT_DEGREES = DE_PROMPT_UNITS_BASE+UNIT_DEGREES, + DE_PROMPT_KMH = DE_PROMPT_UNITS_BASE+UNIT_SPEED, + DE_PROMPT_METERS = DE_PROMPT_UNITS_BASE+UNIT_DIST, + DE_PROMPT_DEGREES = DE_PROMPT_UNITS_BASE+UNIT_TEMPERATURE, DE_PROMPT_PERCENT = DE_PROMPT_UNITS_BASE+UNIT_PERCENT, DE_PROMPT_MILLIAMPS = DE_PROMPT_UNITS_BASE+UNIT_MILLIAMPS, DE_PROMPT_MAH = DE_PROMPT_UNITS_BASE+UNIT_MAH, @@ -110,12 +110,15 @@ I18N_PLAY_FUNCTION(de, playNumber, getvalue_t number, uint8_t unit, uint8_t att) unit--; convertUnit(number, unit); if (IS_IMPERIAL_ENABLE()) { - if (unit == UNIT_METERS) { + if (unit == UNIT_DIST) { unit = UNIT_FEET; } + if (unit == UNIT_SPEED) { + unit = UNIT_KTS; + } } #if defined(CPUARM) - if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_METERS && number >= 100))) { + if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_DIST && number >= 100))) { number /= 10; att -= PREC1; } diff --git a/radio/src/translations/tts_en.cpp b/radio/src/translations/tts_en.cpp index 1f874f305..c7cfcb79f 100644 --- a/radio/src/translations/tts_en.cpp +++ b/radio/src/translations/tts_en.cpp @@ -50,16 +50,16 @@ enum EnglishPrompts { EN_PROMPT_AMPS = EN_PROMPT_UNITS_BASE+(UNIT_AMPS*2), EN_PROMPT_METERS_PER_SECOND = EN_PROMPT_UNITS_BASE+(UNIT_METERS_PER_SECOND*2), EN_PROMPT_SPARE1 = EN_PROMPT_UNITS_BASE+(UNIT_RAW*2), - EN_PROMPT_KMH = EN_PROMPT_UNITS_BASE+(UNIT_KMH*2), - EN_PROMPT_METERS = EN_PROMPT_UNITS_BASE+(UNIT_METERS*2), - EN_PROMPT_DEGREES = EN_PROMPT_UNITS_BASE+(UNIT_DEGREES*2), + EN_PROMPT_KMH = EN_PROMPT_UNITS_BASE+(UNIT_SPEED*2), + EN_PROMPT_METERS = EN_PROMPT_UNITS_BASE+(UNIT_DIST*2), + EN_PROMPT_DEGREES = EN_PROMPT_UNITS_BASE+(UNIT_TEMPERATURE*2), EN_PROMPT_PERCENT = EN_PROMPT_UNITS_BASE+(UNIT_PERCENT*2), EN_PROMPT_MILLIAMPS = EN_PROMPT_UNITS_BASE+(UNIT_MILLIAMPS*2), EN_PROMPT_MAH = EN_PROMPT_UNITS_BASE+(UNIT_MAH*2), EN_PROMPT_WATTS = EN_PROMPT_UNITS_BASE+(UNIT_WATTS*2), EN_PROMPT_DB = EN_PROMPT_UNITS_BASE+(UNIT_DBM*2), EN_PROMPT_FEET = EN_PROMPT_UNITS_BASE+(UNIT_FEET*2), - EN_PROMPT_KTS = EN_PROMPT_UNITS_BASE+(UNIT_KTS*2), + EN_PROMPT_MPH = EN_PROMPT_UNITS_BASE+(UNIT_KTS*2), EN_PROMPT_HOURS = EN_PROMPT_UNITS_BASE+(UNIT_HOURS*2), EN_PROMPT_MINUTES = EN_PROMPT_UNITS_BASE+(UNIT_MINUTES*2), EN_PROMPT_SECONDS = EN_PROMPT_UNITS_BASE+(UNIT_SECONDS*2), @@ -97,12 +97,15 @@ I18N_PLAY_FUNCTION(en, playNumber, getvalue_t number, uint8_t unit, uint8_t att) unit--; convertUnit(number, unit); if (IS_IMPERIAL_ENABLE()) { - if (unit == UNIT_METERS) { + if (unit == UNIT_DIST) { unit = UNIT_FEET; } + if (unit == UNIT_SPEED) { + unit = UNIT_KTS; + } } #if defined(CPUARM) - if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_METERS && number >= 100))) { + if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_SPEED && number >= 100))) { number /= 10; att -= PREC1; } diff --git a/radio/src/translations/tts_es.cpp b/radio/src/translations/tts_es.cpp index 928abf46b..9a9b7ca74 100644 --- a/radio/src/translations/tts_es.cpp +++ b/radio/src/translations/tts_es.cpp @@ -67,9 +67,9 @@ enum SpanishPrompts { ES_PROMPT_AMPS = ES_PROMPT_UNITS_BASE+UNIT_AMPS, ES_PROMPT_METERS_PER_SECOND = ES_PROMPT_UNITS_BASE+UNIT_METERS_PER_SECOND, ES_PROMPT_SPARE1 = ES_PROMPT_UNITS_BASE+UNIT_RAW, - ES_PROMPT_KMH = ES_PROMPT_UNITS_BASE+UNIT_KMH, - ES_PROMPT_METERS = ES_PROMPT_UNITS_BASE+UNIT_METERS, - ES_PROMPT_DEGREES = ES_PROMPT_UNITS_BASE+UNIT_DEGREES, + ES_PROMPT_KMH = ES_PROMPT_UNITS_BASE+UNIT_SPEED, + ES_PROMPT_METERS = ES_PROMPT_UNITS_BASE+UNIT_DIST, + ES_PROMPT_DEGREES = ES_PROMPT_UNITS_BASE+UNIT_TEMPERATURE, ES_PROMPT_PERCENT = ES_PROMPT_UNITS_BASE+UNIT_PERCENT, ES_PROMPT_MILLIAMPS = ES_PROMPT_UNITS_BASE+UNIT_MILLIAMPS, ES_PROMPT_MAH = ES_PROMPT_UNITS_BASE+UNIT_MAH, @@ -134,12 +134,15 @@ I18N_PLAY_FUNCTION(es, playNumber, getvalue_t number, uint8_t unit, uint8_t att) unit--; convertUnit(number, unit); if (IS_IMPERIAL_ENABLE()) { - if (unit == UNIT_METERS) { + if (unit == UNIT_DIST) { unit = UNIT_FEET; } + if (unit == UNIT_SPEED) { + unit = UNIT_KTS; + } } #if defined(CPUARM) - if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_METERS && number >= 100))) { + if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_DIST && number >= 100))) { number /= 10; att -= PREC1; } diff --git a/radio/src/translations/tts_fr.cpp b/radio/src/translations/tts_fr.cpp index a377be4b6..a5eca4723 100644 --- a/radio/src/translations/tts_fr.cpp +++ b/radio/src/translations/tts_fr.cpp @@ -48,9 +48,9 @@ enum FrenchPrompts { FR_PROMPT_AMPS = FR_PROMPT_UNITS_BASE+UNIT_AMPS, FR_PROMPT_METERS_PER_SECOND = FR_PROMPT_UNITS_BASE+UNIT_METERS_PER_SECOND, FR_PROMPT_SPARE1 = FR_PROMPT_UNITS_BASE+UNIT_RAW, - FR_PROMPT_KMH = FR_PROMPT_UNITS_BASE+UNIT_KMH, - FR_PROMPT_METERS = FR_PROMPT_UNITS_BASE+UNIT_METERS, - FR_PROMPT_DEGREES = FR_PROMPT_UNITS_BASE+UNIT_DEGREES, + FR_PROMPT_KMH = FR_PROMPT_UNITS_BASE+UNIT_SPEED, + FR_PROMPT_METERS = FR_PROMPT_UNITS_BASE+UNIT_DIST, + FR_PROMPT_DEGREES = FR_PROMPT_UNITS_BASE+UNIT_TEMPERATURE, FR_PROMPT_PERCENT = FR_PROMPT_UNITS_BASE+UNIT_PERCENT, FR_PROMPT_MILLIAMPS = FR_PROMPT_UNITS_BASE+UNIT_MILLIAMPS, FR_PROMPT_MAH = FR_PROMPT_UNITS_BASE+UNIT_MAH, @@ -116,12 +116,15 @@ I18N_PLAY_FUNCTION(fr, playNumber, getvalue_t number, uint8_t unit, uint8_t att) unit--; convertUnit(number, unit); if (IS_IMPERIAL_ENABLE()) { - if (unit == UNIT_METERS) { + if (unit == UNIT_DIST) { unit = UNIT_FEET; } + if (unit == UNIT_SPEED) { + unit = UNIT_KTS; + } } #if defined(CPUARM) - if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_METERS && number >= 100))) { + if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_DIST && number >= 100))) { number /= 10; att -= PREC1; } diff --git a/radio/src/translations/tts_it.cpp b/radio/src/translations/tts_it.cpp index 77dd000f3..080b6ae10 100644 --- a/radio/src/translations/tts_it.cpp +++ b/radio/src/translations/tts_it.cpp @@ -44,9 +44,9 @@ enum ItalianPrompts { IT_PROMPT_AMPS = IT_PROMPT_UNITS_BASE+UNIT_AMPS, IT_PROMPT_METERS_PER_SECOND = IT_PROMPT_UNITS_BASE+UNIT_METERS_PER_SECOND, IT_PROMPT_SPARE1 = IT_PROMPT_UNITS_BASE+UNIT_RAW, - IT_PROMPT_KMH = IT_PROMPT_UNITS_BASE+UNIT_KMH, - IT_PROMPT_METERS = IT_PROMPT_UNITS_BASE+UNIT_METERS, - IT_PROMPT_DEGREES = IT_PROMPT_UNITS_BASE+UNIT_DEGREES, + IT_PROMPT_KMH = IT_PROMPT_UNITS_BASE+UNIT_SPEED, + IT_PROMPT_METERS = IT_PROMPT_UNITS_BASE+UNIT_DIST, + IT_PROMPT_DEGREES = IT_PROMPT_UNITS_BASE+UNIT_TEMPERATURE, IT_PROMPT_PERCENT = IT_PROMPT_UNITS_BASE+UNIT_PERCENT, IT_PROMPT_MILLIAMPS = IT_PROMPT_UNITS_BASE+UNIT_MILLIAMPS, IT_PROMPT_MAH = IT_PROMPT_UNITS_BASE+UNIT_MAH, @@ -106,12 +106,15 @@ I18N_PLAY_FUNCTION(it, playNumber, getvalue_t number, uint8_t unit, uint8_t att) unit--; convertUnit(number, unit); if (IS_IMPERIAL_ENABLE()) { - if (unit == UNIT_METERS) { + if (unit == UNIT_DIST) { unit = UNIT_FEET; } + if (unit == UNIT_SPEED) { + unit = UNIT_KTS; + } } #if defined(CPUARM) - if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_METERS && number >= 100))) { + if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_DIST && number >= 100))) { number /= 10; att -= PREC1; } diff --git a/radio/src/translations/tts_pl.cpp b/radio/src/translations/tts_pl.cpp index 5a6ec0ebf..3772c6054 100644 --- a/radio/src/translations/tts_pl.cpp +++ b/radio/src/translations/tts_pl.cpp @@ -42,9 +42,9 @@ enum PolishPrompts { PL_PROMPT_AMPS = PL_PROMPT_UNITS_BASE+(UNIT_AMPS*4), PL_PROMPT_METERS_PER_SECOND = PL_PROMPT_UNITS_BASE+(UNIT_METERS_PER_SECOND*4), PL_PROMPT_SPARE1 = PL_PROMPT_UNITS_BASE+(UNIT_RAW*4), - PL_PROMPT_KMH = PL_PROMPT_UNITS_BASE+(UNIT_KMH*4), - PL_PROMPT_METERS = PL_PROMPT_UNITS_BASE+(UNIT_METERS*4), - PL_PROMPT_DEGREES = PL_PROMPT_UNITS_BASE+(UNIT_DEGREES*4), + PL_PROMPT_KMH = PL_PROMPT_UNITS_BASE+(UNIT_SPEED*4), + PL_PROMPT_METERS = PL_PROMPT_UNITS_BASE+(UNIT_DIST*4), + PL_PROMPT_DEGREES = PL_PROMPT_UNITS_BASE+(UNIT_TEMPERATURE*4), PL_PROMPT_PERCENT = PL_PROMPT_UNITS_BASE+(UNIT_PERCENT*4), PL_PROMPT_MILLIAMPS = PL_PROMPT_UNITS_BASE+(UNIT_MILLIAMPS*4), PL_PROMPT_MAH = PL_PROMPT_UNITS_BASE+(UNIT_MAH*4), @@ -129,12 +129,15 @@ I18N_PLAY_FUNCTION(pl, playNumber, getvalue_t number, uint8_t unit, uint8_t att) unit--; convertUnit(number, unit); if (IS_IMPERIAL_ENABLE()) { - if (unit == UNIT_METERS) { + if (unit == UNIT_DIST) { unit = UNIT_FEET; } + if (unit == UNIT_SPEED) { + unit = UNIT_KTS; + } } #if defined(CPUARM) - if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_METERS && number >= 100))) { + if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_DIST && number >= 100))) { number /= 10; att -= PREC1; } diff --git a/radio/src/translations/tts_pt.cpp b/radio/src/translations/tts_pt.cpp index affb4e17a..0744cefd3 100644 --- a/radio/src/translations/tts_pt.cpp +++ b/radio/src/translations/tts_pt.cpp @@ -67,9 +67,9 @@ enum PortuguesePrompts { PT_PROMPT_AMPS = PT_PROMPT_UNITS_BASE+UNIT_AMPS, PT_PROMPT_METERS_PER_SECOND = PT_PROMPT_UNITS_BASE+UNIT_METERS_PER_SECOND, PT_PROMPT_SPARE1 = PT_PROMPT_UNITS_BASE+UNIT_RAW, - PT_PROMPT_KMH = PT_PROMPT_UNITS_BASE+UNIT_KMH, - PT_PROMPT_METERS = PT_PROMPT_UNITS_BASE+UNIT_METERS, - PT_PROMPT_DEGREES = PT_PROMPT_UNITS_BASE+UNIT_DEGREES, + PT_PROMPT_KMH = PT_PROMPT_UNITS_BASE+UNIT_SPEED, + PT_PROMPT_METERS = PT_PROMPT_UNITS_BASE+UNIT_DIST, + PT_PROMPT_DEGREES = PT_PROMPT_UNITS_BASE+UNIT_TEMPERATURE, PT_PROMPT_PERCENT = PT_PROMPT_UNITS_BASE+UNIT_PERCENT, PT_PROMPT_MILLIAMPS = PT_PROMPT_UNITS_BASE+UNIT_MILLIAMPS, PT_PROMPT_MAH = PT_PROMPT_UNITS_BASE+UNIT_MAH, @@ -119,12 +119,15 @@ I18N_PLAY_FUNCTION(pt, playNumber, getvalue_t number, uint8_t unit, uint8_t att) unit--; convertUnit(number, unit); if (IS_IMPERIAL_ENABLE()) { - if (unit == UNIT_METERS) { + if (unit == UNIT_DIST) { unit = UNIT_FEET; } + if (unit == UNIT_SPEED) { + unit = UNIT_KTS; + } } #if defined(CPUARM) - if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_METERS && number >= 100))) { + if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_DIST && number >= 100))) { number /= 10; att -= PREC1; } diff --git a/radio/src/translations/tts_se.cpp b/radio/src/translations/tts_se.cpp index 97e81cb05..c4c10c548 100644 --- a/radio/src/translations/tts_se.cpp +++ b/radio/src/translations/tts_se.cpp @@ -51,9 +51,9 @@ enum SwedishPrompts { SE_PROMPT_AMPS = SE_PROMPT_UNITS_BASE+(UNIT_AMPS*2), SE_PROMPT_METERS_PER_SECOND = SE_PROMPT_UNITS_BASE+(UNIT_METERS_PER_SECOND*2), SE_PROMPT_SPARE1 = SE_PROMPT_UNITS_BASE+(UNIT_RAW*2), - SE_PROMPT_KMH = SE_PROMPT_UNITS_BASE+(UNIT_KMH*2), - SE_PROMPT_METERS = SE_PROMPT_UNITS_BASE+(UNIT_METERS*2), - SE_PROMPT_DEGREES = SE_PROMPT_UNITS_BASE+(UNIT_DEGREES*2), + SE_PROMPT_KMH = SE_PROMPT_UNITS_BASE+(UNIT_SPEED*2), + SE_PROMPT_METERS = SE_PROMPT_UNITS_BASE+(UNIT_DIST*2), + SE_PROMPT_DEGREES = SE_PROMPT_UNITS_BASE+(UNIT_TEMPERATURE*2), SE_PROMPT_PERCENT = SE_PROMPT_UNITS_BASE+(UNIT_PERCENT*2), SE_PROMPT_MILLIAMPS = SE_PROMPT_UNITS_BASE+(UNIT_MILLIAMPS*2), SE_PROMPT_MAH = SE_PROMPT_UNITS_BASE+(UNIT_MAH*2), @@ -84,12 +84,15 @@ I18N_PLAY_FUNCTION(se, playNumber, getvalue_t number, uint8_t unit, uint8_t att) unit--; convertUnit(number, unit); if (IS_IMPERIAL_ENABLE()) { - if (unit == UNIT_METERS) { + if (unit == UNIT_DIST) { unit = UNIT_FEET; } + if (unit == UNIT_SPEED) { + unit = UNIT_KTS; + } } #if defined(CPUARM) - if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_METERS && number >= 100))) { + if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_DIST && number >= 100))) { number /= 10; att -= PREC1; } diff --git a/radio/src/translations/tts_sk.cpp b/radio/src/translations/tts_sk.cpp index a2935a7ea..1e10bddef 100644 --- a/radio/src/translations/tts_sk.cpp +++ b/radio/src/translations/tts_sk.cpp @@ -56,9 +56,9 @@ enum SlovakPrompts { SK_PROMPT_AMPS = SK_PROMPT_UNITS_BASE+(UNIT_AMPS*4), SK_PROMPT_METERS_PER_SECOND = SK_PROMPT_UNITS_BASE+(UNIT_METERS_PER_SECOND*4), SK_PROMPT_SPARE1 = SK_PROMPT_UNITS_BASE+(UNIT_RAW*4), - SK_PROMPT_KMH = SK_PROMPT_UNITS_BASE+(UNIT_KMH*4), - SK_PROMPT_METERS = SK_PROMPT_UNITS_BASE+(UNIT_METERS*4), - SK_PROMPT_DEGREES = SK_PROMPT_UNITS_BASE+(UNIT_DEGREES*4), + SK_PROMPT_KMH = SK_PROMPT_UNITS_BASE+(UNIT_SPEED*4), + SK_PROMPT_METERS = SK_PROMPT_UNITS_BASE+(UNIT_DIST*4), + SK_PROMPT_DEGREES = SK_PROMPT_UNITS_BASE+(UNIT_TEMPERATURE*4), SK_PROMPT_PERCENT = SK_PROMPT_UNITS_BASE+(UNIT_PERCENT*4), SK_PROMPT_MILLIAMPS = SK_PROMPT_UNITS_BASE+(UNIT_MILLIAMPS*4), SK_PROMPT_MAH = SK_PROMPT_UNITS_BASE+(UNIT_MAH*4), @@ -135,12 +135,15 @@ I18N_PLAY_FUNCTION(sk, playNumber, getvalue_t number, uint8_t unit, uint8_t att) unit--; convertUnit(number, unit); if (IS_IMPERIAL_ENABLE()) { - if (unit == UNIT_METERS) { + if (unit == UNIT_DIST) { unit = UNIT_FEET; } + if (unit == UNIT_SPEED) { + unit = UNIT_KTS; + } } #if defined(CPUARM) - if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_METERS && number >= 100))) { + if ((att & PREC1) && (unit == UNIT_FEET || (unit == UNIT_DIST && number >= 100))) { number /= 10; att -= PREC1; } diff --git a/radio/util/tts.py b/radio/util/tts.py index 8375be05c..17aca7b60 100644 --- a/radio/util/tts.py +++ b/radio/util/tts.py @@ -137,7 +137,7 @@ def ttsEn(): "amp", "amps", "meter per second", "meters per second", "", "", - "kilometer per hour","kilometers per hour", + "kilometer per hour", "kilometers per hour", "meter", "meters", "degree", "degrees", "percent", "percent", @@ -146,7 +146,7 @@ def ttsEn(): "watt", "watts", "db", "db", "foot", "feet", - "knot", "knots", + "mile per hour", "miles per hour", "hour", "hours", "minute", "minutes", "second", "seconds",