diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 1d417884a..9f375411f 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -56,7 +56,7 @@ void Boards::setBoardType(const Type & board) uint32_t Boards::getFourCC(Type board) { switch (board) { - case BOARD_X12S: + case BOARD_HORUS_X12S: return 0x3478746F; case BOARD_X10: case BOARD_X10_EXPRESS: @@ -82,8 +82,8 @@ uint32_t Boards::getFourCC(Type board) case BOARD_MEGA2560: case BOARD_GRUVIN9X: return 0x3178746F; - case BOARD_STOCK: - case BOARD_M128: + case BOARD_9X_M64: + case BOARD_9X_M128: return 0; case BOARD_JUMPER_T12: return 0x3D78746F; @@ -97,9 +97,9 @@ uint32_t Boards::getFourCC(Type board) int Boards::getEEpromSize(Board::Type board) { switch (board) { - case BOARD_STOCK: + case BOARD_9X_M64: return EESIZE_STOCK; - case BOARD_M128: + case BOARD_9X_M128: return EESIZE_M128; case BOARD_MEGA2560: case BOARD_GRUVIN9X: @@ -121,7 +121,7 @@ int Boards::getEEpromSize(Board::Type board) return EESIZE_TARANIS; case BOARD_UNKNOWN: return EESIZE_MAX; - case BOARD_X12S: + case BOARD_HORUS_X12S: case BOARD_X10: case BOARD_X10_EXPRESS: return 0; @@ -133,9 +133,9 @@ int Boards::getEEpromSize(Board::Type board) int Boards::getFlashSize(Type board) { switch (board) { - case BOARD_STOCK: + case BOARD_9X_M64: return FSIZE_STOCK; - case BOARD_M128: + case BOARD_9X_M128: return FSIZE_M128; case BOARD_MEGA2560: case BOARD_GRUVIN9X: @@ -155,7 +155,7 @@ int Boards::getFlashSize(Type board) case BOARD_TARANIS_X9E: case BOARD_JUMPER_T12: return FSIZE_TARANIS; - case BOARD_X12S: + case BOARD_HORUS_X12S: case BOARD_X10: case BOARD_X10_EXPRESS: return FSIZE_HORUS; @@ -479,9 +479,9 @@ bool Boards::isBoardCompatible(Type board1, Type board2) QString Boards::getBoardName(Board::Type board) { switch (board) { - case BOARD_STOCK: + case BOARD_9X_M64: return "9X"; - case BOARD_M128: + case BOARD_9X_M128: return "9X128"; case BOARD_GRUVIN9X: return "Gruvin9x"; @@ -511,7 +511,7 @@ QString Boards::getBoardName(Board::Type board) return "9XR-PRO"; case BOARD_AR9X: return "AR9X"; - case BOARD_X12S: + case BOARD_HORUS_X12S: return "Horus X12S"; case BOARD_X10: return "Horus X10/X10S"; diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index 7fdfe0349..06a7a0f04 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -32,8 +32,8 @@ namespace Board { enum Type { BOARD_UNKNOWN = -1, - BOARD_STOCK = 0, - BOARD_M128, + BOARD_9X_M64 = 0, + BOARD_9X_M128, BOARD_MEGA2560, BOARD_GRUVIN9X, BOARD_SKY9X, @@ -44,7 +44,7 @@ namespace Board { BOARD_TARANIS_X9DP, BOARD_TARANIS_X9DP_2019, BOARD_TARANIS_X9E, - BOARD_X12S, + BOARD_HORUS_X12S, BOARD_X10, BOARD_X10_EXPRESS, BOARD_TARANIS_XLITE, @@ -187,29 +187,129 @@ class Boards // temporary aliases for transition period, use Boards class instead. #define getBoardCapability(b__, c__) Boards::getCapability(b__, c__) -#define IS_9X(board) (board==Board::BOARD_STOCK || board==Board::BOARD_M128) -#define IS_STOCK(board) (board==Board::BOARD_STOCK) -#define IS_M128(board) (board==Board::BOARD_M128) -#define IS_2560(board) (board==Board::BOARD_GRUVIN9X || board==Board::BOARD_MEGA2560) -#define IS_SKY9X(board) (board==Board::BOARD_SKY9X || board==Board::BOARD_9XRPRO || board==Board::BOARD_AR9X) -#define IS_9XRPRO(board) (board==Board::BOARD_9XRPRO) -#define IS_JUMPER_T12(board) (board==Board::BOARD_JUMPER_T12) -#define IS_TARANIS_XLITE(board) (board==Board::BOARD_TARANIS_XLITE || board==Board::BOARD_TARANIS_XLITES) -#define IS_TARANIS_XLITES(board) (board==Board::BOARD_TARANIS_XLITES) -#define IS_TARANIS_X7(board) (board==Board::BOARD_TARANIS_X7) -#define IS_TARANIS_X9LITE(board) (board==Board::BOARD_TARANIS_X9LITE) -#define IS_TARANIS_X9(board) (board==Board::BOARD_TARANIS_X9D || board==Board::BOARD_TARANIS_X9DP || board==Board::BOARD_TARANIS_X9DP_2019 || board==Board::BOARD_TARANIS_X9E) -#define IS_TARANIS_X9D(board) (board==Board::BOARD_TARANIS_X9D || board==Board::BOARD_TARANIS_X9DP || board==Board::BOARD_TARANIS_X9DP_2019) -#define IS_TARANIS_PLUS(board) (board==Board::BOARD_TARANIS_X9DP || board==Board::BOARD_TARANIS_X9E) -#define IS_TARANIS_X9E(board) (board==Board::BOARD_TARANIS_X9E) -#define IS_TARANIS(board) (IS_TARANIS_X9(board) || IS_TARANIS_X7(board) || IS_TARANIS_X9LITE(board) || IS_TARANIS_XLITE(board) || IS_JUMPER_T12(board)) -#define IS_TARANIS_SMALL(board) (IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board) || IS_TARANIS_X9LITE(board) || IS_JUMPER_T12(board)) -#define IS_HORUS_X12S(board) (board==Board::BOARD_X12S) -#define IS_HORUS_X10(board) (board==Board::BOARD_X10 || board==Board::BOARD_X10_EXPRESS) -#define IS_HORUS(board) (IS_HORUS_X12S(board) || IS_HORUS_X10(board)) -#define IS_HORUS_OR_TARANIS(board) (IS_HORUS(board) || IS_TARANIS(board)) -#define IS_STM32(board) (IS_TARANIS(board) || IS_HORUS(board)) -#define IS_ARM(board) (IS_STM32(board) || IS_SKY9X(board)) -#define HAS_LARGE_LCD(board) (IS_HORUS(board) || IS_TARANIS_X9(board)) +inline bool IS_9X(Board::Type board) +{ + return board == Board::BOARD_9X_M64 || board == Board::BOARD_9X_M128; +} + +inline bool IS_STOCK(Board::Type board) +{ + return board == Board::BOARD_9X_M64; +} + +inline bool IS_M128(Board::Type board) +{ + return board == Board::BOARD_9X_M128; +} + +inline bool IS_2560(Board::Type board) +{ + return board == Board::BOARD_GRUVIN9X || board == Board::BOARD_MEGA2560; +} + +inline bool IS_SKY9X(Board::Type board) +{ + return board == Board::BOARD_SKY9X || board == Board::BOARD_9XRPRO || board == Board::BOARD_AR9X; +} + +inline bool IS_9XRPRO(Board::Type board) +{ + return board == Board::BOARD_9XRPRO; +} + +inline bool IS_JUMPER_T12(Board::Type board) +{ + return board == Board::BOARD_JUMPER_T12; +} + +inline bool IS_TARANIS_XLITE(Board::Type board) +{ + return board == Board::BOARD_TARANIS_XLITE || board == Board::BOARD_TARANIS_XLITES; +} + +inline bool IS_TARANIS_XLITES(Board::Type board) +{ + return board == Board::BOARD_TARANIS_XLITES; +} + +inline bool IS_TARANIS_X7(Board::Type board) +{ + return board == Board::BOARD_TARANIS_X7; +} + +inline bool IS_TARANIS_X9LITE(Board::Type board) +{ + return board == Board::BOARD_TARANIS_X9LITE; +} + +inline bool IS_TARANIS_X9(Board::Type board) +{ + return board==Board::BOARD_TARANIS_X9D || board==Board::BOARD_TARANIS_X9DP || board==Board::BOARD_TARANIS_X9DP_2019 || board==Board::BOARD_TARANIS_X9E; +} + +inline bool IS_TARANIS_X9D(Board::Type board) +{ + return board == Board::BOARD_TARANIS_X9D || board == Board::BOARD_TARANIS_X9DP || board == Board::BOARD_TARANIS_X9DP_2019; +} + +inline bool IS_TARANIS_PLUS(Board::Type board) +{ + return board == Board::BOARD_TARANIS_X9DP || board == Board::BOARD_TARANIS_X9E; +} + +inline bool IS_TARANIS_X9E(Board::Type board) +{ + return board == Board::BOARD_TARANIS_X9E; +} + +inline bool IS_TARANIS(Board::Type board) +{ + return IS_TARANIS_X9(board) || IS_TARANIS_X7(board) || IS_TARANIS_X9LITE(board) || IS_TARANIS_XLITE(board) || IS_JUMPER_T12(board); +} + +inline bool IS_TARANIS_SMALL(Board::Type board) +{ + return IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board) || IS_TARANIS_X9LITE(board) || IS_JUMPER_T12(board); +} + +inline bool IS_HORUS_X10(Board::Type board) +{ + return board == Board::BOARD_X10 || board == Board::BOARD_X10_EXPRESS; +} + +inline bool IS_HORUS_X12S(Board::Type board) +{ + return board == Board::BOARD_HORUS_X12S; +} + +inline bool IS_HORUS(Board::Type board) +{ + return IS_HORUS_X12S(board) || IS_HORUS_X10(board); +} + +inline bool IS_HORUS_OR_TARANIS(Board::Type board) +{ + return IS_HORUS(board) || IS_TARANIS(board); +} + +inline bool IS_STM32(Board::Type board) +{ + return IS_TARANIS(board) || IS_HORUS(board); +} + +inline bool IS_ARM(Board::Type board) +{ + return IS_STM32(board) || IS_SKY9X(board); +} + +inline bool HAS_LARGE_LCD(Board::Type board) +{ + return IS_HORUS(board) || IS_TARANIS_X9(board); +} + +inline bool HAS_EXTERNAL_ANTENNA(Board::Type board) +{ + return (IS_HORUS(board) && board != Board::BOARD_X10_EXPRESS) || (IS_TARANIS_XLITE(board) && !IS_TARANIS_XLITES(board)); +} #endif // _BOARDS_H_ diff --git a/companion/src/firmwares/er9x/er9xinterface.cpp b/companion/src/firmwares/er9x/er9xinterface.cpp index 65bc81804..2905a94a8 100644 --- a/companion/src/firmwares/er9x/er9xinterface.cpp +++ b/companion/src/firmwares/er9x/er9xinterface.cpp @@ -32,7 +32,7 @@ #define FILE_MODEL(n) (1+n) Er9xInterface::Er9xInterface(): - EEPROMInterface(Board::BOARD_STOCK), + EEPROMInterface(Board::BOARD_9X_M64), efile(new RleFile()) { } @@ -120,13 +120,13 @@ unsigned long Er9xInterface::load(RadioData &radioData, const uint8_t *eeprom, i std::bitset errors; - if (size != Boards::getEEpromSize(Board::BOARD_STOCK)) { + if (size != Boards::getEEpromSize(Board::BOARD_9X_M64)) { dbg << "wrong size"; errors.set(WRONG_SIZE); return errors.to_ulong(); } - if (!efile->EeFsOpen((uint8_t *)eeprom, size, Board::BOARD_STOCK)) { + if (!efile->EeFsOpen((uint8_t *)eeprom, size, Board::BOARD_9X_M64)) { dbg << "wrong file system"; errors.set(WRONG_FILE_SYSTEM); return errors.to_ulong(); diff --git a/companion/src/firmwares/generalsettings.h b/companion/src/firmwares/generalsettings.h index 72cef8ccb..f3b415ec4 100644 --- a/companion/src/firmwares/generalsettings.h +++ b/companion/src/firmwares/generalsettings.h @@ -151,7 +151,8 @@ class GeneralSettings { int backgroundVolume; unsigned int mavbaud; unsigned int switchUnlockStates; - unsigned int auxSerialMode; // UartModes + unsigned int auxSerialMode; + int antennaMode; unsigned int backlightColor; CustomFunctionData customFn[CPN_MAX_SPECIAL_FUNCTIONS]; char switchName[CPN_MAX_SWITCHES][3+1]; diff --git a/companion/src/firmwares/moduledata.cpp b/companion/src/firmwares/moduledata.cpp index 4a9e59a29..50310c5d0 100644 --- a/companion/src/firmwares/moduledata.cpp +++ b/companion/src/firmwares/moduledata.cpp @@ -96,10 +96,6 @@ QString ModuleData::subTypeToString(int type) const QString ModuleData::powerValueToString(Firmware * fw) const { const QStringList & strRef = powerValueStrings(subType, fw); - // EU module with telemetry can only be < 100/200mW. - if (pxx.sport_out && subType == MODULE_SUBTYPE_R9M_EU && pxx.power > 1) - return CPN_STR_UNKNOWN_ITEM; - return strRef.value(pxx.power, CPN_STR_UNKNOWN_ITEM); } diff --git a/companion/src/firmwares/moduledata.h b/companion/src/firmwares/moduledata.h index 72d7cff07..5d86c2876 100644 --- a/companion/src/firmwares/moduledata.h +++ b/companion/src/firmwares/moduledata.h @@ -169,10 +169,9 @@ class ModuleData { struct PXX { unsigned int power; // 0 10 mW, 1 100 mW, 2 500 mW, 3 1W - bool receiver_telem_off; // false = receiver telem enabled - bool receiver_channel_9_16; // false = pwm out 1-8, true 9-16 - bool external_antenna; // false = internal antenna, true = external antenna - bool sport_out; + bool receiverTelemetryOff; // false = receiver telem enabled + bool receiverHigherChannels; // false = pwm out 1-8, true 9-16 + int antennaMode; // false = internal antenna, true = external antenna } pxx; struct Access { diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 7c4292ecf..56b34e236 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -716,7 +716,7 @@ class FlightModeField: public TransformedField { trim = 501 + phase.trimRef[i] - (phase.trimRef[i] > index ? 1 : 0); else trim = std::max(-500, std::min(500, phase.trim[i])); - if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) { + if (board == BOARD_9X_M64 || (board == BOARD_9X_M128 && version >= 215)) { trimBase[i] = trim >> 2; trimExt[i] = (trim & 0x03); } @@ -747,7 +747,7 @@ class FlightModeField: public TransformedField { } else { int trim; - if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) + if (board == BOARD_9X_M64 || (board == BOARD_9X_M128 && version >= 215)) trim = ((trimBase[i]) << 2) + (trimExt[i] & 0x03); else trim = trimBase[i]; @@ -1302,7 +1302,7 @@ class LogicalSwitchField: public TransformedField { } } - ~LogicalSwitchField() override + ~LogicalSwitchField() override = default; void beforeExport() override @@ -2067,10 +2067,10 @@ class ModuleUnionField: public UnionField { ModuleData::PXX& pxx = module.pxx; internalField.Append(new UnsignedField<2>(this, pxx.power)); internalField.Append(new SpareBitsField<2>(this)); - internalField.Append(new BoolField<1>(this, pxx.receiver_telem_off)); - internalField.Append(new BoolField<1>(this, pxx.receiver_channel_9_16)); - internalField.Append(new BoolField<1>(this, pxx.external_antenna)); - internalField.Append(new BoolField<1>(this, pxx.sport_out)); + internalField.Append(new BoolField<1>(this, pxx.receiverTelemetryOff)); + internalField.Append(new BoolField<1>(this, pxx.receiverHigherChannels)); + internalField.Append(new SignedField<2>(this, pxx.antennaMode)); + internalField.Append(new SpareBitsField<8>(this)); } bool select(const unsigned int& attr) const override { @@ -2558,12 +2558,19 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type } internalField.Append(new UnsignedField<8>(this, generalData.vBatWarn)); internalField.Append(new SignedField<8>(this, generalData.txVoltageCalibration)); - internalField.Append(new SignedField<8>(this, generalData.backlightMode)); - for (int i=0; i(this, generalData.backlightMode)); + if (version >= 219) + internalField.Append(new SignedField<2>(this, generalData.antennaMode)); + else + internalField.Append(new SpareBitsField<2>(this)); + internalField.Append(new SpareBitsField<3>(this)); + + for (int i=0; i<4; i++) { internalField.Append(new SignedField<16>(this, generalData.trainer.calib[i])); } - for (int i=0; i(this, generalData.trainer.mix[i].src)); internalField.Append(new UnsignedField<2>(this, generalData.trainer.mix[i].mode)); internalField.Append(new SignedField<8>(this, generalData.trainer.mix[i].weight)); diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index b92aeb98a..3ba4f2a7a 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -58,9 +58,9 @@ OpenTxEepromInterface::~OpenTxEepromInterface() const char * OpenTxEepromInterface::getName() { switch (board) { - case BOARD_STOCK: + case BOARD_9X_M64: return "OpenTX for 9X board"; - case BOARD_M128: + case BOARD_9X_M128: return "OpenTX for M128 / 9X board"; case BOARD_MEGA2560: return "OpenTX for MEGA2560 board"; @@ -90,7 +90,7 @@ const char * OpenTxEepromInterface::getName() return "OpenTX for 9XR-PRO"; case BOARD_AR9X: return "OpenTX for ar9x board / 9X"; - case BOARD_X12S: + case BOARD_HORUS_X12S: return "OpenTX for FrSky Horus"; case BOARD_X10: return "OpenTX for FrSky X10"; @@ -273,11 +273,11 @@ unsigned long OpenTxEepromInterface::load(RadioData &radioData, const uint8_t * uint8_t OpenTxEepromInterface::getLastDataVersion(Board::Type board) { switch (board) { - case BOARD_STOCK: + case BOARD_9X_M64: return 216; case BOARD_GRUVIN9X: case BOARD_MEGA2560: - case BOARD_M128: + case BOARD_9X_M128: return 217; default: return 219; @@ -317,7 +317,7 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u efile->EeFsCreate(eeprom, size, board, version); - if (board == BOARD_M128) { + if (board == BOARD_9X_M128) { variant |= M128_VARIANT; } else if (IS_TARANIS_X9E(board)) { @@ -433,7 +433,7 @@ int OpenTxFirmware::getCapability(::Capability capability) return 0; else if (IS_ARM(board)) return 60; - else if (board == BOARD_M128) + else if (board == BOARD_9X_M128) return 30; else if (IS_2560(board)) return 30; @@ -512,7 +512,7 @@ int OpenTxFirmware::getCapability(::Capability capability) case CustomFunctions: if (IS_ARM(board)) return 64; - else if (IS_2560(board) || board == BOARD_M128) + else if (IS_2560(board) || board == BOARD_9X_M128) return 24; else return 16; @@ -703,9 +703,9 @@ int OpenTxFirmware::getCapability(::Capability capability) case HasMahPersistent: return (IS_ARM(board) ? true : false); case SimulatorVariant: - if (board == BOARD_STOCK) + if (board == BOARD_9X_M64) return SIMU_STOCK_VARIANTS; - else if (board == BOARD_M128) + else if (board == BOARD_9X_M128) return SIMU_M128_VARIANTS; else if (IS_TARANIS_X9E(board)) return TARANIS_X9E_VARIANT; @@ -944,7 +944,7 @@ EepromLoadErrors OpenTxEepromInterface::checkVersion(unsigned int version) bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int variant) { bool variantError = false; - if (board == BOARD_M128 && !(variant & M128_VARIANT)) { + if (board == BOARD_9X_M128 && !(variant & M128_VARIANT)) { if (version == 212) { uint8_t tmp[1000]; for (int i = 1; i < 31; i++) { @@ -1267,7 +1267,7 @@ void registerOpenTxFirmwares() registerOpenTxFirmware(firmware); /* FrSky X12 (Horus) board */ - firmware = new OpenTxFirmware("opentx-x12s", Firmware::tr("FrSky Horus X12S"), BOARD_X12S); + firmware = new OpenTxFirmware("opentx-x12s", Firmware::tr("FrSky Horus X12S"), BOARD_HORUS_X12S); addOpenTxFrskyOptions(firmware); firmware->addOption("internalaccess", Firmware::tr("Support for ACCESS internal module replacement")); firmware->addOption("pcbdev", Firmware::tr("Use ONLY with first DEV pcb version")); @@ -1301,10 +1301,10 @@ void registerOpenTxFirmwares() registerOpenTxFirmware(firmware); // These are kept only for import purposes, marked as deprecated to hide from UI. - registerOpenTxFirmware(new OpenTxFirmware("opentx-9xr", Firmware::tr("Turnigy 9XR"), BOARD_STOCK), true); - registerOpenTxFirmware(new OpenTxFirmware("opentx-9xr128", Firmware::tr("Turnigy 9XR with m128 chip"), BOARD_M128), true); - registerOpenTxFirmware(new OpenTxFirmware("opentx-9x", Firmware::tr("9X with stock board"), BOARD_STOCK), true); - registerOpenTxFirmware(new OpenTxFirmware("opentx-9x128", Firmware::tr("9X with stock board and m128 chip"), BOARD_M128), true); + registerOpenTxFirmware(new OpenTxFirmware("opentx-9xr", Firmware::tr("Turnigy 9XR"), BOARD_9X_M64), true); + registerOpenTxFirmware(new OpenTxFirmware("opentx-9xr128", Firmware::tr("Turnigy 9XR with m128 chip"), BOARD_9X_M128), true); + registerOpenTxFirmware(new OpenTxFirmware("opentx-9x", Firmware::tr("9X with stock board"), BOARD_9X_M64), true); + registerOpenTxFirmware(new OpenTxFirmware("opentx-9x128", Firmware::tr("9X with stock board and m128 chip"), BOARD_9X_M128), true); registerOpenTxFirmware(new OpenTxFirmware("opentx-gruvin9x", Firmware::tr("9X with Gruvin9x board"), BOARD_GRUVIN9X), true); registerOpenTxFirmware(new OpenTxFirmware("opentx-mega2560", Firmware::tr("DIY MEGA2560 radio"), BOARD_MEGA2560), true); diff --git a/companion/src/firmwares/rawsource.cpp b/companion/src/firmwares/rawsource.cpp index b2d13e401..47171c29f 100644 --- a/companion/src/firmwares/rawsource.cpp +++ b/companion/src/firmwares/rawsource.cpp @@ -48,7 +48,7 @@ RawSourceRange RawSource::getRange(const ModelData * model, const GeneralSetting RawSourceRange result; Firmware * firmware = Firmware::getCurrentVariant(); - int board = firmware->getBoard(); + Board::Type board = firmware->getBoard(); switch (type) { case SOURCE_TYPE_TELEMETRY: diff --git a/companion/src/generaledit/hardware.cpp b/companion/src/generaledit/hardware.cpp index 2c5b3e199..09f109bda 100644 --- a/companion/src/generaledit/hardware.cpp +++ b/companion/src/generaledit/hardware.cpp @@ -183,6 +183,18 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings ui->bluetoothWidget->hide(); } + if ((IS_HORUS(board) && board != Board::BOARD_X10_EXPRESS) || (IS_TARANIS_XLITE(board) && !IS_TARANIS_XLITES(board))) { + ui->antennaMode->addItem(tr("Internal"), -2); + ui->antennaMode->addItem(tr("Ask"), -1); + ui->antennaMode->addItem(tr("Per model"), 0); + ui->antennaMode->addItem(IS_HORUS_X12S(board) ? tr("Internal + External") : tr("External"), 1); + ui->antennaMode->setField(generalSettings.antennaMode, this); + } + else { + ui->antennaLabel->hide(); + ui->antennaMode->hide(); + } + if (IS_HORUS_OR_TARANIS(board)) { ui->filterEnable->setChecked(!generalSettings.jitterFilter); } diff --git a/companion/src/generaledit/hardware.ui b/companion/src/generaledit/hardware.ui index c28c4584c..79bb36a32 100644 --- a/companion/src/generaledit/hardware.ui +++ b/companion/src/generaledit/hardware.ui @@ -7,7 +7,7 @@ 0 0 470 - 1419 + 1585 @@ -23,219 +23,6 @@ 6 - - - - - - - - - - - - - - S3 - - - - - - - Rud - - - - - - - 3 - - - - - - - 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3 - - - - - - - - - - - - - - - - - - - - - 0 - 10 - - - - Qt::Horizontal - - - - - - - 3 - - - - - - - 3 - - - - - - - 3 - - - - - - - S4 - - - - - - - - - - - - - - - - - Serial Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - Bluetooth - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - 3 - - - - - - - - - - - - - - - - - - - - PPM Multiplier - - - - - - - SB - - - - - - - 3 - - - - - - - 3 - - - - - - - 3 - - - @@ -243,77 +30,6 @@ - - - - 3 - - - - - - - - - - - - - - RS2 - - - - - - - 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SQ - - - - - - - - - - - - - @@ -327,36 +43,21 @@ - - - - - OFF - - - - - S-Port Mirror - - - - - Telemetry - - - - - SBUS Trainer - - - - - Debug - - + + + + SC + - + + + + 3 + + + + @@ -375,323 +76,6 @@ - - - - 3 - - - - - - - PPM 1 - - - - - - - SD - - - - - - - S1 - - - - - - - SC - - - - - - - SJ - - - - - - - 3 - - - - - - - SL - - - - - - - - - - - - - - - - - Ail - - - - - - - PPM 2 - - - - - - - 3 - - - - - - - - - - v - - - 1 - - - -9.900000000000000 - - - 9.900000000000000 - - - 0.100000000000000 - - - - - - - 3 - - - - - - - S2 - - - - - - - - - - - - - - - - -9999 - - - 9999 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SA - - - - - - - 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 10 - - - - Qt::Horizontal - - - - - - - 3 - - - - - - - SH - - - - - - - SP - - - - - - - 1 - - - 5.000000000000000 - - - 1.000000000000000 - - - - - - - 3 - - - - - - - 3 - - - - - - - 3 - - - - - - - 3 - - - - - - - -49 - - - 49 - - - - - - - - - - - - - - - - - - - - PPM 4 - - - - - - - 3 - - - @@ -750,6 +134,51 @@ + + + + 3 + + + + + + + SR + + + + + + + S4 + + + + + + + 3 + + + + + + + 3 + + + + + + + -49 + + + 49 + + + @@ -763,22 +192,28 @@ - - + + - ADC Filter + RS2 - - - - SF + + + + + 0 + 10 + + + + Qt::Horizontal - - + + @@ -788,28 +223,24 @@ - - - - - - + + -9999 - - + + 9999 - - - - + + + + + 0 + 10 + - - - - - + + Qt::Horizontal @@ -820,10 +251,26 @@ - - + + + + + 0 + 0 + + - SR + Bluetooth + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Current Offset @@ -837,51 +284,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - SG - - - - + - PPM 3 + PPM 2 - - + + 3 - - + + - SK + SD @@ -892,6 +312,16 @@ + + + + 3 + + + + + + @@ -905,36 +335,15 @@ - - - - RS + + + + 3 - - - - LS - - - - - - - Battery Offset - - - - - - - SI - - - - - + + @@ -946,7 +355,340 @@ - + + + + + + + + + + + + + + + + + SJ + + + + + + + + + + + + + + + + + SA + + + + + + + S1 + + + + + + + S3 + + + + + + + SP + + + + + + + SF + + + + + + + LS + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + + + + + + + 3 + + + + + + + 1 + + + 5.000000000000000 + + + 1.000000000000000 + + + + + + + + + + + + + + + + + + + + 3 + + + + + + + Battery Offset + + + + + + + Serial Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + + + + + + SG + + + + + + + S2 + + + + + + + + + + Ele + + + + + + + 3 + + + + + + + 3 + + + + + + + SI + + + + + + + SQ + + + + + + + SL + + + + + + + 3 + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SO + + + + @@ -965,8 +707,15 @@ - - + + + + PPM 1 + + + + + @@ -978,7 +727,14 @@ - + + + + PPM 4 + + + + @@ -997,8 +753,8 @@ - - + + @@ -1010,17 +766,32 @@ - - - - LS2 + + + + + + + v + + + 1 + + + -9.900000000000000 + + + 9.900000000000000 + + + 0.100000000000000 - - + + - Ele + SB @@ -1031,6 +802,158 @@ + + + + PPM Multiplier + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + Rud + + + + + + + + + + + + + + + + + ADC Filter + + + + + + + 3 + + + + + + + 3 + + + + + + + + + + + + + + + + + Antenna + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + + + + + + + + + + + + S5 + + + + + + + PPM 3 + + + + + + + Ail + + + + + + + SK + + + @@ -1038,29 +961,35 @@ - - - - 3 - - - - - + + - SN + LS2 - - + + 3 - - + + + + + + + + + + + + + + + 3 @@ -1073,32 +1002,116 @@ - - - - Current Offset + + + + 3 - - + + - SO + SH - - - - S5 + + + + + + + + + + - - + + + + + OFF + + + + + S-Port Mirror + + + + + Telemetry + + + + + SBUS Trainer + + + + + Debug + + + - - + + + + 3 + + + + + + + + + + + + + + + + + + + + RS + + + + + + + 3 + + + + + + + SN + + + + + + + 3 + + + + + + + 3 + + diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index 4626dbf97..4b12115fe 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -400,7 +400,7 @@ void ModulePanel::update() else if (protocol==PULSES_ACCESS_ISRM || protocol==PULSES_ACCESS_R9M || protocol==PULSES_ACCESS_R9M_LITE || protocol==PULSES_ACCESS_R9M_LITE_PRO) mask |= MASK_RX_NUMBER | MASK_ACCESS; - if ((IS_HORUS(board) || board == Board::BOARD_TARANIS_XLITE) && moduleIdx == 0) + if (moduleIdx == 0 && HAS_EXTERNAL_ANTENNA(board) && generalSettings.antennaMode == 0 /* per model */) mask |= MASK_ANTENNA; break; case PULSES_LP45: @@ -486,16 +486,18 @@ void ModulePanel::update() ui->ppmFrameLength->setMaximum(firmware->getCapability(PPMFrameLength)); ui->ppmFrameLength->setValue(22.5+((double)module.ppm.frameLength)*0.5); - // Antenna selection on Horus and xlite - ui->label_antenna->setVisible(mask & MASK_ANTENNA); - ui->antennaMode->setVisible(mask & MASK_ANTENNA); - if IS_HORUS_X12S(board) { - ui->antennaMode->setItemText(1,tr("Ext. + Int")); + // Antenna mode on Horus and XLite + if (mask & MASK_ANTENNA) { + ui->antennaMode->clear(); + ui->antennaMode->addItem(tr("Ask"), -1); + ui->antennaMode->addItem(tr("Internal"), 0); + ui->antennaMode->addItem(IS_HORUS_X12S(board) ? tr("Internal + External") : tr("External"), 1); + ui->antennaMode->setField(module.pxx.antennaMode, this); } else { - ui->antennaMode->setItemText(1,tr("External")); + ui->antennaLabel->hide(); + ui->antennaMode->hide(); } - ui->antennaMode->setCurrentIndex(module.pxx.external_antenna); // R9M options ui->r9mPower->setVisible(mask & MASK_R9M); @@ -642,14 +644,6 @@ void ModulePanel::on_ppmPolarity_currentIndexChanged(int index) } } -void ModulePanel::on_antennaMode_currentIndexChanged(int index) -{ - if (!lock && module.pxx.external_antenna != (bool)index) { - module.pxx.external_antenna = index; - emit modified(); - } -} - void ModulePanel::on_r9mPower_currentIndexChanged(int index) { if (!lock && module.pxx.power != (unsigned int)index) { diff --git a/companion/src/modeledit/setup.h b/companion/src/modeledit/setup.h index fcfc495a4..fc1a57cf7 100644 --- a/companion/src/modeledit/setup.h +++ b/companion/src/modeledit/setup.h @@ -80,7 +80,6 @@ class ModulePanel : public ModelPanel void on_ppmPolarity_currentIndexChanged(int index); void on_ppmOutputType_currentIndexChanged(int index); void on_ppmFrameLength_editingFinished(); - void on_antennaMode_currentIndexChanged(int index); void on_rxNumber_editingFinished(); void on_failsafeMode_currentIndexChanged(int value); void onMultiProtocolChanged(int index); diff --git a/companion/src/modeledit/setup_module.ui b/companion/src/modeledit/setup_module.ui index ddf5843f6..5ed3f9e11 100644 --- a/companion/src/modeledit/setup_module.ui +++ b/companion/src/modeledit/setup_module.ui @@ -6,8 +6,8 @@ 0 0 - 1042 - 375 + 1075 + 434 @@ -252,7 +252,7 @@ - -1 + 6 0 @@ -595,7 +595,7 @@ - + 16777215 @@ -611,7 +611,7 @@ - + 0 @@ -621,16 +621,6 @@ QComboBox::AdjustToContents - - - Internal - - - - - Ext. + Int. - - @@ -732,6 +722,26 @@ + + + + Registration ID + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + true + + + @@ -775,6 +785,50 @@ + + + + + + + + + 198 + 17 + 36 + + + + + + + + + 198 + 17 + 36 + + + + + + + + + 106 + 104 + 100 + + + + + + + + WARNING: Requires non-certified firmware! + + + @@ -883,70 +937,6 @@ - - - - - - - - - 198 - 17 - 36 - - - - - - - - - 198 - 17 - 36 - - - - - - - - - 106 - 104 - 100 - - - - - - - - WARNING: Requires non-certified firmware! - - - - - - - Registration ID - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - true - - - @@ -1069,6 +1059,13 @@ QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; pad + + + AutoComboBox + QComboBox +
autocombobox.h
+
+
protocol channelsStart diff --git a/companion/src/modelprinter.cpp b/companion/src/modelprinter.cpp index f343e4292..ac9f6f066 100644 --- a/companion/src/modelprinter.cpp +++ b/companion/src/modelprinter.cpp @@ -223,7 +223,6 @@ QString ModelPrinter::printModule(int idx) if (module.protocol == PULSES_PXX_R9M) { str << printLabelValue(tr("Sub Type"), module.subTypeToString()); str << printLabelValue(tr("RF Output Power"), module.powerValueToString(firmware)); - str << printLabelValue(tr("Telemetry"), printBoolean(module.pxx.sport_out, BOOLEAN_ENABLEDISABLE)); } } } diff --git a/companion/src/radiointerface.cpp b/companion/src/radiointerface.cpp index b1ca6240f..d83f40c5c 100644 --- a/companion/src/radiointerface.cpp +++ b/companion/src/radiointerface.cpp @@ -55,7 +55,7 @@ QStringList getAvrdudeArgs(const QString & cmd, const QString & filename) args << "-c" << programmer << "-p"; if (IS_2560(board)) args << "m2560"; - else if (board == Board::BOARD_M128) + else if (board == Board::BOARD_9X_M128) args << "m128"; else args << mcu; diff --git a/companion/src/shared/autocombobox.h b/companion/src/shared/autocombobox.h index edb1de514..fcb1845ac 100644 --- a/companion/src/shared/autocombobox.h +++ b/companion/src/shared/autocombobox.h @@ -29,12 +29,8 @@ class AutoComboBox: public QComboBox Q_OBJECT public: - explicit AutoComboBox(QWidget *parent = 0): - QComboBox(parent), - field(NULL), - panel(NULL), - next(0), - lock(false) + explicit AutoComboBox(QWidget *parent = nullptr): + QComboBox(parent) { connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentIndexChanged(int))); } @@ -67,14 +63,14 @@ class AutoComboBox: public QComboBox updateValue(); } - void setField(unsigned int & field, GenericPanel * panel=NULL) + void setField(unsigned int & field, GenericPanel * panel=nullptr) { this->field = (int *)&field; this->panel = panel; updateValue(); } - void setField(int & field, GenericPanel * panel=NULL) + void setField(int & field, GenericPanel * panel=nullptr) { this->field = &field; this->panel = panel; @@ -113,10 +109,10 @@ class AutoComboBox: public QComboBox } protected: - int * field; - GenericPanel * panel; - int next; - bool lock; + int * field = nullptr; + GenericPanel * panel = nullptr; + int next = 0; + bool lock = false; }; #endif // _AUTOCOMBOBOX_H_ diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp index 734ef4217..4858d7135 100644 --- a/companion/src/simulation/simulatorwidget.cpp +++ b/companion/src/simulation/simulatorwidget.cpp @@ -77,7 +77,7 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato case Board::BOARD_TARANIS_X9E: radioUiWidget = new SimulatedUIWidgetX9E(simulator, this); break; - case Board::BOARD_X12S: + case Board::BOARD_HORUS_X12S: radioUiWidget = new SimulatedUIWidgetX12(simulator, this); break; case Board::BOARD_X10: diff --git a/companion/src/storage/rlefile.cpp b/companion/src/storage/rlefile.cpp index 82cbf5bbf..b4d9da611 100644 --- a/companion/src/storage/rlefile.cpp +++ b/companion/src/storage/rlefile.cpp @@ -86,7 +86,7 @@ void RleFile::EeFsCreate(uint8_t *eeprom, int size, Board::Type board, unsigned } else { eeFs = (EeFs *)eeprom; - eeFsVersion = (IS_2560(board) || board==Board::BOARD_M128) ? 5 : 4; + eeFsVersion = (IS_2560(board) || board==Board::BOARD_9X_M128) ? 5 : 4; eeFsBlockSize = 16; eeFsLinkSize = 1; diff --git a/radio/src/bitmaps/480x272/mask_antenna.png b/radio/src/bitmaps/480x272/mask_antenna.png new file mode 100755 index 000000000..c9c66efb2 Binary files /dev/null and b/radio/src/bitmaps/480x272/mask_antenna.png differ diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index ea31ac02d..4c07cdb9c 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -446,10 +446,9 @@ PACK(struct ModuleData { NOBACKUP(struct { uint8_t power:2; // 0=10 mW, 1=100 mW, 2=500 mW, 3=1W uint8_t spare1:2; - uint8_t receiver_telem_off:1; // false = receiver telem enabled - uint8_t receiver_channel_9_16:1; // false = pwm out 1-8, true 9-16 - uint8_t external_antenna:1; // false = internal antenna, true = external antenna - uint8_t fast:1; // TODO: to be used later by external module (fast means serial @ high speed) + uint8_t receiverTelemetryOff:1; // false = receiver telem enabled + uint8_t receiverHigherChannels:1; // false = pwm out 1-8, true 9-16 + int8_t antennaMode:2; uint8_t spare2; } pxx); NOBACKUP(struct { @@ -672,13 +671,13 @@ PACK(struct TrainerData { NOBACKUP(char switchNames[STORAGE_NUM_SWITCHES][LEN_SWITCH_NAME]); \ NOBACKUP(char anaNames[NUM_STICKS + STORAGE_NUM_POTS + STORAGE_NUM_SLIDERS][LEN_ANA_NAME]); \ NOBACKUP(char currModelFilename[LEN_MODEL_FILENAME+1]); \ - NOBACKUP(uint8_t spare4:1); \ + NOBACKUP(uint8_t spare5:1); \ NOBACKUP(uint8_t blOffBright:7); \ NOBACKUP(char bluetoothName[LEN_BLUETOOTH_NAME]); #elif defined(PCBTARANIS) #if defined(STORAGE_BLUETOOTH) #define BLUETOOTH_FIELDS \ - uint8_t spare4; \ + uint8_t spare5; \ char bluetoothName[LEN_BLUETOOTH_NAME]; #else #define BLUETOOTH_FIELDS @@ -696,7 +695,7 @@ PACK(struct TrainerData { #elif defined(PCBSKY9X) #define EXTRA_GENERAL_FIELDS \ int8_t txCurrentCalibration; \ - int8_t spare4; \ + int8_t spare5; \ uint8_t mAhWarn; \ uint16_t mAhUsed; \ int8_t temperatureCalib; \ @@ -722,7 +721,7 @@ PACK(struct TrainerData { #if defined(BUZZER) #define BUZZER_FIELD int8_t buzzerMode:2 // -2=quiet, -1=only alarms, 0=no keys, 1=all (only used on AVR radios without audio hardware) #else - #define BUZZER_FIELD int8_t spare3:2 + #define BUZZER_FIELD int8_t spare4:2 #endif PACK(struct RadioData { @@ -734,7 +733,9 @@ PACK(struct RadioData { N_HORUS_FIELD(uint8_t contrast); NOBACKUP(uint8_t vBatWarn); NOBACKUP(int8_t txVoltageCalibration); - NOBACKUP(int8_t backlightMode); + uint8_t backlightMode:3; + int8_t antennaMode:2; + int8_t spare1:3; NOBACKUP(TrainerData trainer); NOBACKUP(uint8_t view); // index of view in main screen NOBACKUP(BUZZER_FIELD); /* 2bits */ @@ -755,7 +756,7 @@ PACK(struct RadioData { NOBACKUP(uint8_t templateSetup); // RETA order for receiver channels NOBACKUP(int8_t PPM_Multiplier); NOBACKUP(int8_t hapticLength); - N_HORUS_FIELD(N_TARANIS_FIELD(uint8_t spare1)); + N_HORUS_FIELD(N_TARANIS_FIELD(uint8_t spare2)); N_HORUS_FIELD(N_TARANIS_FIELD(uint8_t stickReverse)); NOBACKUP(int8_t beepLength:3); NOBACKUP(int8_t hapticStrength:3); @@ -778,7 +779,7 @@ PACK(struct RadioData { NOBACKUP(uint8_t disableRssiPoweroffAlarm:1); NOBACKUP(uint8_t USBMode:2); NOBACKUP(uint8_t jackMode:2); - NOBACKUP(uint8_t spare2:1); + NOBACKUP(uint8_t spare3:1); NOBACKUP(char ttsLanguage[2]); NOBACKUP(int8_t beepVolume:4); NOBACKUP(int8_t wavVolume:4); diff --git a/radio/src/gui/128x64/gui.h b/radio/src/gui/128x64/gui.h index f131c0e85..6a720068a 100644 --- a/radio/src/gui/128x64/gui.h +++ b/radio/src/gui/128x64/gui.h @@ -183,8 +183,7 @@ void title(const char * s); title(name) typedef int choice_t; - -choice_t editChoice(coord_t x, coord_t y, const char * label, const char *values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event); +choice_t editChoice(coord_t x, coord_t y, const char * label, const char *values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable = nullptr); uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, const char * label, LcdFlags attr, event_t event); swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event); diff --git a/radio/src/gui/128x64/model_select.cpp b/radio/src/gui/128x64/model_select.cpp index a53a2756d..9ae8b92d1 100644 --- a/radio/src/gui/128x64/model_select.cpp +++ b/radio/src/gui/128x64/model_select.cpp @@ -22,6 +22,15 @@ #define MODELSEL_W LCD_W +void onDeleteModelConfirm(const char * result) +{ + if (result == STR_OK) { + storageCheck(true); + eeDeleteModel(menuVerticalPosition); // delete file + s_copyMode = 0; + } +} + void onModelSelectMenu(const char * result) { int8_t sub = menuVerticalPosition; @@ -51,7 +60,7 @@ void onModelSelectMenu(const char * result) } #endif else if (result == STR_DELETE_MODEL) { - POPUP_CONFIRMATION(STR_DELETEMODEL, nullptr); + POPUP_CONFIRMATION(STR_DELETEMODEL, onDeleteModelConfirm); SET_WARNING_INFO(modelHeaders[sub].name, sizeof(g_model.header.name), ZCHAR); } #if defined(SDCARD) @@ -68,14 +77,6 @@ void onModelSelectMenu(const char * result) void menuModelSelect(event_t event) { - if (warningResult) { - warningResult = 0; - storageCheck(true); - eeDeleteModel(menuVerticalPosition); // delete file - s_copyMode = 0; - event = EVT_ENTRY_UP; - } - event_t _event_ = event; if ((s_copyMode && EVT_KEY_MASK(event) == KEY_EXIT) || event == EVT_KEY_BREAK(KEY_EXIT) || IS_ROTARY_BREAK(event) || IS_ROTARY_LONG(event)) { _event_ = 0; diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 4ad7c6cbb..b59ab5baf 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -87,7 +87,7 @@ enum MenuModelSetupItems { ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS, ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND, ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM, -#if defined(EXTERNAL_ANTENNA) +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA, #endif ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE, @@ -221,8 +221,25 @@ inline uint8_t EXTERNAL_MODULE_TYPE_ROW() #define TRAINER_BLUETOOTH_S_ROW (bluetooth.distantAddr[0] == '\0' ? HIDDEN_ROW : LABEL()) #define IF_BT_TRAINER_ON(x) (g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER ? (uint8_t)(x) : HIDDEN_ROW) +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) +#define EXTERNAL_ANTENNA_ROW ((isModuleXJT(INTERNAL_MODULE) && g_eeGeneral.antennaMode == ANTENNA_MODE_PER_MODEL) ? (uint8_t)0 : HIDDEN_ROW), +void onModelAntennaSwitchConfirm(const char * result) +{ + if (result == STR_OK) { + // Switch to external antenna confirmation + g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode = ANTENNA_MODE_EXTERNAL; + globalData.externalAntennaEnabled = true; + storageDirty(EE_MODEL); + } + else { + reusableBuffer.moduleSetup.antennaMode = g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode; + } +} +#else +#define EXTERNAL_ANTENNA_ROW +#endif + #if defined(PCBX7) || defined(PCBX9LITE) - #define ANTENNA_ROW #if defined(BLUETOOTH) #define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)), #else @@ -231,12 +248,10 @@ inline uint8_t EXTERNAL_MODULE_TYPE_ROW() #define TRAINER_PPM_PARAMS_ROW (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW) #define TRAINER_ROWS LABEL(Trainer), 0, TRAINER_BLUETOOTH_ROW TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW #elif defined(PCBXLITES) - #define ANTENNA_ROW IF_NOT_PXX2_MODULE(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(0)), #define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)) #define TRAINER_PPM_PARAMS_ROW (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW) #define TRAINER_ROWS LABEL(Trainer), 0, IF_BT_TRAINER_ON(TRAINER_BLUETOOTH_ROW), TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW #elif defined(PCBXLITE) - #define ANTENNA_ROW IF_NOT_PXX2_MODULE(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(0)), #define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)) #define TRAINER_ROWS IF_BT_TRAINER_ON(LABEL(Trainer)), IF_BT_TRAINER_ON(0), IF_BT_TRAINER_ON(TRAINER_BLUETOOTH_ROW), IF_BT_TRAINER_ON(TRAINER_CHANNELS_ROW), HIDDEN_ROW /* xlite has only BT trainer, so never PPM */ #else @@ -271,7 +286,7 @@ void onBluetoothConnectMenu(const char * result) INTERNAL_MODULE_CHANNELS_ROWS, \ IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(isModuleRxNumAvailable(INTERNAL_MODULE) ? (uint8_t)2 : (uint8_t)1)), \ IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* RxNum */ \ - ANTENNA_ROW \ + EXTERNAL_ANTENNA_ROW \ IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), /* Failsafe */ \ IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), /* Range check and Register buttons */ \ IF_PXX2_MODULE(INTERNAL_MODULE, 0), /* Module options */ \ @@ -282,16 +297,6 @@ void onBluetoothConnectMenu(const char * result) #define INTERNAL_MODULE_ROWS #endif -#if defined(EXTERNAL_ANTENNA) -void onAntennaSwitchConfirm(const char * result) -{ - if (result == STR_OK) { - // Switch to external antenna confirmation - g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna = XJT_EXTERNAL_ANTENNA; - } -} -#endif - void menuModelSetup(event_t event) { int8_t old_editMode = s_editMode; @@ -369,6 +374,9 @@ void menuModelSetup(event_t event) if (event == EVT_ENTRY || event == EVT_ENTRY_UP) { memclear(&reusableBuffer.moduleSetup, sizeof(reusableBuffer.moduleSetup)); reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power; +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) + reusableBuffer.moduleSetup.antennaMode = g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode; +#endif } #if (defined(DSM2) || defined(PXX)) @@ -1375,20 +1383,23 @@ void menuModelSetup(event_t event) } break; -#if defined(EXTERNAL_ANTENNA) +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) case ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA: - { - uint8_t newAntennaSel = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_ANTENNASELECTION, STR_VANTENNATYPES, g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna, 0, 1, attr, event); - if (newAntennaSel != g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna && newAntennaSel == XJT_EXTERNAL_ANTENNA) { - POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onAntennaSwitchConfirm); - const char * w = STR_ANTENNACONFIRM2; - SET_WARNING_INFO(w, strlen(w), 0); - } - else { - g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna = newAntennaSel; + reusableBuffer.moduleSetup.antennaMode = editChoice(MODEL_SETUP_2ND_COLUMN, y, INDENT TR_ANTENNA, STR_ANTENNA_MODES, + reusableBuffer.moduleSetup.antennaMode == ANTENNA_MODE_PER_MODEL ? ANTENNA_MODE_INTERNAL : reusableBuffer.moduleSetup.antennaMode, + ANTENNA_MODE_INTERNAL, ANTENNA_MODE_EXTERNAL, attr, event, + [](int value) { return value != ANTENNA_MODE_PER_MODEL; }); + if (event && !s_editMode && reusableBuffer.moduleSetup.antennaMode != g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode) { + if (reusableBuffer.moduleSetup.antennaMode == ANTENNA_MODE_EXTERNAL && !isExternalAntennaEnabled()) { + POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onModelAntennaSwitchConfirm); + SET_WARNING_INFO(STR_ANTENNACONFIRM2, sizeof(TR_ANTENNACONFIRM2), 0); + } + else { + g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode = reusableBuffer.moduleSetup.antennaMode; + checkExternalAntenna(); + } } break; - } #endif case ITEM_MODEL_SETUP_EXTERNAL_MODULE_OPTIONS: diff --git a/radio/src/gui/128x64/view_main.cpp b/radio/src/gui/128x64/view_main.cpp index a54c00fa6..13e4c6cbe 100644 --- a/radio/src/gui/128x64/view_main.cpp +++ b/radio/src/gui/128x64/view_main.cpp @@ -50,16 +50,24 @@ #define RSSSI_X (30) #define RSSSI_Y (31) #define RSSI_MAX 105 - #define TRIM_LEN 23 -void drawRSSIGauge() +void drawExternalAntennaAndRSSI() { - uint8_t bar = (RSSI_MAX - g_model.rssiAlarms.getWarningRssi()) / 4; +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) + if (isModuleXJT(INTERNAL_MODULE) && isExternalAntennaEnabled()) { + lcdDrawText(VBATT_X-1, VBATT_Y+8, "E", TINSIZE); + } +#endif - for(uint8_t i=1; i<5; i++) { - if((TELEMETRY_RSSI() - g_model.rssiAlarms.getWarningRssi()) > bar*(i-1)) { - lcdDrawFilledRect(RSSSI_X + i*4, RSSSI_Y - 2*i, 3, 2*i, SOLID, 0); + if (TELEMETRY_RSSI() > 0) { + auto warningRSSI = g_model.rssiAlarms.getWarningRssi(); + int8_t value = TELEMETRY_RSSI() - warningRSSI; + uint8_t step = (RSSI_MAX - warningRSSI) / 4; + for (uint8_t i = 1; i < 5; i++) { + if (value > step * (i - 1)) { + lcdDrawFilledRect(RSSSI_X + i * 4, RSSSI_Y - 2 * i + 1, 3, 2 * i - 1, SOLID, 0); + } } } } @@ -407,10 +415,8 @@ void menuMainView(event_t event) // Trims sliders displayTrims(mode); - // RSSI gauge - if (TELEMETRY_RSSI() > 0) { - drawRSSIGauge(); - } + // RSSI gauge / external antenna + drawExternalAntennaAndRSSI(); } if (view_base < VIEW_INPUTS) { diff --git a/radio/src/gui/128x64/view_statistics.cpp b/radio/src/gui/128x64/view_statistics.cpp index d573bfc2c..2296e93b0 100644 --- a/radio/src/gui/128x64/view_statistics.cpp +++ b/radio/src/gui/128x64/view_statistics.cpp @@ -111,7 +111,6 @@ void menuStatisticsDebug(event_t event) switch (event) { case EVT_ENTRY: case EVT_ENTRY_UP: - enableVBatBridge(); break; case EVT_KEY_LONG(KEY_ENTER): diff --git a/radio/src/gui/128x64/widgets.cpp b/radio/src/gui/128x64/widgets.cpp index e304f0032..ef7de1a10 100644 --- a/radio/src/gui/128x64/widgets.cpp +++ b/radio/src/gui/128x64/widgets.cpp @@ -70,11 +70,11 @@ void title(const char * s) lcdDrawText(0, 0, s, INVERS); } -choice_t editChoice(coord_t x, coord_t y, const char * label, const char *values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event) +choice_t editChoice(coord_t x, coord_t y, const char * label, const char *values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable) { drawFieldLabel(x, y, label); if (values) lcdDrawTextAtIndex(x, y, values, value-min, attr); - if (attr & (~RIGHT)) value = checkIncDec(event, value, min, max, (isModelMenuDisplayed()) ? EE_MODEL : EE_GENERAL); + if (attr & (~RIGHT)) value = checkIncDec(event, value, min, max, (isModelMenuDisplayed()) ? EE_MODEL : EE_GENERAL, isValueAvailable); return value; } diff --git a/radio/src/gui/212x64/gui.h b/radio/src/gui/212x64/gui.h index 443ac45b4..7013ede4b 100644 --- a/radio/src/gui/212x64/gui.h +++ b/radio/src/gui/212x64/gui.h @@ -209,7 +209,7 @@ void title(const char * s); typedef int choice_t; -choice_t editChoice(coord_t x, coord_t y, const char *label, const char *values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event); +choice_t editChoice(coord_t x, coord_t y, const char *label, const char *values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable = nullptr); uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, const char *label, LcdFlags attr, event_t event); swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event); diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 16258dbeb..979a27401 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -384,7 +384,8 @@ void menuModelSetup(event_t event) MENU_CHECK(menuTabModel, MENU_MODEL_SETUP, ITEM_MODEL_SETUP_LINES_COUNT); title(STR_MENUSETUP); - if (event == EVT_ENTRY) { + if (event == EVT_ENTRY || event == EVT_ENTRY_UP) { + memclear(&reusableBuffer.moduleSetup, sizeof(reusableBuffer.moduleSetup)); reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power; } @@ -397,10 +398,10 @@ void menuModelSetup(event_t event) int sub = menuVerticalPosition; - for (int i=0; i0) ? BLINK|INVERS : INVERS); LcdFlags attr = (sub == k ? blink : 0); - switch(k) { + switch (k) { case ITEM_MODEL_SETUP_NAME: editSingleName(MODEL_SETUP_2ND_COLUMN, y, STR_MODELNAME, g_model.header.name, sizeof(g_model.header.name), event, attr); memcpy(modelHeaders[g_eeGeneral.currModel].name, g_model.header.name, sizeof(g_model.header.name)); diff --git a/radio/src/gui/212x64/view_statistics.cpp b/radio/src/gui/212x64/view_statistics.cpp index ecc20b793..264d5b73b 100644 --- a/radio/src/gui/212x64/view_statistics.cpp +++ b/radio/src/gui/212x64/view_statistics.cpp @@ -115,12 +115,7 @@ void menuStatisticsDebug(event_t event) } #endif - switch(event) { - case EVT_ENTRY: - case EVT_ENTRY_UP: - enableVBatBridge(); - break; - + switch (event) { case EVT_KEY_LONG(KEY_ENTER): g_eeGeneral.globalTimer = 0; sessionTimer = 0; diff --git a/radio/src/gui/212x64/widgets.cpp b/radio/src/gui/212x64/widgets.cpp index fcb0c352d..1d18b9e39 100644 --- a/radio/src/gui/212x64/widgets.cpp +++ b/radio/src/gui/212x64/widgets.cpp @@ -81,11 +81,11 @@ void title(const char * s) lcdDrawText(0, 0, s, INVERS); } -choice_t editChoice(coord_t x, coord_t y, const char * label, const char *values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event) +choice_t editChoice(coord_t x, coord_t y, const char * label, const char *values, choice_t value, choice_t min, choice_t max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable) { drawFieldLabel(x, y, label); if (values) lcdDrawTextAtIndex(x, y, values, value-min, attr); - if (attr & (~RIGHT)) value = checkIncDec(event, value, min, max, (isModelMenuDisplayed()) ? EE_MODEL : EE_GENERAL); + if (attr & (~RIGHT)) value = checkIncDec(event, value, min, max, (isModelMenuDisplayed()) ? EE_MODEL : EE_GENERAL, isValueAvailable); return value; } diff --git a/radio/src/gui/480x272/bitmaps.cpp b/radio/src/gui/480x272/bitmaps.cpp index 288e8c40d..f7b87a4d3 100644 --- a/radio/src/gui/480x272/bitmaps.cpp +++ b/radio/src/gui/480x272/bitmaps.cpp @@ -64,6 +64,10 @@ const uint8_t LBM_TOPMENU_TXBATT[] = { #include "mask_txbat.lbm" }; +const uint8_t LBM_TOPMENU_ANTENNA[] = { +#include "mask_antenna.lbm" +}; + const uint8_t LBM_HTRIM_FRAME[] = { #include "mask_htrim_frame.lbm" }; diff --git a/radio/src/gui/480x272/bitmaps.h b/radio/src/gui/480x272/bitmaps.h index 60e38b948..fcefcbd49 100644 --- a/radio/src/gui/480x272/bitmaps.h +++ b/radio/src/gui/480x272/bitmaps.h @@ -26,6 +26,7 @@ extern const uint8_t LBM_DOT[]; // Main view icons extern const uint8_t LBM_TOPMENU_USB[]; +extern const uint8_t LBM_TOPMENU_ANTENNA[]; extern const uint8_t LBM_TOPMENU_VOLUME_0[]; extern const uint8_t LBM_TOPMENU_VOLUME_1[]; extern const uint8_t LBM_TOPMENU_VOLUME_2[]; diff --git a/radio/src/gui/480x272/menus.h b/radio/src/gui/480x272/menus.h index 02776029f..ce3680604 100644 --- a/radio/src/gui/480x272/menus.h +++ b/radio/src/gui/480x272/menus.h @@ -548,6 +548,7 @@ inline void POPUP_MENU_SELECT_ITEM(uint8_t index) inline void POPUP_MENU_START(PopupMenuHandler handler) { if (handler != popupMenuHandler) { + killAllEvents(); AUDIO_KEY_PRESS(); popupMenuHandler = handler; } @@ -582,7 +583,10 @@ inline void POPUP_WARNING(const char * s) popupFunc = runPopupWarning; } -inline void POPUP_CONFIRMATION(const char *s, void (* confirmHandler)(const char *) = nullptr) +typedef void (* PopupMenuHandler)(const char * result); +extern PopupMenuHandler popupMenuHandler; + +inline void POPUP_CONFIRMATION(const char *s, PopupMenuHandler confirmHandler) { warningText = s; warningType = WARNING_TYPE_CONFIRM; diff --git a/radio/src/gui/480x272/model_select.cpp b/radio/src/gui/480x272/model_select.cpp index b79963423..5f6615041 100644 --- a/radio/src/gui/480x272/model_select.cpp +++ b/radio/src/gui/480x272/model_select.cpp @@ -219,6 +219,27 @@ bool menuModelWizard(event_t event) } #endif +void onDeleteModelConfirm(const char * result) +{ + if (result == STR_OK) { + if (deleteMode == MODE_DELETE_CATEGORY) { + modelslist.removeCategory(currentCategory); + modelslist.save(); + setCurrentCategory(currentCategoryIndex > 0 ? currentCategoryIndex-1 : currentCategoryIndex); + } + else if (deleteMode == MODE_DELETE_MODEL){ + int modelIndex = MODEL_INDEX(); + modelslist.removeModel(currentCategory, currentModel); + s_copyMode = 0; + putEvent(EVT_REFRESH); + if (modelIndex > 0) { + modelIndex--; + } + setCurrentModel(modelIndex); + } + } +} + void onModelSelectMenu(const char * result) { if (result == STR_SELECT_MODEL) { @@ -233,7 +254,7 @@ void onModelSelectMenu(const char * result) chainMenu(menuMainView); } else if (result == STR_DELETE_MODEL) { - POPUP_CONFIRMATION(STR_DELETEMODEL); + POPUP_CONFIRMATION(STR_DELETEMODEL, onDeleteModelConfirm); SET_WARNING_INFO(currentModel->modelName, LEN_MODEL_NAME, 0); deleteMode = MODE_DELETE_MODEL; } @@ -279,7 +300,7 @@ void onModelSelectMenu(const char * result) SET_WARNING_INFO(STR_CAT_NOT_EMPTY, sizeof(TR_CAT_NOT_EMPTY), 0); } else { - POPUP_CONFIRMATION(STR_DELETEMODEL); + POPUP_CONFIRMATION(STR_DELETEMODEL, onDeleteModelConfirm); SET_WARNING_INFO(currentCategory->name, LEN_MODEL_FILENAME, 0); deleteMode = MODE_DELETE_CATEGORY; } @@ -322,26 +343,6 @@ void initModelsList() bool menuModelSelect(event_t event) { - if (warningResult) { - warningResult = 0; - if (deleteMode == MODE_DELETE_CATEGORY) { - TRACE("DELETE CATEGORY"); - modelslist.removeCategory(currentCategory); - modelslist.save(); - setCurrentCategory(currentCategoryIndex > 0 ? currentCategoryIndex-1 : currentCategoryIndex); - } - else if (deleteMode == MODE_DELETE_MODEL){ - int modelIndex = MODEL_INDEX(); - modelslist.removeModel(currentCategory, currentModel); - s_copyMode = 0; - event = EVT_REFRESH; - if (modelIndex > 0) { - modelIndex--; - } - setCurrentModel(modelIndex); - } - } - const std::list& cats = modelslist.getCategories(); switch(event) { case 0: diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index 0cd17f13a..ae78a8c7f 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -72,7 +72,7 @@ enum MenuModelSetupItems { ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS, ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND, ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM, -#if defined(EXTERNAL_ANTENNA) +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA, #endif ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE, @@ -509,17 +509,22 @@ inline uint8_t EXTERNAL_MODULE_TYPE_ROW() #define REGISTRATION_ID_ROWS #endif -#if defined(EXTERNAL_ANTENNA) -#define ANTENNA_ROW IF_NOT_PXX2_MODULE(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(0)), // Antenna -void onAntennaSwitchConfirm(const char * result) +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) +#define EXTERNAL_ANTENNA_ROW ((isModuleXJT(INTERNAL_MODULE) && g_eeGeneral.antennaMode == ANTENNA_MODE_PER_MODEL) ? (uint8_t)0 : HIDDEN_ROW), +void onModelAntennaSwitchConfirm(const char * result) { if (result == STR_OK) { // Switch to external antenna confirmation - g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna = XJT_EXTERNAL_ANTENNA; + g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode = ANTENNA_MODE_EXTERNAL; + globalData.externalAntennaEnabled = true; + storageDirty(EE_MODEL); + } + else { + reusableBuffer.moduleSetup.antennaMode = g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode; } } #else -#define ANTENNA_ROW +#define EXTERNAL_ANTENNA_ROW #endif bool menuModelSetup(event_t event) @@ -559,7 +564,7 @@ bool menuModelSetup(event_t event) INTERNAL_MODULE_CHANNELS_ROWS, IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(IF_INTERNAL_MODULE_ON(isModuleRxNumAvailable(INTERNAL_MODULE) ? (uint8_t)2 : (uint8_t)1))), IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // RxNum - ANTENNA_ROW + EXTERNAL_ANTENNA_ROW IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), /* Range check and Register buttons */ \ IF_PXX2_MODULE(INTERNAL_MODULE, 0), /* Module options */ \ @@ -586,8 +591,12 @@ bool menuModelSetup(event_t event) TRAINER_ROWS }); - if (event == EVT_ENTRY) { + if (event == EVT_ENTRY || event == EVT_ENTRY_UP) { + memclear(&reusableBuffer.moduleSetup, sizeof(reusableBuffer.moduleSetup)); reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power; +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) + reusableBuffer.moduleSetup.antennaMode = g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode; +#endif } if (menuEvent) { @@ -597,10 +606,10 @@ bool menuModelSetup(event_t event) int sub = menuVerticalPosition; - for (uint8_t i=0; i0) ? BLINK|INVERS : INVERS); LcdFlags attr = (sub == k ? blink : 0); - switch(k) { + switch (k) { case ITEM_MODEL_SETUP_NAME: lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MODELNAME); editName(MODEL_SETUP_2ND_COLUMN, y, g_model.header.name, sizeof(g_model.header.name), event, attr); @@ -968,21 +977,21 @@ bool menuModelSetup(event_t event) } break; -#if defined(EXTERNAL_ANTENNA) +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) case ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA: - { - lcdDrawText(MENUS_MARGIN_LEFT, y, STR_ANTENNASELECTION); - uint8_t newAntennaSel = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_VANTENNATYPES, g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna, 0, 1, attr, event); - if (newAntennaSel != g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna && newAntennaSel == XJT_EXTERNAL_ANTENNA) { - POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onAntennaSwitchConfirm); - const char * w = STR_ANTENNACONFIRM2; - SET_WARNING_INFO(w, strlen(w), 0); - } - else { - g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna = newAntennaSel; + lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, STR_ANTENNA); + reusableBuffer.moduleSetup.antennaMode = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_ANTENNA_MODES, reusableBuffer.moduleSetup.antennaMode == ANTENNA_MODE_PER_MODEL ? ANTENNA_MODE_INTERNAL : reusableBuffer.moduleSetup.antennaMode, ANTENNA_MODE_INTERNAL, ANTENNA_MODE_EXTERNAL, attr, event, [](int value) { return value != ANTENNA_MODE_PER_MODEL; }); + if (event && !s_editMode && reusableBuffer.moduleSetup.antennaMode != g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode) { + if (reusableBuffer.moduleSetup.antennaMode == ANTENNA_MODE_EXTERNAL && !isExternalAntennaEnabled()) { + POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onModelAntennaSwitchConfirm); + SET_WARNING_INFO(STR_ANTENNACONFIRM2, sizeof(TR_ANTENNACONFIRM2), 0); + } + else { + g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode = reusableBuffer.moduleSetup.antennaMode; + checkExternalAntenna(); + } } break; - } #endif case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL: diff --git a/radio/src/gui/480x272/radio_hardware.cpp b/radio/src/gui/480x272/radio_hardware.cpp index be5fb230e..db5fbc759 100644 --- a/radio/src/gui/480x272/radio_hardware.cpp +++ b/radio/src/gui/480x272/radio_hardware.cpp @@ -58,9 +58,15 @@ enum MenuRadioHardwareItems { ITEM_RADIO_HARDWARE_BLUETOOTH_MODE, ITEM_RADIO_HARDWARE_BLUETOOTH_PAIRING_CODE, ITEM_RADIO_HARDWARE_BLUETOOTH_NAME, + +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) + ITEM_RADIO_HARDWARE_EXTERNAL_ANTENNA, +#endif + #if defined(AUX_SERIAL) ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE, #endif + ITEM_RADIO_HARDWARE_JITTER_FILTER, ITEM_RADIO_HARDWARE_MAX }; @@ -76,6 +82,23 @@ enum MenuRadioHardwareItems { // TODO should be moved to the HAL #define SWITCH_TYPE_MAX(sw) ((MIXSRC_SF-MIXSRC_FIRST_SWITCH == sw || MIXSRC_SH-MIXSRC_FIRST_SWITCH == sw || MIXSRC_SI-MIXSRC_FIRST_SWITCH == sw || MIXSRC_SJ-MIXSRC_FIRST_SWITCH == sw) ? SWITCH_2POS : SWITCH_3POS) +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) +#define EXTERNAL_ANTENNA_ROW 0, +void onHardwareAntennaSwitchConfirm(const char * result) +{ + if (result == STR_OK) { + // Switch to external antenna confirmation + g_eeGeneral.antennaMode = reusableBuffer.radioHardware.antennaMode; + storageDirty(EE_GENERAL); + } + else { + reusableBuffer.radioHardware.antennaMode = g_eeGeneral.antennaMode; + } +} +#else +#define EXTERNAL_ANTENNA_ROW +#endif + bool menuRadioHardware(event_t event) { MENU(STR_HARDWARE, RADIO_ICONS, menuTabGeneral, MENU_RADIO_HARDWARE, ITEM_RADIO_HARDWARE_MAX, { @@ -100,10 +123,22 @@ bool menuRadioHardware(event_t event) BLUETOOTH_ROWS, + EXTERNAL_ANTENNA_ROW + 0, /* aux serial mode */ 0, /* ADC filter */ }); + if (menuEvent) { + disableVBatBridge(); + } + else if (event == EVT_ENTRY) { + enableVBatBridge(); +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) + reusableBuffer.radioHardware.antennaMode = g_eeGeneral.antennaMode; +#endif + } + uint8_t sub = menuVerticalPosition; for (int i=0; i= rssiBarsValue[i] ? MENU_TITLE_COLOR : MENU_TITLE_DISABLE_COLOR); } +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) + if (isModuleXJT(INTERNAL_MODULE) && isExternalAntennaEnabled()) { + lcdDrawBitmapPattern(LCD_W-94, 4, LBM_TOPMENU_ANTENNA, MENU_TITLE_COLOR); + } +#endif + /* Audio volume */ lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_SCALE, MENU_TITLE_DISABLE_COLOR); if (requiredSpeakerVolume == 0 || g_eeGeneral.beepMode == e_mode_quiet) diff --git a/radio/src/gui/480x272/view_statistics.cpp b/radio/src/gui/480x272/view_statistics.cpp index 294f8bf7c..a0cb92392 100644 --- a/radio/src/gui/480x272/view_statistics.cpp +++ b/radio/src/gui/480x272/view_statistics.cpp @@ -98,7 +98,6 @@ bool menuStatsDebug(event_t event) switch(event) { case EVT_ENTRY: case EVT_ENTRY_UP: - enableVBatBridge(); break; case EVT_KEY_FIRST(KEY_ENTER): diff --git a/radio/src/gui/480x272/widget.h b/radio/src/gui/480x272/widget.h index d5a14156e..e0b4fa771 100644 --- a/radio/src/gui/480x272/widget.h +++ b/radio/src/gui/480x272/widget.h @@ -58,7 +58,7 @@ class Widget virtual const char * getErrorMessage() const { - return NULL; + return nullptr; } inline ZoneOptionValue * getOptionValue(unsigned int index) const @@ -83,7 +83,7 @@ void registerWidget(const WidgetFactory * factory); class WidgetFactory { public: - WidgetFactory(const char * name, const ZoneOption * options=NULL): + WidgetFactory(const char * name, const ZoneOption * options=nullptr): name(name), options(options) { diff --git a/radio/src/gui/common/colorlcd/draw_functions.cpp b/radio/src/gui/common/colorlcd/draw_functions.cpp index 30455b707..37b8cb7fc 100644 --- a/radio/src/gui/common/colorlcd/draw_functions.cpp +++ b/radio/src/gui/common/colorlcd/draw_functions.cpp @@ -44,9 +44,9 @@ void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att } } -int editChoice(coord_t x, coord_t y, const char * values, int value, int min, int max, LcdFlags attr, event_t event) +int editChoice(coord_t x, coord_t y, const char * values, int value, int min, int max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable) { - if (attr & INVERS) value = checkIncDec(event, value, min, max, (isModelMenuDisplayed()) ? EE_MODEL : EE_GENERAL); + if (attr & INVERS) value = checkIncDec(event, value, min, max, (isModelMenuDisplayed()) ? EE_MODEL : EE_GENERAL, isValueAvailable); if (values) lcdDrawTextAtIndex(x, y, values, value-min, attr); return value; } diff --git a/radio/src/gui/common/colorlcd/draw_functions.h b/radio/src/gui/common/colorlcd/draw_functions.h index a35699de0..8f8ab6b3b 100644 --- a/radio/src/gui/common/colorlcd/draw_functions.h +++ b/radio/src/gui/common/colorlcd/draw_functions.h @@ -25,7 +25,7 @@ void drawStringWithIndex(coord_t x, coord_t y, const char * str, int idx, LcdFlags flags, const char * prefix, const char * suffix); void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att); -int editChoice(coord_t x, coord_t y, const char * values, int value, int min, int max, LcdFlags attr, event_t event); +int editChoice(coord_t x, coord_t y, const char * values, int value, int min, int max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable=nullptr); uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, LcdFlags attr, event_t event); swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event); void drawFatalErrorScreen(const char * message); diff --git a/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp b/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp index aaa1a9b1c..84cc284fd 100644 --- a/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp +++ b/radio/src/gui/common/stdlcd/model_setup_pxx1.cpp @@ -24,26 +24,26 @@ void onBindMenu(const char * result) uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition - HEADER_LINE); if (result == STR_BINDING_1_8_TELEM_ON) { - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; + g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = false; + g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = false; if (isModuleR9MLiteNonPro(moduleIdx) && isModuleR9M_LBT(moduleIdx)) { g_model.moduleData[moduleIdx].pxx.power = R9M_LITE_LBT_POWER_25_8CH; } } else if (result == STR_BINDING_1_8_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false; + g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = true; + g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = false; if (isModuleR9MLiteNonPro(moduleIdx) && isModuleR9M_LBT(moduleIdx)) { g_model.moduleData[moduleIdx].pxx.power = R9M_LITE_LBT_POWER_100_16CH_NOTELEM; } } else if (result == STR_BINDING_9_16_TELEM_ON) { - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true; + g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = false; + g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = true; } else if (result == STR_BINDING_9_16_TELEM_OFF) { - g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true; - g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true; + g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = true; + g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = true; } else { return; @@ -66,13 +66,13 @@ void startBindMenu(uint8_t moduleIdx) POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF); } - if (isBindCh9To16Allowed(moduleIdx) && g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16) { + if (isBindCh9To16Allowed(moduleIdx) && g_model.moduleData[moduleIdx].pxx.receiverHigherChannels) { selection += 1; if (isTelemAllowedOnBind(moduleIdx)) selection += 1; } - if (isTelemAllowedOnBind(moduleIdx) && g_model.moduleData[moduleIdx].pxx.receiver_telem_off) + if (isTelemAllowedOnBind(moduleIdx) && g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff) selection += 1; POPUP_MENU_SELECT_ITEM(selection); diff --git a/radio/src/gui/common/stdlcd/popups.h b/radio/src/gui/common/stdlcd/popups.h index 4708a06c9..e83d8d05b 100644 --- a/radio/src/gui/common/stdlcd/popups.h +++ b/radio/src/gui/common/stdlcd/popups.h @@ -107,11 +107,14 @@ enum inline void POPUP_CONFIRMATION(const char * s, PopupMenuHandler handler) { - warningText = s; - warningInfoText = nullptr; - warningType = WARNING_TYPE_CONFIRM; - popupFunc = runPopupWarning; - popupMenuHandler = handler; + if (s != warningText) { + killAllEvents(); + warningText = s; + warningInfoText = nullptr; + warningType = WARNING_TYPE_CONFIRM; + popupFunc = runPopupWarning; + popupMenuHandler = handler; + } } inline void POPUP_INPUT(const char * s, PopupFunc func) @@ -144,8 +147,9 @@ enum inline void POPUP_MENU_ADD_ITEM(const char * s) { popupMenuOffsetType = MENU_OFFSET_INTERNAL; - if (popupMenuItemsCount < POPUP_MENU_MAX_LINES) + if (popupMenuItemsCount < POPUP_MENU_MAX_LINES) { popupMenuItems[popupMenuItemsCount++] = s; + } } #if defined(SDCARD) @@ -162,6 +166,7 @@ inline void POPUP_MENU_SELECT_ITEM(uint8_t index) inline void POPUP_MENU_START(PopupMenuHandler handler) { if (handler != popupMenuHandler) { + killAllEvents(); AUDIO_KEY_PRESS(); popupMenuHandler = handler; } diff --git a/radio/src/gui/common/stdlcd/radio_hardware.cpp b/radio/src/gui/common/stdlcd/radio_hardware.cpp index 326affd5a..eb73fbd7a 100644 --- a/radio/src/gui/common/stdlcd/radio_hardware.cpp +++ b/radio/src/gui/common/stdlcd/radio_hardware.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "opentx.h" +#include #if defined(PCBSKY9X) #define HW_SETTINGS_COLUMN (2+(15*FW)) @@ -169,6 +169,10 @@ enum { ITEM_RADIO_HARDWARE_BLUETOOTH_NAME, #endif +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) + ITEM_RADIO_HARDWARE_EXTERNAL_ANTENNA, +#endif + #if defined(AUX_SERIAL) ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE, #endif @@ -221,6 +225,23 @@ enum { #define BLUETOOTH_ROWS uint8_t(IS_BLUETOOTH_CHIP_PRESENT() ? 0 : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_TELEMETRY ? -1 : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0), #endif +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) +#define EXTERNAL_ANTENNA_ROW 0, +void onHardwareAntennaSwitchConfirm(const char * result) +{ + if (result == STR_OK) { + // Switch to external antenna confirmation + g_eeGeneral.antennaMode = reusableBuffer.radioHardware.antennaMode; + storageDirty(EE_GENERAL); + } + else { + reusableBuffer.radioHardware.antennaMode = g_eeGeneral.antennaMode; + } +} +#else +#define EXTERNAL_ANTENNA_ROW +#endif + #if defined(PCBX9LITE) #define SWITCH_TYPE_MAX(sw) (sw == MIXSRC_SD-MIXSRC_FIRST_SWITCH ? SWITCH_2POS : SWITCH_3POS) #elif defined(PCBXLITES) @@ -298,6 +319,8 @@ void menuRadioHardware(event_t event) BLUETOOTH_ROWS + EXTERNAL_ANTENNA_ROW + AUX_SERIAL_ROWS 0 /* ADC filter */, @@ -324,6 +347,9 @@ void menuRadioHardware(event_t event) } else if (event == EVT_ENTRY) { enableVBatBridge(); +#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) + reusableBuffer.radioHardware.antennaMode = g_eeGeneral.antennaMode; +#endif } for (uint8_t i=0; i void Pxx1Pulses::addExtraFlags(uint8_t module) { // Ext. flag (holds antenna selection on Horus internal module, 0x00 otherwise) - uint8_t extra_flags = 0; + uint8_t extraFlags = 0; -#if defined(PCBHORUS) || defined(PCBXLITE) - if (module == INTERNAL_MODULE) { - extra_flags |= (g_model.moduleData[module].pxx.external_antenna << 0); +#if defined(EXTERNAL_ANTENNA) + if (module == INTERNAL_MODULE && isExternalAntennaEnabled()) { + extraFlags |= (1 << 0); } #endif - extra_flags |= (g_model.moduleData[module].pxx.receiver_telem_off << 1); - extra_flags |= (g_model.moduleData[module].pxx.receiver_channel_9_16 << 2); + extraFlags |= (g_model.moduleData[module].pxx.receiverTelemetryOff << 1); + extraFlags |= (g_model.moduleData[module].pxx.receiverHigherChannels << 2); if (isModuleR9MNonAccess(module)) { - extra_flags |= (min(g_model.moduleData[module].pxx.power, isModuleR9M_FCC_VARIANT(module) ? (uint8_t)R9M_FCC_POWER_MAX : (uint8_t)R9M_LBT_POWER_MAX) << 3); + extraFlags |= (min(g_model.moduleData[module].pxx.power, isModuleR9M_FCC_VARIANT(module) ? (uint8_t)R9M_FCC_POWER_MAX : (uint8_t)R9M_LBT_POWER_MAX) << 3); if (isModuleR9M_EUPLUS(module)) - extra_flags |= (1 << 6); + extraFlags |= (1 << 6); } // Disable S.PORT if internal module is active if (module == EXTERNAL_MODULE && isSportLineUsedByInternalModule()) { - extra_flags |= (1 << 5); + extraFlags |= (1 << 5); } - PxxTransport::addByte(extra_flags); + PxxTransport::addByte(extraFlags); } template diff --git a/radio/src/pulses/pxx2.cpp b/radio/src/pulses/pxx2.cpp index b313b356b..b32eede0c 100644 --- a/radio/src/pulses/pxx2.cpp +++ b/radio/src/pulses/pxx2.cpp @@ -243,7 +243,7 @@ void Pxx2Pulses::setupAccstBindFrame(uint8_t module) for (uint8_t i=0; i= 2019) #define INTERNAL_MODULE_PXX2 #else diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 6c9d95752..755842b55 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -73,11 +73,11 @@ ISTR(VSENSORTYPES); ISTR(VFORMULAS); ISTR(VPREC); ISTR(VCELLINDEX); -ISTR(VANTENNATYPES); ISTR(AUX_SERIAL_MODES); ISTR(SWTYPES); ISTR(POTTYPES); ISTR(SLIDERTYPES); +ISTR(ANTENNA_MODES); #if defined(PCBSKY9X) && defined(REVX) ISTR(VOUTPUT_TYPE); @@ -139,6 +139,7 @@ const char STR_CURVE[] = TR_CURVE; const char STR_FLMODE[] = TR_FLMODE; const char STR_MIXWARNING[] = TR_MIXWARNING; const char STR_OFF[] = TR_OFF; +const char STR_ANTENNA[] = TR_ANTENNA; const char STR_NO_INFORMATION[] = TR_NO_INFORMATION; const char STR_MULTPX[] = TR_MULTPX; const char STR_DELAYDOWN[] = TR_DELAYDOWN; @@ -453,9 +454,10 @@ const char STR_BINDING_1_8_TELEM_OFF[] = TR_BINDING_CH1_8_TELEM_OFF; const char STR_BINDING_9_16_TELEM_ON[] = TR_BINDING_CH9_16_TELEM_ON; const char STR_BINDING_9_16_TELEM_OFF[] = TR_BINDING_CH9_16_TELEM_OFF; const char STR_CHANNELRANGE[] = TR_CHANNELRANGE; -const char STR_ANTENNASELECTION[] = TR_ANTENNASELECTION; const char STR_ANTENNACONFIRM1[] = TR_ANTENNACONFIRM1; const char STR_ANTENNACONFIRM2[] = TR_ANTENNACONFIRM2; +const char STR_USE_INTERNAL_ANTENNA[] = TR_USE_INTERNAL_ANTENNA; +const char STR_USE_EXTERNAL_ANTENNA[] = TR_USE_EXTERNAL_ANTENNA; const char STR_MODULE_PROTOCOL_FLEX_WARN_LINE1[] = TR_MODULE_PROTOCOL_FLEX_WARN_LINE1; const char STR_MODULE_PROTOCOL_FCC_WARN_LINE1[] = TR_MODULE_PROTOCOL_FCC_WARN_LINE1; const char STR_MODULE_PROTOCOL_EU_WARN_LINE1[] = TR_MODULE_PROTOCOL_EU_WARN_LINE1; diff --git a/radio/src/translations.h b/radio/src/translations.h index 4b4564687..f4ad4b962 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -169,7 +169,6 @@ extern const char STR_VSENSORTYPES[]; extern const char STR_VFORMULAS[]; extern const char STR_VPREC[]; extern const char STR_VCELLINDEX[]; -extern const char STR_VANTENNATYPES[]; #if defined(BLUETOOTH) extern const char STR_BLUETOOTH[]; @@ -249,6 +248,7 @@ extern const char STR_CURVE[]; extern const char STR_FLMODE[]; extern const char STR_MIXWARNING[]; extern const char STR_OFF[]; +extern const char STR_ANTENNA[]; extern const char STR_NO_INFORMATION[]; extern const char STR_MULTPX[]; extern const char STR_DELAYDOWN[]; @@ -732,6 +732,9 @@ extern const char STR_CHANNELRANGE[]; extern const char STR_ANTENNASELECTION[]; extern const char STR_ANTENNACONFIRM1[]; extern const char STR_ANTENNACONFIRM2[]; +extern const char STR_ANTENNA_MODES[]; +extern const char STR_USE_INTERNAL_ANTENNA[]; +extern const char STR_USE_EXTERNAL_ANTENNA[]; extern const char STR_MODULE_PROTOCOL_FLEX_WARN_LINE1[]; extern const char STR_MODULE_PROTOCOL_FCC_WARN_LINE1[]; extern const char STR_MODULE_PROTOCOL_EU_WARN_LINE1[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 259d833f9..1484da893 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -374,14 +374,6 @@ #define LEN_VCELLINDEX "\007" #define TR_VCELLINDEX "Nízký\0 ""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Nejvíce""Delta\0" -#if defined(PCBX10) || defined(PCBXLITE) -#define LEN_VANTENNATYPES "\007" -#define TR_VANTENNATYPES "Interní""Externí" -#else -#define LEN_VANTENNATYPES "\007" -#define TR_VANTENNATYPES "Interní""Ext+Int" -#endif - #define LEN_GYROS "\004" #define TR_GYROS "GyrX""GyrY" @@ -482,6 +474,7 @@ #define TR_FLMODE "Režim" #define TR_MIXWARNING "Varování" #define TR_OFF "VYP" +#define TR_ANTENNA "Antenna" #define TR_NO_INFORMATION TR("Není info.", "Žádná informace") #define TR_MULTPX TR("Mat.operace", "Operace") #define TR_DELAYDOWN TR3("Zpoždění Vyp", "Zdržet(x)", "Zpoždění Vyp") @@ -926,8 +919,16 @@ #define TR_UNIT "Jednotky" #define TR_TELEMETRY_NEWSENSOR INDENT "Přidat senzor ručně" #define TR_CHANNELRANGE TR(INDENT "Kanály", INDENT "Rozsah kanálů") -#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Volba antény") #define TR_ANTENNACONFIRM1 "Opravdu přepnout?" +#if defined(PCBX12S) +#define LEN_ANTENNA_MODES "\023" +#define TR_ANTENNA_MODES "Internal\0 ""Ask\0 ""Per model\0 ""Internal + External" +#else +#define LEN_ANTENNA_MODES "\011" +#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External" +#endif +#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna") +#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna") #define TR_ANTENNACONFIRM2 TR("Zkont. anténu", "Ujisti se že je anténa připojena!") #define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Vyžaduje FLEX" #define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Vyžaduje FCC" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index e81326e23..24bfcd6a4 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -377,14 +377,6 @@ #define LEN_VCELLINDEX "\012" // "\007" ursprünglich #define TR_VCELLINDEX "Niedrigst\0""1. Zelle\0 ""2. Zelle\0 ""3. Zelle\0 ""4. Zelle\0 ""5. Zelle\0 ""6. Zelle\0 ""Höchster\0 ""Differenz\0" -#if defined(PCBX10) || defined(PCBXLITE) -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""External" -#else -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""Ext+Int\0" -#endif - #define LEN_GYROS "\004" #define TR_GYROS "GyrX""GyrY" @@ -484,6 +476,7 @@ #define TR_FLMODE TR("Phase", "Phasen") #define TR_MIXWARNING "Warnung" #define TR_OFF "AUS" +#define TR_ANTENNA "Antenna" #define TR_NO_INFORMATION TR("No info", "No information") #define TR_MULTPX "Wirkung" #define TR_DELAYDOWN "Verz. Dn" @@ -932,8 +925,16 @@ #define TR_UNIT "Einheit" #define TR_TELEMETRY_NEWSENSOR INDENT "Sensor hinzufügen ..." #define TR_CHANNELRANGE TR(INDENT "Kanäle", INDENT "Ausgangs Kanäle") //wg 9XR-Pro -#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenne auswählen") -#define TR_ANTENNACONFIRM1 "Ant. umschalten" +#define TR_ANTENNACONFIRM1 "Ant. umschalten" +#if defined(PCBX12S) +#define LEN_ANTENNA_MODES "\023" +#define TR_ANTENNA_MODES "Internal\0 ""Ask\0 ""Per model\0 ""Internal + External" +#else +#define LEN_ANTENNA_MODES "\011" +#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External" +#endif +#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna") +#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna") #define TR_ANTENNACONFIRM2 TR("Check antenna", "Ist eine externe Antenne installiert?") #define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non" #define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index ef384edd9..978094bcb 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -377,14 +377,6 @@ #define LEN_VCELLINDEX "\007" #define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" -#if defined(PCBX10) || defined(PCBXLITE) -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""External" -#else -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""Ext+Int\0" -#endif - #define LEN_GYROS "\004" #define TR_GYROS "GyrX""GyrY" @@ -484,6 +476,7 @@ #define TR_FLMODE TR("Mode", "Modes") #define TR_MIXWARNING "Warning" #define TR_OFF "OFF" +#define TR_ANTENNA "Antenna" #define TR_NO_INFORMATION TR("No info", "No information") #define TR_MULTPX "Multiplex" #define TR_DELAYDOWN "Delay dn" @@ -805,6 +798,7 @@ #else #define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0" #endif + #define TR_SD_INFO_TITLE "SD INFO" #define TR_SD_TYPE "Type:" #define TR_SD_SPEED "Speed:" @@ -932,8 +926,16 @@ #define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." #define TR_CHANNELRANGE TR(INDENT "Ch. Range", INDENT "Channel Range") -#define TR_ANTENNASELECTION TR(INDENT "Antenna", TR(INDENT "Antenna", INDENT "Antenna selection")) -#define TR_ANTENNACONFIRM1 "Really switch?" +#define TR_ANTENNACONFIRM1 "EXT. ANTENNA" +#if defined(PCBX12S) +#define LEN_ANTENNA_MODES "\023" +#define TR_ANTENNA_MODES "Internal\0 ""Ask\0 ""Per model\0 ""Internal + External" +#else +#define LEN_ANTENNA_MODES "\011" +#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External" +#endif +#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna") +#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna") #define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!") #define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires FLEX non" #define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 20fe25d51..5cf77c28a 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -392,14 +392,6 @@ #define LEN_VCELLINDEX "\007" #define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" -#if defined(PCBX10) || defined(PCBXLITE) -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""External" -#else -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""Ext+Int\0" -#endif - #define LEN_GYROS "\004" #define TR_GYROS "GyrX""GyrY" @@ -504,6 +496,7 @@ #define TR_FLMODE TR("Modo","Modos") #define TR_MIXWARNING "Aviso" #define TR_OFF "OFF" +#define TR_ANTENNA "Antenna" #define TR_NO_INFORMATION TR("No info", "No information") #define TR_MULTPX "Multpx" #define TR_DELAYDOWN "Delay Dn" @@ -952,8 +945,16 @@ #define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." #define TR_CHANNELRANGE INDENT "Gama de canales" -#define TR_ANTENNASELECTION TR(INDENT "Antenna", TR(INDENT "Antenna", INDENT "Antenna selection")) -#define TR_ANTENNACONFIRM1 "Really switch?" +#define TR_ANTENNACONFIRM1 "EXT. ANTENNA" +#if defined(PCBX12S) +#define LEN_ANTENNA_MODES "\023" +#define TR_ANTENNA_MODES "Internal\0 ""Ask\0 ""Per model\0 ""Internal + External" +#else +#define LEN_ANTENNA_MODES "\011" +#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External" +#endif +#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna") +#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna") #define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!") #define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non" #define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index cb4f0139f..fc3ac847d 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -392,14 +392,6 @@ #define LEN_VCELLINDEX "\007" #define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" -#if defined(PCBX10) || defined(PCBXLITE) -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""External" -#else -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""Ext+Int\0" -#endif - #define LEN_GYROS "\004" #define TR_GYROS "GyrX""GyrY" @@ -496,6 +488,7 @@ #define TR_FLMODE TR("Mode","Modes") #define TR_MIXWARNING "Warning" #define TR_OFF "OFF" +#define TR_ANTENNA "Antenna" #define TR_NO_INFORMATION TR("No info", "No information") #define TR_MULTPX "Multpx" #define TR_DELAYDOWN "Delay Dn" @@ -945,8 +938,16 @@ #define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." #define TR_CHANNELRANGE INDENT "Channel Range" -#define TR_ANTENNASELECTION TR(INDENT "Antenna", TR(INDENT "Antenna", INDENT "Antenna selection")) -#define TR_ANTENNACONFIRM1 "Really switch?" +#define TR_ANTENNACONFIRM1 "EXT. ANTENNA" +#if defined(PCBX12S) +#define LEN_ANTENNA_MODES "\023" +#define TR_ANTENNA_MODES "Internal\0 ""Ask\0 ""Per model\0 ""Internal + External" +#else +#define LEN_ANTENNA_MODES "\011" +#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External" +#endif +#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna") +#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna") #define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!") #define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non" #define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index d8886c75b..76d0e796b 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -394,14 +394,6 @@ #define LEN_VCELLINDEX "\007" #define TR_VCELLINDEX "Mini.\0 ""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Maxi.\0 ""Diff.\0 " -#if defined(PCBX10) || defined(PCBXLITE) -#define LEN_VANTENNATYPES "\007" -#define TR_VANTENNATYPES "Interne""Externe" -#else -#define LEN_VANTENNATYPES "\007" -#define TR_VANTENNATYPES "Interne""Ext+Int\0" -#endif - #define LEN_GYROS "\004" #define TR_GYROS "GyrX""GyrY" @@ -502,6 +494,7 @@ #define TR_FLMODE TR("Phase", "Phases") #define TR_MIXWARNING "Alerte" #define TR_OFF "OFF" +#define TR_ANTENNA "Antenna" #define TR_NO_INFORMATION TR("No info", "No information") #define TR_MULTPX "Opération" #define TR_DELAYDOWN "Retard bas" @@ -947,8 +940,16 @@ #define TR_UNIT "Unité" #define TR_TELEMETRY_NEWSENSOR TR(INDENT"Nouveau capteur...", INDENT "Ajout d'un nouveau capteur...") #define TR_CHANNELRANGE TR(INDENT "Canaux", INDENT "Plage de canaux") -#define TR_ANTENNASELECTION TR(INDENT "Antenne", INDENT "Choix antenne") #define TR_ANTENNACONFIRM1 "Vraiment changer?" +#if defined(PCBX12S) +#define LEN_ANTENNA_MODES "\021" +#define TR_ANTENNA_MODES "Interne\0 ""Ask\0 ""Par modèle\0 ""Interne + Externe" +#else +#define LEN_ANTENNA_MODES "\011" +#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External" +#endif +#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna") +#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna") #define TR_ANTENNACONFIRM2 TR("Vérif antenne", "Installer l'antenne d'abord!") #define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Nécessite firm." #define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 9ea317cf2..6ac01e841 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -395,14 +395,6 @@ #define LEN_VCELLINDEX "\010" #define TR_VCELLINDEX "Minore\0 ""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Maggiore""Delta\0" -#if defined(PCBX10) || defined(PCBXLITE) -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""External" -#else -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""Ext+Int\0" -#endif - #define LEN_GYROS "\004" #define TR_GYROS "GyrX""GyrY" @@ -503,6 +495,7 @@ #define TR_FLMODE "Fase" #define TR_MIXWARNING "Avviso" #define TR_OFF "OFF" +#define TR_ANTENNA "Antenna" #define TR_NO_INFORMATION TR("No info", "No information") #define TR_MULTPX "MultPx" #define TR_DELAYDOWN "Post.Giù " @@ -946,8 +939,16 @@ #define TR_UNIT "Unita" #define TR_TELEMETRY_NEWSENSOR INDENT "Aggiungi nuovo sensore..." #define TR_CHANNELRANGE INDENT "Numero Canali" -#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection") -#define TR_ANTENNACONFIRM1 "Really switch?" +#define TR_ANTENNACONFIRM1 "EXT. ANTENNA" +#if defined(PCBX12S) +#define LEN_ANTENNA_MODES "\023" +#define TR_ANTENNA_MODES "Internal\0 ""Ask\0 ""Per model\0 ""Internal + External" +#else +#define LEN_ANTENNA_MODES "\011" +#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External" +#endif +#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna") +#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna") #define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!") #define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non" #define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 0a0e55ebd..930e2a8e1 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -377,14 +377,6 @@ TR_GYR_VSRCRAW #define LEN_VCELLINDEX "\007" #define TR_VCELLINDEX "Laagste""1e Cel\0""2e Cel\0""3e Cel\0""4e Cel\0""5e Cel\0""6e Cel\0""Hoogste""Delta\0 " -#if defined(PCBX10) || defined(PCBXLITE) -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""External" -#else -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""Ext+Int\0" -#endif - #define LEN_GYROS "\004" #define TR_GYROS "GyrX""GyrY" @@ -484,6 +476,7 @@ TR_GYR_VSRCRAW #define TR_FLMODE TR("Mode", "Modes") #define TR_MIXWARNING "Melding" #define TR_OFF "UIT" +#define TR_ANTENNA "Antenna" #define TR_NO_INFORMATION TR("No info", "No information") #define TR_MULTPX "Multpx" #define TR_DELAYDOWN "Vertr.Dn" @@ -934,8 +927,16 @@ TR_GYR_VSRCRAW #define TR_UNIT "Eenheid" #define TR_TELEMETRY_NEWSENSOR INDENT "Sensor toevoegen ..." #define TR_CHANNELRANGE TR(INDENT "Kanalen", INDENT "Uitgangs Kanalen") //wg 9XR-Pro -#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection") #define TR_ANTENNACONFIRM1 "Antennes wisselen?" +#if defined(PCBX12S) +#define LEN_ANTENNA_MODES "\023" +#define TR_ANTENNA_MODES "Internal\0 ""Ask\0 ""Per model\0 ""Internal + External" +#else +#define LEN_ANTENNA_MODES "\011" +#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External" +#endif +#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna") +#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna") #define TR_ANTENNACONFIRM2 TR("Check antenna", "Is er zeker een antenne geplaatst!") #define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non" #define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index e55756458..987de0950 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -395,14 +395,6 @@ #define LEN_VCELLINDEX "\007" #define TR_VCELLINDEX "Niskie\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Wysokie""Delta\0" -#if defined(PCBX10) || defined(PCBXLITE) -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""External" -#else -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""Ext+Int\0" -#endif - #define LEN_GYROS "\004" #define TR_GYROS "GyrX""GyrY" @@ -503,6 +495,7 @@ #define TR_FLMODE "Tryb" #define TR_MIXWARNING "UWAGA" #define TR_OFF "Wył." +#define TR_ANTENNA "Antenna" #define TR_NO_INFORMATION TR("No info", "No information") #define TR_MULTPX "Złącz." #define TR_DELAYDOWN "Opózn.(-)" @@ -946,8 +939,16 @@ #define TR_UNIT "Jedn" #define TR_TELEMETRY_NEWSENSOR INDENT "Dodaj nowy czujnik..." #define TR_CHANNELRANGE TR(INDENT "ZakrKn",INDENT "Zakres kanału") -#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection") -#define TR_ANTENNACONFIRM1 "Really switch?" +#define TR_ANTENNACONFIRM1 "EXT. ANTENNA" +#if defined(PCBX12S) +#define LEN_ANTENNA_MODES "\023" +#define TR_ANTENNA_MODES "Internal\0 ""Ask\0 ""Per model\0 ""Internal + External" +#else +#define LEN_ANTENNA_MODES "\011" +#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External" +#endif +#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna") +#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna") #define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!") #define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non" #define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 097c6e1a8..92a9767b5 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -377,14 +377,6 @@ #define LEN_VCELLINDEX "\007" #define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" -#if defined(PCBX10) || defined(PCBXLITE) -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""External" -#else -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""Ext+Int\0" -#endif - #define LEN_GYROS "\004" #define TR_GYROS "GyrX""GyrY" @@ -489,6 +481,7 @@ #define TR_FLMODE "Fase" #define TR_MIXWARNING "Aviso" #define TR_OFF "OFF" +#define TR_ANTENNA "Antenna" #define TR_NO_INFORMATION TR("No info", "No information") #define TR_MULTPX "Aplicar" #define TR_DELAYDOWN "Atraso Dn" @@ -936,8 +929,16 @@ #define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." #define TR_CHANNELRANGE INDENT "Channel Range" -#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection") -#define TR_ANTENNACONFIRM1 "Really switch?" +#define TR_ANTENNACONFIRM1 "EXT. ANTENNA" +#if defined(PCBX12S) +#define LEN_ANTENNA_MODES "\023" +#define TR_ANTENNA_MODES "Internal\0 ""Ask\0 ""Per model\0 ""Internal + External" +#else +#define LEN_ANTENNA_MODES "\011" +#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External" +#endif +#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna") +#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna") #define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!") #define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non" #define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index a99e0ee25..90c8af0fe 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -390,14 +390,6 @@ #define LEN_VCELLINDEX "\010" #define TR_VCELLINDEX "Lägsta\0 ""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Högsta\0 ""Skillnad" -#if defined(PCBX10) || defined(PCBXLITE) -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""External" -#else -#define LEN_VANTENNATYPES "\010" -#define TR_VANTENNATYPES "Internal""Ext+Int\0" -#endif - #define LEN_GYROS "\004" #define TR_GYROS "GyrX""GyrY" @@ -502,6 +494,7 @@ #define TR_FLMODE TR("Läge","Flyglägen") #define TR_MIXWARNING "Varning" #define TR_OFF "Av " +#define TR_ANTENNA "Antenna" #define TR_NO_INFORMATION TR("No info", "No information") #define TR_MULTPX "Multpx" #define TR_DELAYDOWN "Dröj Ned" @@ -946,8 +939,16 @@ #define TR_UNIT "Enhet" #define TR_TELEMETRY_NEWSENSOR INDENT "Lägg till sensor..." #define TR_CHANNELRANGE INDENT "Kanalområde" -#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection") -#define TR_ANTENNACONFIRM1 "Really switch?" +#define TR_ANTENNACONFIRM1 "EXT. ANTENNA" +#if defined(PCBX12S) +#define LEN_ANTENNA_MODES "\023" +#define TR_ANTENNA_MODES "Internal\0 ""Ask\0 ""Per model\0 ""Internal + External" +#else +#define LEN_ANTENNA_MODES "\011" +#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External" +#endif +#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna") +#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna") #define TR_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!") #define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non" #define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"