diff --git a/radio/src/gui/colorlcd/model_setup.cpp b/radio/src/gui/colorlcd/model_setup.cpp index 75ddea6f6..9c5cedc52 100644 --- a/radio/src/gui/colorlcd/model_setup.cpp +++ b/radio/src/gui/colorlcd/model_setup.cpp @@ -37,10 +37,10 @@ std::string switchWarninglabel(swsrc_t index) return TEXT_AT_INDEX(STR_VSRCRAW, (index + MIXSRC_FIRST_SWITCH - MIXSRC_Rud + 1)) + std::string(&switchPositions[g_model.switchWarningState >> (3*index) & 0x07], 1); } -class MultimoduleStatus: public StaticText +class ModuleStatus: public StaticText { public: - MultimoduleStatus(Window * parent, const rect_t & rect, uint8_t moduleIdx): + ModuleStatus(Window * parent, const rect_t & rect, uint8_t moduleIdx): StaticText(parent, rect), moduleIdx(moduleIdx) { @@ -48,7 +48,51 @@ class MultimoduleStatus: public StaticText void checkEvents() override { - getMultiModuleStatus(moduleIdx).getStatusString(reusableBuffer.moduleSetup.msg); + getModuleStatusString(moduleIdx, reusableBuffer.moduleSetup.msg); + if (text != reusableBuffer.moduleSetup.msg) { + setText(reusableBuffer.moduleSetup.msg); + invalidate(); + } + } + + protected: + uint8_t moduleIdx; +}; + +class ModuleCurrentPower: public StaticText +{ + public: + ModuleCurrentPower(Window * parent, const rect_t & rect, uint8_t moduleIdx): + StaticText(parent, rect), + moduleIdx(moduleIdx) + { + } + + void checkEvents() override + { + getStringAtIndex(reusableBuffer.moduleSetup.msg, STR_AFHDS3_POWERS, actualAfhdsRunPower(moduleIdx)); + if (text != reusableBuffer.moduleSetup.msg) { + setText(reusableBuffer.moduleSetup.msg); + invalidate(); + } + } + + protected: + uint8_t moduleIdx; +}; + +class ModuleSyncStatus: public StaticText +{ + public: + ModuleSyncStatus(Window * parent, const rect_t & rect, uint8_t moduleIdx): + StaticText(parent, rect), + moduleIdx(moduleIdx) + { + } + + void checkEvents() override + { + getModuleSyncStatusString(moduleIdx, reusableBuffer.moduleSetup.msg); if (text != reusableBuffer.moduleSetup.msg) { setText(reusableBuffer.moduleSetup.msg); invalidate(); @@ -670,7 +714,7 @@ class ModuleWindow : public FormGroup { // Multimodule status new StaticText(this, grid.getLabelSlot(true), STR_MODULE_STATUS); - new MultimoduleStatus(this, grid.getFieldSlot(), moduleIdx); + new ModuleStatus(this, grid.getFieldSlot(), moduleIdx); // Multimodule sync /*if (multiSyncStatus.isValid()) { @@ -710,22 +754,46 @@ class ModuleWindow : public FormGroup { new CheckBox(this, grid.getFieldSlot(), GET_SET_DEFAULT(g_model.moduleData[moduleIdx].multi.lowPowerMode)); } #endif -#if defined (PCBNV14) +#if defined(AFHDS3) else if (isModuleAFHDS3(moduleIdx)) { - grid.nextLine(); - rfChoice = new Choice(this, grid.getFieldSlot(), STR_AFHDS3_PROTOCOLS, 0, 3, - GET_DEFAULT(g_model.moduleData[moduleIdx].flysky.mode), - [=](int32_t newValue) -> void { - g_model.moduleData[moduleIdx].flysky.mode = newValue; - SET_DIRTY(); - //TODO moduleFlagBackNormal(moduleIdx); - //TODO onFlySkyReceiverSetPulse(INTERNAL_MODULE, newValue); - }); - + rfChoice = new Choice(this, grid.getFieldSlot(2, 1), STR_AFHDS3_PROTOCOLS, AFHDS_SUBTYPE_FIRST, AFHDS_SUBTYPE_LAST, + GET_SET_DEFAULT(g_model.moduleData[moduleIdx].subType)); + // TYPE grid.nextLine(); - new StaticText(this, grid.getLabelSlot(true), STR_FLYSKY_TELEMETRY); - new CheckBox(this, grid.getFieldSlot(), GET_SET_DEFAULT(g_model.rssiAlarms.flysky_telemetry)); + new StaticText(this, grid.getLabelSlot(true), STR_TYPE); + new StaticText(this, grid.getFieldSlot(), + g_model.moduleData[EXTERNAL_MODULE].afhds3.telemetry ? STR_AFHDS3_ONE_TO_ONE_TELEMETRY : TR_AFHDS3_ONE_TO_MANY); + + // Status + grid.nextLine(); + new StaticText(this, grid.getLabelSlot(true), STR_MODULE_STATUS); + new ModuleStatus(this, grid.getFieldSlot(), moduleIdx); + + // Power source + grid.nextLine(); + new StaticText(this, grid.getLabelSlot(true), STR_AFHDS3_POWER_SOURCE); + new ModuleSyncStatus(this, grid.getFieldSlot(), moduleIdx); + + // RX Freq + grid.nextLine(); + new StaticText(this, grid.getLabelSlot(true), STR_AFHDS3_RX_FREQ); + auto edit = new NumberEdit(this, grid.getFieldSlot(2,0), MIN_FREQ, MAX_FREQ, GET_DEFAULT(g_model.moduleData[moduleIdx].afhds3.rxFreq())); + edit->setSetValueHandler([=](int32_t newValue) { + g_model.moduleData[EXTERNAL_MODULE].afhds3.setRxFreq((uint16_t)newValue); + }); + edit->setSuffix(STR_HZ); + + // Module actual power + grid.nextLine(); + new StaticText(this, grid.getLabelSlot(true), STR_AFHDS3_ACTUAL_POWER); + new ModuleCurrentPower(this, grid.getFieldSlot(), moduleIdx); + + // Module power + grid.nextLine(); + new StaticText(this, grid.getLabelSlot(true), STR_RF_POWER); + new Choice(this, grid.getFieldSlot(2, 0), STR_AFHDS3_POWERS, afhds3::RUN_POWER::RUN_POWER_FIRST, afhds3::RUN_POWER::RUN_POWER_LAST, + GET_SET_DEFAULT(g_model.moduleData[moduleIdx].afhds3.runPower)); } #endif grid.nextLine(); @@ -911,6 +979,8 @@ class ModuleWindow : public FormGroup { getParent()->moveWindowsTop(top() + 1, adjustHeight()); } + + }; ModelSetupPage::ModelSetupPage() : diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index d8a6cc934..6a906838b 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -208,6 +208,7 @@ const char STR_MOVESTICKSPOTS[] = TR_MOVESTICKSPOTS; const char STR_TX[] = TR_TXnRX; const char STR_NODATA[] = TR_NODATA; const char STR_US[] = TR_US; +const char STR_HZ[] = TR_HZ; const char STR_TMIXMAXMS[] = TR_TMIXMAXMS; const char STR_FREE_STACK[] = TR_FREE_STACK; const char STR_MENUTORESET[] = TR_MENUTORESET; diff --git a/radio/src/translations.h b/radio/src/translations.h index 139d6a33c..499c92598 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -353,6 +353,7 @@ extern const char STR_TX[]; #define STR_RX (STR_TX+OFS_RX) extern const char STR_NODATA[]; extern const char STR_US[]; +extern const char STR_HZ[]; extern const char STR_TMIXMAXMS[]; extern const char STR_FREE_STACK[]; extern const char STR_MENUTORESET[]; diff --git a/radio/src/translations/cn.h.txt b/radio/src/translations/cn.h.txt index 03edbc53e..b4da4bd81 100644 --- a/radio/src/translations/cn.h.txt +++ b/radio/src/translations/cn.h.txt @@ -581,6 +581,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "NO DATA" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMIXMAXMS "Tmix max" #define TR_FREE_STACK "Free stack" #define TR_MENUTORESET TR_ENTER " to reset" diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index cf33177ae..8990e2bc1 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -575,6 +575,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "NO DATA" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMIXMAXMS "Tmix max" #define TR_FREE_STACK "Free stack" #define TR_MENUTORESET TR_ENTER" >> Reset" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 8dea671d9..04270fd66 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -585,6 +585,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER"Keine Daten" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMIXMAXMS "Tmix max" #define TR_FREE_STACK "Freier Stack" #define TR_MENUTORESET TR_ENTER " für Reset" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index b612ac429..9de1bc034 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -581,6 +581,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "NO DATA" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMIXMAXMS "Tmix max" #define TR_FREE_STACK "Free stack" #define TR_MENUTORESET TR_ENTER " to reset" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index a29acd962..73d922c6d 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -577,6 +577,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "SIN DATOS" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMIXMAXMS "Tmix máx" #define TR_FREE_STACK "Stack libre" #define TR_MENUTORESET TR_ENTER "Resetear" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index ba4b915fe..f223ab5a9 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -590,6 +590,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "NO DATA" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMIXMAXMS "Tmix max" #define TR_FREE_STACK "Free stack" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 6d8284aae..687dd0fef 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -601,6 +601,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "NO DATA" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" #define TR_TMIXMAXMS "Tmix max" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 47669b967..6c0333511 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -605,6 +605,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER"DATI ASSENTI" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMIXMAXMS "Tmix max" #define TR_FREE_STACK "Free stack" #define TR_MENUTORESET TR_ENTER" per azzerare" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index ca6de810d..77b0f0a94 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -584,6 +584,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER"Geen Data" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMIXMAXMS "Tmix max" #define TR_FREE_STACK "Free stack" #define TR_MENUTORESET TR_ENTER" voor Reset" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index afbd46c7c..a17d102e3 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -601,6 +601,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "BrakDAN" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMIXMAXMS "TmixMaks" #define TR_FREE_STACK "Wolny stos" #define TR_MENUTORESET TR_ENTER " >> Reset" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index c78c5ed17..921c8e3d4 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -583,6 +583,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER"SEM DADOS" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMIXMAXMS "Tmix max" #define TR_FREE_STACK "Free stack" #define TR_MENUTORESET TR_ENTER" Reinicia" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 28033ac63..c3f87cbb7 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -603,6 +603,7 @@ #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "DATA SAKNAS" #define TR_US "us" +#define TR_HZ "Hz" #define TR_TMIXMAXMS "Tmix max" #define TR_FREE_STACK "Free stack" #define TR_MENUTORESET TR_ENTER " Nollar" diff --git a/radio/util/addtr.py b/radio/util/addtr.py new file mode 100644 index 000000000..c197869a3 --- /dev/null +++ b/radio/util/addtr.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +from __future__ import print_function + +import sys +import glob + + +def addLine(filename, newline, after): + print(filename, newline) + with open(filename, 'r') as f: + lines = f.readlines() + for i, line in enumerate(lines): + if after in line: + lines.insert(i + 1, newline + '\n') + break + with open(filename, 'w') as f: + f.writelines(lines) + + +def modifyTranslations(constant, translation, after): + for filename in glob.glob('translations/*.h.txt'): + newline = "#define " + constant + " " * max(1, 31 - len(constant)) + '"' + translation + '"' + addLine(filename, newline, after + " ") + + +def modifyDeclaration(constant, after): + newline = "extern const char S" + constant + "[];" + filename = "translations.h" + addLine(filename, newline, after + "[];") + + +def modifyDefinition(constant, after): + newline = "const char S" + constant + "[] = " + constant + ";" + filename = "translations.cpp" + addLine(filename, newline, after + "[] ") + + +after = sys.argv[-1] +for arg in sys.argv[1:-1]: + constant, translation = arg.split("=") + modifyTranslations(constant, translation, after) + modifyDeclaration(constant, after) + modifyDefinition(constant, after) + after = constant \ No newline at end of file