mirror of
https://github.com/EdgeTX/edgetx.git
synced 2025-07-24 16:55:15 +03:00
External antenna configuration
This commit is contained in:
parent
5d2aefaefb
commit
6c530c6f7b
80 changed files with 1669 additions and 1253 deletions
|
@ -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";
|
||||
|
|
|
@ -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_
|
||||
|
|
|
@ -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<NUM_ERRORS> 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();
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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];
|
||||
|
@ -2067,10 +2067,10 @@ class ModuleUnionField: public UnionField<unsigned int> {
|
|||
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<CPN_MAX_STICKS; i++) {
|
||||
internalField.Append(new SignedField<3>(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<CPN_MAX_STICKS; i++) {
|
||||
|
||||
for (int i=0; i<4; i++) {
|
||||
internalField.Append(new UnsignedField<6>(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));
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1042</width>
|
||||
<height>375</height>
|
||||
<width>1075</width>
|
||||
<height>434</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -252,7 +252,7 @@
|
|||
<item row="4" column="1">
|
||||
<layout class="QHBoxLayout" name="rx1Layout">
|
||||
<property name="spacing">
|
||||
<number>-1</number>
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
|
@ -595,7 +595,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_antenna">
|
||||
<widget class="QLabel" name="antennaLabel">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
|
@ -611,7 +611,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="antennaMode">
|
||||
<widget class="AutoComboBox" name="antennaMode">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
|
@ -621,16 +621,6 @@
|
|||
<property name="sizeAdjustPolicy">
|
||||
<enum>QComboBox::AdjustToContents</enum>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Internal</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Ext. + Int.</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
|
@ -732,6 +722,26 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="registrationIdLabel">
|
||||
<property name="text">
|
||||
<string>Registration ID</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="registrationId">
|
||||
<property name="inputMask">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_multiProtocol">
|
||||
<property name="text">
|
||||
|
@ -775,6 +785,50 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="2">
|
||||
<widget class="QLabel" name="warning_r9mFlex">
|
||||
<property name="palette">
|
||||
<palette>
|
||||
<active>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>198</red>
|
||||
<green>17</green>
|
||||
<blue>36</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</active>
|
||||
<inactive>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>198</red>
|
||||
<green>17</green>
|
||||
<blue>36</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</inactive>
|
||||
<disabled>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>106</red>
|
||||
<green>104</green>
|
||||
<blue>100</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</disabled>
|
||||
</palette>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>WARNING: Requires non-certified firmware!</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_failsafeMode">
|
||||
<property name="maximumSize">
|
||||
|
@ -883,70 +937,6 @@
|
|||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="2">
|
||||
<widget class="QLabel" name="warning_r9mFlex">
|
||||
<property name="palette">
|
||||
<palette>
|
||||
<active>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>198</red>
|
||||
<green>17</green>
|
||||
<blue>36</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</active>
|
||||
<inactive>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>198</red>
|
||||
<green>17</green>
|
||||
<blue>36</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</inactive>
|
||||
<disabled>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>106</red>
|
||||
<green>104</green>
|
||||
<blue>100</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</disabled>
|
||||
</palette>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>WARNING: Requires non-certified firmware!</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="registrationIdLabel">
|
||||
<property name="text">
|
||||
<string>Registration ID</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="registrationId">
|
||||
<property name="inputMask">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="2">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
|
@ -1069,6 +1059,13 @@ QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; pad
|
|||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>AutoComboBox</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>autocombobox.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>protocol</tabstop>
|
||||
<tabstop>channelsStart</tabstop>
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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_
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
BIN
radio/src/bitmaps/480x272/mask_antenna.png
Executable file
BIN
radio/src/bitmaps/480x272/mask_antenna.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 523 B |
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
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.external_antenna = newAntennaSel;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode = reusableBuffer.moduleSetup.antennaMode;
|
||||
checkExternalAntenna();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_OPTIONS:
|
||||
|
|
|
@ -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
|
||||
|
||||
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((TELEMETRY_RSSI() - g_model.rssiAlarms.getWarningRssi()) > bar*(i-1)) {
|
||||
lcdDrawFilledRect(RSSSI_X + i*4, RSSSI_Y - 2*i, 3, 2*i, SOLID, 0);
|
||||
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) {
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -116,11 +116,6 @@ void menuStatisticsDebug(event_t event)
|
|||
#endif
|
||||
|
||||
switch (event) {
|
||||
case EVT_ENTRY:
|
||||
case EVT_ENTRY_UP:
|
||||
enableVBatBridge();
|
||||
break;
|
||||
|
||||
case EVT_KEY_LONG(KEY_ENTER):
|
||||
g_eeGeneral.globalTimer = 0;
|
||||
sessionTimer = 0;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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"
|
||||
};
|
||||
|
|
|
@ -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[];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<ModelsCategory*>& cats = modelslist.getCategories();
|
||||
switch(event) {
|
||||
case 0:
|
||||
|
|
|
@ -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) {
|
||||
|
@ -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);
|
||||
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.external_antenna = newAntennaSel;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode = reusableBuffer.moduleSetup.antennaMode;
|
||||
checkExternalAntenna();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL:
|
||||
|
|
|
@ -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<NUM_BODY_LINES; ++i) {
|
||||
|
@ -242,15 +277,32 @@ bool menuRadioHardware(event_t event)
|
|||
break;
|
||||
|
||||
case ITEM_RADIO_HARDWARE_BLUETOOTH_PAIRING_CODE:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH_PIN_CODE);
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BLUETOOTH_PIN_CODE);
|
||||
lcdDrawText(HW_SETTINGS_COLUMN+50, y, "000000", 0);
|
||||
break;
|
||||
|
||||
case ITEM_RADIO_HARDWARE_BLUETOOTH_NAME:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_NAME);
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_NAME);
|
||||
editName(HW_SETTINGS_COLUMN+50, y, g_eeGeneral.bluetoothName, LEN_BLUETOOTH_NAME, event, attr);
|
||||
break;
|
||||
|
||||
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
|
||||
case ITEM_RADIO_HARDWARE_EXTERNAL_ANTENNA:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_ANTENNA);
|
||||
reusableBuffer.radioHardware.antennaMode = editChoice(HW_SETTINGS_COLUMN+50, y, STR_ANTENNA_MODES, reusableBuffer.radioHardware.antennaMode, ANTENNA_MODE_INTERNAL, ANTENNA_MODE_EXTERNAL, attr, event);
|
||||
if (!s_editMode && reusableBuffer.radioHardware.antennaMode != g_eeGeneral.antennaMode) {
|
||||
if (!isExternalAntennaEnabled() && (reusableBuffer.radioHardware.antennaMode == ANTENNA_MODE_EXTERNAL || (reusableBuffer.radioHardware.antennaMode == ANTENNA_MODE_PER_MODEL && g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode == ANTENNA_MODE_EXTERNAL))) {
|
||||
POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onHardwareAntennaSwitchConfirm);
|
||||
SET_WARNING_INFO(STR_ANTENNACONFIRM2, sizeof(TR_ANTENNACONFIRM2), 0);
|
||||
}
|
||||
else {
|
||||
g_eeGeneral.antennaMode = reusableBuffer.radioHardware.antennaMode;
|
||||
checkExternalAntenna();
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(AUX_SERIAL)
|
||||
case ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_AUX_SERIAL_MODE);
|
||||
|
|
|
@ -72,6 +72,19 @@ void getSelectionFullPath(char * lfn)
|
|||
strcat(lfn, reusableBuffer.sdManager.lines[menuVerticalPosition - menuVerticalOffset]);
|
||||
}
|
||||
|
||||
void onSdFormatConfirm(const char * result)
|
||||
{
|
||||
if (result == STR_OK) {
|
||||
showMessageBox(STR_FORMATTING);
|
||||
logsClose();
|
||||
audioQueue.stopSD();
|
||||
if(sdCardFormat()) {
|
||||
f_chdir("/");
|
||||
REFRESH_FILES();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void onSdManagerMenu(const char * result)
|
||||
{
|
||||
TCHAR lfn[_MAX_LFN+1];
|
||||
|
@ -85,7 +98,7 @@ void onSdManagerMenu(const char * result)
|
|||
pushMenu(menuRadioSdManagerInfo);
|
||||
}
|
||||
else if (result == STR_SD_FORMAT) {
|
||||
POPUP_CONFIRMATION(STR_CONFIRM_FORMAT);
|
||||
POPUP_CONFIRMATION(STR_CONFIRM_FORMAT, onSdFormatConfirm);
|
||||
}
|
||||
else if (result == STR_COPY_FILE) {
|
||||
clipboard.type = CLIPBOARD_TYPE_SD_FILE;
|
||||
|
@ -165,17 +178,6 @@ void onSdManagerMenu(const char * result)
|
|||
|
||||
bool menuRadioSdManager(event_t _event)
|
||||
{
|
||||
if (warningResult) {
|
||||
warningResult = 0;
|
||||
showMessageBox(STR_FORMATTING);
|
||||
logsClose();
|
||||
audioQueue.stopSD();
|
||||
if(sdCardFormat()) {
|
||||
f_chdir("/");
|
||||
REFRESH_FILES();
|
||||
}
|
||||
}
|
||||
|
||||
event_t event = (EVT_KEY_MASK(_event) == KEY_ENTER ? 0 : _event);
|
||||
SIMPLE_MENU(SD_IS_HC() ? STR_SDHC_CARD : STR_SD_CARD, RADIO_ICONS, menuTabGeneral, MENU_RADIO_SD_MANAGER, reusableBuffer.sdManager.count);
|
||||
|
||||
|
|
|
@ -86,16 +86,16 @@ bool menuRadioTools(event_t event)
|
|||
uint8_t index = 0;
|
||||
|
||||
#if defined(PXX2)
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.hardwareAndSettings.modules[INTERNAL_MODULE].information.modelID, MODULE_OPTION_SPECTRUM_ANALYSER))
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.radioTools.modules[INTERNAL_MODULE].information.modelID, MODULE_OPTION_SPECTRUM_ANALYSER))
|
||||
addRadioModuleTool(index++, STR_SPECTRUM_ANALYSER_INT, menuRadioSpectrumAnalyser, INTERNAL_MODULE);
|
||||
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.hardwareAndSettings.modules[INTERNAL_MODULE].information.modelID, MODULE_OPTION_POWER_METER))
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.radioTools.modules[INTERNAL_MODULE].information.modelID, MODULE_OPTION_POWER_METER))
|
||||
addRadioModuleTool(index++, STR_POWER_METER_INT, menuRadioPowerMeter, INTERNAL_MODULE);
|
||||
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.hardwareAndSettings.modules[EXTERNAL_MODULE].information.modelID, MODULE_OPTION_SPECTRUM_ANALYSER))
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.radioTools.modules[EXTERNAL_MODULE].information.modelID, MODULE_OPTION_SPECTRUM_ANALYSER))
|
||||
addRadioModuleTool(index++, STR_SPECTRUM_ANALYSER_EXT, menuRadioSpectrumAnalyser, EXTERNAL_MODULE);
|
||||
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.hardwareAndSettings.modules[EXTERNAL_MODULE].information.modelID, MODULE_OPTION_POWER_METER))
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.radioTools.modules[EXTERNAL_MODULE].information.modelID, MODULE_OPTION_POWER_METER))
|
||||
addRadioModuleTool(index++, STR_POWER_METER_EXT, menuRadioPowerMeter, EXTERNAL_MODULE);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -69,6 +69,12 @@ void drawTopBar()
|
|||
lcdDrawSolidFilledRect(LCD_W-90 + i * 6, 38 - height, 4, height, TELEMETRY_RSSI() >= 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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -107,12 +107,15 @@ enum
|
|||
|
||||
inline void POPUP_CONFIRMATION(const char * s, 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,9 +147,10 @@ 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)
|
||||
#define POPUP_MENU_ADD_SD_ITEM(s) POPUP_MENU_ADD_ITEM(s)
|
||||
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "opentx.h"
|
||||
#include <opentx.h>
|
||||
|
||||
#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<NUM_BODY_LINES; i++) {
|
||||
|
@ -546,6 +572,22 @@ void menuRadioHardware(event_t event)
|
|||
break;
|
||||
#endif
|
||||
|
||||
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
|
||||
case ITEM_RADIO_HARDWARE_EXTERNAL_ANTENNA:
|
||||
reusableBuffer.radioHardware.antennaMode = editChoice(HW_SETTINGS_COLUMN2, y, STR_ANTENNA, STR_ANTENNA_MODES, reusableBuffer.radioHardware.antennaMode, ANTENNA_MODE_INTERNAL, ANTENNA_MODE_EXTERNAL, attr, event);
|
||||
if (!s_editMode && reusableBuffer.radioHardware.antennaMode != g_eeGeneral.antennaMode) {
|
||||
if (!isExternalAntennaEnabled() && (reusableBuffer.radioHardware.antennaMode == ANTENNA_MODE_EXTERNAL || (reusableBuffer.radioHardware.antennaMode == ANTENNA_MODE_PER_MODEL && g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode == ANTENNA_MODE_EXTERNAL))) {
|
||||
POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onHardwareAntennaSwitchConfirm);
|
||||
SET_WARNING_INFO(STR_ANTENNACONFIRM2, sizeof(TR_ANTENNACONFIRM2), 0);
|
||||
}
|
||||
else {
|
||||
g_eeGeneral.antennaMode = reusableBuffer.radioHardware.antennaMode;
|
||||
checkExternalAntenna();
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(AUX_SERIAL)
|
||||
case ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE:
|
||||
g_eeGeneral.auxSerialMode = editChoice(HW_SETTINGS_COLUMN2, y, STR_AUX_SERIAL_MODE, STR_AUX_SERIAL_MODES, g_eeGeneral.auxSerialMode, 0, UART_MODE_MAX, attr, event);
|
||||
|
|
|
@ -85,16 +85,16 @@ void menuRadioTools(event_t event)
|
|||
uint8_t index = 0;
|
||||
|
||||
#if defined(PXX2)
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.hardwareAndSettings.modules[INTERNAL_MODULE].information.modelID, MODULE_OPTION_SPECTRUM_ANALYSER))
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.radioTools.modules[INTERNAL_MODULE].information.modelID, MODULE_OPTION_SPECTRUM_ANALYSER))
|
||||
addRadioModuleTool(index++, STR_SPECTRUM_ANALYSER_INT, menuRadioSpectrumAnalyser, INTERNAL_MODULE);
|
||||
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.hardwareAndSettings.modules[INTERNAL_MODULE].information.modelID, MODULE_OPTION_POWER_METER))
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.radioTools.modules[INTERNAL_MODULE].information.modelID, MODULE_OPTION_POWER_METER))
|
||||
addRadioModuleTool(index++, STR_POWER_METER_INT, menuRadioPowerMeter, INTERNAL_MODULE);
|
||||
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.hardwareAndSettings.modules[EXTERNAL_MODULE].information.modelID, MODULE_OPTION_SPECTRUM_ANALYSER))
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.radioTools.modules[EXTERNAL_MODULE].information.modelID, MODULE_OPTION_SPECTRUM_ANALYSER))
|
||||
addRadioModuleTool(index++, STR_SPECTRUM_ANALYSER_EXT, menuRadioSpectrumAnalyser, EXTERNAL_MODULE);
|
||||
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.hardwareAndSettings.modules[EXTERNAL_MODULE].information.modelID, MODULE_OPTION_POWER_METER))
|
||||
if (isPXX2ModuleOptionAvailable(reusableBuffer.radioTools.modules[EXTERNAL_MODULE].information.modelID, MODULE_OPTION_POWER_METER))
|
||||
addRadioModuleTool(index++, STR_POWER_METER_EXT, menuRadioPowerMeter, EXTERNAL_MODULE);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -110,7 +110,6 @@ void drawCurve(coord_t offset=0);
|
|||
|
||||
#if defined(COLORLCD)
|
||||
void drawStringWithIndex(coord_t x, coord_t y, const char * str, int idx, LcdFlags flags=0, const char * prefix=nullptr, const char * suffix=nullptr);
|
||||
int editChoice(coord_t x, coord_t y, const char * values, int value, int min, int max, LcdFlags flags, event_t event);
|
||||
uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, LcdFlags flags, event_t event);
|
||||
swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags flags, event_t event);
|
||||
void drawFatalErrorScreen(const char * message);
|
||||
|
|
|
@ -314,7 +314,9 @@ void guiMain(event_t evt)
|
|||
const char * result = runPopupMenu(evt);
|
||||
if (result) {
|
||||
TRACE("popupMenuHandler(%s)", result);
|
||||
popupMenuHandler(result);
|
||||
auto handler = popupMenuHandler;
|
||||
popupMenuHandler = nullptr;
|
||||
handler(result);
|
||||
if (menuEvent == 0) {
|
||||
evt = EVT_REFRESH;
|
||||
continue;
|
||||
|
@ -453,7 +455,9 @@ void guiMain(event_t evt)
|
|||
const char * result = runPopupMenu(evt);
|
||||
if (result) {
|
||||
TRACE("popupMenuHandler(%s)", result);
|
||||
popupMenuHandler(result);
|
||||
auto handler = popupMenuHandler;
|
||||
popupMenuHandler = nullptr;
|
||||
handler(result);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -910,6 +910,10 @@ void checkAll()
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(EXTERNAL_ANTENNA) && defined(INTERNAL_MODULE_PXX1)
|
||||
checkExternalAntenna();
|
||||
#endif
|
||||
|
||||
START_SILENCE_PERIOD();
|
||||
}
|
||||
#endif // GUI
|
||||
|
|
|
@ -568,7 +568,8 @@ void flightReset(uint8_t check=true);
|
|||
PACK(struct GlobalData {
|
||||
uint8_t unexpectedShutdown:1;
|
||||
uint8_t sdcardPresent:1;
|
||||
uint8_t spare:6;
|
||||
uint8_t externalAntennaEnabled: 1;
|
||||
uint8_t spare:5;
|
||||
});
|
||||
|
||||
extern GlobalData globalData;
|
||||
|
@ -1106,6 +1107,7 @@ union ReusableBuffer
|
|||
struct {
|
||||
char msg[64];
|
||||
uint8_t r9mPower;
|
||||
int8_t antennaMode;
|
||||
BindInformation bindInformation;
|
||||
struct {
|
||||
union {
|
||||
|
@ -1165,13 +1167,17 @@ union ReusableBuffer
|
|||
uint32_t updateTime;
|
||||
ModuleSettings moduleSettings;
|
||||
ReceiverSettings receiverSettings; // when dealing with receiver settings, we also need module settings
|
||||
} hardwareAndSettings;
|
||||
} hardwareAndSettings; // moduleOptions, receiverOptions, radioVersion
|
||||
|
||||
struct {
|
||||
ModuleInformation modules[NUM_MODULES];
|
||||
uint8_t linesCount;
|
||||
} radioTools;
|
||||
|
||||
struct {
|
||||
int8_t antennaMode;
|
||||
} radioHardware;
|
||||
|
||||
struct {
|
||||
uint8_t stickMode;
|
||||
} generalSettings;
|
||||
|
|
|
@ -1,3 +1,26 @@
|
|||
/*
|
||||
* Copyright (C) OpenTX
|
||||
*
|
||||
* Based on code named
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef _MODULES_CONSTANTS_H_
|
||||
#define _MODULES_CONSTANTS_H_
|
||||
|
||||
enum ModuleType {
|
||||
MODULE_TYPE_NONE = 0,
|
||||
MODULE_TYPE_PPM,
|
||||
|
@ -164,3 +187,14 @@ enum FailsafeModes {
|
|||
FAILSAFE_RECEIVER,
|
||||
FAILSAFE_LAST = FAILSAFE_RECEIVER
|
||||
};
|
||||
|
||||
enum AntennaModes {
|
||||
ANTENNA_MODE_INTERNAL = -2,
|
||||
ANTENNA_MODE_ASK = -1,
|
||||
ANTENNA_MODE_PER_MODEL = 0,
|
||||
ANTENNA_MODE_EXTERNAL = 1,
|
||||
ANTENNA_MODE_FIRST = ANTENNA_MODE_INTERNAL,
|
||||
ANTENNA_MODE_LAST = ANTENNA_MODE_EXTERNAL
|
||||
};
|
||||
|
||||
#endif // _MODULES_CONSTANTS_H_
|
||||
|
|
43
radio/src/pulses/modules_helpers.cpp
Normal file
43
radio/src/pulses/modules_helpers.cpp
Normal file
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Copyright (C) OpenTX
|
||||
*
|
||||
* Based on code named
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "opentx.h"
|
||||
|
||||
#if defined(EXTERNAL_ANTENNA)
|
||||
bool isExternalAntennaEnabled()
|
||||
{
|
||||
switch (g_eeGeneral.antennaMode) {
|
||||
case ANTENNA_MODE_INTERNAL:
|
||||
return false;
|
||||
case ANTENNA_MODE_EXTERNAL:
|
||||
return true;
|
||||
case ANTENNA_MODE_PER_MODEL:
|
||||
switch (g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode) {
|
||||
case ANTENNA_MODE_EXTERNAL:
|
||||
case ANTENNA_MODE_ASK:
|
||||
return globalData.externalAntennaEnabled;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
default:
|
||||
return globalData.externalAntennaEnabled;
|
||||
}
|
||||
}
|
||||
#endif
|
|
@ -479,4 +479,6 @@ inline void setModuleType(uint8_t moduleIdx, uint8_t moduleType)
|
|||
setDefaultPpmFrameLength(moduleIdx);
|
||||
}
|
||||
|
||||
extern bool isExternalAntennaEnabled();
|
||||
|
||||
#endif // _MODULES_HELPERS_H_
|
||||
|
|
|
@ -52,27 +52,27 @@ template <class PxxTransport>
|
|||
void Pxx1Pulses<PxxTransport>::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<uint8_t>(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<uint8_t>(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 <class PxxTransport>
|
||||
|
|
|
@ -243,7 +243,7 @@ void Pxx2Pulses::setupAccstBindFrame(uint8_t module)
|
|||
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
|
||||
Pxx2Transport::addByte(0x00);
|
||||
}
|
||||
Pxx2Transport::addByte((g_model.moduleData[module].pxx.receiver_channel_9_16 << 7) + (g_model.moduleData[module].pxx.receiver_telem_off << 6));
|
||||
Pxx2Transport::addByte((g_model.moduleData[module].pxx.receiverHigherChannels << 7) + (g_model.moduleData[module].pxx.receiverTelemetryOff << 6));
|
||||
Pxx2Transport::addByte(g_model.header.modelId[module]);
|
||||
}
|
||||
|
||||
|
|
|
@ -166,8 +166,8 @@ PACK(typedef struct {
|
|||
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 receiverTelemetryOff:1; // false = receiver telem enabled
|
||||
uint8_t receiverHigherChannels:1; // false = pwm out 1-8, true 9-16
|
||||
uint8_t external_antenna:1; // false = internal antenna, true = external antenna
|
||||
uint8_t fast:1;
|
||||
uint8_t spare2;
|
||||
|
|
|
@ -176,7 +176,6 @@ const char * eeRestoreModel(uint8_t i_fileDst, char *model_name);
|
|||
|
||||
// For conversions
|
||||
void loadRadioSettings();
|
||||
void loadModel(int index, bool alarms=true);
|
||||
|
||||
bool eepromOpen();
|
||||
void eeLoadModelName(uint8_t id, char * name);
|
||||
|
|
|
@ -52,6 +52,7 @@ void storageFlushCurrentModel();
|
|||
void postRadioSettingsLoad();
|
||||
void preModelLoad();
|
||||
void postModelLoad(bool alarms);
|
||||
void checkExternalAntenna();
|
||||
|
||||
#if defined(EEPROM_RLC)
|
||||
#include "eeprom_common.h"
|
||||
|
|
|
@ -63,6 +63,56 @@ void postRadioSettingsLoad()
|
|||
#endif
|
||||
}
|
||||
|
||||
#if defined(EXTERNAL_ANTENNA) && defined(INTERNAL_MODULE_PXX1)
|
||||
void onAntennaSelection(const char * result)
|
||||
{
|
||||
if (result == STR_USE_INTERNAL_ANTENNA) {
|
||||
globalData.externalAntennaEnabled = false;
|
||||
}
|
||||
else if (result == STR_USE_EXTERNAL_ANTENNA) {
|
||||
globalData.externalAntennaEnabled = true;
|
||||
}
|
||||
else {
|
||||
checkExternalAntenna();
|
||||
}
|
||||
}
|
||||
|
||||
void onAntennaSwitchConfirm(const char * result)
|
||||
{
|
||||
if (result == STR_OK) {
|
||||
// Switch to external antenna confirmation
|
||||
globalData.externalAntennaEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
void checkExternalAntenna()
|
||||
{
|
||||
if (isModuleXJT(INTERNAL_MODULE)) {
|
||||
if (g_eeGeneral.antennaMode == ANTENNA_MODE_EXTERNAL) {
|
||||
globalData.externalAntennaEnabled = true;
|
||||
}
|
||||
else if (g_eeGeneral.antennaMode == ANTENNA_MODE_PER_MODEL && g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode == ANTENNA_MODE_EXTERNAL) {
|
||||
if (!globalData.externalAntennaEnabled) {
|
||||
POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onAntennaSwitchConfirm);
|
||||
SET_WARNING_INFO(STR_ANTENNACONFIRM2, sizeof(TR_ANTENNACONFIRM2), 0);
|
||||
}
|
||||
}
|
||||
else if (g_eeGeneral.antennaMode == ANTENNA_MODE_ASK || (g_eeGeneral.antennaMode == ANTENNA_MODE_PER_MODEL && g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode == ANTENNA_MODE_ASK)) {
|
||||
globalData.externalAntennaEnabled = false;
|
||||
POPUP_MENU_ADD_ITEM(STR_USE_INTERNAL_ANTENNA);
|
||||
POPUP_MENU_ADD_ITEM(STR_USE_EXTERNAL_ANTENNA);
|
||||
POPUP_MENU_START(onAntennaSelection);
|
||||
}
|
||||
else {
|
||||
globalData.externalAntennaEnabled = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
globalData.externalAntennaEnabled = false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void postModelLoad(bool alarms)
|
||||
{
|
||||
#if defined(PXX2)
|
||||
|
@ -122,6 +172,7 @@ void postModelLoad(bool alarms)
|
|||
|
||||
LOAD_MODEL_BITMAP();
|
||||
LUA_LOAD_MODEL_SCRIPTS();
|
||||
|
||||
SEND_FAILSAFE_1S();
|
||||
}
|
||||
|
||||
|
|
|
@ -214,6 +214,7 @@ set(PULSES_SRC
|
|||
${PULSES_SRC}
|
||||
pulses.cpp
|
||||
ppm.cpp
|
||||
modules_helpers.cpp
|
||||
)
|
||||
|
||||
if(DSM2)
|
||||
|
|
|
@ -566,6 +566,7 @@
|
|||
|
||||
// Internal Module
|
||||
#define HARDWARE_INTERNAL_MODULE
|
||||
#define EXTERNAL_ANTENNA
|
||||
#define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2)
|
||||
#define INTMODULE_PWR_GPIO GPIOA
|
||||
#define INTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PA.08
|
||||
|
|
|
@ -602,7 +602,7 @@ class OpenTxSimulatorFactory: public SimulatorFactory
|
|||
virtual Board::Type type()
|
||||
{
|
||||
#if defined(PCBX12S)
|
||||
return Board::BOARD_X12S;
|
||||
return Board::BOARD_HORUS_X12S;
|
||||
#elif defined(PCBX10)
|
||||
return Board::BOARD_X10;
|
||||
#elif defined(PCBX7)
|
||||
|
@ -612,7 +612,7 @@ class OpenTxSimulatorFactory: public SimulatorFactory
|
|||
#elif defined(PCBTARANIS)
|
||||
return Board::BOARD_TARANIS_X9D;
|
||||
#else
|
||||
return Board::BOARD_STOCK;
|
||||
return Board::BOARD_9X_M64;
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
|
|
@ -145,7 +145,7 @@ elseif(PCB STREQUAL XLITE)
|
|||
set(HAPTIC YES)
|
||||
set(LUA_EXPORT lua_export_xlite)
|
||||
set(FLAVOUR xlite)
|
||||
add_definitions(-DPCBXLITE -DSOFTWARE_VOLUME -DEXTERNAL_ANTENNA -DSTICKS_PWM)
|
||||
add_definitions(-DPCBXLITE -DSOFTWARE_VOLUME -DSTICKS_PWM)
|
||||
add_definitions(-DEEPROM_VARIANT=0x2000)
|
||||
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
|
||||
set(PXX2 ON)
|
||||
|
@ -165,7 +165,7 @@ elseif(PCB STREQUAL XLITES)
|
|||
set(HAPTIC YES)
|
||||
set(LUA_EXPORT lua_export_xlites)
|
||||
set(FLAVOUR xlites)
|
||||
add_definitions(-DPCBXLITES -DPCBXLITE -DSOFTWARE_VOLUME -DEXTERNAL_ANTENNA -DSTICKS_PWM -DHARDWARE_POWER_MANAGEMENT_UNIT)
|
||||
add_definitions(-DPCBXLITES -DPCBXLITE -DSOFTWARE_VOLUME -DSTICKS_PWM -DHARDWARE_POWER_MANAGEMENT_UNIT)
|
||||
add_definitions(-DEEPROM_VARIANT=0x1000)
|
||||
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
|
||||
set(GUI_DIR 128x64)
|
||||
|
|
|
@ -907,6 +907,9 @@
|
|||
#if !defined(RADIO_T12)
|
||||
#define HARDWARE_INTERNAL_MODULE
|
||||
#endif
|
||||
#if defined(PCBXLITE)
|
||||
#define EXTERNAL_ANTENNA
|
||||
#endif
|
||||
#if defined(PCBXLITES) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019)
|
||||
#define INTERNAL_MODULE_PXX2
|
||||
#else
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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[];
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
#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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue