From 6bb65dfa9c9e8612c03f9d3231ef6a506e93cc0f Mon Sep 17 00:00:00 2001 From: 3djc Date: Fri, 25 Jul 2025 05:02:16 +0200 Subject: [PATCH] feat: stick inversion (#6394) Co-authored-by: philmoz --- .../firmwares/edgetx/yaml_switchconfig.cpp | 3 +- companion/src/generaledit/hardware.cpp | 5 + radio/src/datastructs.h | 6 +- radio/src/datastructs_private.h | 1 + radio/src/gui/128x64/radio_calibration.cpp | 5 + radio/src/gui/212x64/radio_calibration.cpp | 5 + radio/src/gui/colorlcd/radio/hw_inputs.cpp | 40 ++++---- radio/src/gui/colorlcd/radio/hw_inputs.h | 10 ++ .../gui/colorlcd/radio/radio_calibration.cpp | 92 ++++++++++++------- .../gui/colorlcd/radio/radio_calibration.h | 18 +++- radio/src/gui/common/stdlcd/calibration.cpp | 32 ++++++- .../src/gui/common/stdlcd/radio_hardware.cpp | 14 ++- radio/src/gui/gui_common.cpp | 10 ++ radio/src/gui/gui_common.h | 2 + radio/src/hal/adc_driver.cpp | 4 + radio/src/myeeprom.h | 3 + .../storage/yaml/yaml_datastructs_128x64.cpp | 1 + .../src/storage/yaml/yaml_datastructs_f16.cpp | 1 + .../storage/yaml/yaml_datastructs_funcs.cpp | 18 ++++ .../storage/yaml/yaml_datastructs_gx12.cpp | 1 + .../storage/yaml/yaml_datastructs_nb4p.cpp | 1 + .../yaml/yaml_datastructs_nv14_family.cpp | 1 + .../storage/yaml/yaml_datastructs_pl18.cpp | 1 + .../storage/yaml/yaml_datastructs_pl18u.cpp | 1 + .../storage/yaml/yaml_datastructs_st16.cpp | 1 + .../src/storage/yaml/yaml_datastructs_t15.cpp | 1 + .../src/storage/yaml/yaml_datastructs_t20.cpp | 1 + .../storage/yaml/yaml_datastructs_tpro.cpp | 1 + .../src/storage/yaml/yaml_datastructs_x10.cpp | 1 + .../src/storage/yaml/yaml_datastructs_x9d.cpp | 1 + .../yaml/yaml_datastructs_x9dp2019.cpp | 1 + .../src/storage/yaml/yaml_datastructs_x9e.cpp | 1 + .../storage/yaml/yaml_datastructs_xlite.cpp | 1 + .../storage/yaml/yaml_datastructs_xlites.cpp | 1 + radio/src/translations.cpp | 7 ++ radio/src/translations.h | 3 + radio/src/translations/cn.h | 13 ++- radio/src/translations/cz.h | 15 ++- radio/src/translations/da.h | 20 ++-- radio/src/translations/de.h | 14 ++- radio/src/translations/en.h | 13 ++- radio/src/translations/es.h | 20 ++-- radio/src/translations/fi.h | 20 ++-- radio/src/translations/fr.h | 20 ++-- radio/src/translations/he.h | 20 ++-- radio/src/translations/it.h | 13 ++- radio/src/translations/jp.h | 13 ++- radio/src/translations/ko.h | 14 +-- radio/src/translations/nl.h | 21 +++-- radio/src/translations/pl.h | 14 ++- radio/src/translations/pt.h | 13 ++- radio/src/translations/ru.h | 13 ++- radio/src/translations/se.h | 14 ++- radio/src/translations/tw.h | 14 +-- radio/src/translations/ua.h | 17 ++-- 55 files changed, 388 insertions(+), 208 deletions(-) diff --git a/companion/src/firmwares/edgetx/yaml_switchconfig.cpp b/companion/src/firmwares/edgetx/yaml_switchconfig.cpp index f567c87e7..6b792070f 100644 --- a/companion/src/firmwares/edgetx/yaml_switchconfig.cpp +++ b/companion/src/firmwares/edgetx/yaml_switchconfig.cpp @@ -98,6 +98,7 @@ YamlStickConfig::YamlStickConfig(const GeneralSettings::InputConfig* rhs) for (int i = 0; i < Boards::getCapability(getCurrentBoard(), Board::Inputs); i++) { config[i].tag = std::to_string(i); config[i].type = rhs[i].type; + config[i].inverted = rhs[i].inverted; memcpy(config[i].name, rhs[i].name, sizeof(HARDWARE_NAME_LEN)); } } @@ -160,10 +161,10 @@ Node convert::encode(const InputConfig& rhs) { Node node; node["name"] = rhs.name; + node["inv"] = (int)rhs.inverted; if (rhs.type != Board::AIT_STICK) { node["type"] = potConfigLut << rhs.flexType; - node["inv"] = (int)rhs.inverted; } return node; diff --git a/companion/src/generaledit/hardware.cpp b/companion/src/generaledit/hardware.cpp index 5d58b85fb..9bce66ab6 100644 --- a/companion/src/generaledit/hardware.cpp +++ b/companion/src/generaledit/hardware.cpp @@ -430,6 +430,11 @@ void HardwarePanel::addStick(int index) name->setValidator(new NameValidator(board, this)); name->setField(config.name, HARDWARE_NAME_LEN, this); params->append(name); + + AutoCheckBox *inverted = new AutoCheckBox(this); + inverted->setField(config.inverted, this); + params->append(inverted); + addParams(); } diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 4adf028f1..be522def9 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -83,11 +83,11 @@ static inline void check_struct() #endif #if defined(PCBXLITES) - CHKSIZE(RadioData, 872); + CHKSIZE(RadioData, 873); #elif defined(COLORLCD) - CHKSIZE(RadioData, 966); + CHKSIZE(RadioData, 967); #else - CHKSIZE(RadioData, 870); + CHKSIZE(RadioData, 871); #endif #if defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_BUMBLEBEE) diff --git a/radio/src/datastructs_private.h b/radio/src/datastructs_private.h index e7075613a..0ba85f40e 100644 --- a/radio/src/datastructs_private.h +++ b/radio/src/datastructs_private.h @@ -965,6 +965,7 @@ PACK(struct RadioData { CUST_ARRAY(sticksConfig, struct_stickConfig, MAX_STICKS, stick_name_valid); CUST_ARRAY(slidersConfig, struct_sliderConfig, MAX_POTS, nullptr); + uint8_t stickInvert SKIP; potconfig_t potsConfig ARRAY(4,struct_potConfig,nullptr); swconfig_t switchConfig ARRAY(2,struct_switchConfig,nullptr); CUST_ARRAY(flexSwitches, struct_flexSwitch, MAX_FLEX_SWITCHES, flex_sw_valid); diff --git a/radio/src/gui/128x64/radio_calibration.cpp b/radio/src/gui/128x64/radio_calibration.cpp index cd9d7f318..7adfdfdc8 100644 --- a/radio/src/gui/128x64/radio_calibration.cpp +++ b/radio/src/gui/128x64/radio_calibration.cpp @@ -25,6 +25,11 @@ void menuRadioCalibration(event_t event) { + if (reusableBuffer.calib.state == CALIB_FINISHED) { + menuCalibrationState = CALIB_START; + popMenu(); + } + check_submenu_simple(event, 0); title(STR_MENUCALIBRATION); menuCommonCalib(event); diff --git a/radio/src/gui/212x64/radio_calibration.cpp b/radio/src/gui/212x64/radio_calibration.cpp index 5de08f7e8..e02f200ed 100644 --- a/radio/src/gui/212x64/radio_calibration.cpp +++ b/radio/src/gui/212x64/radio_calibration.cpp @@ -49,6 +49,11 @@ void drawPotsBars() void menuRadioCalibration(event_t event) { + if (reusableBuffer.calib.state == CALIB_FINISHED) { + menuCalibrationState = CALIB_START; + popMenu(); + } + check_submenu_simple(event, 0); title(STR_MENUCALIBRATION); menuCommonCalib(event); diff --git a/radio/src/gui/colorlcd/radio/hw_inputs.cpp b/radio/src/gui/colorlcd/radio/hw_inputs.cpp index ff57e6592..b989b87e4 100644 --- a/radio/src/gui/colorlcd/radio/hw_inputs.cpp +++ b/radio/src/gui/colorlcd/radio/hw_inputs.cpp @@ -56,25 +56,34 @@ static const lv_coord_t pots_col_dsc[] = {LV_GRID_FR(13), LV_GRID_FR(7), static const lv_coord_t row_dsc[] = {LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST}; -HWSticks::HWSticks(Window* parent) : Window(parent, rect_t{}) +HWSticks::HWSticks(Window* parent) : Window(parent, {0, 0, LV_PCT(100), LV_SIZE_CONTENT}) { padAll(PAD_TINY); - FlexGridLayout grid(col_two_dsc, row_dsc, PAD_TINY); - setFlexLayout(); + new StaticText(this, {S_NM_X, -PAD_TINY, 0, 0}, STR_NAME, COLOR_THEME_PRIMARY1_INDEX, FONT(XS)); + new StaticText(this, {S_INV_X, -PAD_TINY, 0, 0}, STR_MENU_INVERT, COLOR_THEME_PRIMARY1_INDEX, FONT(XS)); + + coord_t yo = EdgeTxStyles::STD_FONT_HEIGHT - PAD_TINY; auto max_sticks = adcGetMaxInputs(ADC_INPUT_MAIN); for (int i = 0; i < max_sticks; i++) { - auto line = newLine(grid); - new StaticText(line, rect_t{}, analogGetCanonicalName(ADC_INPUT_MAIN, i)); - new HWInputEdit(line, (char*)analogGetCustomLabel(ADC_INPUT_MAIN, i), - LEN_ANA_NAME); + new StaticText(this, {0, S_Y(i) + yo + PAD_MEDIUM, S_LBL_W, 0}, + analogGetCanonicalName(ADC_INPUT_MAIN, i)); + new HWInputEdit(this, (char*)analogGetCustomLabel(ADC_INPUT_MAIN, i), + LEN_ANA_NAME, S_NM_X, S_Y(i) + yo); + + new ToggleSwitch( + this, {S_INV_X, S_Y(i) + yo, S_INV_W, 0}, + [=]() -> uint8_t { return (uint8_t)getStickInversion(i); }, + [=](int8_t newValue) { + setStickInversion(i, newValue); + SET_DIRTY(); + }); } #if defined(STICK_DEAD_ZONE) - auto line = newLine(grid); - new StaticText(line, rect_t{}, STR_DEAD_ZONE); - auto dz = new Choice(line, rect_t{}, 0, 7, + new StaticText(this, {0, S_Y(max_sticks) + yo + PAD_MEDIUM}, STR_DEAD_ZONE); + auto dz = new Choice(this, {S_INV_X, S_Y(max_sticks) + yo}, 0, 7, GET_SET_DEFAULT(g_eeGeneral.stickDeadZone)); dz->setTextHandler([](uint8_t value) { return std::to_string(value ? 2 << (value - 1) : 0); @@ -83,7 +92,7 @@ HWSticks::HWSticks(Window* parent) : Window(parent, rect_t{}) } HWPots::HWPots(Window* parent) : - Window(parent, rect_t{0, 0, LV_PCT(100), LV_SIZE_CONTENT}) + Window(parent, {0, 0, LV_PCT(100), LV_SIZE_CONTENT}) { padAll(PAD_TINY); @@ -111,15 +120,14 @@ HWPots::HWPots(Window* parent) : // #if !defined(SIMU) && defined(RADIO_FAMILY_T16) // if (!globalData.flyskygimbals && (i >= (NUM_POTS - 2))) continue; // #endif - new StaticText(this, - rect_t{0, P_Y(i) + yo + PAD_MEDIUM, P_LBL_W, 0}, + new StaticText(this, {0, P_Y(i) + yo + PAD_MEDIUM, P_LBL_W, 0}, adcGetInputLabel(ADC_INPUT_FLEX, i)); new HWInputEdit(this, (char*)analogGetCustomLabel(ADC_INPUT_FLEX, i), LEN_ANA_NAME, P_NM_X, P_Y(i) + yo); auto pot = new Choice( - this, rect_t{P_TYP_X, P_Y(i) + P_OFST_Y + yo, P_TYP_W, 0}, + this, {P_TYP_X, P_Y(i) + P_OFST_Y + yo, P_TYP_W, 0}, STR_POTTYPES, FLEX_NONE, FLEX_SWITCH, [=]() -> int { return getPotType(i); }, [=](int newValue) { @@ -136,7 +144,7 @@ HWPots::HWPots(Window* parent) : pot->setAvailableHandler([=](int val) { return isPotTypeAvailable(val); }); auto tgl = new ToggleSwitch( - this, rect_t{P_INV_X, P_Y(i) + yo, P_INV_W, 0}, + this, {P_INV_X, P_Y(i) + yo, P_INV_W, 0}, [=]() -> uint8_t { return (uint8_t)getPotInversion(i); }, [=](int8_t newValue) { setPotInversion(i, newValue); @@ -155,7 +163,7 @@ class SwitchDynamicLabel : public StaticText { public: SwitchDynamicLabel(Window* parent, uint8_t index, coord_t x, coord_t y, coord_t w) : - StaticText(parent, rect_t{x, y, w, 0}, ""), + StaticText(parent, {x, y, w, 0}, ""), index(index) { checkEvents(); diff --git a/radio/src/gui/colorlcd/radio/hw_inputs.h b/radio/src/gui/colorlcd/radio/hw_inputs.h index 084fa6ba0..05baae4ef 100644 --- a/radio/src/gui/colorlcd/radio/hw_inputs.h +++ b/radio/src/gui/colorlcd/radio/hw_inputs.h @@ -33,6 +33,16 @@ class HWSticks : public Window { public: HWSticks(Window* parent); + + // Absolute layout for Pots popup - due to performance issues with lv_textarea + // in a flex layout + static LAYOUT_VAL_SCALED(S_LBL_W, 60) + static constexpr coord_t S_NM_X = S_LBL_W + PAD_SMALL; + static LAYOUT_VAL_SCALED(S_NM_W, 64) + static constexpr coord_t S_INV_X = S_NM_X + S_NM_W + PAD_LARGE * 3; + static constexpr coord_t S_INV_W = ToggleSwitch::TOGGLE_W; + static constexpr coord_t S_ROW_H = EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_OUTLINE; + #define S_Y(i) (i * S_ROW_H + PAD_TINY) }; class HWPots : public Window diff --git a/radio/src/gui/colorlcd/radio/radio_calibration.cpp b/radio/src/gui/colorlcd/radio/radio_calibration.cpp index 17f6ccc2e..8e8ba4ed0 100644 --- a/radio/src/gui/colorlcd/radio/radio_calibration.cpp +++ b/radio/src/gui/colorlcd/radio/radio_calibration.cpp @@ -25,6 +25,7 @@ #include "edgetx.h" #include "sliders.h" #include "view_main_decoration.h" +#include "hw_inputs.h" #include @@ -66,8 +67,8 @@ class StickCalibrationWindow : public Window StaticLZ4Image *calibStick = nullptr; }; -RadioCalibrationPage::RadioCalibrationPage(bool initial) : - Page(ICON_RADIO_CALIBRATION), initial(initial) +RadioCalibrationPage::RadioCalibrationPage() : + Page(ICON_RADIO_CALIBRATION) { buildHeader(header); buildBody(body); @@ -76,7 +77,8 @@ RadioCalibrationPage::RadioCalibrationPage(bool initial) : void RadioCalibrationPage::buildHeader(Window *window) { header->setTitle(STR_MENUCALIBRATION); - text = header->setTitle2(STR_MENUTOSTART); + title2 = header->setTitle2(""); + etx_font(title2->getLvObj(), FONT_BOLD_INDEX); } void RadioCalibrationPage::buildBody(Window *window) @@ -106,13 +108,54 @@ void RadioCalibrationPage::buildBody(Window *window) std::unique_ptr deco(new ViewMainDecoration(window, false, true, false)); -#if defined(PCBNV14) || defined(PCBPL18) - new TextButton(window, {LCD_W - 120, LCD_H - 140, 90, 40}, "Next", + axisBtn = new TextButton(window, {AXIS_X, PAD_LARGE, AXIS_W, 0}, STR_STICKS, + [=]() -> uint8_t { + new HWInputDialog(STR_STICKS); + return 0; + }); + + potsBtn = new TextButton(window, {POTS_X, PAD_LARGE, POTS_W, 0}, STR_POTS, + [=]() -> uint8_t { + new HWInputDialog(STR_POTS, HWPots::POTS_WINDOW_WIDTH); + return 0; + }); + + nxtBtn = new TextButton(window, {NXT_X, PAD_LARGE, NXT_W, 0}, "", [=]() -> uint8_t { nextStep(); return 0; }); -#endif + + setState(); +} + +void RadioCalibrationPage::setState() +{ + axisBtn->hide(); + potsBtn->hide(); + + switch (menuCalibrationState) { + case CALIB_START: + title2->setText(""); + nxtBtn->setText(STR_START); + break; + case CALIB_SET_MIDPOINT: + title2->setText(STR_SETMIDPOINT); + nxtBtn->setText(STR_NEXT); + break; + case CALIB_MOVE_STICKS: + title2->setText(STR_MOVESTICKSPOTS); + nxtBtn->setText(STR_NEXT); + axisBtn->show(); + potsBtn->show(); + break; + case CALIB_STORE: + title2->setText(STR_CALIB_DONE); + nxtBtn->setText(STR_EXIT); + break; + case CALIB_FINISHED: + break; + } } void RadioCalibrationPage::checkEvents() @@ -126,14 +169,12 @@ void RadioCalibrationPage::checkEvents() } } -void RadioCalibrationPage::onClicked() { nextStep(); } - void RadioCalibrationPage::onCancel() { if (menuCalibrationState != CALIB_START && - menuCalibrationState != CALIB_FINISHED) { + menuCalibrationState != CALIB_STORE) { menuCalibrationState = CALIB_START; - text->setText(STR_MENUTOSTART); + setState(); } else { Page::onCancel(); } @@ -141,34 +182,15 @@ void RadioCalibrationPage::onCancel() void RadioCalibrationPage::nextStep() { - if (menuCalibrationState == CALIB_FINISHED) deleteLater(); - menuCalibrationState++; - switch (menuCalibrationState) { - case CALIB_SET_MIDPOINT: - text->setText(STR_SETMIDPOINT); - break; + if (menuCalibrationState == CALIB_FINISHED) + deleteLater(); - case CALIB_MOVE_STICKS: - text->setText(STR_MOVESTICKSPOTS); - break; + if (menuCalibrationState == CALIB_STORE) + adcCalibStore(); - case CALIB_STORE: - text->setText(STR_CALIB_DONE); - adcCalibStore(); - menuCalibrationState = CALIB_FINISHED; - - // initial calibration completed - // -> exit - if (initial) deleteLater(); - break; - - default: - text->setText(STR_MENUTOSTART); - menuCalibrationState = CALIB_START; - break; - } + setState(); } -void startCalibration() { new RadioCalibrationPage(true); } +void startCalibration() { new RadioCalibrationPage(); } diff --git a/radio/src/gui/colorlcd/radio/radio_calibration.h b/radio/src/gui/colorlcd/radio/radio_calibration.h index 48674d2b8..89bbc050d 100644 --- a/radio/src/gui/colorlcd/radio/radio_calibration.h +++ b/radio/src/gui/colorlcd/radio/radio_calibration.h @@ -27,19 +27,27 @@ class StaticText; class RadioCalibrationPage: public Page { public: - explicit RadioCalibrationPage(bool initial = false); + explicit RadioCalibrationPage(); void checkEvents() override; - void onClicked() override; void onCancel() override; protected: - StaticText * text = nullptr; - TextButton * button = nullptr; - bool initial; + StaticText* title2 = nullptr; + TextButton* nxtBtn = nullptr; + TextButton* axisBtn = nullptr; + TextButton* potsBtn = nullptr; void nextStep(); void buildHeader(Window * window); void buildBody(Window * window); + void setState(); + + static LAYOUT_VAL_SCALED(NXT_W, 80); + static constexpr coord_t NXT_X = LCD_W - NXT_W - PAD_LARGE * 4; + static LAYOUT_VAL_SCALED(AXIS_W, 80); + static constexpr coord_t AXIS_X = PAD_LARGE * 4; + static LAYOUT_VAL_SCALED(POTS_W, 80); + static constexpr coord_t POTS_X = AXIS_X + AXIS_W + PAD_LARGE; }; void startCalibration(); diff --git a/radio/src/gui/common/stdlcd/calibration.cpp b/radio/src/gui/common/stdlcd/calibration.cpp index f3bf8b817..4dfa6a4c6 100644 --- a/radio/src/gui/common/stdlcd/calibration.cpp +++ b/radio/src/gui/common/stdlcd/calibration.cpp @@ -21,9 +21,33 @@ #include "edgetx.h" #include "calibration.h" +#include "analogs.h" #include "hal/adc_driver.h" +void menuCommonCalibOptions(event_t event) +{ + SIMPLE_SUBMENU(STR_AXISDIR, HEADER_LINE+4); + uint8_t sub = menuVerticalPosition; + + coord_t y = MENU_HEADER_HEIGHT + 1; + lcdDrawTextAlignedLeft(y, STR_STICKS); + lcdDrawText(LCD_W / 3 * 2, y, STR_MENU_INVERT, CENTERED); + y+=FH; + for(uint8_t i = 0; i < 4; i++) { + uint8_t k = i + menuVerticalOffset; + LcdFlags attr = (sub == k) ? INVERS : 0; + + lcdDrawTextIndented(y, STR_CHAR_STICK); + lcdDrawText(lcdNextPos, y, analogGetCanonicalName(ADC_INPUT_MAIN, i), 0); + bool stickInversion = getStickInversion(i); + lcdDrawChar(LCD_W / 3 * 2, y, stickInversion ? 127 : 126, attr); + if (attr) stickInversion = checkIncDec(event, stickInversion, 0, 1, EE_GENERAL); + setStickInversion(i, stickInversion); + y+=FH; + } +} + void menuCommonCalib(event_t event) { // make sure we don't scroll while calibrating @@ -35,6 +59,11 @@ void menuCommonCalib(event_t event) reusableBuffer.calib.state = CALIB_START; break; + case EVT_KEY_LONG(KEY_ENTER): + killEvents(event); + pushMenu(menuCommonCalibOptions); + break; + case EVT_KEY_BREAK(KEY_ENTER): reusableBuffer.calib.state++; break; @@ -55,7 +84,8 @@ void menuCommonCalib(event_t event) case CALIB_MOVE_STICKS: // MOVE STICKS/POTS - lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT+FH, STR_MOVESTICKSPOTS, INVERS|CENTERED); + lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT, STR_MOVESTICKSPOTS, INVERS|CENTERED); + lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT+FH, STR_MENUAXISDIR, CENTERED); lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT+2*FH, STR_MENUWHENDONE, CENTERED); adcCalibSetMinMax(); break; diff --git a/radio/src/gui/common/stdlcd/radio_hardware.cpp b/radio/src/gui/common/stdlcd/radio_hardware.cpp index 6cbbb7a4b..46b41e50d 100644 --- a/radio/src/gui/common/stdlcd/radio_hardware.cpp +++ b/radio/src/gui/common/stdlcd/radio_hardware.cpp @@ -138,7 +138,7 @@ static void _init_menu_tab_array(uint8_t* tab, size_t len) auto max_sticks = adcGetMaxInputs(ADC_INPUT_MAIN); for (int i = ITEM_RADIO_HARDWARE_STICK; i <= ITEM_RADIO_HARDWARE_STICK_END; i++) { uint8_t idx = i - ITEM_RADIO_HARDWARE_STICK; - tab[i] = idx < max_sticks ? 0 : HIDDEN_ROW; + tab[i] = idx < max_sticks ? 1 : HIDDEN_ROW; } auto max_pots = adcGetMaxInputs(ADC_INPUT_FLEX); @@ -480,9 +480,17 @@ void menuRadioHardware(event_t event) default: if (k <= ITEM_RADIO_HARDWARE_STICK_END) { // Sticks + int idx = k - ITEM_RADIO_HARDWARE_STICK; + + LcdFlags flags = menuHorizontalPosition == 0 ? attr : 0; editStickHardwareSettings(HW_SETTINGS_COLUMN1, y, - k - ITEM_RADIO_HARDWARE_STICK, event, - attr, old_editMode); + idx, event, flags, old_editMode); + // ADC inversion + flags = menuHorizontalPosition == 1 ? attr : 0; + bool stickinversion = getStickInversion(idx); + lcdDrawChar(LCD_W - 8, y, stickinversion ? 127 : 126, flags); + if (flags & (~RIGHT)) stickinversion = checkIncDec(event, stickinversion, 0, 1, EE_GENERAL); + setStickInversion(idx, stickinversion); } else if (k <= ITEM_RADIO_HARDWARE_POT_END) { // Pots & sliders diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index ade940115..102913501 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -1352,6 +1352,16 @@ bool isFlexSwitchSourceValid(int source) return true; } +bool getStickInversion(int index) +{ + return bfGet(g_eeGeneral.stickInvert, index, STICK_CFG_INV_BITS); +} + +void setStickInversion(int index, bool value) +{ + g_eeGeneral.stickInvert = bfSet(g_eeGeneral.stickInvert, value, index, STICK_CFG_INV_BITS); +} + bool getPotInversion(int index) { return bfGet(g_eeGeneral.potsConfig, (POT_CFG_BITS * index) + POT_CFG_TYPE_BITS, POT_CFG_INV_BITS); diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 9bed0a7ab..258135cd5 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -85,6 +85,8 @@ bool isAssignableFunctionAvailable(int function, bool modelFunctions); bool isPotTypeAvailable(uint8_t type); bool isFlexSwitchSourceValid(int source); bool getPotInversion(int index); +bool getStickInversion(int index); +void setStickInversion(int index, bool value); void setPotInversion(int index, bool value); uint8_t getPotType(int index); void setPotType(int index, int value); diff --git a/radio/src/hal/adc_driver.cpp b/radio/src/hal/adc_driver.cpp index 6ec57631e..7cf26e888 100644 --- a/radio/src/hal/adc_driver.cpp +++ b/radio/src/hal/adc_driver.cpp @@ -443,6 +443,10 @@ void getADC() } // 2nd: apply inversion + if (x < pot_offset && getStickInversion(inputMappingConvertMode(x))) { + v = 4 * RESX - v; + } + if (is_flex_input && getPotInversion(x - pot_offset)) { v = 4 * RESX - v; } diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index dc1179d68..bb4ad96c8 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -69,6 +69,9 @@ #define MODEL_GVAR_MIN(idx) (CFN_GVAR_CST_MIN + g_model.gvars[idx].min) #define MODEL_GVAR_MAX(idx) (CFN_GVAR_CST_MAX - g_model.gvars[idx].max) +// stick config +#define STICK_CFG_INV_BITS 1 + // pots config #define POT_CFG_TYPE_BITS 3 #define POT_CFG_INV_BITS 1 diff --git a/radio/src/storage/yaml/yaml_datastructs_128x64.cpp b/radio/src/storage/yaml/yaml_datastructs_128x64.cpp index ca8442fda..8e2cd75fe 100644 --- a/radio/src/storage/yaml/yaml_datastructs_128x64.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_128x64.cpp @@ -338,6 +338,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 8, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_f16.cpp b/radio/src/storage/yaml/yaml_datastructs_f16.cpp index f33403fa0..a31962d61 100644 --- a/radio/src/storage/yaml/yaml_datastructs_f16.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_f16.cpp @@ -355,6 +355,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 16, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp index 2aaf808b7..0bbcac312 100644 --- a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp @@ -774,16 +774,34 @@ static bool w_stick_name(void* user, uint8_t* data, uint32_t bitoffs, return _write_analog_name(ADC_INPUT_MAIN, user, data, bitoffs, wf, opaque); } +static void r_stick_inv(void* user, uint8_t* data, uint32_t bitoffs, + const char* val, uint8_t val_len) +{ + auto tw = reinterpret_cast(user); + uint16_t idx = tw->getElmts(1); + setStickInversion(idx, val[0] != '0'); +} + +static bool w_stick_inv(void* user, uint8_t* data, uint32_t bitoffs, + yaml_writer_func wf, void* opaque) +{ + auto tw = reinterpret_cast(user); + uint16_t idx = tw->getElmts(1); + return wf(opaque, getStickInversion(idx) ? "1" : "0", 1); +} + static bool stick_name_valid(void* user, uint8_t* data, uint32_t bitoffs) { auto tw = reinterpret_cast(user); uint16_t idx = tw->getElmts(); + if (getStickInversion(idx)) return true; return analogHasCustomLabel(ADC_INPUT_MAIN, idx); } static const struct YamlNode struct_stickConfig[] = { YAML_IDX, YAML_CUSTOM( "name", r_stick_name, w_stick_name), + YAML_CUSTOM("inv", r_stick_inv, w_stick_inv), YAML_END }; diff --git a/radio/src/storage/yaml/yaml_datastructs_gx12.cpp b/radio/src/storage/yaml/yaml_datastructs_gx12.cpp index b0932525e..7666c6241 100644 --- a/radio/src/storage/yaml/yaml_datastructs_gx12.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_gx12.cpp @@ -339,6 +339,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 8, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp b/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp index ed6fee346..641d26ebc 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp @@ -348,6 +348,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 16, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_nv14_family.cpp b/radio/src/storage/yaml/yaml_datastructs_nv14_family.cpp index fdf885646..b8758646b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nv14_family.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nv14_family.cpp @@ -355,6 +355,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 16, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_pl18.cpp b/radio/src/storage/yaml/yaml_datastructs_pl18.cpp index 8813dddc3..e3ee88974 100644 --- a/radio/src/storage/yaml/yaml_datastructs_pl18.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_pl18.cpp @@ -355,6 +355,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 16, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp b/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp index 4183c0d14..7b16d79a5 100644 --- a/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp @@ -348,6 +348,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 16, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_st16.cpp b/radio/src/storage/yaml/yaml_datastructs_st16.cpp index 7bb19eafa..8366a1ef1 100644 --- a/radio/src/storage/yaml/yaml_datastructs_st16.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_st16.cpp @@ -355,6 +355,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 16, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_t15.cpp b/radio/src/storage/yaml/yaml_datastructs_t15.cpp index cbf4ff264..b68d60bec 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t15.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t15.cpp @@ -355,6 +355,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 16, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_t20.cpp b/radio/src/storage/yaml/yaml_datastructs_t20.cpp index b60ed9d04..bde9c2e07 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t20.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t20.cpp @@ -339,6 +339,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 8, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_tpro.cpp b/radio/src/storage/yaml/yaml_datastructs_tpro.cpp index 11fe5e79e..497bb1e48 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tpro.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tpro.cpp @@ -339,6 +339,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 8, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_x10.cpp b/radio/src/storage/yaml/yaml_datastructs_x10.cpp index d93cac8df..16796d0d2 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x10.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x10.cpp @@ -354,6 +354,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 16, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp index 396daf6ee..8e07e844b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp @@ -338,6 +338,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 8, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_x9dp2019.cpp b/radio/src/storage/yaml/yaml_datastructs_x9dp2019.cpp index 396daf6ee..8e07e844b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9dp2019.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9dp2019.cpp @@ -338,6 +338,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 8, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp index 78f7d57f9..4200d4937 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp @@ -338,6 +338,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 8, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_xlite.cpp b/radio/src/storage/yaml/yaml_datastructs_xlite.cpp index ca8442fda..8e2cd75fe 100644 --- a/radio/src/storage/yaml/yaml_datastructs_xlite.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_xlite.cpp @@ -338,6 +338,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 8, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp index b7a7c8c6b..6a50c8458 100644 --- a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp @@ -340,6 +340,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 8, struct_potConfig, nullptr), YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 18361d340..38671688a 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -154,6 +154,7 @@ const char STR_NO_PICTURE[] = TR_NO_PICTURE; const char STR_TIMER[] = TR_TIMER; const char STR_NO_TIMERS[] = TR_NO_TIMERS; const char STR_START[] = TR_START; +const char STR_NEXT[] = TR_NEXT; const char STR_ELIMITS[] = TR_ELIMITS; const char STR_ETRIMS[] = TR_ETRIMS; const char STR_TRIMINC[] = TR_TRIMINC; @@ -286,9 +287,15 @@ const char STR_MULTIPLIER[] = TR_MULTIPLIER; const char STR_CAL[] = TR_CAL; const char STR_CALIB_DONE[] = TR_CALIB_DONE; const char STR_VTRIM[] = TR_VTRIM; +#if !defined(COLORLCD) const char STR_MENUTOSTART[] = TR_MENUTOSTART; +#endif const char STR_SETMIDPOINT[] = TR_SETMIDPOINT; const char STR_MOVESTICKSPOTS[] = TR_MOVESTICKSPOTS; +#if !defined(COLORLCD) +const char STR_AXISDIR[] = TR_AXISDIR; +const char STR_MENUAXISDIR[] = TR_MENUAXISDIR; +#endif const char STR_TX[] = TR_TXnRX; const char STR_NODATA[] = TR_NODATA; const char STR_US[] = TR_US; diff --git a/radio/src/translations.h b/radio/src/translations.h index c69949e1b..370771031 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -278,6 +278,7 @@ extern const char STR_NO_PICTURE[]; extern const char STR_TIMER[]; extern const char STR_NO_TIMERS[]; extern const char STR_START[]; +extern const char STR_NEXT[]; extern const char STR_ELIMITS[]; extern const char STR_ETRIMS[]; extern const char STR_TRIMINC[]; @@ -471,6 +472,8 @@ extern const char STR_MENUTOSTART[]; extern const char STR_SETMIDPOINT[]; extern const char STR_MOVESTICKSPOTS[]; extern const char STR_TX[]; +extern const char STR_AXISDIR[]; +extern const char STR_MENUAXISDIR[]; #define STR_RX (STR_TX+OFS_RX) extern const char STR_NODATA[]; extern const char STR_US[]; diff --git a/radio/src/translations/cn.h b/radio/src/translations/cn.h index 57eb44a96..1b8d9bec3 100644 --- a/radio/src/translations/cn.h +++ b/radio/src/translations/cn.h @@ -233,6 +233,7 @@ #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[ENTER]" + #define TR_ENTER_LONG "[ENTER LONG]" #endif #if defined(COLORLCD) @@ -268,6 +269,7 @@ #define TR_TIMER TR("计时器", "计时器 ") #define TR_NO_TIMERS "No timers" #define TR_START "开始" +#define TR_NEXT "Next" #define TR_ELIMITS TR("扩展行程", "扩展通道行程") #define TR_ETRIMS TR("扩展微调", "扩展微调量") #define TR_TRIMINC "微调步幅" @@ -416,12 +418,7 @@ #define TR_CALIBRATION "校准" #define TR_VTRIM "微调-+" #define TR_CALIB_DONE "校准完成" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "按[Enter]键开始校准" - #define TR_SETMIDPOINT "校准中点:摇杆(轴)、旋钮、滑块,按[Enter]保存" - #define TR_MOVESTICKSPOTS "校准边界:摇杆(轴)、旋钮、滑块,按[Enter]保存并完成" -#elif defined(COLORLCD) - #define TR_MENUTOSTART "按[Enter]键开始" +#if defined(COLORLCD) #define TR_SETMIDPOINT "校准中点,按[Enter]保存" #define TR_MOVESTICKSPOTS "校准边界,按[Enter]保存并完成" #else @@ -434,8 +431,10 @@ #define TR_MOVESTICKSPOTS "校准边界" #endif #define TR_MENUWHENDONE TR_ENTER " 完成" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "NO DATA" #define TR_US "us" diff --git a/radio/src/translations/cz.h b/radio/src/translations/cz.h index 3f5b4b1e7..8bf01469b 100644 --- a/radio/src/translations/cz.h +++ b/radio/src/translations/cz.h @@ -245,6 +245,7 @@ #define TR_ENTER "[DALŠÍ]" #else #define TR_ENTER "[ENTER]" + #define TR_ENTER_LONG "[ENTER LONG]" #endif #if defined(PCBHORUS) @@ -261,7 +262,6 @@ #define TR_POPUPS_ENTER_EXIT TR_ENTER "\010" TR_EXIT #endif -#define TR_MENUWHENDONE TR_ENTER " > DALŠÍ" #define TR_FREE TR("volné:", "volných") #define TR_YES "Ano" #define TR_NO "Ne" @@ -281,6 +281,7 @@ #define TR_TIMER "Stopky" #define TR_NO_TIMERS "No timers" #define TR_START "Start" +#define TR_NEXT "Next" #define TR_ELIMITS TR("Limit +25%", "Kanál +/- 125%") #define TR_ETRIMS TR("širší Trim", "Široký trim") #define TR_TRIMINC TR("Krok Trimu", "Krok trimu") @@ -431,12 +432,7 @@ #define TR_CALIBRATION "Kalibrace" #define TR_VTRIM "Trim - +" #define TR_CALIB_DONE "Kalibrace dokončena" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Stiskem [ENTER] začneme" - #define TR_SETMIDPOINT "Vycentruj páky/poty/slidery a stiskni [ENTER]" - #define TR_MOVESTICKSPOTS "Hýbat osy/poty/slidery a stisknout [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER "= START" +#if defined(COLORLCD) #define TR_SETMIDPOINT "VYCENTROVAT OSY/SLIDERY" #define TR_MOVESTICKSPOTS "HÝBAT OSY/POTY" #else @@ -448,8 +444,11 @@ #define TR_SETMIDPOINT TR("NASTAVIT STŘED OSY", "STŘED OSY/SLIDERU") #define TR_MOVESTICKSPOTS "HÝBAT OSY/POTY" #endif + #define TR_MENUWHENDONE TR_ENTER " > DALŠÍ" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "ŽÁDNÁ DATA" #define TR_US "us" diff --git a/radio/src/translations/da.h b/radio/src/translations/da.h index 6e12c1068..0c92afead 100644 --- a/radio/src/translations/da.h +++ b/radio/src/translations/da.h @@ -238,6 +238,7 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NÆSTE]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif @@ -274,6 +275,7 @@ #define TR_TIMER TR("Tid", "Tid ") #define TR_NO_TIMERS "No timers" #define TR_START "Start" +#define TR_NEXT "Next" #define TR_ELIMITS TR("Udv.Grænser", "Udvidet grænser") #define TR_ETRIMS TR("Udv.Trim", "Udvidet trim") #define TR_TRIMINC "Trim øge" @@ -425,21 +427,23 @@ #define TR_CALIBRATION "Kalibrering" #define TR_VTRIM "Trim - +" #define TR_CALIB_DONE "Kalibrering færdig" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Tryk [Enter] for start" - #define TR_SETMIDPOINT "Centrer pinde/drejekontakter/skydere og tryk [Enter]" - #define TR_MOVESTICKSPOTS "Flyt pinde/drejekontakter/skydere og tryk [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " FOR START" +#if defined(COLORLCD) #define TR_SETMIDPOINT "CENTRER PINDE/SKYDER" #define TR_MOVESTICKSPOTS "FLYT PINDE/DREJEKONTAKT" #else #define TR_MENUTOSTART TR_ENTER " FOR START" +#if defined(SURFACE_RADIO) + #define TR_SETMIDPOINT "SET POTS MIDPOINT" + #define TR_MOVESTICKSPOTS "MOVE ST/TH/POTS/AXIS" +#else #define TR_SETMIDPOINT TR("SÆT PINDE I MIDT", "CENTRER PINDE/SKYDERE") #define TR_MOVESTICKSPOTS "FLYT PINDE/DREJEKONTAKTER" - #define TR_MENUWHENDONE TR_ENTER " NÅR FÆRDIG" #endif -#define TR_TXnRX "Tx:\0Rx:" + #define TR_MENUWHENDONE TR_ENTER " NÅR FÆRDIG" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR +#endif +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "INGEN DATA" #define TR_US "us" diff --git a/radio/src/translations/de.h b/radio/src/translations/de.h index 533d79757..b30618f98 100644 --- a/radio/src/translations/de.h +++ b/radio/src/translations/de.h @@ -236,6 +236,7 @@ #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[ENTER]" + #define TR_ENTER_LONG "[ENTER LONG]" #endif #if defined(PCBHORUS) @@ -272,6 +273,7 @@ #define TR_TIMER "Timer" #define TR_NO_TIMERS "No timers" #define TR_START "Start" +#define TR_NEXT "Next" #define TR_ELIMITS TR("Erw. Limit", "Erw. Wege auf 150%") #define TR_ETRIMS TR("Erw. Trims", "Erw. Trim auf 100%") #define TR_TRIMINC TR("Trimschritt", "Trimmschritte") @@ -421,15 +423,9 @@ #define TR_CAL "Kal." #define TR_VTRIM "Trim - +" #define TR_CALIB_DONE "Kalibrierung fertig" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Drücke [Enter] zum Start" - #define TR_SETMIDPOINT "Knüppel/Schieber zentrieren und [Enter]" - #define TR_MOVESTICKSPOTS "Bewege Knüppel/Poti/Schieber und drücke [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " Zum Start" +#if defined(COLORLCD) #define TR_SETMIDPOINT "Knüppel/Schieber zentrieren" #define TR_MOVESTICKSPOTS "Knüppel/Schieber bewegen" - #define TR_MENUWHENDONE TR_ENTER " wenn fertig" #else #define TR_MENUTOSTART TR_ENTER " Zum START" #if defined(SURFACE_RADIO) @@ -440,8 +436,10 @@ #define TR_MOVESTICKSPOTS "BEWEGE KNÜPPEL/SCHIEBER" #endif #define TR_MENUWHENDONE TR_ENTER " wenn fertig" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "Keine Daten" #define TR_US "us" diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index d00004a67..5cae303cb 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -235,6 +235,7 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NEXT]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif @@ -271,6 +272,7 @@ #define TR_TIMER TR("Timer", "Timer ") #define TR_NO_TIMERS "No timers" #define TR_START "Start" +#define TR_NEXT "Next" #define TR_ELIMITS TR("E.Limits", "Extended limits") #define TR_ETRIMS TR("E.Trims", "Extended trims") #define TR_TRIMINC "Trim Step" @@ -420,12 +422,7 @@ #define TR_CALIBRATION "Calibration" #define TR_VTRIM "Trim - +" #define TR_CALIB_DONE "Calibration completed" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Press [Enter] to start" - #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" - #define TR_MOVESTICKSPOTS "Move axis/pots/sliders and press [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " TO START" +#if defined(COLORLCD) #define TR_SETMIDPOINT "CENTER AXIS/SLIDERS" #define TR_MOVESTICKSPOTS "MOVE AXIS/POTS" #else @@ -438,8 +435,10 @@ #define TR_MOVESTICKSPOTS "MOVE AXIS/POTS" #endif #define TR_MENUWHENDONE TR_ENTER " WHEN DONE" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "NO DATA" #define TR_US "us" diff --git a/radio/src/translations/es.h b/radio/src/translations/es.h index 5af384aea..657a1e792 100644 --- a/radio/src/translations/es.h +++ b/radio/src/translations/es.h @@ -231,6 +231,7 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NEXT]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif @@ -249,7 +250,6 @@ #define TR_POPUPS_ENTER_EXIT TR_ENTER "\010" TR_EXIT #endif -#define TR_MENUWHENDONE TR_ENTER " AL ACABAR " #define TR_FREE "libre" #define TR_YES "Yes" #define TR_NO "No" @@ -269,6 +269,7 @@ #define TR_TIMER TR("Timer", "Timer ") #define TR_NO_TIMERS "No timers" #define TR_START "Start" +#define TR_NEXT "Next" #define TR_ELIMITS TR("E.Límite", "Ampliar límites") #define TR_ETRIMS TR("E.Trims", "Ampliar trims") #define TR_TRIMINC "Paso trim" @@ -417,16 +418,23 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim - +" #define TR_CALIB_DONE "Calibration completed" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Presiona [Enter] para empezar" - #define TR_SETMIDPOINT "Centra sticks/pots/sliders y presiona [Enter]" - #define TR_MOVESTICKSPOTS "Mueve sticks, pots and sliders y presiona [Enter]" +#if defined(COLORLCD) + #define TR_SETMIDPOINT "Centra sticks/pots/sliders" + #define TR_MOVESTICKSPOTS "Mueve sticks, pots and sliders" #else #define TR_MENUTOSTART TR_ENTER " EMPEZAR" +#if defined(SURFACE_RADIO) + #define TR_SETMIDPOINT "SET POTS MIDPOINT" + #define TR_MOVESTICKSPOTS "MOVE ST/TH/POTS/AXIS" +#else #define TR_SETMIDPOINT TR("STICKS AL CENTRO", "STICKS AL CENTRO") #define TR_MOVESTICKSPOTS "MOVER STICKS/POTS" #endif -#define TR_TXnRX "Tx:\0Rx:" + #define TR_MENUWHENDONE TR_ENTER " AL ACABAR " +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR +#endif +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "SIN DATOS" #define TR_US "us" diff --git a/radio/src/translations/fi.h b/radio/src/translations/fi.h index 0904b6884..f8335ae1d 100644 --- a/radio/src/translations/fi.h +++ b/radio/src/translations/fi.h @@ -240,6 +240,7 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NEXT]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif @@ -258,7 +259,6 @@ #define TR_POPUPS_ENTER_EXIT TR_ENTER "\010" TR_EXIT #endif -#define TR_MENUWHENDONE TR_ENTER " WHEN DONE" #define TR_FREE "free" #define TR_YES "Yes" #define TR_NO "No" @@ -282,6 +282,7 @@ #define TR_TIMER "Timer" #define TR_NO_TIMERS "No timers" #define TR_START "Start" +#define TR_NEXT "Next" #define TR_ELIMITS TR("E.Limits", "Extended Limits") #define TR_ETRIMS TR("E.Trims", "Extended Trims") #define TR_TRIMINC "Trim Step" @@ -431,16 +432,23 @@ #define TR_CALIBRATION "Calibration" #define TR_VTRIM "Trim - +" #define TR_CALIB_DONE "Calibration completed" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Press [Enter] to start" - #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" - #define TR_MOVESTICKSPOTS "Move sticks, pots and sliders and press [Enter]" +#if defined(COLORLCD) + #define TR_SETMIDPOINT "CENTER AXIS/SLIDERS" + #define TR_MOVESTICKSPOTS "MOVE AXIS/POTS" #else #define TR_MENUTOSTART TR_ENTER " TO START" +#if defined(SURFACE_RADIO) + #define TR_SETMIDPOINT "SET POTS MIDPOINT" + #define TR_MOVESTICKSPOTS "MOVE ST/TH/POTS/AXIS" +#else #define TR_SETMIDPOINT TR("SET STICKS MIDPOINT", "CENTER STICKS/SLIDERS") #define TR_MOVESTICKSPOTS "MOVE STICKS/POTS" #endif -#define TR_TXnRX "Tx:\0Rx:" + #define TR_MENUWHENDONE TR_ENTER " WHEN DONE" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR +#endif +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "NO DATA" #define TR_US "us" diff --git a/radio/src/translations/fr.h b/radio/src/translations/fr.h index 9dce789b7..3f2176722 100644 --- a/radio/src/translations/fr.h +++ b/radio/src/translations/fr.h @@ -240,6 +240,7 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[SUIVANT]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif @@ -257,7 +258,6 @@ #define TR_POPUPS_ENTER_EXIT TR_ENTER "\010" TR_EXIT #endif -#define TR_MENUWHENDONE TR_ENTER " QUAND PRÊT" #define TR_FREE "disp." #define TR_YES "Oui" #define TR_NO "Non" @@ -277,6 +277,7 @@ #define TR_TIMER "Chrono " #define TR_NO_TIMERS "No timers" #define TR_START "Start" +#define TR_NEXT "Next" #define TR_ELIMITS TR("Limites ét.", "Limites étendues") #define TR_ETRIMS TR("Trims ét.", "Trims étendus") #define TR_TRIMINC TR("Pas Trim", "Pas du trim") @@ -427,20 +428,23 @@ #define TR_CALIBRATION "Calibration" #define TR_VTRIM "Trim - +" #define TR_CALIB_DONE "Calibration terminée" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Appui [Enter] pour commencer" - #define TR_SETMIDPOINT "Centrer manches/pots/curseurs puis [Enter]" - #define TR_MOVESTICKSPOTS "Bouger manches/pots/curseurs puis [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " POUR DÉBUTER" +#if defined(COLORLCD) #define TR_SETMIDPOINT "RÉGLER NEUTRES" #define TR_MOVESTICKSPOTS "BOUGER STICKS/POTS" #else #define TR_MENUTOSTART TR_ENTER " POUR DÉBUT" +#if defined(SURFACE_RADIO) + #define TR_SETMIDPOINT "SET POTS MIDPOINT" + #define TR_MOVESTICKSPOTS "MOVE ST/TH/POTS/AXIS" +#else #define TR_SETMIDPOINT "REGLER NEUTRES" #define TR_MOVESTICKSPOTS "BOUGER STICKS/POTS" #endif -#define TR_TXnRX "Tx:\0Rx:" + #define TR_MENUWHENDONE TR_ENTER " QUAND PRÊT" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR +#endif +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "NO DATA" #define TR_US "us" diff --git a/radio/src/translations/he.h b/radio/src/translations/he.h index 74ff9e043..b478dc72d 100644 --- a/radio/src/translations/he.h +++ b/radio/src/translations/he.h @@ -239,6 +239,7 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NEXT]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif @@ -275,6 +276,7 @@ #define TR_TIMER TR("שעון", "שעון ") #define TR_NO_TIMERS "No timers" #define TR_START "התחלה" +#define TR_NEXT "Next" #define TR_ELIMITS TR("E.Limits", "הרחב תצוגות") #define TR_ETRIMS TR("E.Trims", "הרחב תצוגות") #define TR_TRIMINC "רגישות קיזוז" @@ -424,21 +426,23 @@ #define TR_CALIBRATION "כיול" #define TR_VTRIM "קיזוז - +" #define TR_CALIB_DONE "כיול הושלם" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Press [Enter] to start" - #define TR_SETMIDPOINT "Center sticks/pots/sliders and press [Enter]" - #define TR_MOVESTICKSPOTS "Move sticks/pots/sliders and press [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " TO START" +#if defined(COLORLCD) #define TR_SETMIDPOINT "CENTER STICKS/SLIDERS" #define TR_MOVESTICKSPOTS "MOVE STICKS/POTS" #else #define TR_MENUTOSTART TR_ENTER " TO START" +#if defined(SURFACE_RADIO) + #define TR_SETMIDPOINT "SET POTS MIDPOINT" + #define TR_MOVESTICKSPOTS "MOVE ST/TH/POTS/AXIS" +#else #define TR_SETMIDPOINT TR("SET STICKS MIDPOINT", "CENTER STICKS/SLIDERS") #define TR_MOVESTICKSPOTS "MOVE STICKS/POTS" - #define TR_MENUWHENDONE TR_ENTER " WHEN DONE" #endif -#define TR_TXnRX "Tx:\0Rx:" + #define TR_MENUWHENDONE TR_ENTER " WHEN DONE" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR +#endif +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "NO DATA" #define TR_US "us" diff --git a/radio/src/translations/it.h b/radio/src/translations/it.h index 56d4ce1ac..6b995de48 100644 --- a/radio/src/translations/it.h +++ b/radio/src/translations/it.h @@ -235,6 +235,7 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NEXT]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif @@ -271,6 +272,7 @@ #define TR_TIMER TR("Timer", "Timer ") #define TR_NO_TIMERS "No timers" #define TR_START "Avvio" +#define TR_NEXT "Next" #define TR_ELIMITS TR("Lim. Est.", "Limiti Estesi") #define TR_ETRIMS TR("Trim Est.", "Trim Estesi") #define TR_TRIMINC "Fasi Trim" @@ -420,12 +422,7 @@ #define TR_CALIBRATION "Calibrazione" #define TR_VTRIM "Trim - +" #define TR_CALIB_DONE "Calibratione completa" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Premi [ENT] per iniziare" - #define TR_SETMIDPOINT "Centra sticks/pots/sliders e premi [ENT]" - #define TR_MOVESTICKSPOTS "Muovi sticks/pots/sliders e premi [ENT]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " PER INIZIO" +#if defined(COLORLCD) #define TR_SETMIDPOINT "CENTRA STICKS/SLIDERS" #define TR_MOVESTICKSPOTS "MUOVI STICKS/POTS" #else @@ -438,8 +435,10 @@ #define TR_MOVESTICKSPOTS "MUOVI ASSI/POTS" #endif #define TR_MENUWHENDONE TR_ENTER " PER FINIRE" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "DATI ASSENTI" #define TR_US "us" diff --git a/radio/src/translations/jp.h b/radio/src/translations/jp.h index 6d8fc35c7..2b12aaa56 100644 --- a/radio/src/translations/jp.h +++ b/radio/src/translations/jp.h @@ -234,6 +234,7 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NEXT]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif @@ -270,6 +271,7 @@ #define TR_TIMER TR("タイマー", "タイマー ") #define TR_NO_TIMERS "No timers" #define TR_START "スタート" +#define TR_NEXT "Next" #define TR_ELIMITS TR("E.Limit", "リミット拡張") #define TR_ETRIMS TR("E.Trims", "トリム拡張") #define TR_TRIMINC "トリムステップ" @@ -419,12 +421,7 @@ #define TR_CALIBRATION "キャリブレーション" #define TR_VTRIM "トリム - +" #define TR_CALIB_DONE "キャリブレーション 完了" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "[Enter]を押してスタート" - #define TR_SETMIDPOINT "スティック/ダイヤル/スライダーを中央にして[Enter]" - #define TR_MOVESTICKSPOTS "スティック/ダイヤル/スライダーを動かして[Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " スタート" +#if defined(COLORLCD) #define TR_SETMIDPOINT "スティック/スライダーを中央に合わせます" #define TR_MOVESTICKSPOTS "スティック/スライダーを動かします" #else @@ -437,8 +434,10 @@ #define TR_MOVESTICKSPOTS "MOVE AXIS/POTS" #endif #define TR_MENUWHENDONE TR_ENTER " WHEN DONE" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "NO DATA" #define TR_US "us" diff --git a/radio/src/translations/ko.h b/radio/src/translations/ko.h index 2b6875bdb..ce936eca3 100644 --- a/radio/src/translations/ko.h +++ b/radio/src/translations/ko.h @@ -275,6 +275,7 @@ #define TR_TIMER TR("타이머", "타이머 ") #define TR_NO_TIMERS "No timers" #define TR_START "시작" +#define TR_NEXT "Next" #define TR_ELIMITS TR("확장 제한", "익스텐디드 리밋") #define TR_ETRIMS TR("확장 트림", "익스텐디드 트림") #define TR_TRIMINC "트림 단계" @@ -440,13 +441,7 @@ #define TR_VTRIM "트림 - +" #define TR_CALIB_DONE "보정 완료" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "시작하려면 [ENTER]를 누르세요" - #define TR_SETMIDPOINT "스틱/포트/슬라이더를 중앙에 맞춘 후 [ENTER]" - #define TR_MOVESTICKSPOTS "스틱/포트/슬라이더를 움직이고 [ENTER]" - -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " -> 시작" +#if defined(COLORLCD) #define TR_SETMIDPOINT "스틱/슬라이더 중앙 정렬" #define TR_MOVESTICKSPOTS "스틱/포트 이동" #else @@ -459,9 +454,10 @@ #define TR_MOVESTICKSPOTS "스틱/포트 이동" #endif #define TR_MENUWHENDONE TR_ENTER " -> 완료" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif - -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "데이터 없음" #define TR_US "us" diff --git a/radio/src/translations/nl.h b/radio/src/translations/nl.h index daa8d5368..729722a57 100644 --- a/radio/src/translations/nl.h +++ b/radio/src/translations/nl.h @@ -232,6 +232,7 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NEXT]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif @@ -268,6 +269,7 @@ #define TR_TIMER TR("Timer", "Timer ") #define TR_NO_TIMERS "No timers" #define TR_START "Start" +#define TR_NEXT "Next" #define TR_ELIMITS TR("E.Limits", "Extended Limits") #define TR_ETRIMS TR("E.Trims", "Extended Trims") #define TR_TRIMINC "Trim Step" @@ -418,22 +420,23 @@ #define TR_CALIBRATION "Calibration" #define TR_VTRIM "Trim - +" #define TR_CALIB_DONE "Calibration completed" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Geef [Enter] om te starten" - #define TR_SETMIDPOINT "Centreer sticks/pots/schuiven en geef [Enter]" - #define TR_MOVESTICKSPOTS "Beweeg sticks/pots/schuiven en geef [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " VOOR START" +#if defined(COLORLCD) #define TR_SETMIDPOINT "CENTREER STICKS/SLIDERS" #define TR_MOVESTICKSPOTS "BEWEEG STICKS/POTS" - #define TR_MENUWHENDONE TR_ENTER " BIJ GEREED" #else #define TR_MENUTOSTART TR_ENTER " VOOR START" +#if defined(SURFACE_RADIO) + #define TR_SETMIDPOINT "SET POTS MIDPOINT" + #define TR_MOVESTICKSPOTS "MOVE ST/TH/POTS/AXIS" +#else #define TR_SETMIDPOINT TR("ZET STICKS NAAR HET MIDDEN", "CENTREER STICKS/SLIDERS") #define TR_MOVESTICKSPOTS "BEWEEG STICKS/POTS" - #define TR_MENUWHENDONE TR_ENTER " BIJ GEREED" #endif -#define TR_TXnRX "Tx:\0Rx:" + #define TR_MENUWHENDONE TR_ENTER " BIJ GEREED" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR +#endif +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "Geen Data" #define TR_US "us" diff --git a/radio/src/translations/pl.h b/radio/src/translations/pl.h index 77e4d9eb3..24846cf19 100644 --- a/radio/src/translations/pl.h +++ b/radio/src/translations/pl.h @@ -231,9 +231,9 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NEXT]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif - #if defined(PCBHORUS) #define TR_EXIT "RTN" #define TR_OK TR_ENTER @@ -268,6 +268,7 @@ #define TR_TIMER TR("Timer", "Timer ") #define TR_NO_TIMERS "No timers" #define TR_START "Start" +#define TR_NEXT "Next" #define TR_ELIMITS TR("Limi+25%", "Kanał +/- 125% ") #define TR_ETRIMS TR("E.Trym ", "Poszer Trymery") #define TR_TRIMINC "Krok Trym" @@ -417,12 +418,7 @@ #define TR_CALIBRATION "Kalibracja" #define TR_VTRIM "Trym - +" #define TR_CALIB_DONE "Kalibracja zakończona" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Naciśnij [Enter] aby zacząć" - #define TR_SETMIDPOINT "Centruj drążki/pot./suwaki i naciśnij [Enter]" - #define TR_MOVESTICKSPOTS "Poruszaj drążki/pot./suwaki i naciśnij [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " TO START" +#if defined(COLORLCD) #define TR_SETMIDPOINT "CENTRUJ DRĄŻKI/SUWAKI" #define TR_MOVESTICKSPOTS "RUSZAJ DRĄŻKI/SUWAKI" #else @@ -435,8 +431,10 @@ #define TR_MOVESTICKSPOTS "RUSZAJ DRĄŻKI/POT." #endif #define TR_MENUWHENDONE TR_ENTER " = KONIEC" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "Brak Danych" #define TR_US "us" diff --git a/radio/src/translations/pt.h b/radio/src/translations/pt.h index 5c7f498a9..cd9110069 100644 --- a/radio/src/translations/pt.h +++ b/radio/src/translations/pt.h @@ -238,6 +238,7 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NEXT]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif @@ -274,6 +275,7 @@ #define TR_TIMER "Crono" #define TR_NO_TIMERS "No timers" #define TR_START "Iniciar" +#define TR_NEXT "Next" #define TR_ELIMITS TR("E.Limites", "Limites extend.") #define TR_ETRIMS TR("E.Trims", "Trims extend.") #define TR_TRIMINC "PassoTrim" @@ -423,12 +425,7 @@ #define TR_CALIBRATION "Calibração" #define TR_VTRIM "Trim - +" #define TR_CALIB_DONE "Calibração completa" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Press [Enter] p/ iniciar" - #define TR_SETMIDPOINT "Centrar eixos/pots/sliders e press. [Enter]" - #define TR_MOVESTICKSPOTS "Mova eixos/pots/sliders e press. [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " P/ INICIAR" +#if defined(COLORLCD) #define TR_SETMIDPOINT "CENTRE EIXO/SLIDERS" #define TR_MOVESTICKSPOTS "MOVA EIXO/POTS" #else @@ -441,8 +438,10 @@ #define TR_MOVESTICKSPOTS "MOVA AXIS/POTS" #endif #define TR_MENUWHENDONE TR_ENTER " QUANDO TERM." +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "SEM DADOS" #define TR_US "us" diff --git a/radio/src/translations/ru.h b/radio/src/translations/ru.h index b56163565..909488df4 100644 --- a/radio/src/translations/ru.h +++ b/radio/src/translations/ru.h @@ -235,6 +235,7 @@ #endif #if defined(PCBFRSKY) + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENT]" #elif defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[ДАЛЕЕ]" @@ -275,6 +276,7 @@ #define TR_TIMER TR("Таймер", "Таймер ") #define TR_NO_TIMERS "No timers" #define TR_START "Старт" +#define TR_NEXT "Next" #define TR_ELIMITS TR("расш лимит", "Расш лимит") #define TR_ETRIMS TR("Расш трим", "Расш тримы") #define TR_TRIMINC "Шаг трима" @@ -424,12 +426,7 @@ #define TR_CALIBRATION "Калибровка" #define TR_VTRIM "Трим - +" #define TR_CALIB_DONE "Калибровка заверш" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Наж [Enter] для прод" - #define TR_SETMIDPOINT "Выставить по центру стики/потенц/слайдеры и нажать [Enter]" - #define TR_MOVESTICKSPOTS "Перемещ стики/потенц/слайдеры и нажать [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " СТАРТ" +#if defined(COLORLCD) #define TR_SETMIDPOINT "ЦЕНТР СТИКИ/СЛАЙДЕРЫ" #define TR_MOVESTICKSPOTS "Перемещ СТИКИ/ПОТЕНЦ" #else @@ -442,8 +439,10 @@ #define TR_MOVESTICKSPOTS "ДВИГ СТИКИ/ПОТЕНЦ" #endif #define TR_MENUWHENDONE TR_ENTER " ПО ОКОНЧАНИЮ" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "НЕТ ДАННЫХ" #define TR_US "US" diff --git a/radio/src/translations/se.h b/radio/src/translations/se.h index 61a1ef23a..fd9ae613e 100644 --- a/radio/src/translations/se.h +++ b/radio/src/translations/se.h @@ -245,6 +245,7 @@ #if defined(PCBFRSKY) + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #elif defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NÄSTA]" @@ -285,6 +286,7 @@ #define TR_TIMER TR("Timer","Timer ") #define TR_NO_TIMERS "No timers" #define TR_START "Start" +#define TR_NEXT "Next" #define TR_ELIMITS TR("Gränser++","Utökade gränser") #define TR_ETRIMS TR("Trimmar++","Utökade trimmar") #define TR_TRIMINC TR("Trimning","Trimmökning") @@ -437,12 +439,7 @@ #define TR_VTRIM "Trimm - +" #define TR_CALIB_DONE "Kalibrering färdig" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Tryck [Enter] för att börja" - #define TR_SETMIDPOINT "Centrera axlar/vred/reglage och tryck [Enter]" - #define TR_MOVESTICKSPOTS "Rör axlar/vred/reglage och tryck [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " FÖR ATT STARTA" +#if defined(COLORLCD) #define TR_SETMIDPOINT "CENTRERA AXLAR/REGLAGE" #define TR_MOVESTICKSPOTS "RÖR AXLAR/VRED" #else @@ -455,9 +452,10 @@ #define TR_MOVESTICKSPOTS "RÖR AXLAR/VRED" #endif #define TR_MENUWHENDONE TR_ENTER " AVSLUTAR" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif - -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "DATA SAKNAS" #define TR_US "us" diff --git a/radio/src/translations/tw.h b/radio/src/translations/tw.h index d1af6beaa..ead408f46 100644 --- a/radio/src/translations/tw.h +++ b/radio/src/translations/tw.h @@ -237,8 +237,10 @@ #if defined(PCBNV14) || defined(PCBPL18) #define TR_ENTER "[NEXT]" #else + #define TR_ENTER_LONG "[ENTER LONG]" #define TR_ENTER "[ENTER]" #endif + #if defined(COLORLCD) #define TR_EXIT "RTN" #define TR_OK TR_ENTER @@ -272,6 +274,7 @@ #define TR_TIMER TR("計時器", "計時器 ") #define TR_NO_TIMERS "No timers" #define TR_START "開始" +#define TR_NEXT "Next" #define TR_ELIMITS TR("擴展行程", "擴展通道行程") #define TR_ETRIMS TR("擴展微調", "擴展微調量") #define TR_TRIMINC "微調步幅" @@ -420,12 +423,7 @@ #define TR_CALIBRATION "校準" #define TR_VTRIM "微調-+" #define TR_CALIB_DONE "校準完成" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "按[Enter]鍵開始校準" - #define TR_SETMIDPOINT "校準中點:搖桿(軸)、旋鈕、滑塊,按[Enter]保存" - #define TR_MOVESTICKSPOTS "校準邊界:搖桿(軸)、旋鈕、滑塊,按[Enter]保存並完成" -#elif defined(COLORLCD) - #define TR_MENUTOSTART "按[Enter]鍵開始" +#if defined(COLORLCD) #define TR_SETMIDPOINT "校準中點,按[Enter]保存" #define TR_MOVESTICKSPOTS "校準邊界,按[Enter]保存並完成" #else @@ -438,8 +436,10 @@ #define TR_MOVESTICKSPOTS "校準邊界" #endif #define TR_MENUWHENDONE TR_ENTER " 完成" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "NO DATA" #define TR_US "us" diff --git a/radio/src/translations/ua.h b/radio/src/translations/ua.h index bd2b882d4..ac50b868a 100644 --- a/radio/src/translations/ua.h +++ b/radio/src/translations/ua.h @@ -235,9 +235,10 @@ #endif #if defined(PCBNV14) || defined(PCBPL18) - #define TR_ENTER "[NEXT]" /* use english */ + #define TR_ENTER "[NEXT]" #else - #define TR_ENTER "[ENTER]" /* use english */ + #define TR_ENTER_LONG "[ENTER LONG]" + #define TR_ENTER "[ENTER]" #endif #if defined(COLORLCD) @@ -273,6 +274,7 @@ #define TR_TIMER TR("Таймер", "Таймер ") #define TR_NO_TIMERS "No timers" #define TR_START "Start" /* use english */ +#define TR_NEXT "Next" #define TR_ELIMITS TR("Розш.Ліміт", "Розширені Ліміти") #define TR_ETRIMS TR("Розш.Трим.", "Розширене Обрізання") /* ned to be clarified by context */ #define TR_TRIMINC "Крок трим." @@ -422,12 +424,7 @@ #define TR_CALIBRATION "Калібрув." #define TR_VTRIM "Трим - +" #define TR_CALIB_DONE "Калібрування завершене" -#if defined(PCBHORUS) - #define TR_MENUTOSTART "Тисни [Enter] для старту" - #define TR_SETMIDPOINT "Центруй важіль/потенц./повзунки та тисни [Enter]" - #define TR_MOVESTICKSPOTS "Рухайте вісі/потенц./повзунки та тисніть [Enter]" -#elif defined(COLORLCD) - #define TR_MENUTOSTART TR_ENTER " ДЛЯ СТАРТУ" +#if defined(COLORLCD) #define TR_SETMIDPOINT "ЦЕНТРУВАТИ ВАЖЕЛІ/ПОВЗУНКИ" #define TR_MOVESTICKSPOTS "РУХАЙТЕ ВІСІ/ПОТЕНЦ." #else @@ -440,8 +437,10 @@ #define TR_MOVESTICKSPOTS "РУХАЙТЕ ВІСІ/ПОТЕНЦ." #endif #define TR_MENUWHENDONE TR_ENTER " КОЛИ ЗАКІНЧЕНО" +#define TR_AXISDIR "AXIS DIR" +#define TR_MENUAXISDIR TR_ENTER_LONG " " TR_AXISDIR #endif -#define TR_TXnRX "Tx:\0Rx:" +#define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_NODATA "НЕМАЄ ДАНИХ" #define TR_US "us"